2021-10-07

关于MPU6050每次上电以目前角度为0度基准的解决方法

MPU6050每次上电以目前的角度为0度基准,在做平衡车的时候会出现无法测出真实角度的问题,测出的角度都是相对的角度。在这里插入图片描述
这里是一个自检程序,当然,细心的人如果将它打开后会发现这里面实际也是一个校零程序,矫正三个方向的陀螺仪的零点漂移,第二个就是纠正重力方向,也就是开机时刻的加速度方向(通俗一点就是我们认为的水平方向),废话不多说,让我们打开run_self_test();看看里面是什么东西?
在这里插入图片描述
大家看到了吗??
result = mpu_run_self_test(gyro, accel); 用于获得当前各轴的角速度和加速度,并且反馈芯片的状态。 mpu_get_gyro_sens(&sens); 这个就不用说了,用于获得角速度的计算比例;好戏在下头。
dmp_set_gyro_bias(gyro); 这个把开机当前的角速度计算完成后送走了,送到哪里去了呢??当然是DMP寄存器去了,为什么呐??它开机保存这个开机时刻的角速度干嘛呢??

我们知道,对于运动,我们都要为其设立一个参考系,因为运动都是相对的,陀螺仪输出了值,这个值是相对与谁呢??我们在地球上,相对参考系当然是地面。假如我们在动车上做实验,陀螺仪输出的值是相对与谁呢??当然是动车!!! 那为什么是动车呢?那我就告诉你,因为开机陀螺仪初始化的时候陀螺仪是相对火车静止的,故开机对谁静止,陀螺仪输出的值就是相对于谁的运动速率。

回到主题,DMP自检时刻保存了开机时的陀螺仪速率,其实就是让陀螺仪检测到的速率去除开机时刻的速率,自然得到了陀螺仪与开机时刻参考系的相对速率,也就是我们需要的有效值。这也就是抑制温漂的原理。

再来看看加速度重心的校准程序,与陀螺仪一样,均是修正相对参考系的速率和位置。但是加速度传感器不一样,只要传感器不动,其重力加速度方向是不变的,默认的是-Y是重力加速的的正方向。如果在模块非水平情况下进行了重力校准,那么-Y就不是重力方向了,为了得到无论模块处于什么状态是都需要—y是重力的正方向,我们就有这样的一个高大上的办法。那就是“不要对重力进行校准”。

改掉源代码就是在使用accel_sens前加一行: accel_sens=0;使其重力校准失效!!!即可!!!
在这里插入图片描述
经修改后,模块的初始方位不再收开机时刻模块位置的影响。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值