裸机 + 寄存器 & AVR-GCC 学习之 "红外避障传感器(ADC模拟电压读取)障碍物检测、分级绕行决策"
系列第十二篇,承接第十一坑红外循迹,基于 HL-1 小车两路 LM324 红外避障模块、ATmega16A 纯寄存器开发;完整讲解 ADC 模拟采集原理、障碍物电平逻辑、带状态机的智能绕行决策、循迹避障融合切换,无第三方库,硬件完全匹配前期整车引脚文档。
记录时间: 2026 年 7 月 24 日
编译环境: AVR-GCC 12+,芯片 ATmega16A-PU,主频 12.000MHz
这是我本系列的第十二篇文章,希望对你有所帮助,不足之处麻烦留言指正,谢谢
0. 本文核心速查索引
| 你想实现的功能 | 跳转章节 |
|---|---|
| 避障传感器怎么接?(左 PA1,右 PA2)障碍物近/远对应的 ADC 数值规律 | 第二章 |
| LM324 模拟输出与 ADC 输入阻抗匹配 | 第三章 |
| ADC 寄存器怎么配?AREF 为什么要接电容? | 第三章 |
| 完整的 ADC 读取代码(含均值滤波 + 通道切换延时) | 第四章 |
| 避障决策的状态机完整逻辑 | 第五章 |
| 循迹 + 避障融合模式怎么实现? | 第六章 |
| 上电后数值跳变、电机启动干扰、阈值漂移怎么解决? | 第八章 |
一、前言:避障模块作用与实操高频坑
1. 模块用途
红外避障模块依靠红外发射接收 + LM324 运算放大器输出模拟电压,通过 ATmega16A 片内 10 位 ADC 读取反射强度,判断前方左/右是否存在障碍物。小车行驶过程中检测障碍,执行减速、转弯绕行、停车避让逻辑,实现自主避障,可和循迹模式一键切换。
说明: LM324 是四运算放大器,在本模块中搭成电压跟随器/放大器电路,输出为模拟电压(0~5V),直接送入 ADC 采集。若你的模块使用 LM393 专用比较器(输出数字电平 0/1),则无需 ADC,直接读取 IO 即可。
2. 实操总结
ADC 初始化寄存器配置错误,采集数值固定 0 或最大值,无法识别障碍物;
搞反电压逻辑:障碍物近/远对应的 ADC 数值颠倒,判断逻辑完全失效;
未处理 ADC 输入阻抗匹配,长排线导致采样值偏低,障碍物检测距离缩短;
AREF 引脚悬空,参考电压耦合噪声,采样数值持续抖动;
ADC 转换期间刷新 LCD(数字 IO 切换),违反数据手册规则导致采样精度下降;
未做软件多次采样均值滤波,地面反光、灯光干扰造成瞬时误判;
只做原地刹车,无分级绕行逻辑,遇到障碍物直接卡死;
双侧障碍无智能决策,每次固定右转,若右侧有墙则卡死;
缺少有限状态机,避障动作时序混乱;
未关闭 JTAG,PC 口电机运行干扰模拟采集精度。
二、硬件引脚与 LM324 避障模块原理
2.1 整车硬件接线
引脚: 左避障 OUT3 → PA1,右避障 OUT4 → PA2(与完整硬件备份文档一致)
| 信号 | 开发板引脚 | 说明 |
|---|---|---|
| OUT3(左避障) | PA1 | 左避障传感器模拟输出 |
| OUT4(右避障) | PA2 | 右避障传感器模拟输出 |
| VCC | 5V | 模块供电正极 |
| GND | GND | 模块供电负极 |
2.2 LM324 红外避障电压规律
LM324 : LM324 是四运算放大器,在本模块中搭成电压跟随器/放大器电路,输出为模拟电压(0~5V)。输出级为推挽结构,可驱动 ADC 输入。
红外反射物理规律(距离 - 电压非线性):
红外反射强度与距离的平方成反比(I ∝ 1/d²)。因此:
近距离(0~15cm):ADC 数值变化剧烈,分辨率高,适合精确判断;
远距离(15~30cm):ADC 数值变化平缓,只能做“有无障碍”的粗略判断。
建议检测距离控制在 5~20cm 范围内,超过 20cm 后反射信号极弱,易受环境光干扰。
本模块(反相接法)电压规律:
无障碍物(远距离):红外几乎无反射 → 接收管电流极小 → 输出电压低 → ADC 采样值偏小(通常 < 200);
有障碍物(近距离 ≤ 20cm):红外大量反射 → 接收管导通 → 输出电压高 → ADC 采样值偏大(通常 > 600);
判定口诀:障碍物越近,ADC 数值越大
不同模块的电平极性差异:
上述电平逻辑基于 HL-1 原装避障模块(反相接法)。若使用第三方模块(同相接法),电压规律可能完全相反(障碍物越近 → 电压越低)。上电实测法(最可靠): 用万用表测量 PA1/PA2 引脚电压,遮挡障碍物时电压是否升高。若降低,只需将代码中
if(adc_val >= THRESH)改为if(adc_val <= THRESH)即可适配。
2.3 电位器调节黄金法则
模块电位器用于调节检测距离。不依赖旋转方向,只看结果:
将障碍物放在期望的检测距离处(如 15cm);
调节电位器,使 ADC 数值稳定在阈值附近(如 500~700 之间);
移走障碍物,ADC 数值应明显下降到阈值以下(如 < 300);
反复微调,使“有/无障碍”的数值窗口最大(抗干扰能力最强)。
2.4 PA 端口资源冲突说明
PA1、PA2 为纯 ADC 模拟通道,PA4/PA5/PA6 复用 LCD1602 RS/RW/E。
数据手册硬性要求: ADC 转换期间,任何 PA 口数字输出引脚不应切换(会产生地弹噪声耦合到模拟电路)。
解决方案: 先完成全部 ADC 采样,再刷新 LCD——不仅是分时复用,更是数据手册的硬性规定。
2.5 硬件抗干扰布局建议
| 项目 | 建议 | 原因 |
|---|---|---|
| 信号线长度 | 尽量短(< 20cm) | 长排线增加寄生电容和噪声耦合 |
| 信号线与 GND | 绞在一起(双绞线) | 减少空间电磁耦合 |
| 模拟地与数字地 | 单点接地 | 避免电机大电流在地线上产生压降 |
| PA1/PA2 对地电容 | 并联 0.1μF | 滤除高频噪声,稳定采样电压 |
| AVCC 引脚滤波 | 并联 10μF + 0.1μF | 降低电源噪声对 ADC 参考电压的影响 |
| 传感器排线 | 远离电机驱动线(PC2~PC7) | 避免大电流信号的电磁干扰 |
2.6 闲置 ADC 引脚处理
PA0、PA3~PA7 如果未使用:
将这些引脚设为输入模式(DDRA 对应位清 0);
不要开启内部上拉(PORTA 对应位保持 0),因为上拉电阻会产生漏电流,通过芯片内部耦合影响正在采样的 ADC 通道精度;
如果 PCB 布局允许,将这些引脚通过 10kΩ 电阻接地,可进一步降低噪声耦合。