1. 项目概述
2016年TI杯电子设计竞赛中,我们团队设计了一款基于STM32的自动循迹小车系统。这个项目获得了省级一等奖,也是我职业生涯的重要转折点。作为控制类题目,系统需要实现沿预定轨迹自动行驶,并能检测轨迹旁的金属硬币。
核心功能包括:
- 基于LDC1000传感器的轨迹识别
- 直流电机差速转向控制
- 金属硬币检测报警
- 自主设计的Z形循迹算法
整个系统在4天3夜的竞赛时间内完成,包含硬件搭建、软件开发和调试全流程。下面我将详细拆解每个关键环节的设计思路和实现细节。
2. 硬件系统设计
2.1 主控芯片选型
我们选择了STM32F103RBT6作为主控芯片,主要基于以下考虑:
- 开发熟悉度:团队成员都有STM32开发经验,缩短学习曲线
- 性能需求:需要处理传感器数据、电机控制等多任务
- 外设接口:需要足够的PWM输出和通信接口
- 开发工具:ST官方提供的库函数和工具链完善
实际开发中发现,STM32的定时器资源对电机PWM控制非常关键,建议提前规划好各外设使用的定时器通道。
2.2 电机驱动方案
采用L298N全桥驱动芯片驱动两个直流电机,设计要点:
- 电机参数:减速比1:74,空载转速100rpm
- 驱动电路:使用光耦隔离控制信号,防止干扰
- 供电设计:电机与逻辑电路分开供电,避免电压波动
- 散热考虑:加装散热片,实测连续工作温度<60℃
电机转速计算公式:
V = 2πr·v = 2*3.14*0.03*100/60 = 0.314m/s这个速度既能保证响应速度,又不会因过快导致控制困难。
2.3 传感器系统
最终选用LDC1000电感式传感器进行轨迹检测,关键设计决策:
单通道解决方案:
- 虽然LDC1314性能更好,但资源有限
- 通过软件算法弥补硬件不足
- 采用Z形移动方式等效双通道检测
传感器安装:
- 距离地面高度固定为2cm
- 使用3D打印支架确保稳定性
- 信号线采用屏蔽线减少干扰
参数标定:
- 正对铁丝:Ldc_Val≈11000
- 偏离铁丝:Ldc_Val≈9000
- 切向铁丝:Ldc_Val≈5000
3. 软件算法实现
3.1 循迹控制算法
核心控制逻辑采用状态机实现:
if(9000 < Ldc_Val && Ldc_Val < 11000){ // 轻微右偏 set_motor_speed(LEFT_MOTOR, 80); set_motor_speed(RIGHT_MOTOR, 70); } else if(5000 < Ldc_Val && Ldc_Val < 9000){ // 轻微左偏 set_motor_speed(LEFT_MOTOR, 70); set_motor_speed(RIGHT_MOTOR, 80); } else if(Ldc_Val > 12000){ // 检测到硬币 trigger_buzzer(); }实际调试中发现几个关键点:
- 阈值需要根据现场环境动态调整
- 电机响应存在滞后,需要加入预测控制
- 过弯时需要特殊处理,我们增加了弯道检测逻辑
3.2 信号滤波处理
针对传感器信号噪声,采用三重滤波:
- 硬件滤波:RC低通滤波电路
- 软件滤波:中值滤波+移动平均
- 异常值剔除:连续采样排除突变值
滤波算法实现示例:
#define SAMPLE_SIZE 5 int get_filtered_value(){ int samples[SAMPLE_SIZE]; for(int i=0; i<SAMPLE_SIZE; i++){ samples[i] = read_ldc1000(); delay_ms(2); } // 排序并取中值 sort_samples(samples); return samples[SAMPLE_SIZE/2]; }3.3 系统状态监控
设计了一个简单的状态监控系统:
- 通过LED显示当前状态
- 预留串口调试接口
- 关键变量实时记录
这大大提高了调试效率,特别是在竞赛时间紧张的情况下。
4. 机械结构设计
4.1 车体布局
采用三轮结构:
- 前轮:两个驱动轮,间距15cm
- 后轮:一个万向轮,确保转向灵活
重心分布考虑:
- 电池置于车体中部
- 控制板靠近后部
- 传感器前置,离地2cm
4.2 传感器支架
使用3D打印的传感器支架具有以下特点:
- 可调高度设计
- 防震结构
- 快速拆装接口
实际测试表明,机械结构的稳定性对系统性能影响很大,特别是在高速运行时。
5. 调试经验与问题解决
5.1 常见问题排查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 小车走直线抖动 | 电机转速不一致 | 重新校准电机PWM参数 |
| 传感器读数不稳定 | 电源干扰 | 加强电源滤波,检查接地 |
| 转弯时失控 | 算法响应延迟 | 增加预测控制环节 |
| 误检测硬币 | 阈值设置不当 | 动态调整检测阈值 |
5.2 关键调试技巧
- 分模块调试:先验证传感器,再测试电机,最后整合
- 参数记录:建立调试日志,记录每次修改的效果
- 极限测试:故意制造极端情况测试系统鲁棒性
- 团队协作:明确分工,避免多人同时修改同一模块
5.3 竞赛现场经验
- 时间管理:制定详细的时间表,预留缓冲时间
- 备用方案:准备关键部件的替代方案
- 文档同步:实时更新设计文档,避免版本混乱
- 心理调节:保持团队士气,合理分配休息时间
6. 项目总结与改进方向
这个项目让我深刻体会到几个工程实践原则:
- 简单可靠优于复杂精巧:在有限时间内,选择成熟方案更稳妥
- 模块化设计价值:分模块开发调试大幅提高效率
- 文档的重要性:良好的文档能节省大量沟通成本
后续改进方向:
- 加入PID控制提高循迹精度
- 改用双传感器方案提升可靠性
- 增加无线监控功能
- 优化电源管理系统
这次竞赛经历不仅带来了技术收获,也让我认识到团队合作的价值。特别感谢我的队友,他的电子工程专业素养弥补了我的不足,这种互补性合作最终成就了我们的成功。