淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 开源电子网 公众平台:“正点原子” 官方网站:www.alientek.com 联系电话:13922348612 ddddd ALIENTEK 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 MPU6050六轴传感器实验 适用平台 STM32 开发板 (正点原子) ddddd 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 本视频重点参考资料 参考资料: 1,MiniSTM32F1 V3开发板 ATK-MPU6050六轴传感器模块使用说明(Mini V3)_AN1507.pdf 2,战舰/精英STM32F1开发板 《STM32F1开发指南-库函数版本》——MPU6050六轴传感器实验 3,探索者STM32F4开发板 《STM32F4开发指南-库函数版本》——MPU6050六轴传感器实验 4,MPU6050参考资料 见光盘:增值资料产品资料ATK-MPU6050六轴传感器模块MPU6050参考资料 ① MPU-6000 & MPU-6050 寄存器表及其描述(中文版).pdf ② MPU-6000 & MPU-6050产品说明书(中文版).pdf ③ DMP文件夹下的相关参考文档和源码 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 目录 MPU6050简介 1 硬件连接 2 源码讲解&例程测试 3 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-什么是MPU6050? MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC接口,可以向应用端输出完整的9轴姿态融合演算数据。 有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度 。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-MPU6050的特点 ①自带数字运动处理( DMP: Digital Motion Processing ),可以输出6轴或9轴(需外接磁传感器)姿态解算数据。 ②集成可程序控制,测量范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪) ③集成可程序控制,范围为±2g、±4g、±8g和±16g的3轴加速度传感器 ④自带数字温度传感器 ⑤可输出中断(interrupt),支持姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能 ⑥自带1024字节FIFO,有助于降低系统功耗 ⑦高达400Khz的IIC通信接口 ⑧超小封装尺寸:4x4x0.9mm(QFN) 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、MPU6050简介-MPU6050框图 AD0=0地址=0X68 AD0=1地址=0X69
1、MPU6050简介-MPU6050初始化 ①初始化IIC接口。 ②复位MPU6050。由电源管理寄存器1(0X6B)控制。 ③设置角速度传感器和加速度传感器的满量程范围。由陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置 。 ④设置其他参数。配置中断,由中断使能寄存器(0X38)控制;设置AUX IIC接口,由户控制寄存器(0X6A)控制;设置FIFO,由FIFO使能寄存器(0X23)控制;陀螺仪采样率 ,由采样率分频寄存器(0X19)控制;设置数字低通滤波器,由配置寄存器(0X1A)控制。 ⑤设置系统时钟。由电源管理寄存器1(0X6B)控制。一般选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。 ⑥使能角速度传感器(陀螺仪)和加速度传感器。由电源管理寄存器2(0X6C)控制 初始化完成,即可读取陀螺仪、加速度传感器和温度传感器的数据了!! 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 电源管理寄存器1(0X6B) DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。 SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。 TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能 CLKSEL[2:0],用于选择系统时钟源,如右表所示: 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 关闭时钟,保持时序产生电路复位状态 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 陀螺仪配置寄存器(0X1B) 该寄存器我们只关心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)。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 加速度传感器配置寄存器(0X1C) 该寄存器我们只关心AFS_SEL[1:0]这两个位,用于设置加速度传感器的满量程范围:0,±2g;1,±4g;2,±8g;3,±16g;我们一般设置为0,即±2g,因为加速度传感器的ADC也是16位,所以得到灵敏度为:65536/4=16384LSB/g。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 FIFO使能寄存器(0X23) 该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO,设置为1,则使能FIFO。 注意:加速度传感器的3个轴,全由1个位(ACCEL_FIFO_EN)控制,只要该位置1,则加速度传感器的三个通道都开启FIFO了 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、MPU6050简介-寄存器介绍 陀螺仪采样率分频寄存器(0X19) 采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV) 这里陀螺仪的输出频率,是1Khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0/7的时候,频率为8Khz,其他情况是1Khz。而且DLPF滤波频率一般设置为采样率的一半。采样率,我们假定设置为50Hz,那么:SMPLRT_DIV=1000/50-1=19。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 配置寄存器(0X1A) 设置:带宽=1/2采样率 重点看数字低通滤波器(DLPF)的设置位,即:DLPF_CFG[2:0],加速度计和陀螺仪,都是根据这三个位的配置进行过滤的,如下表: DLPF_CFG[2:0] 加速度传感器 Fs=1Khz 角速度传感器 (陀螺仪) 带宽(Hz) 延迟(ms) Fs(Khz) 000 260 256 0.98 8 001 184 2.0 188 1.9 1 010 94 3.0 98 2.8 011 44 4.9 42 4.8 100 21 8.5 20 8.3 101 10 13.8 13.4 110 5 19.0 18.6 111 保留 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 电源管理寄存器2(0X6C) 该寄存器的LP_WAKE_CTRL用于控制低功耗时的唤醒频率,本例程用不到。剩下的6位,分别控制加速度和陀螺仪的x/y/z轴是否进入待机模式,这里我们全部都不进入待机模式,所以全部设置为:0 ,即可。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 加速度传感器数据输出寄存器(0X3B~0X40) 加速度传感器数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的加速度传感器值,高字节在前,低字节在后。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-寄存器介绍 陀螺仪数据输出寄存器(0X43~0X48) 陀螺仪数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的陀螺仪传感器数据,高字节在前,低字节在后。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、MPU6050简介-寄存器介绍 温度传感器数据输出寄存器(0X41~0X42) Temperature = 36.53 + regval/340 其中,Temperature为计算得到的温度值,单位为℃,regval为从0X41和0X42读到的温度传感器值。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-DMP使用介绍 通过前面的学习,我们可以正常读取MPU6050的加速度传感器、陀螺仪和温度传感器的数据,但是实际使用的时候(比如做四轴),我们更希望得到姿态数据,即欧拉角:航向角(yaw)、横滚角(roll)和俯仰角(pitch)。 要得到欧拉角数据,就得利用我们的原始数据,进行姿态融合解算,这个比较复杂,知识点比较多,初学者不易掌握。而MPU6050自带了数字运动处理器,即DMP,并且,InvenSense提供了一个MPU6050的嵌入式运动驱动库,结合MPU6050的DMP,可以将我们的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到yaw、roll和pitch。 使用内置的DMP,可以大大简化代码设计,MCU不用进行姿态解算过程,大大降低了MCU的负担,从而有更多的时间去处理其他事件,提高系统实时性。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-DMP使用介绍 InvenSense提供的MPU6050运动驱动库是基于MSP430的,我们需要将其移植一下,才可以用到STM32上面。官方原版驱动在光盘增值资料ALIENTEK 产品资料ATK-MPU6050六轴传感器模块MPU6050参考资料DMP资料: Embedded_MotionDriver_5.1.rar Embedded Motion Driver V5.1.1 API 说明.pdf Embedded Motion Driver V5.1.1 教程.pdf 官方DMP驱动库移植,主要是实现这4个函数:i2c_write、i2c_read、delay_ms和get_ms。 移植后的驱动代码如右图: 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介-DMP使用介绍 MPU6050 DMP输出的是姿态解算后的四元数,采用q30格式,也就是放大了2的30次方,我们要得到欧拉角,就得做一个转换,代码如下: q0=quat[0] / q30; //q30格式转换为浮点数 q1=quat[1] / q30; q2=quat[2] / q30; q3=quat[3] / q30; //计算得到俯仰角/横滚角/航向角 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; //航向角 quat[0]~quat[3]:是MPU6050的DMP解算后的四元数,q30格式。 q30:是一个常量:1073741824,即2的30次方。 57.3:是弧度转换为角度,即180/π,这样结果就是以度(°)为单位的。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、MPU6050简介- ATK-MPU6050模块 ATK-MPU6050模块原理图如下图: 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、硬件连接-探索者STM32F4开发板 探索者开发板板载MPU6050芯片,硬件连接原理图如下: AD0接GND地址=0X68 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、硬件连接-战舰 V3 STM32F1开发板 战舰V3开发板并不板载MPU6050芯片,而是通过ATK-MODULE接口外接MPU6050模块,硬件连接原理图如下: 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、硬件连接-精英STM32F1开发板 精英板并不板载MPU6050芯片,而是通过ATK-MODULE接口外接MPU6050模块,硬件连接原理图如下: 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、硬件连接-Mini V3 STM32F1开发板 Mini V3开发板并不板载MPU6050芯片,而是通过杜邦线,连接MPU6050模块,硬件连接关系如下表: 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 3、源码讲解&例程测试-源码说明 1,Mini V3 STM32F103开发板源码 光盘增值资料ALIENTEK 产品资料ATK-MPU6050六轴传感器模块程序源码扩展实验16 ATK-MPU6050六轴传感器实验.rar 2,精英STM32F103开发板源码 光盘程序源码标准例程(库函数/寄存器)实验30 MPU6050六轴传感器实验 3,战舰V3 STM32F103开发板源码 光盘程序源码标准例程(库函数/寄存器)实验32 MPU6050六轴传感器实验 4,探索者STM32F407开发板源码 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 3、源码讲解&例程测试-6050驱动代码 1,MPU6050 IIC接口驱动代码 2,MPU_Init函数 3,MPU_Get_Gyroscope函数 4,MPU_Get_Accelerometer函数 5,MPU_Get_Temperature函数 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 3、源码讲解&例程测试-DMP驱动代码 1,DMP移植相关代码 i2c_write、i2c_read、delay_ms和get_ms. 2, mpu_dmp_init函数 3, mpu_dmp_get_data函数 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 3、源码讲解&例程测试-main函数 ALIENTEK各开发板(F1/F4),本例程main函数都大同小异,代码几乎一模一样。 重点以战舰V3 本例程的main函数为例讲解,其他开发板参考着看即可。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 3、源码讲解&例程测试-例程测试 例程测试 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-例程测试 匿名四轴上位机 V2.6 设置—串口和波特率设置(基本功能)
3、源码讲解&例程测试-例程测试 匿名四轴上位机 V2.6 设置—高级收码设置(高级收码)
3、源码讲解&例程测试-例程测试 匿名四轴上位机 V2.6 设置—波形显示设置(波形显示)
3、源码讲解&例程测试-例程测试 匿名四轴上位机 V2.6 设置—飞控状态(3D显示)
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com