循迹小车实战一:从电机驱动到传感器融合的闭环控制
1. 三轮小车的基础运动控制第一次动手做循迹小车时最让我头疼的就是怎么让这个小家伙乖乖按照我的想法移动。三轮小车的结构其实特别适合新手入门后面两个主动轮负责驱动前面一个万向轮就像购物车的轮子一样自由转向。这种设计不仅简单还能避免四轮小车经常遇到的差速问题。要让小车动起来本质上就是控制两个直流电机的转速和方向。我刚开始用最基础的黄色T电机做实验发现虽然便宜但确实存在转速不稳定的问题。后来改用带编码器的电机虽然贵了点但速度和位置控制精度明显提升特别适合需要精准循迹的场景。电机的控制逻辑其实很直观给两个引脚A和B交替供电就能改变转向。比如A接5V、B接GND时正转反过来接就反转。但手动切换电线实在太麻烦这时候TB6612电机驱动模块就派上大用场了。这个模块最让我满意的是它集成了两路驱动正好对应我们小车的两个驱动轮。2. PWM调速的实战技巧真正开始调试电机速度时PWM脉冲宽度调制技术就成了关键。刚开始我总搞不懂占空比和实际速度的关系后来用示波器观察波形才恍然大悟占空比就是高电平时间占整个周期的比例。比如50%占空比相当于给电机施加2.5V电压假设电源是5V。这里有个实用经验PWM频率选择很重要。我用STC8A单片机测试发现7-13kHz这个范围电机运行最平稳。频率太低会听到明显的电机啸叫太高又会导致驱动芯片发热。具体代码实现时我更喜欢用硬件PWM模块而不是软件模拟这样不仅精度高还能减轻CPU负担。// STC8A硬件PWM配置示例 HPWM_Set(0, 6000, 0.7); // 通道06kHz频率70%占空比调试时发现一个有趣现象两个电机即使给相同的PWM值实际转速也可能不同。这是因为电机本身存在个体差异。这时候就需要通过实验记录每个电机的特性曲线或者直接上编码器做闭环控制。3. 红外传感器的布局与调试循迹的核心在于看得见路线。我试过好几种红外传感器最终选定TCRT5000模块主要是考虑性价比。这种数字式传感器输出简单黑线检测结果直接通过高低电平表示省去了ADC转换的麻烦。传感器布局很有讲究。我最开始只用三个传感器中间一个对准黑线左右各一个检测偏离。后来发现五传感器阵列更好用最左(1号)和最右(5号)检测急转弯次左(2号)和次右(4号)检测缓转弯中间(3号)保持直行实际安装时要注意高度调整。传感器离地面太远灵敏度下降太近又容易误触发。我通常保持5-10mm距离然后用螺丝调节固定架来微调。调试时可以先用串口打印各传感器状态观察过线时的电平变化。// 五路传感器状态检测 if((P1 0x1F) 0x04) { // 仅中间传感器触发 goStraight(); } else if((P1 0x03) ! 0) { // 左侧传感器触发 turnLeft(); }4. 闭环控制算法的实现把传感器数据和电机控制结合起来就形成了完整的闭环系统。我尝试过几种控制算法最简单的bang-bang控制非开即关虽然容易实现但小车会像醉汉一样左右摇摆。后来改用比例控制(P控制)行驶轨迹就平滑多了。具体实现时我定义了一个误差变量中间传感器触发误差0左侧传感器触发误差1(2号)或2(1号)右侧传感器触发误差-1(4号)或-2(5号)然后根据误差值调整左右轮速差float Kp 0.2; // 比例系数 float baseSpeed 0.6; // 基础速度 float leftSpeed baseSpeed error * Kp; float rightSpeed baseSpeed - error * Kp;调试Kp参数时有个小技巧先用较小值让小车缓慢修正观察过冲情况后再逐步调大。太激进会导致震荡太保守又修正不及时。记得有一次调参到凌晨三点终于找到0.15-0.25这个黄金区间。5. 十字路口的特殊处理当多个传感器同时检测到黑线时就遇到了十字路口判断问题。我的解决方案是设置一个计数器当连续3个以上传感器触发超过200ms时判定为十字路口。这时候可以让小车完全停止后做90度转向保持原速直接通过根据预设路线选择转向实际测试发现方案2最简单可靠但需要配合地图记忆功能才能用于复杂路径。我在车体两侧额外加装了两个斜向安装的传感器专门用于检测十字路口的出口方向。6. 常见问题排查指南调试过程中踩过不少坑这里分享几个典型问题的解决方法电机不转时检查清单STBY引脚是否置高VM电源电压是否足够电机线序是否正确可交换AO1/AO2测试PWM信号是否正常用示波器检查传感器误触发应对措施增加软件消抖连续检测3次相同结果才确认调整传感器阈值电位器在代码中设置黑白线判断的延时阈值小车跑偏的可能原因电池电压下降导致PWM占空比实际值变化轮胎打滑或地面不平电机特性差异可通过编码器补偿7. 进阶优化方向当基础功能都实现后可以尝试这些提升加入PID控制替代简单P控制增加蓝牙模块进行无线调试使用光电编码器实现速度闭环开发上位机显示实时传感器数据尝试更复杂的路径规划算法记得第一次成功让小车跑完全程时那种成就感至今难忘。虽然现在回头看当时的代码写得实在粗糙但正是这些实践让我真正理解了闭环控制的精髓。建议大家在基本功能完成后不妨尝试用不同材质的跑道比如反光地板、毛毡布来测试小车的适应能力这对提升系统鲁棒性特别有帮助。