慢醇 发表于 2022-5-28 15:56

MPU6050陀螺仪和加速度计数据的获取和校准

【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准在制作平衡车或者飞行器时,不可避免地需要知道设备本身的姿态,一般我们使用陀螺仪和加速度计来获取这些信息。

陀螺仪用来测量物体的角度。传统的机械式陀螺的原理,和我们小时候玩的陀螺一样,是利用了高速旋转的物体能保持轴线稳定的特性;机械式陀螺需要的加工精度非常高,但是测角精度一般。后来发展出来的光纤陀螺和激光陀螺虽然原理上已经有了很大不同,但还是沿用了陀螺仪这个叫法,它们的精度要比机械式的陀螺高很多,价格也较贵。MEMS陀螺是基于微机电技术,它的突出特点是体积小、成本低,但是初始精度低,一般需要校准后才能获得较理想的数据;目前市面上常见的小型飞行器、平衡车,都是用的MEMS陀螺,正是由于低成本MEMS器件的出现,近年来小型四轴飞行器得到了飞速发展。



慢醇 发表于 2022-5-28 16:02

加速度计用来测量物体的加速度,进而可以积分后得到物体的速度和位移。

慢醇 发表于 2022-5-28 16:02

在一般的姿态测量的应用中,加速度计还可以用于校准陀螺仪的数据。这是因为加速度计可以实时测量重力加速度,根据重力加速度的方向,可以知道物体本身的一些姿态信息。陀螺仪的数据在较短时间内是比较准确的,但是长时间会有误差累积;所以,陀螺仪长时间的数据需要通过加速度计测得的重力角度来修正。

慢醇 发表于 2022-5-28 16:03

MPU6050集成了3轴陀螺仪和3轴加速度计,可以获取物体的姿态和运动信息。陀螺仪可测范围为±250,±500,±1000,±2000°/秒,加速度计可测范围为±2,±4,±8,±16g,使用16bitAD采样。使用I2C接口通信。

慢醇 发表于 2022-5-28 16:03

本节我们就来使用STM32获取MPU6050的加速度和角速度数据,并介绍一种简单的初始校准方法,最后使用匿名四轴地面站来显示加速度和角速度的波形图。

慢醇 发表于 2022-5-28 16:04

1)MPU6050硬件介绍
本文使用的是下图这种MPU6050模块(GY521):

慢醇 发表于 2022-5-28 16:08

模块的电路板上,已经标明了X轴、Y轴的方向,而Z轴的方向由X轴、Y轴通过右手定则确定。

慢醇 发表于 2022-5-28 16:10

至于各角速度的方向,也是通过右手定则确定,如下图:



慢醇 发表于 2022-5-28 16:11

如果想把MPU6050集成到自己的电路板上,可以参考如下原理图设计:

慢醇 发表于 2022-5-28 16:12

使用LDO降压成3.3V作为MPU6050的供电;对外的接口最少需要连接VCC_5V、GND供电线,SCL、SDA I2C通信线。

本文把I2C的两根线连接到STM32的I2C1对应的引脚上。

慢醇 发表于 2022-5-28 16:14

2)配置cubemx工程
设置I2C1接口,速率为400KHz:

慢醇 发表于 2022-5-28 16:14

设置好后,生成keil工程。

慢醇 发表于 2022-5-28 16:15

3)MPU6050原始数据的获取
STM32的HAL库生成的硬件I2C代码有个bug,这里我们先修正一下:

就是I2C初始化的如下函数,需要添加一句,把时钟初始化的内容提到GPIO初始化之前,如果不修改,硬件I2C有时不能用。

zerorobert 发表于 2022-5-28 16:39

这个校准怎么做?

慢醇 发表于 2022-5-28 16:50

编写代码时,将HAL库的I2C读写代码封装一下,以便于后面使用:

慢醇 发表于 2022-5-28 16:51

慢醇 发表于 2022-5-28 16:51

初始化MPU6050,如果我们只用最基本的功能,只要芯片唤醒,设置采样率、滤波器、量程等操作就可以了:(具体的寄存器含义,可以查看芯片数据手册)

慢醇 发表于 2022-5-28 16:52

慢醇 发表于 2022-5-28 16:53

初始化完成后,就可以读取MPU6050的数据了,我们需要获取的加速度和角速度数据,在寄存器ACCEL_XOUT_H(0x3B)为起始地址的14个字节中,其中前6个字节是三个方向的加速度,最后6个字节是三个方向的角速度。

慢醇 发表于 2022-5-28 16:54

页: [1] 2
查看完整版本: MPU6050陀螺仪和加速度计数据的获取和校准