姿态传感器—MPU6050

家电修理 2023-07-16 19:17www.caominkang.com电器维修

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

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

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

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

寄存器

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


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

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

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

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

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

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


配置寄存器 是设置 数字低通滤波器(DLPF)加速度和陀螺仪的 带宽、输出频率

bit0、bit1、bit2位
当我们 选择 带宽为 25Hz 的时候 会接近 100 这个时候 输出频率为 1KHz

4、陀螺仪采样率分频寄存器(0x1A)

采样频率 = 陀螺仪输出频率(配置寄存器的FS1KHz) / (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; //横滚角
ya = atan2(2(q1q2 + q0q3),q0q0+q1q1-q2q2-q3q3)  57.3; //航向角

遇到的问题 1、初始化是要水平放置 且 按照上电时的方位为基准(正点原子提供的例程)

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

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by