管理入口

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

0%
TI小车实战

01|TI 小车总览:模块、能力与运行主线

从整车任务、软硬件模块和非抢占式调度主线认识 MSPM0G35XX TI 小车,并建立后续阅读地图。

本专题不再按工程文件逐个介绍,而是按“整体—部分—整体”组织:先知道整车有什么、能做什么、如何运行;再深入每个模块的底层驱动、数据处理和应用接口;最后把所有模块放回一次完整任务中。

文档属性内容
文档编号TI-CAR-01
文档类型系统总览 / 专题入口
面向读者已接触 GPIO、PWM 和 C 语言的新成员
主控口径全系列统一称为 MSPM0G35XX
代码基线当前工程 TI_CAR_test1_6.7
❗ Important
本文依据当前源码与 SysConfig 配置说明系统能力。除源码注释明确记录的项目事实外,不把代码存在等同于已经上板验收;电压、电流、负载能力和实测精度仍应以硬件资料与测量记录为准。

1. 这辆小车由什么组成

整车采用双轮差速结构。MSPM0G35XX 读取编码器与循迹传感器,生成左右轮目标速度,经速度闭环得到 PWM,再由 TB6612 驱动左右电机。按键负责选择任务,OLED、串口、LED 和蜂鸣器负责把内部状态暴露给调试人员。

模块底层接口数据处理应用层用途当前证据
TB6612 电机驱动GPIO 方向、双通道 PWM、STBY极性统一、幅值限幅左右轮执行已由代码确认
左右编码器TIMG8/TIMG9 硬件 QEI差分计数、RPM、累计距离速度与位置反馈已由配置和代码确认
五路循迹GPIO 采样黑线解码、加权偏差、低通与微分差速转向、终点识别已由代码确认
ICM42688I²C、数据就绪中断量程换算、静止标定、Fusion 融合姿态观测接口驱动和应用代码已确认,默认关闭
人机交互按键、OLED、LED、蜂鸣器、串口消抖、格式化、节拍控制任务选择与诊断已由代码确认
外部同步GPIO 运行信号启停状态映射与外部板协同已由代码确认

2. 它实现了什么

当前主流程具备三类核心能力:

  1. 根据左右轮编码器完成速度闭环,并将控制量输出到 TB6612。
  2. 根据累计脉冲完成相对距离控制,并在接近目标时降速、停稳。
  3. 根据五路循迹偏差修正左右轮目标速度,按加速、巡航、减速和终点阶段推进任务。

ICM42688 模块已经形成从寄存器驱动到姿态融合的代码链,但 ICM42688_ENABLE 当前为 0U。因此它应被理解为“可接入能力”,不是当前默认循迹任务的必需输入。

3. 软件为什么围绕调度器组织

main() 完成 SysConfig 初始化与 Task_Init() 后,只在无限循环中反复调用 Task_Start(Sys_GetTick)。任务调度器检查每个任务是否到期,到期后按优先级顺序直接调用任务函数。

SysTick 递增系统时基
↓
主循环调用 Task_Start
↓
检查 Encoder / Tracker / PID / Key / OLED 等任务
↓
到期任务依次运行并返回
↓
主循环再次扫描

这是非抢占式,也称合作式调度:一个任务运行时,普通任务不会在中途抢走 CPU。它的优点是调用关系清晰、共享状态简单;代价是任何阻塞或超时过长的任务都会推迟后续任务。

ℹ️ Note
SysTick 中断仍可更新时基和标志位。“非抢占式”描述的是普通任务之间不互相抢占,不代表工程完全没有中断。

4. 一次控制循环如何流动

以循迹任务为例,信息沿着固定方向传递:

五路 GPIO → 线位置偏差 → 低通/微分 → 转向修正
编码器 QEI → 左右轮 RPM ───────────┐
任务状态机 → 基础目标速度 ─────────┼→ 左右轮目标 RPM
↓
速度 PID + 前馈
↓
PWM/方向 → TB6612
↓
电机

传感器先回答“车现在怎样”,应用层再回答“车应该怎样”,控制器计算“需要输出多少”,执行层最后把数值变成电气信号。调试时也应沿这条链逐层定位,不能看到小车跑偏就直接修改 PWM。

5. APP 与 BSP 的职责边界

BSP 面向外设和芯片寄存器,负责“如何读写”:例如 QEI 计数、PWM 比较值、I²C 传输和 GPIO 状态。APP 面向整车业务,负责“何时做、做什么”:例如启动 20 秒模式、计算目标速度、判断终点和统一停机。

一个可维护的调用方向应保持为:

任务与状态机(APP)
↓
控制、规划与数据处理(APP/BSP 算法模块)
↓
设备驱动(BSP)
↓
DriverLib / MSPM0G35XX 外设

如果底层驱动直接决定任务阶段,或应用层到处写寄存器,模块就会互相绑定。后续文章始终按“底层驱动—数据处理—应用层”拆解,正是为了守住这个边界。

6. 专题阅读地图

篇次主题需要建立的工程认知
02非抢占式调度与软件分层周期、优先级、最坏执行时间
03TB6612 电机驱动方向、PWM、STBY 与安全输出
04编码器反馈QEI、RPM、距离与误差来源
05速度环与位置环滤波、前馈 PID、斜坡和停稳
06五路循迹采样、偏差、滤波 PD 与阶段判断
07ICM42688I²C 驱动、标定、Fusion 与启用边界
08人机交互与观测按键、OLED、串口和诊断数据
09应用状态机模式切换、任务阶段、统一停机
10整车协作从按键启动到任务完成的完整时序

7. 阅读代码时使用三条证据线

  • 配置线:empty.syscfg 决定外设实例、引脚复用和生成代码。
  • 调用线:初始化、Task_Add() 与任务函数决定模块是否进入运行主线。
  • 状态线:共享状态、有效标志和错误计数决定数据是否可被上层使用。

只找到一个 .c 文件,只能说明“有这段实现”。只有配置存在、初始化成功、任务被登记、结果被应用层消费,才能说明模块真正进入当前运行链。

本篇总结

  • 整车由执行、反馈、感知、控制、交互和同步模块组成,主控统一称为 MSPM0G35XX。
  • 软件核心是基于系统时基的非抢占式任务调度器,普通任务必须短时、可返回。
  • 当前循迹闭环使用编码器和五路循迹输入;ICM42688 代码完整但默认关闭。
  • 后续文章按具体模块的底层驱动、数据处理和应用层接口展开,最后再回到整车协作。

下一篇:02|非抢占式调度器与软件分层

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