
分类
技术干货
2024 全国大学生电子设计竞赛 H 题:自动行驶小车
简介
基于 TI MSPM0G3507 的双轮差速自动行驶小车工程,用于完成 2024 年全国大学生电子设计竞赛“自动行驶小车(H题)”的 H1~H4 路线
简介:基于 TI MSPM0G3507 的双轮差速自动行驶小车工程,用于完成 2024 年全国大学生电子设计竞赛“自动行驶小车(H题)”的 H1~H4 路线基于 MSPM0G3507 的 2024 电赛 H 题自动行驶小车|双编码器 + MPU6050 + 8 路灰度

一、项目简介
这是一个基于 TI MSPM0G3507 的双轮差速自动行驶小车工程,用于完成 2024 年全国大学生电子设计竞赛“自动行驶小车(H题)”的 H1~H4 路线。
项目不是单纯按固定时间开环运动,而是组合使用:
- 左右轮正交编码器速度闭环;
- MPU6050 软件积分 Yaw 航向;
- 8 路灰度传感器循迹和端点识别;
- 路线状态机、速度规划和非阻塞安全保护;
- OLED 状态显示、四按键启动及 UART 在线调参。
当前公开版本已经在实车上完成 H1~H4 功能验证。由于场地、轮胎、电池、电机一致性都会影响表现,本文不虚构通用成功率;复现时应按文末顺序重新做低速验证和参数微调。
赛题正式名称和原始资料可在全国大学生电子设计竞赛培训网查看。
二、路线说明

| 启动方式 | 执行路线 |
|---|---|
按键一 / H1 | A→B |
按键二 / H2 | A→B→C→D→A |
按键三 / H3 | A→C→B→D→A |
按键四 / H4 | H3 路线连续运行 4 圈 |
四个按键都采用周期扫描、消抖和按下沿事件,程序中没有等待按键松开的阻塞循环。路线运行期间按下任意一个按键,或通过串口发送 STOP,都会立即进入停车状态。

三、硬件组成
核心硬件如下:
| 模块 | 用途 |
|---|---|
| MSPM0G3507 开发板 | 主控制器 |
| 双轮差速底盘 | 两个带正交编码器的直流减速电机 |
| 双路 H 桥电机驱动 | 电机方向和 PWM 控制 |
| MPU6050 | Z 轴角速度和软件 Yaw |
| 8 路灰度传感器 | 黑线位置和端点检测 |
| SSD1306 OLED | 显示模式、阶段、编码器和传感器状态 |
| 有源蜂鸣器、LED | 到点和故障提示 |
| 四个独立按键 | 启动 H1~H4、运行中急停 |
主要接线:
| 功能 | MSPM0G3507 引脚 |
|---|---|
| 左电机方向 AIN1/AIN2、PWM | PB25 / PB20 / PA7 |
| 左编码器 A/B | PB18 / PB17 |
| 右电机方向 BIN1/BIN2、PWM | PA16 / PA14 / PA22 |
| 右编码器 A/B | PA0 / PA1 |
| MPU6050 软件 I2C | PA8 / PA9 |
| 8 路灰度软件 I2C | PA12 / PB23 |
| OLED 软件 I2C | PB8 / PB9 |
| UART TX/RX | PA10 / PA11 |
| 按键一~四 | PB3 / PB16 / PB2 / PB15 |
| 蜂鸣器 VCC/IO | PA30 / PB21,IO 低电平触发 |
| LED | PB22 |
电机必须通过驱动板供电,MCU、传感器、电机驱动和电源必须共地。完整接线注意事项见工程中的 docs/HARDWARE.md。
四、软件架构

