你的位置: 首页 > 技术支持 > 技术文档

LIS3DH和LIS3DSH的差异

2021-02-07 19:36:22      

      lis3dh用来唤醒主控MCU以达到省电低功耗的目的,后续经过了一周的时间,却毫无进展,手上的MCU通过三线模拟SPI与3DH通信完全失败,由于3DH是LGA封装,多余的引脚全部未焊接,也不能用示波器看3DH的SDO脚是否有输出,在这儿一卡就是一周,试过各种方式(硬件SPI、IIC)全部无效,一度怀疑是硬件的问题。后来,去买3DH的模块,这个时候才发现这个芯片有两个型号,一个是 LIS3DH,另一个LIS3DSH。突然想到问题是不是在这儿,果然,芯片手册下载下来一看,发现问题了。这两个芯片完全不一样,虽然他们能达到相同的目的,但是他们的操作方式完全不同,包括寄存器的配置,芯片内部的结构等等。等拿到之后,才发现项目硬件用的是LIS3DSH,根本不是LIS3DH,而且芯片上的丝印完全不是芯片的名字。马上换下芯片,烧好写好的代码,中断立马出现。

在LIS3DH中,我们都是通过写CTRL_REG1和CTRL_REG4来达到设置传感器工作速率、工作模式和量程的。对于LIS3DH而言,传感器的每一个操作步骤都是按照我们设定的来走。比如我们的INT1运动检测中断,我们配置好所有的寄存器之后,当XYZ任意轴检测到此刻的轴上加速度超过我们设定的中断阈值时,就会有相应的中断信号(LIS3DH规定高电平为中断信号)映射到INT1脚上,如果我们选择了锁存中断信号,只要我们不去读INT1_SRC这个中断寄存器,那么中断信号就会一直存在。

在调试INT运动中断的时候,要适当的设置中断阈值,如果你设置的阈值太大,会产生不了中断信号的。还有就是这个传感器验证的时候不需要先配置,你只需要直接读(读的时候欲读寄存器地址的最高位需置1)WHO_AM_I这个寄存器即可读出芯片的ID(LIS3DH对应ID为0x33,LIS3DSH对应ID为0x3F)。如果你直接读都读不到值,就说明是你的SPI或者IIC配置的问题了。最后一点就是使用LIS3DH产生运动中断配置的时候需要读一次REFERENCE_REG这个寄存器,这个寄存器是用来存放中断生成参考值的。