传感器基本原理、测试及Android应用【ST工程师干货文章分享】
[复制链接]
工程师小伙伴们速来围观,大家有不明白的地方可以跟帖提问哦,我们会及时反馈给ST在传感器使用方面有丰富经验的工程师们 ,为大家解答。另外,还期待哪些内容,也可以跟帖说明,管仔也会及时反馈给ST的工程师们的。
下面就和意法半导体AMG的工程师了解下传感器的基本原理、测试及Android应用吧。
本文主要讲解各个ST传感器的传感原理,基本测量参数,以及测试矫正方案,本文包括加速度传感器LIS3DH,陀螺仪L3GD20,磁力加速度二合一传感器LSM303AGR,加速度陀螺仪二合一传感器LSM6DS3。
1. 缩略语 缩写 | | | Hardware Abstraction Layer | | | | | | |
2. 各个ST传感器基本参数
传感器类型 | | | | | | | | | | | | | | | | | | | 0.98~ 187.58mg/LSB 不同量程 和模式 | | | | | | | | |
2.1 右手坐标轴 在加速度传感器,陀螺仪,以及磁力中非常重要的是对右手法则的坐标系的理解,右手法则坐标系被应用于传感器的 x,y,z三轴,其具体方式是,以z轴为大拇指方向,其余四指握拳,并从x轴方向绕向 y轴,具体如下图: 图一 结合手机屏幕的方向得到在手机平台上正确的3轴方向示意图: 图二 上图中,我们可以看到在手机的3轴中,业界统一的标准是以手机屏幕的垂直向上方向是 z 轴正,根据右手法则,我们就能得到x,y轴的正方向。
2.3 加速度传感器原理 图三 图四
X Y Z分别对应values[0]到[2],X表示左右移动的加速度,Y表示前后移动的加速度。 Type_acelerometer类型,即速度传感器上报的数据(未经九轴算法的数据)是始终包括地球重力加速度的。
2.4 加速度传感器参数的测试 通过工厂模式以及 sensorlist 这两个apk,我们可以在手机上开启加速度传感器,并得到实时的x,y,z三轴数据。测试数据上报的准确性与否如下方法。
1. 使z轴正方向朝上,即水平正放手机,则我们应该得到的z轴的数据大约在正1个g左右,即9.8附近,x,y轴的数据应该在0左右(误差应该小于0.8)
2. 使x轴正方向朝上,则我们应该得到的x轴的数据大约在正1个g左右,即9.8附近,z,y轴的数据应该在0左右(误差应该小于0.8)
3. 使y轴正方向朝上,则我们应该得到的y轴的数据大约在正的1个g左右,即9.8附近,x,y轴的数据应该在0左右(误差应该小于0.8)
4. 当某一轴方向向下时,其数据应该为负,因此当z轴正对下方时数据应该约为-1g 左右
注意点: a. 误差是由于测试水平面不一定绝对水平引起的 b. 当使用上面的各个面水平测试过程中,数据上报不应超过正负10.5,否则重力传感器则存在测量误差。 对于加速度传感器的测量精度和测量最大量程这两项测试由于一般只对于传感器生产商才会有需求进行测试,并且测试过程中需要专业仪器,因此现在条件下无法进行专门测试。
2.5 加速度传感器参数的矫正 在图三中显示的是传感器的芯片贴片方向对应的x,y,z轴,由于贴片方向的不同将会导致x,y,z三轴数据映射的错位,或者三轴数据正方向的颠倒。
x,y,z三轴数据映射的错位的情况表现为,比如当手机z轴正方向朝上时,z轴数据为0左右,x或y轴数据中有一个为1g左右,这时就是三轴数据映射错位,其他类似情况以此类推。
x,y,z三轴数据正方向的颠倒的的情况表现为,比如当手机z轴正方向朝上时, z轴数据为负的1g左右,这时就是z数据正方向的颠倒。
针对x,y,z三轴数据映射的错位,或者三轴数据正方向的颠倒的情况,我们应该在加速度传感器驱动的kernel层中修改,我们只需修改板文件 board-8960.c中相应的加速度传感器的platform data即可。
如对于 lsm303dh的加速传感器可对以下参数修改:
其中如何修改代码中写的已经很清楚了,前三个是三轴映射顺序,后面三个数据是用于三轴正方向调整的。
2.6 磁力计传感器参数的测试
Type_magnetic_field类型,即磁力计传感器上报的数据,该类型数据用于描述传感器周围磁场的情况(不包括电场)。当传感器附近没有其他磁场源干扰的情况下,传感器准确反应地磁场的情况。进而能够在android中用于指南针的应用。物理单位为 微特斯拉(uT)
打开sensorlist,我们可以在手机上开启compass传感器,并得到实时的x,y,z 三轴数据。测试数据上报的准确性与否如下方法。
a. 使x轴正方向朝向正北,则我们应该得到的x轴的数据 大约在正的30左右,此时让x轴朝向地磁线方向,即30度角的向下倾斜,即可得到x轴方向的最大磁力数据,约为正35- 45之间(由于环境影响,及校正影响不能得到当时的确切值)
b. 使x轴正方向朝向正南,则我们应该得到的x轴的数据,大约在负的30左右,此时让x轴朝向地磁线方向,即30度角的向上倾斜,即可得到x轴方向的最小磁力数据,约为负35-45之间
c. 依次类推y轴,z轴
Type_gyroscope,该类型用于表述陀螺仪传感器,陀螺仪传感器用于描述物体在旋转时的瞬时角速度。其在andorid中的单位为弧度每秒( rad/s)
打开sensorlist,我们可以在手机上开启陀螺仪传感器,并得到实时的x,y,z三轴数据。测试数据上报的准确性与否如下方法。
a. 使x轴正水平放置,使测试机水平绕x轴进行转动,以右手螺旋法则作为转动的正方向,当绕正方向转动时,得到的x轴数据为正。 当绕负方向转动时,得到x轴数据为负。 b. 当水平转动的速度越大,所得的值越大,反之亦然 c. 由于手动转动的速度有限,所得的数据应小于10 d. y,z轴数据依次类推
3. Virtual Sensor Description 3.1 Type Rotation Vector Android的这个定义其本质是四元素。 四元素本质上是一种高阶复数,是一个四维空间,在代数形式上是一个高阶复数,由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元素其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为 q = w + xi + yj + zk 四元素对于sensor应用的意义是什么呢? 表征物体的旋转,具体来说使用一个四元素q=((x,y,z)sinθ2, cosθ2) 来执行一个旋转。如果我们想要把空间的一个点P绕着单位向量轴u = (x, y, z)表示的旋转轴旋转θ角度。 这里只需要记住几个常用的公式 qw2 + qx2 + qy2 +qz2 =1 qw = cos(angle/2) qx = ax * sin(angle/2) qy = ay* sin(angle/2) qz = az * sin(angle/2) 关于四元素具体是的介绍和如何计算四元素数据所包含的转动情况,之后有机会专门讲一下欧拉旋转和四元素。到时候再具体展开。
3.2 Type Orientation 1. Azimuth 方位角:就是绕z轴转动的角度,0度=正北,(假设y轴指向地磁正北方,直升机正前方的方向如下图)
求x和y方向的磁感应强度的反正切,就可以得到方位角(算法看后面poll函数中的代码)。要实现指南针,只需要这个就可以了(不考虑设备非水平的情况);
2. pitch仰俯:绕x轴转动的角度 (-180<=pitch<=180),如果设备水平放置,前方向下俯就是正,如图:
3. roll滚转:绕y轴转动(-90<=roll<=90),向左翻滚是正值
|