程序使用单主循环协作调度,不依赖 RTOS。1 ms SysTick 只提供时间基准,各任务按时间戳周期运行:
- 5 ms:按键扫描;
- 10 ms:灰度数字状态;
- 20 ms:编码器速度 PI、路线控制和电机输出;
- 较低频率:OLED 刷新、灰度模拟值和串口状态输出。
empty.c 中只保留应用入口,主要功能集中在以下文件:
app_autocar.c:调度器、路线状态机和控制算法;app_config.h:速度、角度、距离和保护参数;BSP/:电机、编码器、MPU6050、灰度和 OLED 驱动;empty.syscfg:MSPM0 外设与引脚配置。
校准、转向、刹车、蜂鸣器、端点确认和路线切换全部采用非阻塞状态机,不会因为一个动作卡住传感器更新或急停响应。
五、关键控制方案
1. 编码器负责速度和安全,不单独决定到点
实车标定 100 cm 的累计计数为左轮 7359、右轮 7357,程序默认取平均值 7358 进行距离估算。
编码器距离只用于三件事:
- 在预计距离的 82% 后主动减速;
- 为捕获阶段提供距离保护;
- 超过预计距离的 140% 仍未检测到端点时停车报警。
正常到点仍由灰度传感器确认。这样既能避免轮胎打滑导致“计数到了但车没到”,也不会因为 A→C、B→D 等路线长度不同而误停。
2. 直线使用速度 PI 和 Yaw 航向保持
左右轮各有一个 20 ms 速度 PI。直线段从速度 20 在 500 ms 内平滑提升到 55,减少起步时打滑和航向突变。
MPU6050 的 Yaw 来自 GZ 零偏校准后的积分。直线控制使用目标航向误差与 GZ 阻尼抑制摆动;每次上电必须让小车静止完成零偏校准。
陀螺仪会有零漂和温漂,因此本项目不把长时间累计 Yaw 当成永远可靠的绝对角度。在弧线后完成稳定对正时,程序会重新锚定路线航向原点,限制漂移跨阶段累积。
3. 弧线循迹取消 GZ 阻尼并按误差动态降速
弧线本身需要持续角速度。实测发现,如果把直线使用的 GZ 阻尼原样叠加到弧线循迹中,控制器会把正常转弯也当成扰动抵消,表现为速度上不去、弧线跟随迟钝。因此 H 路线的弧线循迹取消 GZ 阻尼,只使用灰度位置误差控制左右轮差速。
弧线最高速度为 40,但不是全程硬跑 40:
- 黑线位于中间区域时允许加速;
- 偏差变大时依次降到 34、28;
- 仅外侧探头检测到黑线时降到 20;
- 控制输出限制最大转向差,避免瞬时反打过强。
这种速度规划比单纯加大循迹比例系数更稳定。
4. A→C 与 B→D 使用路线感知的切入方向

小车从对角线接近圆弧时,经常不是中间探头最先碰线,而是某一侧外部探头先碰到。若直接把这次检测交给普通循迹,控制器可能朝错误方向猛打,随后脱线。
程序知道当前行驶的是 A→C 还是 B→D,因此进入捕获阶段后使用不同的预置方向:
- A→C 到达圆弧:按左向圆弧进行切入;
- B→D 到达圆弧:按右向圆弧进行切入。
默认捕获转向量为 4,最大捕获角为 45°,并带有 2.6 s 超时和距离保护。这不是完全开环转弯,而是给传感器一个稳定进入有效区域的机会。
5. 偏置压线也允许进入循迹

早期版本要求中间探头压中黑线后才退出捕获,图中的情况虽然已经可靠碰到黑线,却会因为没有居中而停车。
当前逻辑设置了两条通过条件:
- 中央两路连续检测 3 个控制周期,立即进入循迹;
- 任意 1~4 路黑线稳定存在 6 个控制周期(约 120 ms),也允许以低速进入循迹。
切入后的前 300 ms 还会保持正确的路线转向方向,防止外侧探头先碰线时产生反向修正。只有进入较稳定区域后,才逐步交给完整的灰度误差控制。

