概述

本次测试重点关注正常驱动MPU9250后,使用芯片集成的dmp和mpl模块直接返回的欧拉角数据
关于DMP的概念和驱动流程见【全局定位】->【方案资料】->【全局定位】MPU9250DMP&MPL

测试机构

关于测试机构说明,见陀螺仪小型测试平台

测试工程

整个对陀螺仪测试的代码工程都记录在Github上的一个项目中,项目还会随着进展进行更新
项目URL:https://github.com/HITLIVING/-RT-Thread-.git
可以通过Pull下来整个项目进一步了解
对使用MPU9250的DMP和MPL测试功能的实现需要格外关注
gyroscope_dmp_app.c
gyroscope_dmp_app.h
两个文件

测试方案与步骤

mpl以及dmp的初始化流程

  • mpl和dmp的初始化共用了同一个初始化函数
  • inv_mpu.c 文件夹下的 mpu_dmp_init 函数
  • 该函数主要完成了
    • 对MPU9250芯片内部加速度计,速度计(MPU6050)的驱动
    • 对MPU9250芯片内部加速度计,速度计(MPU6050)的参数设定
    • 对MPU9250芯片内部磁力计(AK8963)的驱动
    • 对MPU9250芯片内部磁力计(AK8963)的参数设定
    • 加载dmp固件
    • 设置陀螺仪方向
    • 设置dmp的功能
    • 设置DMP输出速率
    • 自检
    • 使能DMP
  • 当某一步出现问题,就会打断初始化流程,并返回对应存在问题的错误码,方便查看哪里的问题
  • 其中自检是芯片试读数据,计算偏差是否在门限内,同时计算零点漂移
  • 所以在自检时要求芯片尽量放平

  • 在这次测试中,自检一直没通过,显示加速度计的偏差超过门限,我怀疑是这个便宜模块的问题,已下单了一个质量较好的陀螺仪模块,在等快递的这段时间,先用这个没通过自检的芯片查看一下问题原因,后续详细的测试等到更换模块后记录

关于方案的反思和调整

  • DMP自检的问题纠结了好几天还是没解决
  • 最近重新审视了一下目前的方案存在一些问题
  • DMP的自检条件苛刻,通过试读一些数据,经过计算后的偏差与预设偏差比对
  • 自检预读时间较长
  • DMP返回数据频率极限是200HZ,而且200Hz中数据错误率较高
  • DMP处理后的数据读取是通过FIFO,存在读取失败的情况,这时有较大的数据波动
  • 数据处理一次时间较长,在全局定位中我们只用到航向角,而横滚角和俯仰角用不到,这部分运算时间被浪费
  • 思来想去,我们还是决定使用原始数据自己做处理
  • 因此做出方案的调整

计划方案流程:

  1. 正确读取磁力计原始数据,并实现电子罗盘功能
  2. 实现和速度计的互补滤波并测试效果
  3. 打包模块预留接口,降低与现有工程的耦合,方便向全局定位工程移植
  4. 在Webot上仿真实现简易底盘
  5. 在Webot上仿真实现陀螺仪功能
  6. 在Webot上仿真实现正交里程计功能
  7. 在Webot上仿真实现全局定位功能
  8. 后续即为校准方案的实现流程