二、获取MPU925X数据需要了解的东西
1. 陀螺仪
1.1 陀螺仪是用来测量角速度的,单位是dps(degree per second),度每秒;
1.2 使用SPI读出来的原始值是ADC值,16bits的ADC,ADC的单位是LSB;
1.3 陀螺仪的量程(Full-Scale Range):每秒 ±250、±500、±1000 或 ±2000 度
1.4 陀螺仪的灵敏度比例因子(Sensitivity Scale Factor):如下图。
FS_SEL=3 时,量程是±2000,灵敏度比例因子是 16.4LSB/(°/s)。
这个灵敏度比例因子的意义是:当你获取到了陀螺仪相关寄存器的ADC值的时候,你可以根据灵敏度比例因子换算成以角速度为单位的值。例如
16.4LSB/(°/s),则 1LSB = 1/16.4(°/s) = 0.060977(°/s)。
角速度(°/s) = ADC值 * 0.060977
1.5 如何验证数据正不正常:一般静置的时候,角速度的值在0上下浮动。
2. 加速度计
1.1 加速度计是用来测量加速度的,单位是m/ss,米每秒平方,ss表示s的平方,实际上手册是使用g为单位描述的,在这里,咱们取 1g = 9.8m/ss;
1.2 使用SPI读出来的原始值是ADC值,16bits的ADC,ADC的单位是LSB;
1.3 陀螺仪的量程(Full-Scale Range)和 陀螺仪的灵敏度比例因子(Sensitivity Scale Factor):如下图。
FS_SEL=3 时,量程是±16g,灵敏度比例因子是 2048LSB/g。
这个灵敏度比例因子的意义是:当你获取到了加速度计相关寄存器的ADC值的时候,你可以根据灵敏度比例因子换算成以mss为单位的值。例如
2048LSB/g,则 1LSB = 1/2048 g = 0.00048828125g
1LSB = 0.00048828125g = 0.00478515625 mss
加速度(mss) = ADC值 *0.00478515625 mss
1.4 如何验证数据正不正常:一般水平静置的时候,Z轴的数值为9.8mss左右,如果是11.6mss也正常,因为焊接的时候或者出厂的时候造成的偏差(往后我们需要校准)。然后将Z轴旋转180°的时候,数值应该为-9.8mss左右。X,Y轴旋转90°之后可以得到9.8mss左右。这样数据就是正常的。
3. 内部的温度计
1.1 MPU925X芯片内部有个温度计,测量芯片的内部温度;
1.2 使用SPI读出来的原始值是ADC值,16bits的ADC,ADC的单位是LSB;
1.3 温度的量程(Full-Scale Range)是 -40℃~85℃;
1.4 温度的计算公式
其中,Room Temp Offset和Temp_Sensitivity(Sensitivity)在下图中给出。
1.5 如何验证数据正不正常:和测温枪对比。
3. 磁罗盘(磁力计)
1.1 磁罗盘能感应地磁南北极,其单位一般是特斯拉(T)或高斯(GS),该模块的说明书使用的单位是uT;
1.2 使用SPI读出来的原始值是ADC值,磁力计的ADC可选择14bits和16bits(CNTL1寄存器的D4位控制,0表示14bits,1表示16bits),ADC的单位是LSB;
1.3 单位转换:
T=1000MT=1000000UT=10000GS
1GS = 100UT
1GS= 1000 mG
1uT = 0.01GS
1uT = 10mG
1.4 磁力计的量程(Full-Scale Range)和 陀螺仪的灵敏度比例因子(Sensitivity Scale Factor):如下图。
当ADC是16bits时,灵敏度比例因子是15uT/LSB。
当ADC是14bits时,灵敏度比例因子是0.6uT/LSB。
磁力计(uT) = ADC值 *15 uT
1.4 如何验证数据正不正常:水平静置,使用一下公式算出偏航角yaw,然后和手机的罗盘对比,可能会相差10几度,但是没关系,我们还没对磁罗盘进行校准呢。Mag.y,Mag.x分别是磁罗盘X,Y 轴的数值,GS为单位。
Yaw = -atan2f(Mag.y,Mag.x);
Yaw *= 57.295780; // 转换成度为单位
if(Yaw < 0)
Yaw += 360;
注意:如果经过上述公式转换出来的角度,在某个角度范围内会出现跳变,比如下图,在转到327度的时候,数据发生跳变,很不正常。最终发现是焊接的时候,排针的位置造成的影响,因为磁罗盘很容易收到干扰。
如果换了焊接方式还不行的话,可能是其他的干扰了,前提是代码是没错的。
三、扩展
- 磁偏角
地磁南北极与地理南北极不重合,自由悬挂的磁针所指方向与地理上的南北(真经线)方向有一偏差角,即磁偏角(又称磁差)。 - 磁北航向和真北航向
磁力计计算出来的航向角是载体相对于地磁北向的航向角,其与地理北极的真北航向角不同。两者间存在一个地磁偏角。地球上每个位置的磁偏角都不同,可以在https://www.magnetic-declination.com/上查询。
例如上海的磁偏角(Magnetic Declination)
四、代码
https://gitee.com/huachuang_guest/stm32_minidrone