打印
[STM32F4]

【正点原子探索者STM32F407开发板】第34章 MPU6050六轴传感器...

[复制链接]
8680|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangyang86|  楼主 | 2015-3-25 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第三十七章 MPU6050六轴传感器实验

第三十七章 MPU6050六轴传感器实验-STM32F4开发指南-正点原子探索者STM32开发板.pdf.pdf (1.27 MB)



实验32 MPU6050六轴传感器实验.zip (616.89 KB)




1.硬件平台:正点原子探索者STM32F407开发板2.软件平台:MDK5.13.固件库版本:V1.4.0


本章,我们介绍当下最流行的一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器:MPU6050,该传感器广泛用于四轴、平衡车和空中鼠标等设计,具有非常广泛的应用范围。ALIENTEK探索者STM32F4开发板自带了MPU6050传感器。本章我们将使用STM32F4来驱动MPU6050,读取其原始数据,并利用其自带的DMP实现姿态解算,结合匿名四轴上位机软件和LCD显示,教大家如何使用这款功能强大的六轴传感器。本章分为如下几个部分:

37.1 MPU6050简介

37.2 硬件设计

37.3 软件设计

37.4 下载验证


37.1 MPU6050简介

本节,我们将分2个部分介绍:1,MPU6050基础介绍。2,DMP使用简介。

37.1.1 MPU6050基础介绍

MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了安装空间。

MPU6050内部整合了3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC接口,向应用端输出完整的9轴融合演算数据。有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。

MPU6050的特点包括:

①       以数字形式输出6轴或9轴(需外接磁传感器)的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据(需DMP支持)

②       具有131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)

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

④       移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移

⑤       自带数字运动处理(DMP: Digital Motion Processing)引擎可减少MCU复杂的融合演算数据、感测器同步化、姿势感应等的负荷

⑥       内建运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求

⑦       自带一个数字温度传感器

⑧       带数字输入同步引脚(Sync pin)支持视频电子影相稳定技术与GPS

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

⑩       VDD供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VLOGIC可低至1.8V± 5%

⑪       陀螺仪工作电流:5mA,陀螺仪待机电流:5uA;加速器工作电流:500uA,加速器省电模式电流:40uA@10Hz

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

⑬       高达400Khz的IIC通信接口

⑭       超小封装尺寸:4x4x0.9mm(QFN)

MPU6050传感器的检测轴如图37.1.1.1所示:




图37.1.1.1 MPU6050检测轴及其方向

MPU6050的内部框图如图37.1.1.2所示:

图37.1.1.2 MPU6050框图

       其中,SCL和SDA是连接MCU的IIC接口,MCU通过这个IIC接口来控制MPU6050,另外还有一个IIC接口:AUX_CL和AUX_DA,这个接口可用来连接外部从设备,比如磁传感器,这样就可以组成一个九轴传感器。VLOGIC是IO口电压,该引脚最低可以到1.8V,我们一般直接接VDD即可。AD0是从IIC接口(接MCU)的地址控制引脚,该引脚控制IIC地址的最低位。如果接GND,则MPU6050的IIC地址是:0X68,如果接VDD,则是0X69,注意:这里的地址是不包含数据传输的最低位的(最低位用来表示读写)!!

       在探索者STM32F4开发板上,AD0是接GND的,所以MPU6050的IIC地址是0X68(不含最低位),IIC通信的时序我们在之前已经介绍过(第二十九章,IIC实验),这里就不再细说了。

       接下来,我们介绍一下利用STM32F4读取MPU6050的加速度和角度传感器数据(非中断方式),需要哪些初始化步骤:

1)初始化IIC接口

MPU6050采用IIC与STM32F4通信,所以我们需要先初始化与MPU6050连接的SDA和SCL数据线。这个在前面的IIC实验章节已经介绍过了,这里MPU6050与24C02共用一个IIC,所以初始化IIC完全一模一样。

2)复位MPU6050

       这一步让MPU6050内部所有寄存器恢复默认值,通过对电源管理寄存器1(0X6B)的bit7写1实现。 复位后,电源管理寄存器1恢复默认值(0X40),然后必须设置该寄存器为0X00,以唤醒MPU6050,进入正常工作状态。

3)设置角速度传感器(陀螺仪)和加速度传感器的满量程范围

       这一步,我们设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围为±2g。

4)设置其他参数

       这里,我们还需要配置的参数有:关闭中断、关闭AUX IIC接口、禁止FIFO、设置陀螺仪采样率和设置数字低通滤波器(DLPF)等。本章我们不用中断方式读取数据,所以关闭中断,然后也没用到AUX IIC接口外接其他传感器,所以也关闭这个接口。分别通过中断使能寄存器(0X38)和用户控制寄存器(0X6A)控制。MPU6050可以使用FIFO存储传感器数据,不过本章我们没有用到,所以关闭所有FIFO通道,这个通过FIFO使能寄存器(0X23)控制,默认都是0(即禁止FIFO),所以用默认值就可以了。陀螺仪采样率通过采样率分频寄存器(0X19)控制,这个采样率我们一般设置为50即可。数字低通滤波器(DLPF)则通过配置寄存器(0X1A)设置,一般设置DLPF为带宽的1/2即可。

