姿态传感器—MPU6050
时间:2022-10-29 22:30:00
姿态传感器—MPU6050
- 简介
- 寄存器
- 数字运动处理器 DMP
- 遇到的问题
-
-
-
- 1.初始化是水平放置 且 以上电时的方基准(正点原子提供的例程)
-
-
简介
MPU6050是六轴(三轴加速度) 三轴角速度(陀螺仪)传感器
MPU6050自带数字运动处理器(DMP)通过主IIC接口,可向CPU提供四元数,CPU欧拉角可以用四元数获得:航向角(yaw) 横滚角(roll) 俯仰角(pitch)
寄存器
1.电源管理寄存器1(0)x6B)
bit7位用于控制复位,设置为1 自动清零硬件。 bit六位用于控制工作模式,1,睡眠模式(低功耗),0,正常工作模式 因此,为了进入正常的工作模式,我们需要清除该位置。 bit三位用于设置
温度传感器传感器 0,则使能。 CLKSEL[2:0]选择系统时钟源,选择 001
2.电源管理寄存器2(0)x6C)
bit7、bit6 : 用于控制低功耗时的唤醒频率 剩下6位 加速度陀螺仪分别控制xyz轴是否进入待机模式
3.配置寄存器1(0x1A)
配置寄存器 是设置 数字低通滤波器(DLPF)加速度和陀螺仪 带宽,输出频率 bit0、bit1、bit2位 当我们 选择 带宽为 25Hz 的时候 会接近 100 这个时候 输出频率为 1KHz
4、陀螺仪采样率分频寄存器(0x1A)
采样频率 = 陀螺仪输出频率(配置寄存器)FS:1KHz) / (1 SMPLRT_DIV ) SMPLRT_DIV 为 采样频率的一半: 设置采样频率 50hz 则 带宽为 25Hz (带入配置寄存器) 就有公式:50 = 1000/(1 19)
5.陀螺仪配置寄存器(0x1B)
bit4位、bit3位 0,±250°/S 1,±500°/S 2,±1000°/S 3,±2000°/S 我们通常设置为 3,因为陀螺仪 ADC 为 16 因此得到的灵敏度为:65536/4000=16.4LSB/(°/S)
6.陀螺仪数据输出寄存器(0x43~0x48)
输出 X/Y/Z前三轴数据,高字节
7.加速度配置寄存器(0x1C)
bit4位、bit3位 0, ±2g 1,±4g 2,±8g 3,±16g 我们通常设置为 0,因为加速传感器ADC 也是 16 因此,灵敏度为:65536/4=16384LSB/g。
8.加速度数据输出寄存器(0x3B~0x40)
输出 X/Y/Z前三轴数据,高字节
9.温度数据输出寄存器(0x3B~0x40)
41 高8位,42 低8位
公式
最终温度 = 36.53 + 读寄存器的温度值 / 340
10、FIFO 使能寄存器(0x23)
0 禁止使用FIFO; 1 使能FIFO
加速度传感器 由bit3位 控制
陀螺仪传感器 由bit4位,bit5位,bit6位 分别控制
数字运动处理器 DMP
InvenSense 提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050 的 DMP,可以将我们的原始数据,直接转换成四元数输出
使用 MPU6050 的 DMP 输出的四元数是 q30 格式的,q30 是一个常量:1073741824,即 2 的 30 次方,也就是浮点数放大了 2 的 30 次方倍。在换算成欧拉角之前,必须先将其转换为浮点数,除以 2 的 30 次方,然后再进行计算
//四元数转换浮点数,进行计算
q0 = quat[0] / q30;
q1 = quat[1] / q30;
q2 = quat[2] / q30;
q3 = quat[3] / q30;
//输出的数据是 弧度 格式。转换为角度57.3
//计算得到俯仰角/横滚角/航向角
pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; //俯仰角
roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; //横滚角
yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //航向角
遇到的问题
1、初始化是要水平放置 且 按照上电时的方位为基准(正点原子提供的例程)
我不可能每次都需要手放平然后再开机。