大家都知道,MPU6050的DMP模式目前还不是开元的。
不是开元就会有很多的各种问题,况且MPU6050也谈不上好的陀螺仪
估计大家使用MPU6050,很多人都是使用的其DMP方式抽出四元素,得到欧拉角进行PID解算方面的问题。但是发现会有或多或少的问题让人抓心,问度娘和论坛也根本没什么答案。
这篇文章就和大家简单说说,我在使用MPU6050的时候遇到的一些问题,当然了,有不少问题我到现在也没有解决,都怪元件做的不好罢了。
第一个问题:MPU6050的陀螺仪不精确
这个不精确不是指零点漂移,如果漂移了直接在程序中加一小横代码就能搞定。
大家可以用MPU6050试一下,你把MPU6050航片转360度然后恢复到原来的方位(可以用个参照物,)按理来说和0度就有一两度的误差就好了,然后就会莫名其妙的显示-15度左右………..
这就真没什么办法了 要不就换个好点的陀螺仪就应该能好
第二个问题:DMP发现FIFO有的时候读不出来数据
DMP模式其实就是读取MPU6050里面的FIFO,FIFO里面存的是最近状态下的包括GYRO,ACC,四元数等参数。
个别人可能会用上位机调调IMU的时候,发现曲线是这样的。。。
尖峰是MPU6050的三个姿态角都调到零点了。
细致的查了几个问题。DMP模式下,有一条语句是读取FIFO的,就是DMP_READ_FIFO这个函数。通过示波器和逻辑分析仪细致的查了一下这个到底是什么问题,我的测试结果在这:
所以DMP_READ_FIFO这个函数是只有1.04%的成功率能够正确读数更新
数据更新时间隔了9.96ms,也就是相当于现在输出的采样频率是100HZ左右。
于是我改了一下DMP模式里的宏定义来测试一下DMP的采样周期
当然了,DMP的宏定义还有一个和SAMPLE_RATE相关的,调了也没什么鸟用,效果和这没多大差别。
根本不是线性的!!
这绝逼在逗我!!
而且DMP不是开源的,所以怎么整也不知道内部核心怎么转的。
网络上的DMP资源也很匮乏。
所以MPU6050现在来看,就是适合一个低端用的。
如果做飞控的话,单独一个MPU6050就像控稳几乎不可能,肯定需要很多的辅助传感器,比如光流传感器什么的
如果嫌麻烦,直接把MPU6050扔了,换个好的就OK了
本人的帖子,博客地址是http://blog.csdn.net/u013051445
|