当以上图所示的静止状态,z轴正方向会检测出1g,X、Y轴为0.如果调转位置(如手机屏幕翻转),那总会有一个轴会检测出1g,其他轴为0,在实际的测值中,可能并不是0,而是有细微数值。
意法半导体针对LIS3DH发布两个文档,官方规格书和应用设计指导。单独提出这点是因为本人之前在使用LIS3DH时可能是太久没有运用过立体几何思维,导致在X,Y,Z坐标系上混淆概念,对位置识别迟迟没能理解,现在指出这个误区。
下图的X,Y,Z除了代表我们所认识的三维坐标系外,还有一个重要的认知,那就是X,Y,Z轴对应的寄存器分别按照芯片图示(以芯片的圆点来确定)的方向来测加速度值,而不管芯片的位置如何,即X,Y,Z轴对应的三个寄存器总是以这样工作的:Z轴寄存器测芯片垂直方向的数据、Y轴测芯片左右方的数据、X轴测芯片前后的数据(前后左右的定义可能不够形象,大家能理解就好)。例如,图示静止状态下,X轴寄存器测芯片前后方向的加速度;如果芯片如右边图示静止时,X轴寄存器测的是坐标系的Z轴方向加速度。
三、LIS3DH内置硬件算法工作原理
由于计步等场景是需要先读取底层X,Y,Z轴数据再进行处理的,所以我们这里不去探讨这个算法。这里主要阐述如何利用LIS3DH内置的硬件算法来检测常用的场景。
LIS3DH一共有两套能够同时工作的硬件算法电路,一种是专门针对单击、双击这种场景,如鼠标应用,另一种是针对其他所有场景的,如静止运动检测、运动方向识别、位置识别等等。这里我们主要讲述后者,其有四种工作模式:
第一种:OR或电路,即X,Y,Z任一轴数据超过阈值即可完成检测。
第二种:AND与电路,即X,Y,Z所有轴的数据均超过阈值才能完成检测。当然,其也允许只检测任意两个轴或者一个轴,不检测的轴的阈值检测可以认为是永远为真。
以上两种电路的阈值比较图示如下,阈值比较是绝对值比较,没有方向之分。不管在正方向还是负方向,只要绝对值超过阈值,那么XH(YH、ZH)为1,此时相应的XL(YL、ZL)为0;否则XL(YL、ZL)为1,相应的XH(YH、ZH)为0。XH(YH、ZH)、XL(YL、ZL)可以认为是检测条件是否满足的pending指示位。
第三种和第四种是一个物体六个方向的检测,movement检测芯片的运动方向变化,即从一种方向变化到另一种方向;而position检测芯片稳定为一种确定的方向(如稳定为平放朝上、平放朝下、竖立前后左右)等等。
其阈值比较电路如下,该阈值比较使用正负数真实数据比较。正方向超过阈值,则XH(YH、ZH)为1,否则为0;负方向超过阈值,XL(YL、ZL)为1,否则为0。XH(YH、ZH)、XL(YL、ZL)代表了六个方向。由于静止稳定状态时,只有一个方向有重力加速度,因此可以据此知道当时芯片的位置姿势。
如果能够理解第三部分的工作原理,那么也能够很好理解以下的应用。
1.静止时进行运动检测
2.失重检测
3.位置姿势识别
例如手机翻转等应用场景就是利用这个特性。这里在第三部分讲解工作原理时已经讲得很清楚了。
有了以上理解,以后在使用LIS3DH时直接找寄存器填数值就可以完成功能啦。