最近学校正在举行电赛,我就去参加了。正好选的题目里面要用到mpu6050。我前前后后调试了很久才 调试出来,下面就来分享一下我调试的心得,希望对大家有所帮助。
硬件和程序:我用的板子是【正点原子】的stm32mini板,它给我的mpu6050我打不开,所以我就用串口通信的例程重新弄了一个程序。至于程序是怎么写的,我就说了,大家搜索一下,关于mpu6050的程序资料还是很多的。
我主要想说的是当你程序基本上没有问题的时候,但是却不读取出的数据确为0的情况。
MPU_Init() 这个函数是在mian函数里必须调用的函数,它是mpu6050的初始化,其中也包括mpu6050通信过程中所要用到的iic的初始化。这个函数成功初始化以后,我们才能使用下面的函数。
MPU_Get_Gyroscope(short *gx,short *gy,short *gz) gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号)
MPU_Get_Accelerometer(short *ax,short *ay,short *az) ax,ay,az:加速度x,y,z轴的原始读数(带符号)
MPU_Get_Temperature() 得到温度值返回值, 温度值(扩大了100倍)
这几个函数就是在MPU_Init()初始化成功以后,读取出mpu6050内部的数据,第二个函数和第三个函数就是mpu6050的陀螺仪和加速度的初始数据,一般来说没有什么用,因为我们后面要DMP去处理这些数据,就会返回我们需要的航向角,俯仰角,横滚角。第四个函数是获取温度,mpu6050传感器的功能设定上就有温度这个功能,通过这个函数就可以测定出来,不过是放大了一百倍。单位是摄氏度。
这是一个很重要的函数,它是DMP的初始化,一般情况下,只要这个函数初始化成功了,那么就能够输出航向角,俯仰角,横滚角,不过大多数情况下,这个函数可能会有各种各样的问题。
这也是一个很重要的函数,其功能就是读取航向角,俯仰角,横滚角的值,前面的初始化函数都成功的话,这个函数一般不会报错的。
MPU_Init(),mpu_dmp_init()这两个函数都是需要在mian函数里初始化的,他们也有一个共同点:他们返回的函数值都是0。
while(MPU_Init())
{
printf("mpu error");
delay_ms(200);
}
while(mpu_dmp_init())
{
printf("mpu dmp error\n");
delay_ms(200);
}
这样使用就能够确保初始化的成功。
1.首先要查看原始数据有没有,如果连原始数据都没有的话,可能是硬件的问题,焊接mpu6050的时候烧坏了板子。如果有原始数据的话,那就是mpu_dmp_init()初始话出错了。
2.mpu_dmp_init()可能会出现各种各样的错误,我来说下我遇到。首先这个函数初始化的时候,你要尽量放平mpu6050,这个函数内部有个校准的过程,所以要放平。其次,可以先通会电,再来初始化,就是加个延时,我看网上好多帖子说8s的,我也不太清楚为什么。然后还不行的话,你可能要换传感器或者杜邦线。我自己就是调试了半天都不行,最后换了一个传感器和杜邦线,然后一会就调试成功了,也成功输出角度了。
一起交流,一起进步。