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的分享

相关推荐
辰哥单片机设计27 分钟前
TT直流减速电机(STM32)
stm32
A9better30 分钟前
嵌入式开发学习日志36——stm32之USART串口通信前述
stm32·单片机·嵌入式硬件·学习
思诺学长1 小时前
BMS(电池管理系统)的主要功能和架构简述
单片机·嵌入式硬件
czhaii1 小时前
全局不关总中断的 RTOS / CosyOS-II for STCAI MCU
单片机
qq_401700411 小时前
STM32低功耗Tickless模式
stm32·单片机
研猛男3 小时前
0、FreeRTOS编码和命名规则
笔记·stm32·freertos
点灯小铭3 小时前
基于单片机的自动存包柜设计
数据库·单片机·mongodb·毕业设计·课程设计
学生董格6 小时前
[嵌入式embed]RT-ThreadStudio-STM32F103C8T6(江协科技)+移植RT-Thread v4.11模版
科技·stm32·嵌入式硬件
szxinmai主板定制专家6 小时前
一种基于 RK3568+AI 的国产化充电桩安全智能交互终端的设计与实现,终端支持各种复杂的交互功能和实时数据处理需求
arm开发·人工智能·嵌入式硬件·安全
萧技电创EIIA7 小时前
基于stc12单片机的PID恒温烙铁设计
单片机·嵌入式硬件·pid过程控制