STM32CubeIDE HAL库DMA方式驱动MPU925X(2)

本文详细介绍了MPU925X传感器的使用,包括陀螺仪、加速度计、内部温度计和磁罗盘的数据获取与处理。内容涉及传感器的量程、灵敏度比例因子、数据转换公式以及数据正常性的验证方法。同时提到了磁偏角、地磁航向与真北航向的关系,并提供了上海的磁偏角示例。附带了一个代码链接,用于参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二、获取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度的时候,数据发生跳变,很不正常。最终发现是焊接的时候,排针的位置造成的影响,因为磁罗盘很容易收到干扰。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果换了焊接方式还不行的话,可能是其他的干扰了,前提是代码是没错的。

三、扩展

  1. 磁偏角
    地磁南北极与地理南北极不重合,自由悬挂的磁针所指方向与地理上的南北(真经线)方向有一偏差角,即磁偏角(又称磁差)。
  2. 磁北航向和真北航向
    磁力计计算出来的航向角是载体相对于地磁北向的航向角,其与地理北极的真北航向角不同。两者间存在一个地磁偏角。地球上每个位置的磁偏角都不同,可以在https://www.magnetic-declination.com/上查询。
    例如上海的磁偏角(Magnetic Declination)
    在这里插入图片描述

四、代码

https://gitee.com/huachuang_guest/stm32_minidrone
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值