STM32F4之MPU6050陀螺仪串口输出DMP角度
本文章适合刚开始入门学习陀螺仪的初始者,本人认为野火高级教学视频讲解的MPU6050的原理十分详细(附上链接:https://www.bilibili.com/medialist/play/ml89375593/BV1NW411f7BD),我从中总结如下:
1.陀螺仪的yaw、pitch、roll方向
1)先了解什么是yaw、pitch、roll?这部分知识相信网上都已经可以查阅了解了。
2)了解什么是地理坐标系(即天、北、东);什么是载体坐标系(X、Y、Z)。
3)得出各轴(x,y,z)的转动会有什么影响,如:绕z轴的转动其实是yaw在变化,可以自己感受一下:当你站起来时,头向上为“天”,左手指向“北”,右手指向“东”,把自己本身看作是载体坐标轴(x,y,z),当你原地自转得时候,实际是在左右摇动,即围绕着“天/z”转,所以是yaw在变;当你鞠躬时,是朝着“北/x”方向上下鞠躬,所以是pitch在变;当你绕着“南/y”翻滚时,是roll在变。
2.陀螺仪、加速度计、磁场计及滤波算法与姿态融合
1)三轴陀螺仪:是用来计算角度的。公式为:角速度*时间(积分)=角度,如果当时间趋近于0时再求和,即对时间积分,就可以用单位时间内不同角速度算出不同单位时间下的角度,并求和就能得出角度。
存在误差:
i.将时间化成各个小段,因为可以分成多种情况的无数个小段(如全部分成1s/1ms/1ns),且各个小段时间其对应角速度不同,所以时间小段越大,误差越大。
ii.因为MPU6050精度高,频率高,静止时也会有微变,慢慢累积就会产生误差。
2)三轴加速度计:其公式原来和陀螺仪差不多的,就不多介绍。
存在误差:
i.不能检测到yaw(z),因为重力是始终向下的。
ii.运动时,不能区分重力加速度和外力加速度。
3)三轴磁力计:目的是为了弥补加速度计无法检测到偏航角。
存在误差:
i:容易受到外部磁场干扰。
为了减少更多误差,有些产品还有增加GPS检测,但其不能检测出小精度变化,如yaw,pitch的变化。
综上所述的误差,此时滤波算法的作用就出来了:
静止状态下:加大加速度数据的权重且增大磁场检测器数据的权重。
运动状态下:增大陀螺仪和GPS检测数据的权重。
所以“滤波算法→数据处理→姿态融合→解算→四元数→转换→欧拉角”
3.快速使用官方代码(以正点原子MPU6050为例)
因为MPU6050在市面上已经很多了,下面我将告诉大家如何快速使用MPU6050,我这里以 正点原子的例程 为例。
1.在myiic.c中改IIC的GPIO口配置及myiic.h中IIC的IO口方向与IO操作函数。(注意:IO口方向的更改自行在csdn搜相关文章学习)
2.改usart.c串口,改成自己想要得相关串口配置。
3.改main.c的内容。
有几个注意的地方:
1.usart与IIC是否配置对,main中要加延时,保证在iic的工作时序上。
2.检测MPU_Init初始化是否成功,若其初始化有问题可以在csdn里面搜。
3.检测DMP初始化是否成功,如果有问题,可能是FIFO溢出问题,可以参考csdn的一篇文章:
链接: 例程下载地址:.
最后附上一些其他博主关于MPU6050问题的举措,希望能帮到大家:
链接: 1.
链接: 2.
链接: 3.
链接: 4.