共计 1466 个字符,预计需要花费 4 分钟才能阅读完成。
红外对码管工作原理与典型电路
红外对码管是寻迹小车的核心传感器,由红外发射管和接收管组成。发射管发出特定波长的红外光,接收管检测反射光强度。当小车在黑色轨迹线上行驶时,黑色区域吸收红外光导致接收信号弱,白色区域反射强烈。典型电路包含以下部分:

- 发射端:通过限流电阻(通常 220Ω)驱动红外 LED
- 接收端:光电三极管输出信号经比较器或 ADC 转换
- 参考电路电压:VCC=3.3V 时,白线反射电压约 2.8V,黑线约 0.3V
寻迹抖动的三大根源分析
-
环境光干扰 :日光、灯光中含红外成分,会淹没有效信号。表现为 ADC 读数波动超过±100mV
-
机械振动 :电机转动引起传感器支架共振,导致检测距离变化。常见于未使用减震海绵的刚性安装
-
采样频率不当 :
- 过高(>1kHz)时噪声被放大
- 过低(<50Hz)导致控制延迟
- 理想范围:200-500Hz(对应 2 -5ms 采样间隔)
硬件滤波改进方案
二级 RC 低通滤波电路
[红外接收]--[10kΩ]--+--[0.1μF]--GND
|
[ADC 输入]
– 截止频率:f_c=1/(2πRC)=159Hz
– 可叠加两级实现 -40dB/dec 衰减
光学改进措施
- 加装 3mm 厚黑色橡胶遮光罩
- 发射管串联 10Ω 电阻降低发射功率(减少相邻传感器串扰)
STM32 软件滤波实现
均值滤波 + 动态阈值算法
#define SAMPLE_NUM 5
uint16_t IR_Filter(uint16_t raw_adc) {static uint16_t buf[SAMPLE_NUM] = {0};
static uint8_t index = 0;
uint32_t sum = 0;
buf[index++] = raw_adc;
if(index >= SAMPLE_NUM) index = 0;
for(int i=0; i<SAMPLE_NUM; i++)
sum += buf[i];
return sum/SAMPLE_NUM;
}
uint16_t Dynamic_Threshold(uint16_t filtered_val) {
static uint16_t min_val = 4095, max_val = 0;
if(filtered_val < min_val) min_val = filtered_val;
if(filtered_val > max_val) max_val = filtered_val;
return (max_val + min_val)/2; // 自动计算中间阈值
}
PID 参数整定技巧
参数初始化范围建议
- Kp:0.5-2.0(响应速度)
- Ki:0.01-0.1(消除静差)
- Kd:5-20(抑制超调)
调试步骤
- 先将 Ki、Kd 设为 0,逐步增加 Kp 直到出现轻微振荡
- 加入 Kd,每次增加 5 直到消除振荡
- 最后微调 Ki,每次增加 0.01 直到静差消失
三大调试避坑要点
- PWM 频率设置 :
- 电机 PWM 频率建议 8 -10kHz
-
避免与采样频率成整数倍关系(如 500Hz 采样时不用 1kHz PWM)
-
传感器布局优化 :
- 相邻传感器间距≤15mm(针对 20mm 宽赛道)
-
安装高度 8 -12mm(需实际测量反射曲线)
-
电源去耦 :
- 每个传感器 VCC 端加 0.1μF 陶瓷电容
- 电机驱动电源与控制系统独立供电
实测效果对比
优化前后关键指标对比表:
| 指标 | 优化前 | 优化后 |
|————–|———-|———-|
| 最大偏移量 | ±35mm | ±5mm |
| 调节时间 | 1.2s | 0.3s |
| 功耗 | 280mA | 210mA |
通过上述软硬件协同优化,我们团队最终实现了在 2m/ s 速度下±3mm 的轨迹跟踪精度。特别提醒:不同赛道的反射率差异较大,建议赛前采集各赛段的典型 AD 值建立阈值数据库。
正文完
发表至: 未分类
近一天内
