基于STM32F1的8路灰度传感器巡线小车实战指南

张开发
2026/5/24 21:02:50 15 分钟阅读
基于STM32F1的8路灰度传感器巡线小车实战指南
1. 硬件连接与传感器布局做巡线小车的第一步就是把8路灰度传感器和STM32F1正确连接起来。这里有个关键点传感器的物理布局直接影响巡线效果。我建议采用一字型排列间距控制在1.5-2cm具体根据赛道宽度调整。传感器太密容易误判太宽又会漏检黑线。接线时要注意每个传感器的VCC接3.3VGND接共地信号线分别接PA0-PA7如果不够用可以扩展到PB0-PB1在VCC和GND之间加个0.1uF的滤波电容实测能减少电源干扰这里有个坑我踩过千万别把传感器直接焊死在板子上。先用杜邦线连接调试时方便调整间距。我之前有个项目因为传感器固定太死后来发现间距不合适只能全部重做。2. ADC配置的实战技巧STM32F1的ADC配置是核心环节。原始代码用了单次转换模式但巡线需要快速连续采样这里我推荐用扫描模式连续转换ADC_InitStructure.ADC_ContinuousConvMode ENABLE; ADC_InitStructure.ADC_ScanConvMode ENABLE;采样周期也有讲究239.5周期适合高精度但速度慢71.5周期平衡速度与精度13.5周期最快但噪声大我的经验值是28.5周期在12MHz ADC时钟下8通道轮询大约1ms完成一次全采样完全够用。3. 数据处理与滤波算法原始数据直接使用会有抖动必须滤波。我试过三种方法移动平均滤波简单但延迟大中值滤波抗脉冲干扰好一阶滞后滤波最适合实时系统推荐这个一阶滤波实现float Filter(float new_val, float old_val) { return old_val * 0.7 new_val * 0.3; }阈值判断也有技巧不要用固定值我在代码里看到3.15V的硬编码这很危险。应该上电时自动校准记录白底和黑线的电压值动态计算中间阈值(白值黑值)/2加入10%的迟滞区间防抖动4. 控制策略优化最简单的PD控制就能实现不错的效果但要注意偏差计算用加权平均代替简单位置判断int position (v0*0 v1*1 v2*2 ... v7*7)/(v0v1...v7);参数整定先调D后调P避免震荡输出限幅电机PWM不要突然满幅变化我常用的参数范围Kp0.3~0.8Kd0.1~0.3采样周期10ms遇到急弯怎么办加个前瞻判断当最外侧传感器触发时直接给最大转向量。这个技巧在比赛中特别管用。5. 调试与性能优化调试时一定要用printf输出各通道原始值我习惯这样格式化printf(CH0:%-4d CH1:%-4d ... | P%d D%d OUT%d\r\n, adc[0], adc[1], position, derivative, output);几个常见问题排查如果数值跳动大检查电源滤波缩短传感器引线如果响应迟钝降低滤波系数提高采样率如果总是跑偏重新校准阈值检查机械结构最后分享一个提速技巧当检测到长直道时可以适当提高基础PWM占空比。我在去年比赛中用这个方法圈速提升了15%。

更多文章