stm32F1x上调试mpu6050的心得记录

  最近学校正在举行电赛,我就去参加了。正好选的题目里面要用到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传感器的功能设定上就有温度这个功能,通过这个函数就可以测定出来,不过是放大了一百倍。单位是摄氏度。

第二点:mpu_dmp_init()   DMP的初始化 ()

这是一个很重要的函数,它是DMP的初始化,一般情况下,只要这个函数初始化成功了,那么就能够输出航向角,俯仰角,横滚角,不过大多数情况下,这个函数可能会有各种各样的问题。

第三点:mpu_dmp_get_data(&pitch,&roll,&yaw)

这也是一个很重要的函数,其功能就是读取航向角,俯仰角,横滚角的值,前面的初始化函数都成功的话,这个函数一般不会报错的。

第四点:初始化函数在mian中的使用

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);
}

这样使用就能够确保初始化的成功。

第五点:   当你的程序都写好了,也烧录进stm32里面的时候,你可能会发现航向角,俯仰角,横滚角的输出为0。

1.首先要查看原始数据有没有,如果连原始数据都没有的话,可能是硬件的问题,焊接mpu6050的时候烧坏了板子。如果有原始数据的话,那就是mpu_dmp_init()初始话出错了。

2.mpu_dmp_init()可能会出现各种各样的错误,我来说下我遇到。首先这个函数初始化的时候,你要尽量放平mpu6050,这个函数内部有个校准的过程,所以要放平。其次,可以先通会电,再来初始化,就是加个延时,我看网上好多帖子说8s的,我也不太清楚为什么。然后还不行的话,你可能要换传感器或者杜邦线。我自己就是调试了半天都不行,最后换了一个传感器和杜邦线,然后一会就调试成功了,也成功输出角度了。

 

 

一起交流,一起进步。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值