LIS3D20L的配置

来源:互联网 发布:普通人如何利用大数据 编辑:程序博客网 时间:2024/06/07 10:23

意法半导体做的这个加速度传感器,能够测得3维加速度。其内部有配置寄存器,数据寄存器和状态寄存器。这些大家可以看看数据手册。我只说说我在应用中遇到的问题,或许和您遇到的问题一样,希望能给您提供帮助。

 

芯片经过简单地配置,就能输出数据到X,Y,Z的三个数据输出寄存器中,通过SPI读取这三个数据寄存器就可以得到各个方向的加速度值。读取数据可以通过查询STATUS寄存器的状态来确定是否有数据更新,藉此来选择是否读取X,Y,Z数据寄存器。但是这种方式太浪费CPU时间了,所以最好的选择是通过中断读取数据。

 

在CTRL_REG3中首先选择中断发生后的电平状态。如果要用上升沿触发中断的话,就选择高有效,反之,选择低有效。其次选择中断引脚和中断事件,比如要选择中断输出的第一个引脚输出Data Ready中断,那么将该寄存器的第三位配置成100即可。

 

我遇到的第一个问题是,配置的Data Ready中断,但是处理器中断没有触发。原来是当配置成为该类型的中断,数据更新后,中断输出引脚立即变成高电平。如果不让该引脚变为低电平,后来的中断就无法触发了。读X,Y,Z的数据寄存器清除该高电平。所以在开中断之前,先读X,Y,Z的数据寄存器将中断引脚变为低电平,这样当内部数据更新时,就可以触发中断。同时,如果想要连续触发,就要在下一次数据更新之前,读取X,Y,Z数据寄存器。一般都在中断中读取了这三个寄存器,也就将中断输出引脚拉低电平了。

 

第二个问题是,配置click模式中的threshold value,time limit,duration time,latency time,window time 以及single click 与double click。

single click是只给芯片一次激励,让它动一下。

double click是给芯片两次激励,让它动两下,明白吗?

结合下面几个图,解释这几个时间的意义。

在上图的single click中,设定了time limit长的一段限制时间。当某时刻开始,加速度超过了threshold,如果经过小于time limit的时间内,它的加速度又下降到threshold之下,那么会触发sigle click中断。如图(a)就触发了中断,而在图(b)中,由于时间超出了time limit,所以不会触发中断。

下图是一个single click和double click触发的场景:

最上面的红曲线线是某一段时间加速度的曲线,横黑虚线是设置的threshold。蓝色的竖虚线之间的时间为time limit,红色的竖虚线之间的时间为latency。在图的下半部分(b)中还有个不起眼的WINDOW。

在(a)栏里是single click,由于曲线在time limit之内回到了threshold以下,所以会触发中断。

在(b)栏里是double click,在这里用到了latency time 和window time。latency time是中断电平保持多久时间,而window time又限制了下一次激励的到来时间必须在window之内,这样才能触发double click中断,如果下次激励到来晚了,就没饭吃了。

 

在下图的(a)中,第二次的激励来的时间在window之内,所以成功触发,(b)中设定的window比较短,所以没有赶上触发中断。

最后一个要注意的问题就是,中断触发后,如果还想要得到后来的中断,就必须把中断信号线拉低。如何拉低,仔细阅读数据手册。有的数据手册写的不够详细,请查阅详细一点的。