6. 弧线结束后做路线相对的绝对航向对正
只依靠“原地右转固定 15°”不能消除每圈不同的弧线出口误差。当前方案保存路线起始航向,并为各阶段计算目标相对航向。弧线退出后使用航向 PD 原地对正:
- 大角度时限制最大转速;
- 接近目标后降低最大转速;
- 角度误差小于 3°、角速度小于 5°/s,并稳定 80 ms 后才通过;
- 超过 3 s 未完成则停车保护。
对正完成后才进入下一段直线,因此 H3/H4 中从 B 点走向 D 点的初始车头方向更一致。
六、默认参数与在线调参
| 参数 | 默认值 |
|---|---|
| 直线巡航速度 | 55 计数/20 ms |
| 弧线最高速度 | 40 计数/20 ms |
| 捕获/接近速度 | 18 计数/20 ms |
| 直线起步速度 | 20 计数/20 ms |
| 直线后段速度 | 28 计数/20 ms |
A→C 初始转角 HTA | 34° |
C→D 修正角 HCD | 18° |
| 任务完成回正角 | 15° |
| A→C / B→D 捕获上限 | 45° / 45° |
UART 为 115200、8N1,命令以回车或换行结束。常用命令:
H1
H2
H3
H4
STOP
HSPEED 55
HARC 40
HAPP 18
HTA 34
HCD 18
HACAP 45
HBDCAP 45
HACT 4
HBDT 4
建议一次只改一个参数,并先从 H1、单段对角线和单段弧线开始验证。速度值是编码器每 20 ms 的计数,不是 cm/s,不同电机和编码器不可直接照搬。
七、调试中解决的几个典型问题
H3 转弯后蜂鸣器响一下就停止
根因不是角度不够,而是状态机在同一个控制周期内切换阶段后继续向下执行,后续代码仍使用旧阶段计算出的局部变量,导致新阶段的最大距离为 0 并立即触发保护。
修复方法是在周期入口快照当前阶段,一个周期只执行该阶段的分支;阶段切换后的逻辑从下一个控制周期开始。
对角线到圆弧时只有最外侧探头碰线
仅靠普通循迹会因第一帧误差过大而强烈反打。最终使用“路线决定捕获方向 + 偏置稳定确认 + 方向锁 + 动态降速”解决,而不是继续提高循迹增益。
弧线出口车头方向每次不同
固定补偿角只能修正平均误差,无法修正每次不同的出口误差。改为路线相对航向 PD 对正,并在稳定后重新锚定 Yaw,后续对角线的一致性明显更好。
八、编译与复现
已验证环境:
- Code Composer Studio(Theia 版);
- MSPM0 SDK 2.10.00.04;
- SysConfig 1.26.2;
- TI Arm Clang 4.0.2.LTS。
复现步骤:
- 下载完整工程并解压;
- 在 CCS 中选择
File → Import Projects,导入 GitCode 仓库中的code/2024_H_AutoCar; - 确认工程名为
2024_H_AutoCar; - Build 后下载到 MSPM0G3507;
- 架空驱动轮,检查左右电机方向、编码器正负和急停;
- 放到场地上,静止等待 MPU6050 零偏校准完成;
- 先把速度降到
HSPEED 30、HARC 20验证路线; - 再逐步恢复到当前实车默认值。
如果只是用 CCS 打开普通文件夹,而没有按 CCS Project 导入,界面不会出现构建按钮,Ctrl+B 也不会生效。
九、开源资料
工程包包含:
- 可直接导入 CCS 的完整源码和工程元数据;
- 硬件接线表;
- 控制算法与状态机说明;
- 串口命令和调参顺序;
- 构建、烧录与故障排查;
- 发布前测试清单;
- 已编译固件;
- 本文和全部配图。
原创应用代码采用 MIT License。TI、器件厂商及第三方示例代码保留各自原始权利和声明,具体以工程中的 THIRD_PARTY_NOTICES.md 为准。
十、安全提示
- 首次调试必须架空驱动轮,并准备好按键或串口急停;
- 不要用 MCU GPIO 直接驱动电机;
- 更换轮胎、轮距、电机、编码器或电池后应重新标定;
- 高速测试应保持赛道周围无人员和易损物品;
- 上电进行陀螺仪零偏校准时,不要移动小车。






评论