注意!!!本文转载自参考文献[2]。
1 各方向初始重力分量
如果芯片水平静置,X、Y方向的重力分量为0g,而Z轴方向的重力分量为g。如下图所示,X=0;Y=0;Z=g。图1 芯片水平静置
2 各方向重力分量计算
图2 各轴分别与水平线、重力加速度的夹角
图3 重力加速度在各轴的分量
step1:
各边与水平方向有一些夹角,则其图像如图2所示:
- X轴方向的加速度大小为Ax,其与水平线的夹角为α1,与重力加速度g的夹角为α
- Y轴方向的加速度大小为Ay,其与水平线的夹角为β1,与重力加速度g的夹角为β
- Z轴方向的加速度大小为Az,其与水平线的夹角为γ1,与重力加速度g的夹角为γ
step2:
基于图2中的夹角概念,它们的关系为:
- α = 90度- α1
- β = 90度- β1
- γ = 90度- γ1
step3:
如图3,g在各轴方向上的分量:
- Ax = gcosα
- Ay = gcosβ
- Az = gcosγ
step4:
将step2中数据代入step3得:
- Ax = gcosα = gcos(90度- α1) = gsinα1
- Ay = gsinβ1
- Az = gsinγ1
关于奇偶变换[1]
比如sin(x+nπ/2),奇偶指的是n。
当n为偶数时候,三角函数名不变,还是sin 符号看象限是指把x 当做锐角然后算出sin(x+nπ/2)的值,看他的正负,这个值是正的,那么最后变换完的结果就是正的,这个值是负的,那么就是负的。
当n为奇数的时候,三角函数名改成另一个,这里就是cos。符号看象限同理。
step5:
如图3,由直角三角形的勾股定理得:
- Ax * Ax + gcosα1 * gcosα1 = g * g
- Ay * Ay + gcosβ1 * gcosβ1 = g * g
- Az * Az + gcosγ1 * gcosγ1 = g * g
step6:
如图3(详细版)、4所示,各垂直虚线的大小为(其中sqrt表示开根号):
- gcosα1 = sqrt ( g * g - Ax * Ax )
- gcosβ1 = sqrt ( g * g - Ay * Ay )
- gcosγ1 = sqrt ( g * g - Az * Az )
图4 重力加速度g在各轴上的分量
图5 重力加速度g 作为立方体的对角线
step7:
如图5,在立体几何中,g相当于立方体的对角线,Ax、Ay、Az相当于三条边:
Ay * Ay + Az * Az = |虚线| * |虚线|
又
|虚线| * |虚线| + Ax * Ax = g * g
所以(根据勾股定理):
Ax * Ax + Ay * Ay + Az * Az = g * g
step8:
如图4所示,(以X轴为例) sinα1 = Ax / g, cosα1 = sqrt(g * g - Ax * Ax) / g,
- tanα1 = (Ax / g) / [sqrt(g * g - Ax * Ax) / g] = Ax / sqrt(g * g - Ax * Ax) = Ax / sqrt(Ay * Ay + Az * Az)
- tanβ1 = Ay / sqrt(Ax * Ax + Az * Az)
- tanγ1 = Az / sqrt(Ax * Ax + Ay * Ay)
step9:
最后得出ADXL345加速度传感器,各轴加速度值与角速度值(弧度)的关系为:
- tanα1 = Ax / sqrt(Ay * Ay + Az * Az)
- tanβ1 = Ay / sqrt(Ax * Ax + Az * Az)
- tanγ1 = Az / sqrt(Ax * Ax + Ay * Ay)
其中 α1 、β1 、γ1分别是X、Y、Z轴和水平线的弧度值(反三角函数计算的值是弧度),Ax 、Ay、Az是三个轴上的加速度值。
step10:
那么弧度值分别为:
- α1 = arctan(Ax / sqrt(Ay * Ay + Az * Az))
- β1 = arctan(Ay / sqrt(Ax * Ax + Az * Az))
- γ1 = arctan(Az / sqrt(Ax * Ax + Ay * Ay))
step11:
接下来就得使用数据公式:弧度= θπR/180 。 这样算得θ = 弧度 * 180/πR,其中R取1。最后得到的各轴的角度值分别为:
- θx = α1 * 180/π = [arctan(Ax / sqrt(Ay*Ay + Az * Az))] * 180/π
- θy = β1 * 180/π = [arctan(Ay / sqrt(Ax*Ax + Az * Az))] * 180/π
- θz = γ1 * 180/π = [arctan(Az / sqrt(Ax*Ax + Ay * Ay))] * 180/π