平衡车之mpu6050调试及问题总结

平衡车之mpu6050调试及问题总结_第1张图片

平衡车之mpu6050调试及问题总结_第2张图片


这里重点讲解AD0的作用,I2C通讯中从机是要有地址的,以区别多个从机。当AD0管脚接低电平的时候,从机地址是0x68。从MPU6050的寄存器中我们可以得到答案,MPU6050作为一个IIC从机设备的时候,有8位地址,高7位的地址是固定的,就是WHOAMI寄存器的默认——0x68,最低的一位是由AD0的连线决定的。
AD0接GND时候,高8位的最后一位是0 所以整个iic从几地址就是0x68
AD1接VCC时候, 高8位的最后一位是1 所以整个iic从几地址就是0x69
读取原始数据这个过程中一个很重要的思路就是一步一步,确保每步都对之后就很容易读出正确的数据



其实正点原子的和平衡车之家的程序都设置了INT平时为高电平 平衡车之家没有关闭中断,并且设置了INT引脚为B5 低电平触发中断。而正点原子的直接在mpu6050初始化的时候就关闭了中断
INT引脚触发中断设置:
在mpu6050.c中
#define DEFAULT_MPU_HZ (200)//外部中断时间200 改小时间变大
这个是fifo更新速率,而INT中断就是fifo更新的时候触发中断

i这里有两个inv_mpu.c文件两个参考链接:
https://developer.mbed.org/users/oprospero/code/MotionDriver_6_1/docs/tip/group__DRIVERS.html#gafd5ebff6b0179e1dce0b68c2272cae07

https://developer.mbed.org/users/oprospero/code/MotionDriver_6_1/docs/tip/group__DRIVERS.html#ga68ed20e6c9663cd7c50469329af8715f
介绍的比较好,对于我当时研究DMP库起了很大作用。






重点: 1.一直出现mpu_set_sensor complete .....问题的原因:
(1) 供电不稳定
(2)iic引脚接错了 sda和scl
(3)接mpu6050的杜邦线一定要短并且要可靠 用胶枪粘住避免松动

2.卡尔曼,互补滤波打印出来角度值变化很慢愿原因:
当这个获取角度函数是在main中的时候就会出现这种情况,当获取角度值放在5ms定是中断里面的时候角度值变化正常,,,,我估计原因是获取角度函数如果放在转函数while(1)中和printf一起时候,printf在发送数据时候耗时很长,导致mpu6050采集时间很慢,而放在定时器中断mpu6050就可以很稳定的时间进行实时采集。。。。。DMP不存在这个情况,放在主函数和printf共存的时候也可以正常显示角度。

你可能感兴趣的:(平衡车)