管理入口

请输入管理密码。此密码门槛仅用于前端原型,不提供真正的仓库权限保护。

0%
TI小车实战

07|ICM42688 姿态模块:驱动、标定与 Fusion 融合

按底层驱动、数据处理和应用层拆解 MSPM0G35XX 工程中的 ICM42688,并明确其当前默认关闭、尚待整车上板验收的证据边界。

ICM42688 同时提供三轴加速度和三轴角速度。当前工程已经包含寄存器驱动、MSPM0G35XX I²C 适配、静止标定、坐标映射和 Fusion 姿态融合,但默认构建没有启用它。

文档属性内容
文档编号TI-CAR-07
设备ICM42688 六轴 IMU
BSPBSP/Src/ICM42688.c
应用层APP/Src/ICM42688_App.c
当前状态ICM42688_ENABLE = 0U,默认不初始化、不登记任务
⚠️ Warning
本篇介绍的是“代码已经实现的接入链”,不是“当前整车已经依赖 IMU 完成任务”。没有提供本次硬件实测日志、静态噪声统计或动态姿态对照,因此不能声称精度与长期稳定性已验收。

1. 三层结构

ICM42688 寄存器驱动
↓ 原始六轴 / 量程换算
MSPM0G35XX I²C 与中断适配
↓ 采样状态
坐标映射、静止标定、Fusion
↓
roll / pitch / yaw 与诊断状态

BSP 不直接依赖某一辆车的姿态用途,而是通过传输函数和延时函数访问总线。应用层提供 MSPM0G35XX 的 I²C 实现,并把传感器坐标变换到车体坐标。

2. 底层驱动做了什么

icm42688_init() 的关键步骤为:

  1. 校验设备、HAL、地址、量程、输出速率与超时参数。
  2. 写设备软复位。
  3. 读取 WHO_AM_I 并核对期望值。
  4. 配置加速度计和陀螺仪量程、输出速率。
  5. 按配置启用 INT2 数据就绪。
  6. 打开加速度计与陀螺仪低噪声模式。
  7. 等待电源状态稳定后标记初始化成功。

任一步失败都会返回明确状态,而不是继续产生看似正常的零数据。ICM42688_AppState_t 还保存最近错误、错误次数、样本数和中断次数。

3. I²C 适配如何控制失败

ICM42688_App_Transfer() 使用 MSPM0G35XX DriverLib 完成寄存器写入和读取,并检查 NACK、仲裁丢失、总线异常与超时。接收长度与参数也在发起传输前验证。

它采用轮询等待,但每条等待路径都有超时。对于非抢占式调度器,这比无限等待安全;不过一次超时仍会占用当前任务执行窗口,因此启用后应实测最坏耗时是否影响 5 ms 循迹和 10 ms 控制任务。

4. 原始数据如何换成物理量

icm42688_read_raw() 连续读取 12 字节,并按大端格式解码为三轴加速度和三轴角速度。icm42688_scale_sample() 再根据当前量程换成 g 和 °/s。

驱动默认配置在代码中为:

项目当前默认
I²C 地址AD0 低地址
加速度量程±4 g
陀螺仪量程±500 °/s
传感器输出速率两者 1 kHz
I²C 事务超时10 ms
INT2 数据就绪开启

传感器内部输出速率为 1 kHz,不代表应用层以 1 kHz 运行。当前 IMU 任务周期配置为 20 ms,即应用更新口径为 50 Hz;两者必须区分。

5. 传感器坐标到车体坐标

安装方向会改变三轴含义。ICM42688_App_MapToBody() 通过轴选择和正负号宏,把传感器 X/Y/Z 映射为车体前、左、上三个方向。

传感器坐标 ──轴交换/符号修正──> 车体坐标

坐标映射错误时,静止加速度方向、转弯时 yaw 符号和俯仰/横滚都会混乱。不要靠修改融合参数补偿安装方向错误。

6. 上电静止标定

姿态尚未有效时,应用先判断设备是否静止:

  • 三轴角速度都低于配置阈值。
  • 加速度模长落在接近 1 g 的配置区间。

只有连续满足静止条件的样本才参与陀螺仪零偏平均;一旦运动,累计清零并重新开始。当前标定时长由 3 秒和 20 ms 采样周期共同换算为样本数。

这是一种启动零偏标定,不等同于完整温漂标定。若环境温度变化明显,仍需额外的长期测试与补偿模型。

7. Fusion 如何得到姿态

代码引入 xioTechnologies Fusion 的 AHRS 与 Bias 模块。标定完成后,每次更新:

  1. 用 FusionBiasUpdate() 估计并扣除陀螺仪偏置。
  2. 按实际 tick 间隔设置融合采样周期。
  3. 调用无磁力计更新,将陀螺仪与加速度计融合。
  4. 把四元数转换为 roll、pitch、yaw。

没有磁力计时,roll 和 pitch 可利用重力方向约束,yaw 缺少绝对航向参考,会随陀螺零偏逐渐漂移。因此它适合短时姿态观测,但不能天然替代绝对航向传感器。

8. 中断与周期任务怎样配合

ICM42688 的 GPIO 中断只设置 Flag_IMU_Ready 并累计中断次数。Task_IMU() 周期调用 ICM42688_App_Update(),读取中断状态、原始六轴、物理量和姿态。

即使没有观察到数据就绪标志,当前更新函数仍会尝试读取样本。启用前应验证:

  • INT2 电平与边沿配置是否匹配硬件。
  • 中断计数与应用采样计数的关系。
  • I²C 超时和错误计数是否增长。
  • 任务周期内的实际执行时间。

9. 如何真正启用

代码层需要同时满足:

  1. empty.syscfg 中 I²C 与 IMU GPIO 配置正确。
  2. ICM42688_ENABLE 改为 1U。
  3. Task_Init() 完成 ICM 初始化并登记 IMU 任务。
  4. Interrupt_Init() 打开对应数据就绪中断。
  5. OLED 或串口观察初始化、样本、错误与姿态状态。
  6. 最后才让控制应用消费姿态值。

如果只把宏打开就直接把 yaw 接入转向闭环,风险很高。应先完成静态、缓慢旋转、往返转动和长时间漂移测试。

10. 当前证据分级

结论证据状态
ICM42688 BSP 文件与寄存器流程存在已由代码确认
SysConfig 中存在 IMU I²C/GPIO 实例已由配置确认
应用层包含标定、Fusion 和状态对象已由代码确认
默认构建执行 IMU 任务否,启用宏为 0
当前循迹控制使用 yaw否,未发现应用消费链
当前硬件精度与漂移指标待实测确认

本篇总结

  • ICM42688 已形成“寄存器驱动—I²C 适配—量程换算—标定—Fusion”的完整代码结构。
  • 应用层区分原始值、物理量、姿态有效性和错误状态,并提供车体坐标映射。
  • 当前模块默认关闭,也没有进入循迹控制链;它是待验证、可接入能力。
  • 无磁力计融合的 yaw 会漂移,启用前必须建立静态、动态和长期实测记录。

上一篇:06|五路循迹模块

下一篇:08|人机交互与可观测性

输入标题、正文关键词或标签,查找文章。