STM32之MPU6050实战

  1. MPU6050

MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景

3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度

3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度

ADC和数据存储

  • 16位ADC :MPU6050集成了16位的ADC,用于将模拟信号转换为数字信号,量化范围为-32768到32767。
  • 量化过程 :ADC将模拟信号转换为数字信号,并以两个字节进行存储。

加速度计满量程示例:

±16g:

读取的ADC值为最大值32768时,对应实际加速度为16g。

ADC值为32768的一半(16384)时,对应加速度为8g。

±2g:

读取的ADC值为最大值32768时,对应实际加速度为2g。

ADC值为32768的一半(16384)时,对应加速度为1g。

满量程选择

  • 剧烈运动 :选择较大的满量程,确保测量范围足够大。
  • 平缓运动 :选择较小的满量程,提升测量分辨率精度。

测量分辨率

  • 满量程越小,测量分辨率越高,测量越精细。
  • 满量程越大,测量范围越广。
  • ADC值与加速度值呈线性关系,可以通过乘一个系数从ADC值计算出实际加速度。

I2C从机地址配置

二进制地址转换为十六进制:

以从机地址1101000为例。

把7位二进制数1101000转换为十六进制,即分割低4位和高3位:0110 1000,转换后为0x68。

I2C时序中的地址格式:

在I2C通信时,需要发送7位从机地址1101000加上1位读写位。

认为0x68是从机地址,需要将0x68左移1位,再加上读写位(0或1)。

转换步骤:

将0x68左移1位:1101 0000(即0xD0)。

再与读写位(0或1)进行或操作:(0x68 << 1) | 0 或 (0x68 << 1) | 1。

实际应用:

写操作时,从机地址为0xD0。

读操作时,从机地址为0xD1。

硬件电路

2.代码实现

PB6---------SCL

PB7---------SDA

GND---------AD0

2.1读取mpu6050数据并转换成角速度和角度

遇到一个奇怪的现象,用HAL库直接读取I2C数据,第一次的mpu6050数据是正确的,while(1)循环读取,第二次及以后出现错误。

用引脚模拟I2C通讯,while(1)循环读取正确。

2.2 mpu6050简单校准

【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准_cubemx陀螺仪-CSDN博客

一般来说,MEMS(微机电系统)器件由于制造工艺精度问题,都会存在一定的误差。上图是静止在水平面的条件下测试得到的数值。可见,水平静止的情况下,陀螺仪输出应该为0,加速度计Z轴输出应为1g。所以出现了较大误差。

1.陀螺仪校准

陀螺仪的校准相对简单。在静止的情况下,将多个采样的平均值作为偏置值。测量后减去这个零偏即为真实值。若存在零偏,即使在静止的情况下,得出的数据会认为正在旋转,随着时间累积会出现较大误差。

|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| const float gyro_offest[3] = {-0.96,0.902,-1.05}; pRogy->x -= gyro_offest[0]; pRogy->y -= gyro_offest[1]; pRogy->z -= gyro_offest[2]; //校准 |

2.加速度计校准

加速度计校准可建立以下数学模型。

陀螺仪加速度计MPU6050程序与校准方法_mpu6050校准-CSDN博客

2.3 mpu6050使用Dmp

STM32F103HAL库移植MPU6050的DMP库_empl库-CSDN博客

原始数据的读取对于MPU6050的使用而言只是第一步,要想取得俯仰角(pitch),横滚角(roll),航偏角(yaw)的数据,还需要使用官方给出的DMP库或者卡尔曼滤波。

通过百度网盘分享的文件:0812

链接:https://pan.baidu.com/s/1LE2MlbJsbt6H7kmD2dAPnw?pwd=1tnx

提取码:1tnx

--来自百度网盘超级会员V2的分享

相关推荐
scan112 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0113 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
Mortal_hhh14 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司14 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比15 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie15 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔15 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@16 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^1382879887218 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张19 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