1. 项目背景与核心功能
第一次接触巡迹避障小车是在大学电子设计课上,当时就被这个"会自己走路"的智能装置深深吸引。如今十年过去,这类项目依然是电子爱好者入门的经典选择,也是工业AGV小车的微型原型。这个系统本质上是一个移动式传感器网络,通过多路输入输出实现自主导航。
核心功能可以拆解为三个层次:基础层是电机驱动和电源管理,中间层是传感器数据采集与处理,最上层是决策控制算法。我做的这个版本采用STM32F103C8T6作为主控,搭配四路红外对管巡线模块和HC-SR04超声波模块,在20cm/s速度下能实现±2mm的轨迹跟踪精度和30cm外的障碍物检测。
新手常见误区:很多人以为避障功能越灵敏越好,实际上过于敏感的响应会导致小车频繁启停。经过实测,30-50cm的检测距离配合0.5秒的决策周期是最平衡的参数。
2. 硬件系统设计与选型
2.1 主控模块对比测试
在STM32、Arduino和51单片机之间做过详细对比测试:
- Arduino UNO开发简单但PWM输出精度不足(8位)
- STC89C52成本低但缺少硬件PWM和ADC
- STM32F103兼具12位ADC和16位PWM,72MHz主频完全满足实时控制需求
最终选择的STM32最小系统板仅售15元,通过SWD接口下载程序,预留了USART接口方便后期扩展无线模块。特别注意要选择LQFP48封装版本,保留完整的GPIO资源。
2.2 传感器布局方案
巡线模块采用TCRT5000红外反射传感器,五路布局方案经过多次迭代:
- 最初的三路布局(左中右)容易丢失复杂路径
- 五路扇形排列检测宽度达5cm
- 最终采用中间三路密集+两侧倾斜的混合布局
超声波模块安装高度距地面12cm,俯角15度。这个角度下既能检测前方障碍,又不会误判地面起伏。实测在80cm内测距误差小于3%,超过该距离后建议启用滤波算法。
2.3 电机驱动电路设计
L298N驱动模块虽然经典但效率较低(典型压降2V)。改用TB6612FNG后:
- 工作电压范围扩大至2.5-13.5V
- 峰值电流从2A提升到3.2A
- 待机功耗降低90%
特别要注意电机两端必须并联续流二极管,我在初期测试中就因忽略这点烧毁过两个驱动芯片。现在习惯在PCB上直接集成1N5819肖特基二极管。
3. 软件架构与核心算法
3.1 多任务调度实现
采用时间片轮询架构而非RTOS,将系统划分为三个任务:
- 10ms周期:读取红外传感器状态
- 50ms周期:超声波测距与滤波
- 100ms周期:PID控制计算
通过SysTick定时器实现精准调度,关键是要处理好任务间的共享变量。比如超声波测距值会被PID任务读取,必须用__IO volatile修饰变量声明。
3.2 巡线PID控制实践
标准PID算法需要针对小车特性做三项改进:
- 微分先行:只对测量值微分,避免设定值突变引发震荡
- 积分分离:当误差较大时关闭积分项
- 输出限幅:PWM占空比限制在30%-70%之间
经过现场调参得到的经验值:
- 直线段:Kp=2.5, Ki=0.01, Kd=1.2
- 弯道段:Kp=3.8, Ki=0, Kd=2.0
通过红外传感器阵列可以自动识别路径曲率切换参数。
3.3 避障决策状态机
设计包含五种状态的Moore型状态机:
c复制typedef enum {
CRUISE, // 巡航模式
OBSTACLE_LEFT, // 左侧障碍
OBSTACLE_RIGHT, // 右侧障碍
OBSTACLE_FRONT, // 正面障碍
EMERGENCY_STOP // 急停
} FSM_State;
状态转移条件基于超声波和红外组合判断。例如当左右两侧传感器同时检测到障碍时,会触发原地旋转直到找到出口。这里引入20ms的消抖延时非常关键,能避免因传感器误报导致的异常切换。
4. 系统调试与性能优化
4.1 电源噪声抑制方案
初期遇到最棘手的问题是电机启停导致单片机复位。通过三项改进彻底解决:
- 电机电源与逻辑电源完全隔离
- 在7805稳压器前后各加装1000μF电解电容
- 所有IC的VCC引脚添加0.1μF陶瓷电容
实测显示电源纹波从原来的300mV降低到50mV以内。额外加装的LC滤波器(22μH+100μF)还能进一步抑制高频干扰。
4.2 传感器数据融合技巧
红外和超声波数据融合采用加权平均法:
- 近距离(<15cm):超声波权重80%
- 中距离(15-30cm):各50%
- 远距离(>30cm):红外权重70%
针对不同地面材质需要调整红外阈值。我的做法是在启动时自动校准:让小车原地旋转一周,记录各传感器在黑白线上的ADC读数,动态计算触发阈值。
4.3 运动控制性能测试
使用手机高速摄影(240fps)分析运动性能:
- 加速阶段:0-20cm/s耗时0.8秒
- 制动距离:全速下制动需15cm
- 最小转弯半径:差速驱动时可达8cm
这些数据直接影响避障算法的安全距离设置。建议保留至少30%的余量,我的参数设置是制动距离×1.5作为警戒距离。
5. 常见问题排查指南
5.1 巡线异常问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 小车蛇形走线 | PID参数过冲 | 降低Kp增加Kd |
| 冲出跑道 | 传感器间距过大 | 调整模块间距至1.5cm |
| 响应迟钝 | 采样周期过长 | 将红外检测周期缩短至5ms |
5.2 避障功能故障处理
遇到超声波持续返回最大值时:
- 检查Trig引脚是否正常发出10μs脉冲
- 测量Echo引脚电压是否随距离变化
- 确认没有物体遮挡传感器表面
一个隐蔽的坑是电源电压不足会导致HC-SR04测距不稳定。当系统电压低于4.5V时,虽然模块能工作但精度急剧下降。
5.3 电机异常处理案例
某次调试中出现单侧电机反转:
- 确认驱动芯片IN1/IN2电平组合正确
- 检查电机接线是否松动
- 测量PWM输出占空比是否对称
最终发现是杜邦线接触不良导致一路控制信号丢失
6. 扩展功能实现思路
现有系统预留了蓝牙模块接口,可以通过手机APP实现:
- 手动遥控模式切换
- 运行参数实时调整
- 路径记录与回放功能
更进阶的改造方向包括:
- 加装OpenMV实现视觉导航
- 改用ESP32实现WiFi控制
- 增加IMU传感器提升运动稳定性
我在第二版设计中加入了NRF24L01无线模块,实现了多车协同避障。关键是要设计好TDMA时隙分配,避免通信冲突。实测在10ms周期下能稳定支持3台小车组网。
