共计 1342 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
弧形赛道在电子设计竞赛中越来越常见,但传统直线寻迹方案往往在这里栽跟头。我自己在调试时就发现,当小车遇到 30°以上的弯道时,红外对管的误判率会突然飙升。经过反复测试,发现问题主要来自两个方面:

- 弧形赛道导致红外光反射角度变化,部分传感器可能同时检测到黑白区域
- 环境光干扰(特别是场馆顶灯)会使接收管产生约 200mV 的基线漂移
技术方案对比
参加过三届竞赛后,我总结出这些传感器的特点:
- 红外对管 :
- 成本最低(约 0.8 元 / 对)
- 响应时间快(<0.1ms)
-
需要精心设计抗干扰电路
-
灰度传感器 :
- 价格中等(5-15 元)
- 自带环境光补偿
-
响应速度较慢(1-2ms)
-
摄像头方案 :
- 成本高(>200 元)
- 需要图像处理算法
- 受光照影响极大
核心实现方案
传感器布局优化
通过 3D 打印不同角度的测试支架,最终确定 15°弧形排布效果最佳:
- 中心对称布置 5 组对管
- 相邻对管间隔 15°
- 安装高度保持在 8 -10mm
硬件设计要点
使用 STM32F103 的 ADC 时要注意:
// ADC 配置示例
void ADC_Config() {
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 多通道扫描
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
}
动态阈值算法
关键是要实时更新环境光基准:
#define SENSOR_NUM 5
uint16_t dynamicThreshold(uint16_t rawValues[]) {static uint16_t baseline[SENSOR_NUM];
uint16_t threshold = 0;
// 更新基线(移动平均滤波)for(int i=0; i<SENSOR_NUM; i++) {baseline[i] = 0.9*baseline[i] + 0.1*rawValues[i];
threshold += abs(rawValues[i] - baseline[i]);
}
return threshold/SENSOR_NUM * 1.5; // 1.5 倍系数经验值
}
常见问题解决方案
PCB 布线避坑
遇到过最头疼的问题是串扰:
- 接收管信号线必须远离电机驱动线路
- 每组对管的 VCC 都要加 0.1μF 去耦电容
- 模拟地与数字地单点连接
赛道材质适配
实测反射率数据:
| 材质 | 白区反射率 | 黑区反射率 |
|---|---|---|
| 亚克力 | 85%-90% | 5%-8% |
| KT 板 | 70%-75% | 10%-15% |
性能验证
在 50cm/ s 速度下测试结果:
- 直线赛道:误判率 <1%
- R30cm 弯道:误判率 3.2%
- R15cm 急弯:误判率 8.7%
进阶优化思路
结合 PID 控制时要注意:
- 根据检测到的有效传感器数量判断弯道曲率
- 大曲率时适当降低 P 参数
- 加入微分项抑制过冲
通过这套方案,我们最终在省赛中获得了一等奖。最关键的经验是:前期花时间做好传感器标定,比赛时能省去 80% 的调试麻烦。
正文完
发表至: 未分类
近一天内
