我想处理 MPU6050 断开连接并重置的情况。不幸的是,在重新初始化后,MPU6050 将俯仰和滚转值显示为 0,并在大约 1-2 秒后以正确的值稳定下来。我想通过在重置前写入最后读取的值来提示 DMP。它有什么接口吗? 顺便说一句,无论我将 LPF 配置为 5 还是 188 - “问题”仍然存在。
答案 0 :(得分:0)
尝试记录从 D_0_192
开始的 16 字节内存(在 inv_mpu_dmp_motion_driver.c
的 motion_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 之外,未经任何测试)。使用风险自负。