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 */}

到这里就基本搞定了。

串口助手显示如下:

相关内容

热门资讯

安卓系统限制无法录音,探索无法... 你有没有遇到过这种情况?手机里明明装了录音软件,却突然发现,哎呀妈呀,竟然无法录音了!这可真是让人头...
怎么降级手机系统安卓,操作指南... 手机系统升级了,新功能层出不穷,但有时候,你可能会觉得,这系统太卡了,想回到那个流畅如丝的年代。别急...
米oa系统是安卓系统吗,深入解... 亲爱的读者,你是否曾好奇过,米OA系统是不是安卓系统的一员?这个问题,就像是一颗好奇的种子,悄悄地在...
手机刷安卓车载系统,手机刷机后... 你有没有发现,现在开车的时候,手机和车载系统之间的互动越来越紧密了呢?想象当你驾驶着爱车,一边享受着...
vivo安卓怎么降系统,viv... 手机用久了,是不是觉得系统越来越卡,运行速度大不如前?别急,今天就来教你怎么给vivo安卓手机降降级...
nova 4刷安卓系统,体验全... 最近手机界可是热闹非凡呢!听说华为nova 4要刷安卓系统了,这可真是让人兴奋不已。你有没有想过,你...
如果当初没有安卓系统,科技世界... 想象如果没有安卓系统,我们的生活会是怎样的呢?是不是觉得有点不可思议?别急,让我们一起穿越时空,探索...
安卓电视装win系统,系统转换... 亲爱的读者们,你是否曾想过,在你的安卓电视上装一个Windows系统,让它瞬间变身成为一台功能强大的...
安卓手机还原系统好处,重拾流畅... 你有没有遇到过安卓手机卡顿、运行缓慢的情况?别急,今天就来给你揭秘一下安卓手机还原系统的那些好处,让...
安卓系统能跑win吗,探索跨平... 你有没有想过,你的安卓手机里能不能装上Windows系统呢?这听起来是不是有点像科幻电影里的情节?别...
安卓车载系统蓝牙设置,畅享智能... 你有没有发现,现在开车的时候,手机和车载系统之间的互动越来越频繁了呢?这不,今天就来给你详细说说安卓...
奥利奥安卓系统,探索新一代智能... 你有没有想过,一块小小的奥利奥饼干竟然能和强大的安卓系统扯上关系?没错,今天就要来聊聊这个跨界组合,...
微信使用安卓系统,功能解析与操... 你有没有发现,现在用微信的人越来越多了呢?尤其是安卓系统的用户,简直就像潮水一样涌来。今天,就让我带...
体验最新原生安卓系统,极致体验... 你有没有想过,手机系统就像是我们生活的调味品,有时候换一种口味,生活都会变得有趣起来呢?最近,我体验...
安卓系统能玩原神,尽享奇幻冒险... 你有没有想过,在安卓系统上也能畅玩《原神》这样的热门游戏呢?没错,就是那个画面精美、角色丰富、玩法多...
安卓写手机银行系统,基于安卓平... 你有没有想过,手机银行系统在我们日常生活中扮演了多么重要的角色呢?每天刷刷手机,就能轻松管理账户,转...
僵尸之夜恐怖安卓系统,揭秘恐怖... 僵尸之夜,恐怖安卓系统来袭!想象一个寂静的夜晚,你正沉浸在美梦中,突然,一阵诡异的铃声打破了夜的宁静...
谷歌框架和安卓系统,构建智能移... 你有没有想过,为什么你的手机那么聪明,能帮你找到路线,还能帮你拍出美美的照片呢?这都要归功于一个超级...
安卓系统和oppo系统哪个流畅... 你有没有想过,手机系统哪个更流畅呢?安卓系统和OPPO系统,这两个名字听起来就让人心动。今天,咱们就...
安卓怎么用微软系统,利用微软系... 你是不是也和我一样,对安卓手机上的微软系统充满了好奇?想象那熟悉的Windows界面在你的安卓手机上...