打印
[STM32F1]

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

[复制链接]
1707|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢醇|  楼主 | 2022-5-28 15:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【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接口通信。

使用特权

评论回复
5
慢醇|  楼主 | 2022-5-28 16:03 | 只看该作者
本节我们就来使用STM32获取MPU6050的加速度和角速度数据,并介绍一种简单的初始校准方法,最后使用匿名四轴地面站来显示加速度和角速度的波形图。

使用特权

评论回复
6
慢醇|  楼主 | 2022-5-28 16:04 | 只看该作者
1)MPU6050硬件介绍
本文使用的是下图这种MPU6050模块(GY521):

使用特权

评论回复
7
慢醇|  楼主 | 2022-5-28 16:08 | 只看该作者
模块的电路板上,已经标明了X轴、Y轴的方向,而Z轴的方向由X轴、Y轴通过右手定则确定。

使用特权

评论回复
8
慢醇|  楼主 | 2022-5-28 16:10 | 只看该作者
至于各角速度的方向,也是通过右手定则确定,如下图:



使用特权

评论回复
9
慢醇|  楼主 | 2022-5-28 16:11 | 只看该作者
如果想把MPU6050集成到自己的电路板上,可以参考如下原理图设计:

使用特权

评论回复
10
慢醇|  楼主 | 2022-5-28 16:12 | 只看该作者
使用LDO降压成3.3V作为MPU6050的供电;对外的接口最少需要连接VCC_5V、GND供电线,SCL、SDA I2C通信线。

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

使用特权

评论回复
11
慢醇|  楼主 | 2022-5-28 16:14 | 只看该作者
2)配置cubemx工程
设置I2C1接口,速率为400KHz:

使用特权

评论回复
12
慢醇|  楼主 | 2022-5-28 16:14 | 只看该作者
设置好后,生成keil工程。

使用特权

评论回复
13
慢醇|  楼主 | 2022-5-28 16:15 | 只看该作者
3)MPU6050原始数据的获取
STM32的HAL库生成的硬件I2C代码有个bug,这里我们先修正一下:

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

使用特权

评论回复
14
zerorobert| | 2022-5-28 16:39 | 只看该作者
这个校准怎么做?

使用特权

评论回复
15
慢醇|  楼主 | 2022-5-28 16:50 | 只看该作者
编写代码时,将HAL库的I2C读写代码封装一下,以便于后面使用:

使用特权

评论回复
16
慢醇|  楼主 | 2022-5-28 16:51 | 只看该作者

使用特权

评论回复
17
慢醇|  楼主 | 2022-5-28 16:51 | 只看该作者
初始化MPU6050,如果我们只用最基本的功能,只要芯片唤醒,设置采样率、滤波器、量程等操作就可以了:(具体的寄存器含义,可以查看芯片数据手册)

使用特权

评论回复
18
慢醇|  楼主 | 2022-5-28 16:52 | 只看该作者

使用特权

评论回复
19
慢醇|  楼主 | 2022-5-28 16:53 | 只看该作者
初始化完成后,就可以读取MPU6050的数据了,我们需要获取的加速度和角速度数据,在寄存器ACCEL_XOUT_H(0x3B)为起始地址的14个字节中,其中前6个字节是三个方向的加速度,最后6个字节是三个方向的角速度。

使用特权

评论回复
20
慢醇|  楼主 | 2022-5-28 16:54 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

1241

帖子

5

粉丝