前九篇分别拆解了调度、执行、反馈、控制、循迹、IMU、交互和状态机。本篇回到整车,沿一次循迹任务的时间顺序说明各模块如何协作,并给出分层联调与交付方法。
| 文档属性 | 内容 |
|---|---|
| 文档编号 | TI-CAR-10 |
| 视角 | 整体时序 / 系统集成 |
| 当前主闭环 | 编码器 + 五路循迹 + 双速度环 + TB6612 |
| 可选模块 | ICM42688,默认关闭且未进入当前转向闭环 |
1. 上电:先建立安全基线
MSPM0G35XX 完成 SysConfig 初始化后,Task_Init() 依次建立各模块:
- 启动电机 PWM 与 QEI,先用 STBY 和零 PWM 建立安全输出。
- 初始化串口与 OLED。
- 初始化 PID 参数并执行统一停止。
- 按编译开关决定是否初始化 ICM42688。
- 初始化中断。
- 把 Encoder、Tracker、PID、Buzzer、Serial、LED、OLED、Key 等加入任务表。
此时系统处于空闲状态,任务调度已经运行,但电机业务尚未开始。
2. 启动:按键把系统带入已知状态
Key 任务对按键消抖后,选择对应配置。启动流程先停止旧任务,再:
- 选择 20 秒或 30 秒参数;
- 清编码器累计与距离;
- 清循迹滤波和阶段;
- 清速度斜坡与 PID 历史;
- 置位运行模式;
- 允许 TB6612;
- 拉高外部运行信号。
这一步的核心不是“开始转”,而是让所有模块在同一个任务代次上对齐。
3. 感知:两个周期任务更新事实
Tracker 任务每 5 ms 读取五路 GPIO,得到黑线图案与位置偏差,并根据距离和终点图案推进循迹阶段。
Encoder 任务每 10 ms 读取 TIMG8/TIMG9 QEI,用实际经过时间计算左右 RPM,再更新左右累计距离。
环境黑线 ─→ 五路循迹 ─→ 偏差/终点条件车轮运动 ─→ 左右编码器 → RPM/距离感知层只更新“当前事实”,不直接决定 PWM。
4. 决策:状态机生成基础目标
TrackMode 根据当前配置和阶段生成左右基础速度:
- 起步时按斜坡从零增加;
- 巡航时使用配置速度;
- 接近目标距离时逐步限速;
- 到达目标距离后低速等待终点图案;
- 完成图案条件后进入最终停止阶段。
同时,五路偏差经过低通与微分,生成受阶段限幅的转向修正。
阶段 + 距离 → 左右基础 RPM循迹偏差 → 转向修正 RPM两者合成 → 左右最终目标 RPM5. 控制:每个车轮独立闭环
PID 任务读取左右目标和编码器实际 RPM。实际值先经过一阶低通,再进入带前馈、抗饱和和零速复位的速度 PID。
左右控制器分别输出有符号 PWM 命令。Load_Motor_PWM() 把它们交给 Motor BSP,后者完成限幅、机械极性修正、方向 GPIO 和 PWM 比较值设置,最终由 TB6612 驱动电机。
左目标 / 左实际 → 左速度环 → 左 PWM ┐ ├→ TB6612 → 双轮运动右目标 / 右实际 → 右速度环 → 右 PWM ┘车轮运动又被编码器测量,闭环由此持续运行。
6. 观测:每层都留下可解释数据
任务运行期间:
- OLED 显示模式、阶段、距离、目标和实际速度。
- 串口输出循迹原始值、滤波值、微分、转向、左右目标、实际和 PWM。
- LED 提供调度心跳。
- 蜂鸣器反馈按键与完成事件。
- 外部同步 GPIO 告知其他板当前是否运行。
这些出口不是装饰。它们让调试者能够判断故障属于传感、状态、控制还是执行层。
7. 完成:条件成立后统一退出
任务不是检测到一次图案就立即断电。状态机先依据累计距离进入低速阶段,再连续确认终点图案,并按配置完成最后阶段。随后 PID 任务观察到停止请求,调用统一停机并触发完成蜂鸣。
统一退出需要:
- 目标速度回到零。
- 左右实际速度满足停稳条件。
- 清模式与阶段。
- 清控制器和目标规划状态。
- PWM 归零,按路径禁止驱动。
- 撤销外部运行信号。
- 保留必要的完成或错误信息供观察。
8. ICM42688 在整车中的正确位置
当前整车主闭环不消费 ICM42688。若后续要用 yaw 辅助直线或转弯,应把它作为新的感知输入接入应用与控制层,而不是从 IMU 驱动直接写电机。
推荐链路是:
ICM42688 → 标定/Fusion → 姿态有效性与 yaw ↓ 航向控制器或融合策略 ↓ 左右目标 RPM 修正接入前必须定义姿态无效、I²C 超时和 yaw 漂移时的降级策略。默认关闭模块不能成为隐式的安全依赖。
9. 分层联调顺序
| 阶段 | 只开放的能力 | 主要证据 |
|---|---|---|
| A | 任务时基、LED、按键 | 周期和消抖日志 |
| B | TB6612 单轮低输出 | 方向、STBY、PWM 波形 |
| C | 编码器 | 正负计数、RPM、距离 |
| D | 单轮速度环 | 目标、实际、PWM 曲线 |
| E | 双轮速度与位置 | 两轮误差和停稳条件 |
| F | 五路循迹低速 | 原始/滤波偏差和转向 |
| G | 阶段状态机 | 距离、终点图案、阶段转移 |
| H | 完整任务 | 多次重复结果与异常退出 |
| I | 可选 ICM42688 | 初始化、标定、漂移和任务耗时 |
跳过前层直接整车高速运行,会让一个底层极性错误表现成“PID 难调”,也会放大安全风险。
10. 交付包应包含什么
一套可复现的小车工程不只包含源码,还应包含:
- 固件提交号、构建工具与 SysConfig 版本。
- 主控统一口径 MSPM0G35XX 和对应硬件版本。
- 引脚与外设实例表。
- 模块启用宏及构建配置。
- 任务周期、优先级与最坏执行时间记录。
- 传感器与编码器标定原始数据。
- 控制参数、单位、适用负载和测试条件。
- 正常完成、人工中止和错误退出日志。
- 上电前检查、架空轮测试和物理急停说明。
- 已验证、仅代码存在、待实测三类证据清单。
11. 当前系统的证据边界
| 能力 | 当前结论 |
|---|---|
| 非抢占式周期调度 | 已由代码确认 |
| TB6612 执行链 | 已由代码接口确认 |
| TIMG8/TIMG9 QEI | 已由 SysConfig 与代码确认 |
| 五路循迹、滤波 PD、阶段状态机 | 已由代码确认 |
| 左右速度环与位置外环 | 已由代码确认 |
| ICM42688 驱动与 Fusion | 已由代码确认,但默认关闭 |
| 整车在特定赛道的重复精度 | 待实测数据确认 |
| 电源、电流、温升和极限负载 | 待硬件资料与实测确认 |
本篇总结
- 一次完整任务按“初始化—启动—感知—决策—控制—观测—完成”推进。
- 非抢占式调度器提供时间骨架,状态机提供业务顺序,模块通过目标、反馈和状态接口协作。
- TB6612、编码器、循迹和速度环构成当前主闭环;ICM42688 是默认关闭的可选感知链。
- 可靠交付必须带配置、参数、日志和证据等级,不能只交一份能编译的源码。
上一篇:09|应用层状态机
返回专题起点:01|TI 小车总览