5)配置系统时钟源并使能角速度传感器和加速度传感器

       系统时钟源同样是通过电源管理寄存器1(0X1B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值是0(内部8M RC震荡),不过我们一般设置为1,选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器2(0X6C)来设置,设置对应位为0即可开启。

       至此,MPU6050的初始化就完成了,可以正常工作了(其他未设置的寄存器全部采用默认值即可),接下来,我们就可以读取相关寄存器,得到加速度传感器、角速度传感器和温度传感器的数据了。不过,我们先简单介绍几个重要的寄存器。      

       首先,我们介绍电源管理寄存器1,该寄存器地址为0X6B,各位描述如图37.1.1.3所示:

图37.1.1.3 电源管理寄存器1各位描述

       其中,DEVICE_RESET位用来控制复位,设置为1,复位MPU6050,复位结束后,MPU硬件自动清零该位。SLEEEP位用于控制MPU6050的工作模式,复位后,该位为1,即进入了睡眠模式(低功耗),所以我们要清零该位,以进入正常工作模式。TEMP_DIS用于设置是否使能温度传感器,设置为0,则使能。最后CLKSEL[2:0]用于选择系统时钟源,选择关系如表37.1.1.1所示:

CLKSEL[2:0]
时钟源
000
内部8M RC晶振
001
PLL,使用X轴陀螺作为参考
010
PLL,使用Y轴陀螺作为参考
011
PLL,使用Z轴陀螺作为参考
100
PLL,使用外部32.768Khz作为参考
101
PLL,使用外部19.2Mhz作为参考
110
保留
111
关闭时钟,保持时序产生电路复位状态

图37.1.1.1 CLKSEL选择列表

       默认是使用内部8M RC晶振的,精度不高,所以我们一般选择X/Y/Z轴陀螺作为参考的PLL作为时钟源,一般设置CLKSEL=001即可。

       接着,我们看陀螺仪配置寄存器,该寄存器地址为:0X1B,各位描述如图37.1.4所示:

图37.1.1.4 陀螺仪配置寄存器各位描述

       该寄存器我们只关心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)。

       接下来,我们看加速度传感器配置寄存器,寄存器地址为:0X1C,各位描述如图37.1.1.5所示:

图37.1.1.5 加速度传感器配置寄存器各位描述

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

       接下来,我看看FIFO使能寄存器,寄存器地址为:0X1C,各位描述如图37.1.1.6所示:

图37.1.1.6 FIFO使能寄存器各位描述

       该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为0即可禁止FIFO,设置为1,则使能FIFO。注意加速度传感器的3个轴,全由1个位(ACCEL_FIFO_EN)控制,只要该位置1,则加速度传感器的三个通道都开启FIFO了。

       接下来,我们看陀螺仪采样率分频寄存器,寄存器地址为:0X19,各位描述如图37.1.1.7所示:

图37.1.1.7 陀螺仪采样率分频寄存器各位描述

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

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

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

       接下来,我们看配置寄存器,寄存器地址为:0X1A,各位描述如图37.1.1.8所示:

图37.1.1.8 配置寄存器各位描述

       这里,我们主要关心数字低通滤波器(DLPF)的设置位,即:DLPF_CFG[2:0],加速度计和陀螺仪,都是根据这三个位的配置进行过滤的。DLPF_CFG不同配置对应的过滤情况如表37.1. 1. 2所示:



37.4 下载验证

在代码编译成功之后,我们通过下载代码到ALIENTEK探索者STM32F4开发板上,可以看到LCD显示如图37.4.1所示的内容:

图37.4.1 程序运行时LCD显示内容

屏幕显示了MPU6050的温度、俯仰角(pitch)、横滚角(roll)和航向角(yaw)的数值。然后,我们可以晃动开发板,看看各角度的变化。

另外,通过按KEY0可以开启或关闭数据上报,开启状态下,我们可以打开:ANO_Tech匿名四轴上位机_V2.6.exe(该软件双击后,会弹出一个蓝色的小界面,直接关闭即可。然后才会进入主界面),这个软件,接收STM32F4上传的数据,从而图形化显示传感器数据以及飞行姿态,如图37.4.2和图37.4.3所示:


实验详细手册和源码下载地址:http://www.openedv.com/posts/list/41586.htm


正点原子探索者STM32F407开发板购买地址:http://item.taobao.com/item.htm?id=41855882779
  

沙发
搞IT的| | 2015-3-26 13:05 | 只看该作者
楼主辛苦!感谢分享!留着日后用!

使用特权

评论回复
板凳
cowboy2014| | 2015-3-30 17:32 | 只看该作者
正点原子的东西还是非常不错的,详细

使用特权

评论回复
地板
zhangyang86|  楼主 | 2015-4-3 21:04 | 只看该作者
cowboy2014 发表于 2015-3-30 17:32
正点原子的东西还是非常不错的,详细

谢谢支持

使用特权

评论回复
5
奇点darker| | 2018-6-11 17:43 | 只看该作者
怎么不能用啊

使用特权

评论回复
6
小郭小豪| | 2019-7-3 22:33 | 只看该作者
感觉找到了学STM的地方啦,就跟着正点原子学了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:正点原子STM32开发板购买单击这里

80

主题

916

帖子

51

粉丝