为 MPU6050 DMP 处理设置俯仰和滚转的初始值

时间:2021-02-22 23:08:51

标签: mpu6050 imu dmp

我想处理 MPU6050 断开连接并重置的情况。不幸的是,在重新初始化后,MPU6050 将俯仰和滚转值显示为 0,并在大约 1-2 秒后以正确的值稳定下来。我想通过在重置前写入最后读取的值来提示 DMP。它有什么接口吗? 顺便说一句,无论我将 LPF 配置为 5 还是 188 - “问题”仍然存在。

1 个答案:

答案 0 :(得分:0)

解决方案

尝试记录从 D_0_192 开始的 16 字节内存(在 inv_mpu_dmp_motion_driver.cmotion_driver_6.12 中定义)。

unsigned short buf[16];
mpu_read_mem(D_0_192, 16, buf);
// your chosen method of logging this buffer

mpu_set_dmp_state(1) 之后不久,我的看起来像这样:

3fffdfeb 003eb3b6 000d2278 00002f3c

在稳定 15 秒后像这样:

1e246556 386e559d 01b407b2 004d6ad9

如果我使用 MPU6050 的设备颠倒启动,读数稳定需要大约这么长时间。

读数稳定后,将该值记录为常数,并在 DMP 设置发生时将其写回同一位置:

mpu_write_mem(D_0_192, 16, buf);

方法

我在 inv_mpu_dmp_motion_driver.c 中记录了一些 DMP 提到但未引用/未记录的寄存器的内容,认为它们可能在某处公开了这部分 DMP 状态。我是在致电 mpu_set_dmp_state(1) 后这样做的。

我发现许多值在 DMP 运行时会发生变化。 D_0_192,我认为它是与态度相对应的内部状态,可以通过其缓慢的松弛时间来识别。我没有花时间解释内容。我只是复制了缓冲区并观察到了预期的结果——DMP fifo 的内容从记录的姿态开始。

免责声明

这是没有记录的,可能是非常错误的,而且肯定很脆弱(除了 motion_driver_6.12 中包含的 DMP 固件 blob 之外,未经任何测试)。使用风险自负。