欢迎光临散文网 会员登陆 & 注册

MPU6050调试--软件必备

2023-07-14 21:51 作者:新芯-电子设计  | 我要投稿

MPU 6050简介

什么是MPU6050?

MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP:Digital Motion Processor)硬件加速引擎,通过主IIC接口,可以向应用端输出完整的9轴姿态融合演算数据。

有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度

u MPU6050的特点

1自带数字运动处理(DMP:Digital Motion Processing),可以输出6轴或9轴(需外接磁传感器)姿态解算数据。

2集成可程序控制,测量范围为±250,±250,±500,±1000,±2000°/sec的3轴角速度传感器(陀螺仪)。

3集成可程序控制,范围为±2g, ±4g, ±8g, ±16g的3轴加速度传感器。

4自带数字温度传感器

5可输出中断(interrupt),支持姿势识别,摇摄,画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能

6自带1024字节FIFO,有助于降低系统功耗

7高达400Khz的IIC通信接口

8超小封装尺寸:4*4*0.9mm(QFN)

u MPU6050框图

MPU 6050初始化

1初始化IIC接口

2复位MPU6050。由电源管理寄存器1(0X6B)控制

3设置角速度传感器和加速度传感器的满量程范围。由陀螺仪配置寄存器(0X1B)和加毒素传感器配置寄存器(0X1C)设置。

4设置其他参数。配置中断,由中断使能寄存器(0X38)控制:设置AUX IIC接口,由用户控制寄存器(0X6A);设置FIFO,由FIFO使能寄存器(0X23)控制;陀螺仪采样率,由采样率分频寄存器(0X19)控制;设置数字低通滤波器,由配置寄存器(0X1A)控制。

5设置系统时钟。由电源管理寄存器1(0X6B)控制。一般选择x轴陀螺PLL作为 时钟源以获得更高精度的时钟。

6使能角速度传感器(陀螺仪)和加速度传感器。由电源管理寄存器2(0X6C)控制

初始化完成,即可读取陀螺仪、加速度传感器和温度传感器的数据了!!

 

u 电源管理寄存器1(0X6B)

DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。

SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。

TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能。

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

u 陀螺仪配置寄存器

      该寄存器我们只关心FS_SEL[1:0]这两位,用于设置陀螺仪的满量程范围:0,±250°/S;1, ±500°/S;2,±1000°/S;3,±2000°/S;我们一般设置为3,即±2000°/S,因为陀螺仪的ADC为16位分辨率,所以得到灵敏度为:65536/4000=16.4LSB/(°/S)。

u 加速度传感器配置寄存器(0X1C)

该寄存器我们只关心AFS_SEL[1:0]这两位,用于设置加速度传感器的满量程范围:0,±2g; 1,±4g; 2,±8g; 3,±16g;我们一般设置为0,即±2g,因为加速度传感器的ADC也是16位,所以得到的灵敏度为:65536/4=16384LSB/g.

u FIFO使能寄存器(0X23)

      该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO,设置为1,则使能FIFO.

 

注意:加速度传感器的三个轴,全由1个位(ACCEL_FIFO_EN)控制,只要该位置1,则加速度传感器的三个通道都开启FIFO了。

u 陀螺仪采样频率分频寄存器(0X19)

      该寄存器用于设置MPU6050的陀螺仪采样频率,计算公式为:

                  采样频率 = 陀螺仪输出频率/(1+SMPLRT_DIV)

      这里的陀螺仪输出频率,是1khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0/7的时候,频率为8khz,其他情况是1Khz.而且DLPF滤波频率一般设置为采样率的一半。采样率,我们假定设置为50Hz,那么:SMPLRT_DIV=1000/50-1=19。

 

u 配置寄存器

重点看数字低通滤波器(DLPF)的设置为,即:DLPF_CFG[2:0],加速度计和陀螺仪,都是根据这三个为的配置进行过滤的,如下表:

 

 

u 电源管理寄存器2(0X6C)

该寄存器的LP_WAKE_CTRL用于控制低功耗时的唤醒频率,本例程用不到。剩下的6位,分别控制加速度和陀螺仪的x/y/z轴是否进入待机模式,这里我们全部都不进入待机模式,所以全部设置为:0,即可。

u 加速度传感器数据输出寄存器(0X3B~0X40)

      加速度传感器数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的加速度传感器值,高字节在前,低字节在后。

u 陀螺仪数据输出寄存器(0X43~0X48)

      陀螺仪数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的陀螺仪传感器数据,高字节在前,低字节在后。

 

 

 

u 温度传感器数据输出寄存器(0X41~0X42)

      通过读取0X41(高8位)和0X42(低8位)寄存器得到,温度换算公式为:

       Temperature = 36.53 + regval/340

      其中,Temperature为计算得到的温度值,单位为°C,regval为从0X41和0X42读到的温度传感器值。

 

DMP使用介绍

      通过前面的学习,我们可以正常读取MPU6050的加速度传感器、陀螺仪和温度传感器的数据,但是实际使用的时候(比如做四轴),我们更希望得到姿态数据,即欧拉角:航向角(yaw),横滚角(roll),俯仰角(pitch)。

      要得到欧拉角数据,就要利用我们的原始数据,进行姿态融合结算,这个比较复杂,知识点比较多,初学者不易掌握。而MPU6050自带了数字运动处理器,即DMP。并且,InvenSense提供了一个MPU6050的嵌入式运动驱动库,结合MPU6050的DMP,可以将我们的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到yaw、roll、pitch。

      使用内置的DMP,可以大大简化代码设计,MCU不用进行姿态解算过程,大大降低了MCU的负担,从而有更多的时间去处理其他事件,提高系统实时性。

InvenSense提供的MPU6050运动驱动库是基于MSP430的,我们需要将其移植一下,才可以用到STM32上面。

Embedded_MotionDriver_5.1.rar

Embedded Motion Driver_5.1.1 API说明.pdf

Embedded Motion Driver_5.1.rar教程.pdf

官方DMP驱动库移植,主要是实现这4个函数:

I2c_write、i2c_read、delay_ms、get_ms。移植后的驱动代码如右图:

DMP使用介绍

MPU6050 DMP输出的是姿态结算后的四元数,采用q30格式,也就是放大了2的30次方,我们要得到欧拉角,就得做一个转换,代码如下:

 

Quat[0]~quat[3]:是MPU6050的DMP解算后的四元数,q30格式。

q30:是一个常量:1073741824,即2的30次方。

57.3:是弧度转换为角度,即180/Π棑,这样的结果就是以度(°)为单位的。

MPU-6050模块原理图如下图:

 

源码-6050驱动代码

1、MPU6050IIC接口驱动代码

2、MPU_Init函数

3、MPU_Get_Gyroscope函数

4、MPU_Get_Accelerometer函数

5、MPU_Get_Temperature函数

 

DMP移植相关代码

I2c_write、i2c_read、delay_ms、get_ms.

2、mpu_dmp_init函数

3、mpu_dmp_get_data函数

 

链接:https://pan.baidu.com/s/1GH9CdiiDAPdq74kXmUtYCw 

提取码:dyqk


MPU6050调试--软件必备的评论 (共 条)

分享到微博请遵守国家法律