MPU6050常见问题的分析与处理

目录

  • 前言
  • 一、IIC驱动
  • 二、MPU6050的摆放
  • 三、MPU6050初始化
  • 四、MPU6050偏航角(yaw)零飘
  • 五、MPU6050万向节锁
  • 结语


前言

本文主要针对STM32使用MPU6050过程中产生的问题进行分析和处理,部分内容也适用于其他单片机。本文基于MPU6050自带的DMP算法。文章内容对于MPU6050调试过程有一定的帮助。


以下是本篇文章正文内容

一、IIC驱动

STM32的硬件IIC是存在一定问题的,初始化MPU6050时可能导致初始化失败,所以推荐使用软件IIC。

二、MPU6050的摆放

默认情况下相对于载体坐标系而言,绕x轴旋转为横滚(roll),绕y轴旋转是俯仰角(pitch),绕z轴旋转是偏航(yaw)。注意是绕。

如果把MPU6050看成一架飞机,摆动机翼是横滚角,上下摆动机头是俯仰角,左右摆动机头是偏航角。

下图摆放方式是错误的
MPU6050常见问题的分析与处理_第1张图片

下图的摆放方式才是正确的,如上文描述可知。
MPU6050常见问题的分析与处理_第2张图片
注意图2.2(上方第二张图),是指默认情况下。在官方的DMP驱动中有这样一段代码

static signed char gyro_orientation[9] = {
      1, 0, 0,
                                           0, 1, 0,
                                           0, 0, 1};

这个是MPU6050的坐标矩阵,可根据实际摆放的位置修改此矩阵。如果不修改这个矩阵,需要按照图2.2摆放,不然数值肯定是错误的。

三、MPU6050初始化

MPU6050初始化有可能会卡死。可参考正点原子的例程,实测没什么问题。
MPU6050 DMP 是带有自检功能的

		run_self_test();

run_self_test 这个函数用于自检,MPU6050会以初始状态作为欧拉角的0度,不管有没有放平MPU6050都会以初始状态作为欧拉角的0度,初始化之后MPU6050会稍微校准一下,那么前几秒的数据是可以适当舍弃的。
虽然MPU6050会稍微校准,但是初始化时一定要放平。如果不放平大概率报错。当然也有可能成功,但是MPU6050校准的数据会有偏差。

四、MPU6050偏航角(yaw)零飘

MPU6050的偏航角是不正常的,即使静止不动也会跳动。这个纯粹是硬件问题,就算算法怎么牛逼也解决不了。只能外加磁力计解决,也可以直接使用MPU9250,这个是自带磁力计的。使用时注意不要和电机靠太近,磁场很容易受到干扰。

五、MPU6050万向节锁

默认Z-Y-X顺序下,不知道大家有没有发现这个问题。当MPU6050只转动俯仰角,俯仰角接近90度或者等于90度时,偏航角的角度会发生很大的偏差。那么这个就是万向节锁,此时如果比作一架飞机,当飞机垂直90度向上时,按照Z-Y-X顺序无论怎么改变方向飞机都只能向上飞。
所以不要让俯仰角垂直,这样可以减少bug。


结语

那么以上就是本篇文章的所有内容了。
本文如果有不对或者需要改进的地方欢迎指出。

你可能感兴趣的:(MPU6050,单片机,stm32,c语言,其他)