关于LSM6DSL无法产生中断,WAKE_UP_SRC一直是0;更改CTRL1_XL,Z轴读数翻倍的问题
<p>我想利用LSM6DSL的wakeup中断来实现对z轴加速度的检测。大致思路就是:设置WAKE_UP_THS中断阈值,当z轴加速度超过阈值时,产生WAKE_UP中断,并将其驱动至INT1引脚。主控通过检测INT1引脚的上升沿来计数。下图是我对相关寄存器的配置:</p><p> 进行Debug时,得到的参数是下图这样的。impact_cnt默认是31,图中标错了。传感器是Z轴朝下放置的,大概一个g左右,正常应该是8500上下,但是Debug结果好像翻了一倍。而且阈值只有1/8个g,按理说应该超过了阈值,但是WAKE_UP_SRC(param)的状态一直是0,也没有产生中断。</p>
<p> 如果将配置CTRL1_XL的代码注释掉,如下图,传感器Z轴的值Z_XL就正常了,但是同样没有产生中断,WAKE_UP_SRC的值也一直是0</p>
<p> 按理说CTRL1_XL的值是改变频率的,可是为什么会让Z轴的值发生变化;而且明明Z轴的值超过了阈值,但是仍然没有产生中断<img height="31" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/sad.gif" width="32" />。希望大神能指点我一下,跪谢。</p>
<p>附件是LSM6DSL的产品手册(英文)</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>我没看到你的代码,不知道具体的配置过程,建议你按照官方例程先检查一下who am i寄存器看看通信是否正常,然后再使用软件复位,重置所有寄存器。</p>
<p>按照你的描述,如果CTRL1_XL配置的值是0x40,这时Z轴的结果是16994,如果它是原始数据16994*0.061mg/LSB=1,036.634mg,这个数值是比较接近的。</p>
<p>在你注释掉CTRL1_XL的配置后,如果传感器经过重新上电或复位,这时默认应该是power-down模式,你应该读不到数据。你实际读到的是8466,这个应该也不是一个正确的数据。</p>
<p> </p>
<p>在参照官方例程读取who am i 和 软件复位,读取数据也正常后,建议参考官方文档《an5040-lsm6dsl-alwayson-3d-accelerometer-and-3d-gyroscope-stmicroelectronics》的5.3节 Wake-up interrupt里的配置试一下,看看是否正常。</p>
<p> </p>
<p> </p>
<p>很感激你的回复。我试了一下,可以正常读取WHO_AM_I的值,下面是我写的中断函数(检测到INT1引脚的上升沿时会自动进入到这个函数),我把第三行注释掉之后就可以正常进入这个中断函数了。</p>
<p> 我是在一个大的工程文件上添加功能,这是main函数中对LSM进行初始化的地方</p>
<p> 下面这个图是我写的WAKE_UP配置函数,通过IIC总线来读写数据的</p>
<p></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
littleshrimp 发表于 2022-9-5 13:11
我没看到你的代码,不知道具体的配置过程,建议你按照官方例程先检查一下who am i寄存器看看通信是否正常, ...
<p>你好,我今天实验的时候又发现一个问题:我把WAKE_UP_THS设为0x20,也就是说阈值为(32*FS_XL)/64,即FS_XL/2。改变FS_XL的值,也就是改变量程的时候,每次进入中断Z_XL的值也不一样。下面我具体展示出来:</p>
<p> </p>
<p>当我把FS_XL的量程设为正负16g时,进入中断时Z_XL的值为2119,一才两千左右</p>
<p></p>
<p></p>
<p> </p>
<p>当我把FS_XL量程设为正负8g时,进入中断时Z_XL的值为4216</p>
<p></p>
<p></p>
<p> 当我把FS_XL的量程设为正负4g时,进入中断时Z_XL的值为8496,也就是八千多</p>
<p> </p>
<p>当我把FS_XL的量程设为正负2g时,进入中断时Z_XL的值为17017,一万七千左右了</p>
<p></p>
<p> 难道不同的量程,一个g的值也不一样吗。而且对于四种量程我用几乎相同的力度在桌子上摔一下都能进入中断,好像阈值没啥作用。这是为啥?<br />
</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
夏某某 发表于 2022-9-6 12:02
你好,我今天实验的时候又发现一个问题:我把WAKE_UP_THS设为0x20,也就是说阈值为(32*FS_XL)/64,即FS ...
<p>看你的描述应该和加速度数据转换有关,传感器输出的原始数据需要根据对应的full scale进行转换,数据手册有一个表,比如2g对应的是0.061mg/LSB 16g是0.488mg/LSB,所以你的数据应该是正常的。</p> 夏某某 发表于 2022-9-6 12:02
你好,我今天实验的时候又发现一个问题:我把WAKE_UP_THS设为0x20,也就是说阈值为(32*FS_XL)/64,即FS ...
<p>相同的力度摔一下都能进入中断,可能是你的冲击力大于这四种设置里的所有触发阈值造成的,试试只在空中移动传感器。</p>
页:
[1]