管理入口

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

0%
TI小车实战

08|人机交互与可观测性:按键、OLED、串口与告警

说明 MSPM0G35XX TI 小车如何通过按键、OLED、串口、LED、蜂鸣器和外部同步信号完成任务选择、状态呈现与诊断。

能跑不等于可维护。没有清晰的输入规则和运行观测,调试人员只能从车轮动作猜内部状态。当前工程用按键触发任务,用 OLED、串口、LED 和蜂鸣器分别承担状态、数据、心跳与事件反馈。

文档属性内容
文档编号TI-CAR-08
输入六个按键
本地输出OLED、蓝色 LED、蜂鸣器
数据输出串口诊断
协同输出外部运行状态 GPIO

1. 按键底层与消抖分层

Key_Read() 只读取 GPIO,并把低电平按下映射为 1~6 的键值。它不做消抖,也不决定某个按键启动什么任务。

Task_Key() 每 20 ms 运行,在应用层维护候选键、稳定键和连续样本数。只有候选值连续满足配置次数,才接受状态变化。这把“电气采样”和“交互语义”分开。

GPIO 电平 → 原始键值 → 连续样本消抖 → 模式命令

当前工程还包含不同编译配置下的按键映射。文章描述的是软件结构,不把某个调试键永久定义成产品交互协议。

2. 任务入口为什么先统一清理

启动新任务前,按键处理会调用 Task_StopAll(),清除上一任务的状态、控制历史与输出,再设置新模式。这样能避免:

  • 上一次 PID 积分带入新任务;
  • 上一次累计距离成为新原点;
  • 循迹阶段停留在旧状态;
  • 外部运行信号与实际状态不一致。

交互入口不是简单写一个模式编号,而是完成一次受控的状态迁移。

3. OLED 显示的是状态摘要

OLED 初始化成功后才登记显示任务。Display_App_ShowStatus() 根据编译开关和当前模式选择页面,可显示:

  • 当前 20 秒或 30 秒配置;
  • IDLE、ACC、RUN、DEC、WAIT 等阶段;
  • 左右距离与目标距离;
  • 左右目标 RPM 与实际 RPM;
  • 位置任务完成状态;
  • ICM42688 初始化、标定进度和 yaw 调试页。

OLED 适合现场快速判断,不适合承载全部高速数据。页面更新有独立周期,避免每个控制周期都刷新 I²C 屏幕。

4. 串口用于连续数据而非状态猜测

循迹模式下,Task_Serial() 周期调用 TrackMode_PrintSerial(),输出十项关键量:

  1. 原始循迹偏差;
  2. 滤波偏差;
  3. 偏差微分;
  4. 转向修正;
  5. 左目标 RPM;
  6. 左滤波实际 RPM;
  7. 左 PWM;
  8. 右目标 RPM;
  9. 右滤波实际 RPM;
  10. 右 PWM。

这些字段覆盖“感知—算法—目标—反馈—输出”整条链,适合导入串口绘图工具或表格进行时间对齐分析。

5. 阻塞串口是调度风险

当前 MyPrintf() 逐字节调用阻塞发送。数据量小、波特率足够时可能可用,但在非抢占式调度器中,大量格式化输出会推迟编码器、循迹和 PID 任务。

工程化改进方向是:

  • 固定诊断帧长度与字段版本;
  • 降低非关键输出频率;
  • 使用环形缓冲区和中断/DMA 异步发送;
  • 统计丢帧,而不是阻塞控制任务等待串口;
  • 发布版本可以关闭高频调试流。

6. LED 与蜂鸣器提供低成本反馈

LED 任务每 100 ms 翻转蓝灯,可用于确认主循环和任务调度仍在运行。它只能说明调度器仍有机会执行 LED 任务,不能证明控制算法正确。

蜂鸣器采用状态变量和 10 ms 周期任务生成脉冲与间隔,没有用长时间 Delay() 阻塞主循环。任务完成或按键反馈通过脉冲次数表达事件。

这种“状态机式蜂鸣”是非抢占式系统中更合适的写法:每次执行只推进一步,然后立即返回。

7. 外部同步信号

Task_SetExternalRunSignal() 用一个 GPIO 表示任务是否运行。任务开始后置为运行,统一停机时撤销;工程还提供仅模拟运行状态而不启动电机的联调入口。

外部同步信号属于系统接口,应明确:

  • 高低电平语义;
  • 上电默认状态;
  • 何时拉高;
  • 正常完成、人工中止和异常时何时拉低;
  • 两块板是否共地以及 IO 电平是否兼容。

代码确认了软件语义,电气兼容性仍需原理图与实测确认。

8. 可观测数据应分层

层级代表数据适合出口
硬件健康初始化成功、WHO_AM_I、错误计数OLED / 串口
调度健康心跳、任务耗时、超时次数LED / 串口
感知原始循迹、IMU 原始值串口
算法滤波偏差、微分、姿态有效性串口 / OLED 摘要
控制目标、实际、PWM、积分状态串口
任务模式、阶段、完成原因OLED / 蜂鸣 / 同步 GPIO

只输出最终 PWM,无法判断问题来自目标、反馈还是控制器。可观测性必须覆盖因果链。

9. 对外数据还缺什么

当前串口字段是无字段名的数值序列,适合临时调试,但企业化交付还应补充:

  1. 帧版本和时间戳。
  2. 运行模式与阶段编号。
  3. 有效位和错误码。
  4. 固定单位与缩放说明。
  5. 丢帧或发送拥塞计数。
  6. 与对应固件提交号绑定的数据字典。

这样日志才能被另一名成员、脚本或上位机稳定解释。

本篇总结

  • 按键底层只采样,应用层完成消抖、模式选择和受控状态迁移。
  • OLED 提供现场摘要,串口提供连续诊断,LED 和蜂鸣器提供低成本健康与事件提示。
  • 蜂鸣器使用非阻塞状态机;阻塞串口仍是合作式调度中的潜在周期风险。
  • 工程化可观测性应覆盖硬件、感知、算法、控制和任务层,并带版本、单位和错误状态。

上一篇:07|ICM42688 姿态模块

下一篇:09|应用层状态机

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