stm32 MPU9250 量程配置

[toc] 参考链接:

  1. https://blog.csdn.net/cyj972628089/article/details/113293682

  2. https://www.pianshen.com/article/6769275504/

陀螺仪量程配置

在MPU9250的数据手册中,提供了陀螺仪的数据表如下: gyro_fsr

在表格里面,列出了当寄存器FS_SEL选择不同数值时的陀螺仪量程范围。 以四轴常用的FS_SEL=3为例,这时陀螺仪的量程为-2000到+2000,单位deg/s。

配置函数: fsr_code

由于MPU6050采用的是16位带符号数作为陀螺仪测量数据输出,即数据类型是int16。所以以16进制来表示,最小的数是FFFF,由于最高位为符号位,所以相当于-7FFFF,即-32767;最大的数是7FFF,即32767。

综合上述的描述,我们可以得到,数字-32767对应-2000度每秒的陀螺仪角速度,32767对应2000度每秒的陀螺仪角速度。把32767除以2000,就可以得到16.40, 即我们说的灵敏度。

从上面的计算可知,把从陀螺仪读出的数字除以16.40,就可以换算成陀螺仪的角速度数值。举个例子,如果我们从陀螺仪读到的数字是1000,那么对应的角速度数据是1000/16.40=61度每秒。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**********************陀螺仪读取*****************************/
void READ_MPU9250_GYRO(void)
{

BUF[0]=MPU9250_Read_Reg(GYRO_XOUT_L);
BUF[1]=MPU9250_Read_Reg(GYRO_XOUT_H);
mpu_value.Gyro[0]= (BUF[1]<<8)|BUF[0];
mpu_value.Gyro[0]/=16.4; //读取计算X轴数据
BUF[2]=MPU9250_Read_Reg(GYRO_YOUT_L);
BUF[3]=MPU9250_Read_Reg(GYRO_YOUT_H);
mpu_value.Gyro[1]= (BUF[3]<<8)|BUF[2];
mpu_value.Gyro[1]/=16.4; //读取计算Y轴数据
BUF[4]=MPU9250_Read_Reg(GYRO_ZOUT_L);
BUF[5]=MPU9250_Read_Reg(GYRO_ZOUT_H);
mpu_value.Gyro[2]= (BUF[5]<<8)|BUF[4];
mpu_value.Gyro[2]/=16.4; //读取计算Z轴数据
}

在四轴姿态计算中,我们通常要把角度换算成弧度。我们知道2Pi代表360度,那么1度换算成弧度就是:2Pi/360=(2*3.1415926)/360=0.0174532。用倒数表示就是:1/57.30

通过上述分析,我们就可以知道,当采用量程为-2000到+2000的范围,把我们从陀螺仪获取的数据做如下处理,就可以用于四元数的姿态解算(用gyro_x来代表从陀螺仪读到的数据): gyro_x/(16.4057.30)=gyro_x0.001064,单位为弧度每秒。

加速度计量程配置

acc_fsr
采用和陀螺仪同样的计算方法,当AFS_SEL=3时,数字-32767对应-16g,32767对应16g。把32767除以16,就可以得到2048, 即我们说的灵敏度。把从加速度计读出的数字除以2048,就可以换算成加速度的数值。举个例子,如果我们从加速度计读到的数字是1000,那么对应的加速度数据是1000/2048=0.49g。g为加速度的单位,重力加速度定义为1g, 等于9.8米每平方秒。如果需要换算为g/(m/s^2) 则对应加速度数据为data*9.8/2048

转换表格

fsr_sheet

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×