管理入口

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

0%
TI小车实战

10|整车协作:一次任务如何从启动走到完成

把 MSPM0G35XX、非抢占式调度器、TB6612、编码器、五路循迹、控制器和交互模块重新组合成完整任务时序。

前九篇分别拆解了调度、执行、反馈、控制、循迹、IMU、交互和状态机。本篇回到整车,沿一次循迹任务的时间顺序说明各模块如何协作,并给出分层联调与交付方法。

文档属性内容
文档编号TI-CAR-10
视角整体时序 / 系统集成
当前主闭环编码器 + 五路循迹 + 双速度环 + TB6612
可选模块ICM42688,默认关闭且未进入当前转向闭环

1. 上电:先建立安全基线

MSPM0G35XX 完成 SysConfig 初始化后,Task_Init() 依次建立各模块:

  1. 启动电机 PWM 与 QEI,先用 STBY 和零 PWM 建立安全输出。
  2. 初始化串口与 OLED。
  3. 初始化 PID 参数并执行统一停止。
  4. 按编译开关决定是否初始化 ICM42688。
  5. 初始化中断。
  6. 把 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
两者合成 → 左右最终目标 RPM

5. 控制:每个车轮独立闭环

PID 任务读取左右目标和编码器实际 RPM。实际值先经过一阶低通,再进入带前馈、抗饱和和零速复位的速度 PID。

左右控制器分别输出有符号 PWM 命令。Load_Motor_PWM() 把它们交给 Motor BSP,后者完成限幅、机械极性修正、方向 GPIO 和 PWM 比较值设置,最终由 TB6612 驱动电机。

左目标 / 左实际 → 左速度环 → 左 PWM ┐
├→ TB6612 → 双轮运动
右目标 / 右实际 → 右速度环 → 右 PWM ┘

车轮运动又被编码器测量,闭环由此持续运行。

6. 观测:每层都留下可解释数据

任务运行期间:

  • OLED 显示模式、阶段、距离、目标和实际速度。
  • 串口输出循迹原始值、滤波值、微分、转向、左右目标、实际和 PWM。
  • LED 提供调度心跳。
  • 蜂鸣器反馈按键与完成事件。
  • 外部同步 GPIO 告知其他板当前是否运行。

这些出口不是装饰。它们让调试者能够判断故障属于传感、状态、控制还是执行层。

7. 完成:条件成立后统一退出

任务不是检测到一次图案就立即断电。状态机先依据累计距离进入低速阶段,再连续确认终点图案,并按配置完成最后阶段。随后 PID 任务观察到停止请求,调用统一停机并触发完成蜂鸣。

统一退出需要:

  1. 目标速度回到零。
  2. 左右实际速度满足停稳条件。
  3. 清模式与阶段。
  4. 清控制器和目标规划状态。
  5. PWM 归零,按路径禁止驱动。
  6. 撤销外部运行信号。
  7. 保留必要的完成或错误信息供观察。

8. ICM42688 在整车中的正确位置

当前整车主闭环不消费 ICM42688。若后续要用 yaw 辅助直线或转弯,应把它作为新的感知输入接入应用与控制层,而不是从 IMU 驱动直接写电机。

推荐链路是:

ICM42688 → 标定/Fusion → 姿态有效性与 yaw
↓
航向控制器或融合策略
↓
左右目标 RPM 修正

接入前必须定义姿态无效、I²C 超时和 yaw 漂移时的降级策略。默认关闭模块不能成为隐式的安全依赖。

9. 分层联调顺序

阶段只开放的能力主要证据
A任务时基、LED、按键周期和消抖日志
BTB6612 单轮低输出方向、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 小车总览

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