stm32驱动mpu6050、mpu6500、mpu9250心得

浅谈自己使用mpu陀螺仪的一些心得。

mpu6050/mpu6500驱动

stm32驱动mpu6050、mpu6500、mpu9250心得_第1张图片
这里是用的原子哥的用虚拟IIC驱动mpu6050代码,之前我一直是用硬件IIC驱动,但是听大神说虚拟IIC比硬件IIC要稳定,尝试之后发现确实比较稳定。而且个人觉得由于虚拟IIC可以在任意IO口开设,所以相较于硬件IIC更加方便。
stm32驱动mpu6050、mpu6500、mpu9250心得_第2张图片
另外贴出我使用MPU9250的驱动程序,也是使用了原子哥的,MPU9250是集合了MPU6500和磁力计AK8963为一体的传感器。值得注意的一点是,MPU9250初始化完成后,需要重新设置量程参数,不然会造成初始化失败。

使用dmp进行姿态解算

陀螺仪例如mpu6050用本身自带的dmp进行姿态解算的使用的比较广泛,原子哥也有详细的教程。这里贴出来的也是原子哥的代码。但是个人多次的情况来看,dmp有两个缺点:
1.dmp容易损坏。因为dmp很容易受到高温的影响,例如我需要用热熔胶固定陀螺仪,会导致dmp损坏,多表现为dmp的自检无法通过。
在这里插入图片描述
stm32驱动mpu6050、mpu6500、mpu9250心得_第3张图片
会发现自检函数会一直报错
2.dmp不稳定。此处不稳定并不是指dmp解算出来的数值不稳定,而是dmp会容易受到外界因素的干扰,例如温度,气压等等。(无事实根据,个人经验猜测),因为我多次去往外地比赛,在家还好好工作的dmp到了比赛的城市就失效了,自检始终无法通过,最后不得不放弃,全程手动操控小车。

不使用dmp

那么mpu可以离开dmp工作吗?当然完全可以!我们做到代替dmp的滤波和姿态解算,我使用的是无人机飞控常使用的butterworth滤波,先将原始数据进行滤波,再进行姿态解算。
stm32驱动mpu6050、mpu6500、mpu9250心得_第4张图片
stm32驱动mpu6050、mpu6500、mpu9250心得_第5张图片
获取原始数据之后,进行滤波得到滤波后的角速度,再转换为角度制的值,这里得到的角速度数据是可以直接使用的。
butterworth滤波设计方法贴出大神:http://blog.csdn.net/u011992534/article/details/73743955

你可能感兴趣的:(stm32)