姿态传感器—MPU6050

姿态传感器—MPU6050

  • 简介
  • 寄存器
  • 数字运动处理器 DMP
  • 遇到的问题
        • 1、初始化是要水平放置 且 按照上电时的方位为基准(正点原子提供的例程)

简介

姿态传感器—MPU6050_第1张图片

MPU6050是一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器

MPU6050含有一个第二IIC接口,可用于连接外部磁力传感器

MPU6050自带数字运动处理器(DMP)通过主IIC接口,可以向CPU提供四元数,CPU可利用四元数得到欧拉角:航向角(yaw) 横滚角(roll) 俯仰角(pitch)

寄存器

1、电源管理寄存器1(0x6B)

在这里插入图片描述
姿态传感器—MPU6050_第2张图片

bit7位用来控制复位,设置为1 硬件自动清零该位。
bit6位用于控制工作模式,1,睡眠模式(低功耗),0,正常工作模式  所以我们要清零该位,以进入正常工作模式。
bit3位用于设置是否使能温度传感器,设置为 0,则使能。

CLKSEL[2:0]用于选择系统时钟源,选择 001 

2、电源管理寄存器2(0x6C)

在这里插入图片描述

bit7、bit6 :
用于控制低功耗时的唤醒频率

剩下6位 分别控制加速度陀螺仪的xyz轴是否进入待机模式

3、配置寄存器1(0x1A)

在这里插入图片描述
姿态传感器—MPU6050_第3张图片

配置寄存器 是设置 数字低通滤波器(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)

姿态传感器—MPU6050_第4张图片

 输出 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)

姿态传感器—MPU6050_第5张图片

 输出 X/Y/Z三轴的数据,高字节在前

9、温度数据输出寄存器(0x3B~0x40)

在这里插入图片描述

418位,428位

公式

最终温度 = 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、初始化是要水平放置 且 按照上电时的方位为基准(正点原子提供的例程)

我不可能每次都需要手放平然后再开机。

你可能感兴趣的:(#,芯片传感器器件,单片机,stm32,嵌入式硬件)