mpu6050 DMP 如何取消水平校准?

2019-08-14 01:43发布

将原子哥的MPU6050DMP成功移植到MINISTM32。每次输出的欧拉角数据都是被自动校准过的。每次初始化的时候,保持mpu6050某一状态,在这个状态的时候输出的欧拉角都为“0”。我想无论mpu6050处在何种状态,初始化完成后,当mpu6050处在水平位置时,输出的欧拉角都为“0”,不知该如何设置?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
25条回答
老书虫
2019-08-16 15:07
激动的小河马 发表于 2017-5-17 10:20
库的哪些被更改了呢?

问:楼主提供的无校验库的哪些地方被修改了呢?
答:
1.inv_mpu里面,run_self_test函数被更改1:原子的if(result==0x03)改成了无校验库的if(result==0x07),下面解释:
  首先找到这一句:result = mpu_run_self_test(gyro, accel);这个的意思是对陀螺仪和加计(加速度计)进行检查。
  跳到该函数,找到这里:
    accel_result = accel_self_test(accel, accel_st); //对加计进行自检,OK返回1,不OK返回0;
    gyro_result = gyro_self_test(gyro, gyro_st);     //对陀螺仪进行自检,OK返回1,不OK返回0;

    result = 0;
    if (!gyro_result)
        result |= 0x01;    //如果陀螺仪OK,result变成1;
    if (!accel_result)
        result |= 0x02;    //如果加计也OK,result变成3;

#ifdef AK89xx_SECONDARY
    compass_result = compass_self_test();
    if (!compass_result)
        result |= 0x04;    //如果磁力计也OK,result变成7;
【结论】因为MPU6050没有磁力计,所以result不可能为0x07,也就是说if必然失败,所以不会执行if里面的校正,也就是无校准。

2.inv_mpu里面,run_self_test函数下面的return被更改:return直接被注释掉,所以不会报错MPU6050 Error。
【结论】这种去掉校验的方法不可取,因为去掉校验之后,数据收敛的时间很长,而且不准。可以试试保存偏移量的办法实现以水平面为参考。

一周热门 更多>