2019-08-14 01:43发布
thebest 发表于 2016-6-17 12:13 我今天也用了楼主给出的代码,也一直过不了初始化。硬件肯定是没问题的,用其他的程序都能读出数据。打断 ...
激动的小河马 发表于 2017-5-17 10:20 库的哪些被更改了呢?
老书虫 发表于 2017-8-25 15:19 问:楼主提供的无校验库的哪些地方被修改了呢? 答: 1.inv_mpu里面,run_self_test函数被更改1:原子的i ...
最多设置5个标签!
我已经成功了,只把int里面几个变量赋0就好了,不过这样有个现象就是初始化过程中如果晃动,那数值就要很长一段时间来变到正确值(就是慢慢减下来),dmp初始化里的自检函数加一句accel_sens=0就好了。 谁能解答下我描述的这个现象。
dmp_set_gyro_bias(gyro);
accel_sens=0;
accel[0] *= accel_sens;
库的哪些被更改了呢?
问:楼主提供的无校验库的哪些地方被修改了呢?
答:
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。
【结论】这种去掉校验的方法不可取,因为去掉校验之后,数据收敛的时间很长,而且不准。可以试试保存偏移量的办法实现以水平面为参考。
谢谢了,我是直接屏蔽了磁场校准 现象是直接复位后的位置就是0误差面,存在的问题是只有在6050放在水平时才可进行其他实验,有点麻烦,这样感觉不够完美,目前还没想到其他方法。
一周热门 更多>