完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试将加速度记录在2g以上。为此,我将LIS3DH参数化如下:
- CTRL_REG0:0x10 - CTRL_REG1:0x57(100Hz + Xen + Yen + Zen) - CTRL_REG2:0x00 - CTRL_REG3:0x40(INT1上的IA1) - CTRL_REG4:0xB0(BDU + FS +/- 16g) - CTRL_REG5:0x08(INT1锁存) - CTRL_REG6:0x00 - FIFO_CTRL_REG:0x00 - INT1_THS:0x0A(+/- 16g => 186 mg / LSb,2000/186 = 0x0A) - INT1_DURAtiON:0x00(加速度超过阈值时触发INT1) - INT1_CFG:0x2A(或组合+ Z高事件+ Y高事件+ X高事件) 一切正常,我得到中断信号,读取相应缓冲区内可用的加速度,清除中断。然而,我不明白我得到的一些结果。 第一个问题,我不明白如何获得+/- 16g的灵敏度。对于其他满量程模式,有一个逻辑(正常模式:8g /(2 ^ 9)= 15,625~16 mg / LSb)但我找不到16g的逻辑。 假设数据表中给出的灵敏度是正确的,那么传感器返回的最大值必须是16000/48 = 333。或者传感器可以超过此限制,但测量值在灵敏度方面不再是线性的?因为传感器返回的几个值为-24480毫克。 第二个问题是我从高于我的阈值的信号中获得中断。例如,即使我设定的阈值是1860毫克,我也会得到Z = -1776毫克的中断。我相信我正在正确地从传感器转换数据,但我会描述我做的,只是为了sur: INT16 LIS3DH_DataConverter(BYTE LSB_Data,BYTE MSB_Data,INT16灵敏度) {//此函数转换2的补码10位数据左对齐(分为两个8位变量) //进入16位右对齐的单个带符号变量(类型INT16) UINT16 u16值; INT16 ConvValue; u16Value = LSB_Data +(MSB_Data<< 8); RETAILMSG(ACC_TRACE,(_ T('u16Value = LSB_Data +(MSB_Data<< 8):%4.4Xh r n'),u16Value)); u16Value>> = 6; //只有10个高位是相关的(警告!仅在设备处于正常模式时才有效) RETAILMSG(ACC_TRACE,(_ T('u16Value>> = 6:%4.4Xh r n'),u16Value)); //这个值已经定义了 //如果Bit10为1,则a(mg)= - (2的AccData补码)*分辨率 //如果Bit10为0,则a(mg)= AccData *分辨率 if(u16Value& 0x0200) { u16Value = ~u16Value; // 1的补充 RETAILMSG(ACC_TRACE,(_ T('u16Value inverted:%d r n'),u16Value)); u16Value& = 0x03FF; //只有10位是相关的 //(或0x 3 3FF)因为位10是0,因为它是负数的反转。 RETAILMSG(ACC_TRACE,(_ T('u16Value troncated:%d r n'),u16Value)); u16Value ++; // 2的补充 RETAILMSG(ACC_TRACE,(_ T('u16Value + 1:%d r n'),u16Value)); ConvValue = - (u16Value * Sensitivity); // TODO:通过分辨率乘以u16Value u16Value =(UINT16)( - ConvValue); //仅供显示 RETAILMSG(ACC_TRACE,(_ T('负a = - %d mg(%2.2X%2.2Xh)! r n'),u16值,LSB_Data,MSB_Data)); } 其他 { ConvValue = u16Value *灵敏度; // u16Value =(UINT16)ConvValue; //仅供显示 RETAILMSG(ACC_TRACE,(_ T('正a =%d mg(%2.2X%2.2Xh)! r n'),u16值,LSB_Data,MSB_Data)); } return ConvValue; }谢谢你的帮助。 |
|
相关推荐
4个回答
|
|
数据表中的灵敏度是正确的。
你是对的,传感器可以超过16克,但它在灵敏度方面不再是线性的。 关于中断,我认为你错过了触发中断的样本,并且你读了一个或多个1 / ODR周期的样本。 |
|
|
|
谢谢你的回答。你证实了我的想法。它暂时会保持这样状态,如果需要,我将使用Stream to FIFO模式来解决阈值下的测量值问题。
为了知道16g以上传感器的灵敏度,你有任何图表可以分享吗? |
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
1431 浏览 1 评论
2110 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1510 浏览 1 评论
2820 浏览 6 评论
5235 浏览 21 评论
361浏览 4评论
534浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
278浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
602浏览 3评论
509浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 01:06 , Processed in 0.828766 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号