MPU6050 Motion Driver 6.12自检校准偏差保存

MPU6050或者MPU9250的移植就没啥了,主要是提供IIC读写函数,提供时间戳,修改宏。

如果有必要,根据PCB的方向和实际安装的方向修改旋转矩阵。这个官方都有提供手册指导的。

主要是想说关于MPU6050 motion driver6.12版本 DMP提供了一个自检和校准的功能。run_self_test();

if(mpu_run_self_test(gyro, accel)==0x07)//自检芯片好坏 读取原始MPU6050值

上面这个函数主要通过芯片的自激响应然后去检测芯片的输出,在合理范围内,则器件正常。

(前提是你的陀螺仪的旋转矩阵设置对了,不然也过不了)

陀螺仪正常|0x01  加速度计正常|0x02 磁力计默认没有|0x04,所以0x07是这么来的

for(i = 0; i<3; i++) 
		      	{
							gyro[i] = (long)(gyro[i] * 32.8f); 
							accel[i] *= 2048.f; 
							accel[i] = accel[i] >> 16;
							gyro[i] = (long)(gyro[i] >> 16);
							parameter_array[i+0]=gyro[i];
							check[i+0]=gyro[i];
							parameter_array[i+3]=accel[i];
							check[i+3]=accel[i];
			      }

上面这个就是自激响应时保存的加速计陀螺仪零偏,6.12版本已经改成Q16格式了,所以数据转换。

通过上面的过程已经完成了偏差获取,接下来就是需要保存到陀螺仪和加速度计的偏差寄存器,这样DMP在调用的时候就能自动减去零偏。

                        mpu_set_gyro_bias_reg(gyro);
                        mpu_set_accel_bias_6050_reg(accel);

又因为DMP重新上电之后,偏差寄存器是会RESET的,所以,我们需要保存到本地FLASH,这一步就是产线校准了,

出场的时候执行这个过程然后保存到Flash,然后后面上电读取偏差写入到偏差寄存器,就能每次上电以绝对位置为参考了。

另外,DMP有陀螺仪的动态校准,如果使能了,陀螺仪即使不校准零偏,过了8s之后,也能自动校准零偏,这是它自己内部的校准算法。如果我们手动校准了,就不需要8s的过程了,上电自动归零。

另外DMP还提供很多好玩的接口,比如计步器,计步时间,点击双击,敲击方向,以及为安卓设备提供方向锁定,也就是你看视频时候锁定的方向,以及横屏功能的底层由来。

除此之外,DMP  ODR只有200HZ,但是它的航向角度漂移的很慢,稳态角度性能很好,动态性能类似卡尔曼。

也尝试在DMP固件下做三维方向的初步惯导,如果应用于步频定位还行,因为步频比较特殊,其它场合需要解决零速匀速检测。

如果需要IMU模块 或者IMU方案定制 可以参考淘宝https://item.taobao.com/item.htm?spm=a230r.1.14.220.3fbce2151EzKi0&id=618941554431&ns=1&abbucket=3#detail

致敬开源

        --------骚年追梦

 

 

 

 

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值