STM32 (十五)MPU6050
创始人
2025-05-30 06:31:30
0

简介

前言

一、MPU6050简介

MPU6050是一款性价比很高的陀螺仪,可以读取X Y Z 三轴角度,X Y Z 三轴加速度,还有内置的温度传感器,在姿态解析方面应用非常广泛。

下面是它在淘宝上的参数图

产品尺寸

产品参数

产品原理图:

二、硬件连接

由于采用IIC通信,最基本的只需要采用四根线就可以了。分别VCC,GND,SCL,SDA连接到单片机

SCL-----PB6

SDA-----PB7

GND-----GND

VCC接3V或者5V都行。

三、工作原理

MPU6050内部整合了三轴MEMS陀螺仪、三轴MEMS加速度计以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),而且还可以连接一个第三方数字传感器(如磁力计),这样的话,就可以通过IIC接口输出一个9轴信号(链接第三方数字传感器才可以输出九轴信号,否则只有六轴信号)。

更加方便的是,有了DMP,可以结合InvenSense公司提供的运动处理资料库,实现姿态解算。通过自带的DMP,可以通过IIC接口输出9轴融合演算的数据,大大降低了运动处理运算对操作系统的负荷,同时也降低了开发难度。其实,简单一句话说,陀螺仪就是测角速度的,加速度传感器就是测角加速度的,二者数据通过算法就可以得到PITCH、YAW、ROLL角了。

特点:

以数字形式输出 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三轴角(姿态角)

绕向即为正方向,可根据右手螺旋定则确定方向。

MPU6050框图:

在这里插入图片描述可以很清晰地观察到,MPU6050芯片中内置了三轴加速度传感器、三轴陀螺仪和一个温度传感器。右侧INT为中断输出脚,TCS为片选脚、AD0为设置地址脚、SCL和SDA为主IIC接口、AUX_CL和AUX_DA为从IIC接口,主要用到的是AD0、SCL、SDA。

可以很清晰地观察到,MPU6050芯片中内置了三轴加速度传感器、三轴陀螺仪和一个温度传感器。右侧INT为中断输出脚,TCS为片选脚、AD0为设置地址脚、SCL和SDA为主IIC接口、AUX_CL和AUX_DA为从IIC接口,主要用到的是AD0、SCL、SDA。

相关寄存器

这部分就比较多了,不想看的也可以直接跳过,一样可以使用,想深入了解的朋友可以看一下。

1、电源管理寄存器

DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能CLKSEL[2:0],用于选择系统时钟源,如下所示:

总之,电源管理寄存器就是复位MPU6050

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

总之,电源管理寄存器2就是用于设置加速度传感器和陀螺仪的X/Y/Z轴是进入休眠还是正常工作。

2、陀螺仪配置寄存器

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

总之,陀螺仪配置寄存器就是配置陀螺仪满量程范围,设置最大

3、加速度配置寄存器

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

总之,加速度传感器配置寄存器就是配置加速度传感器满量程范围,不宜过大

4、FIFO使能寄存器

该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO,设置为1,则使能FIFO。加速度传感器的三个轴,全由一个位(ACCEL_FIFO_EN)控制,只要该位为1,则加速度传感器三个通道都开启FIFO;但是陀螺仪传感器的三个轴需要一个一个设置,即XYZ轴分别配置。

总之,FIFO使能寄存器用于控制使能FIFO(First Input First Output)

5、陀螺仪采样率分频寄存器

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

总之,陀螺仪采样率分频寄存器就是用于设置陀螺仪的采样频率,如果采样频率为50Hz,那么采样周期就为1/50=20ms,即20ms采集一次陀螺仪的数据。

6、配置寄存器

总之,配置寄存器就是设置数字低通滤波器的DLPF_CFG位来结合陀螺仪采样分频寄存器来共同设置采样周期。

7、陀螺仪数据输出寄存器

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

总之,陀螺仪数据输出寄存器就是把陀螺仪测量到的数据输出出来。

8、加速度传感器数据输出寄存器

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

总之,加速度传感器数据输出寄存器就是把加速度传感器测量到的数据输出出来。

9、温度传感器数据输出寄存器

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

Temperature = 36.53 + regval/340。其中,Temperature为计算得到的温度值,单位为℃,regval为从0X41和0X42读到的温度传感器值。

总之,温度传感器数据输出寄存器就是把温度寄存器测量到的数据处处出来。

工程创建

总配置如下

1 高速时钟选择外部8Mhz的晶振

2 开启debug调试功能

3 时钟树

4 打开串口设置

5 并且使能串口中断

6 打开IIC设置

7 打开IIC中断

代码讲解

代码重点是讲解我们的dmp库的移植:

一、首先我们要先去移植DMP的几个文件,这几个文件网上都可以找了,但是为了方便你们,我也就放在这里了。

https://download.csdn.net/download/DOF526570/87588566

里面打开是这样的一个文件

把里面的.c和.h文件分别放在对应的Src和Inc里面就好了

然后去工程里面记得添加一下文件就好了,也不用去添加路径了。

接下来讲解一下主函数的示例代码:

首先是我们的日常,重写一下我们的串口打印函数:

/*** 函数功能: 重定向c库函数printf到DEBUG_USARTx* 输入参数: 无* 返 回 值: 无* 说    明:无*/
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;
}/*** 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx* 输入参数: 无* 返 回 值: 无* 说    明:无*/
int fgetc(FILE *f)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
}

然后添加变量来获取mpu6050返回的信息:

float pitch,roll,yaw;         //欧拉角
short aacx,aacy,aacz;        //加速度传感器原始数据
short gyrox,gyroy,gyroz;    //陀螺仪原始数据
short temp;                    //温度

接下来是初始化一下我们的MPU6050还有dmp库

    while(MPU_Init());                    //初始化MPU6050printf("%s\r\n","Mpu6050 Init ok!");while(mpu_dmp_init()){HAL_Delay(200);printf("%s\r\n","Mpu6050 Init Wrong!");}printf("%s\r\n","Mpu6050 Init OK!");

最后在我们主函数的while里面打印出来获取的数量,这里为了我们方便看到变化,我就延时就了一点:

  while (1){/* USER CODE END WHILE */if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0){temp=MPU_Get_Temperature();                                //得到温度值MPU_Get_Accelerometer(&aacx,&aacy,&aacz);    //得到加速度传感器数据MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);    //得到陀螺仪数据printf("三轴角度:%f-%f-%f\r\n",pitch,roll,yaw);printf("三轴加速度:%d-%d-%d\r\n",aacx,aacy,aacz);printf("三轴角角度:%d-%d-%d\r\n",gyrox,gyroy,gyroz);}HAL_Delay(1000);/* USER CODE BEGIN 3 */}

到这里就基本搞定了。

串口助手显示如下:

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...