拓冰建站拓冰建站
首页 / 资讯中心 / 正文

抗干扰红外发射接收一体板:原理图、PCB与单片机设计要点

简介抗干扰红外发射接收一体DXP资料收录了红外发射接收模块的完整电路设计与单片机应用说明面向电子爱好者、单片机初学与进阶者也适合毕业设计及小团队做项目预研。资料包内共二十一个文件整体容量约五百七十KB包含DXP工程下的原理图文件、PCB文件、项目文件并附2个RAR压缩包、Word版原理图文档、PDF说明、实物图片及网页格式技术备注方便对照查看。当前已有140人学习下载可作为同类设计的参考。借助完整的DXP工程与说明文档可以快速理解红外发射接收一体的抗干扰设计思路包括硬件原理图绘制、PCB布局布线、单片机接口连接等关键环节同时附带的USB下载线相关DXP工程可作为扩展参考帮助节省自行整理电路的时间适合直接用于课程设计或产品预研阶段。1. 为什么抗干扰红外发射接收一体板是单片机硬件入门的“硬核样本”调试红外避障小车时最容易遇到的坑不是红外发射管不亮而是阳光下接收头乱触发。抗干扰红外发射接收一体板把发射管和接收头做在同一块 PCB 上用 38kHz 载波调制配合一体化接收头专门处理这类近距离反射检测。这份 DXP 资料包里既有原理图 doc也有 PCB 工程和板子照片还附带了 USB 下载线工程文件对做毕业设计或小团队评估硬件方案都有参考价值。整块板子的核心不是“红外发射”而是“抗干扰”知道怎么把环境光和串扰压住才算真正入门嵌入式硬件设计。2. 红外发射接收一体的电路原理与抗干扰设计逻辑2.1 发射端与接收端选型38kHz 载波和一体化接收头红外发射端一般选用 940nm 波长的红外发射二极管正向压降约 1.2V工作电流按资料中的电路设计常见是十几毫安到几十毫安。为了提升抗干扰能力发射端不能直接通直流电而是用单片机定时器产生占空比 1/3 左右的载波让发射管工作在脉冲状态。脉冲峰值电流可以比直流额定值高一些但平均功耗仍然可控发射距离也可以拉得更远。接收端选用一体化红外接收头而不是裸光电二极管是最关键的选型决定。一体化接收头内部集成了自动增益控制、限幅放大器和带通滤波器中心频率锁定在 38kHz输出解调后的逻辑电平可直接接单片机的外部中断或普通 IO。注意输出低有效平时为高电平收到连续载波时拉低。DXP 原理图 doc 中接收头常见的 3 个脚是 GND、VCC、OUT具体顺序要对照器件资料因为不同厂家的引脚排序不同。2.2 环境光与同频串扰为什么不能只加大发射电流很多学生在测试时发现距离不够第一反应是把发射限流电阻从 100Ω 换成 22Ω这种做法通常只会让接收端饱和。发射电流增大虽然带来更高光强但过强光线进入一体化接收头后内部前置放大器进入限幅状态恢复时间变长反射回来的弱信号反而被压掉。资料里“抗干扰”的含义主要体现在三处。第一发射端使用 38kHz 调制接收端只对 38kHz 附近信号响应抑制日光灯和太阳光的直流分量。第二PCB 布局上让发射管和接收头之间有一定间距并在两者之间设置挡墙或开槽避免发射光直接串扰到接收头。第三软件侧做脉冲连续确认只有连续检测到多个低电平脉冲才认为出现了反射物。下面这段示意代码就是“连续确认”的常见写法// 发送一组红外脉冲连续两次检测到反射才返回有效 uint8_t ir_check(void) { uint8_t hit 0; ir_pulse_on(); // 打开载波输出 delay_us(600); // 至少维持 600us 载波让接收头完成解调 if (ir_pin_output 0) // 一体化接收头输出低表示收到 hit; ir_pulse_off(); delay_us(200); // 等待接收头内部恢复 ir_pulse_on(); delay_us(600); if (ir_pin_output 0) hit; ir_pulse_off(); return (hit 2); // 两次都命中判定为有效反射 }第一次和第二次发射之间的 200us 不能省它是给一体化接收头的 AGC 恢复用的。若只判断一次电机电刷火花或普通遥控器都可能在几毫秒内造成误触发连续两次判断能滤掉绝大多数随机干扰这也是红外避障小车模块中常见的“二次确认”逻辑。2.3 原理图 doc 里的关键测量节点拿到“抗干扰红外发射接收一体原理图.doc”我一般不是先看元件而是先找几个测量节点对照节点预期信号作用发射管阳极38kHz 脉冲方波红外载波输出接收头 OUT空闲高电平收到反射拉低解调后的逻辑信号单片机外部中断脚与 OUT 同相位供 MCU 捕获脉冲边沿USB 转 TTL 的 TX/RX串口下载电平给 STC/51 系列下载程序在 DXP 工程中这几个节点都有明确网络标号。资料里出现“USB下载线—new黑DXP资料”这一类文件通常意味着主控是支持串口 ISP 下载的 STC51 系列。STC 单片机下载时需要冷启动下载线上一般会留一个断电开关或电容释放回路PCB 上要留意这个部分的地回路是否和接收头输出线距离过近。3. 在 DXP/Altium 里复现原理图与 PCB 的关键操作3.1 先把 DXP 工程文件理顺压缩包解压后会看到 .SchDoc、.PcbDoc 和 .Doc 混在一起。正确的打开方式是从工程文件 .PrjPCB 开始而不是单独打开原理图。用 Altium Designer 打开 DXP 工程后如果发现某些元件无法同步先在 Projects 面板里确认工程文件路径里是否带中文名DXP 时期的工程对中文路径支持并不好。常见做法是先执行一次 Design - Update Schematics in PCB让网表重新从原理图导入 PCB。如果工程里同时存在多张原理图注意确认顶层图纸是否包含完整网络标号。DXP 2004 生成的工程在 AD20 中打开时会提示工程版本转换。建议另存为新工程文件再继续改板不要在原文件上直接编辑避免打开时引入旧规则导致后续 DRC 误报。3.2 原理图导入和封装匹配老 DXP 工程里的封装和现在常用的贴片库差异不小直接拿来开板会有风险。红外发射管如果使用 5mm 直插要检查焊盘孔径是否足够插入后元件底部是否压实一体化接收头的金属屏蔽壳与个别引脚可能存在电气连接铺铜时要避免屏蔽壳短路到信号网络。我一般会做下面三步封装确认把原理图 doc 和 DXP 的元件型号列一份清单打开 .PcbDoc 查看现成封装对照实际样片的脚位和丝印新建一个项目专属库把用到的接收头、发射管、USB 转 TTL 芯片拷贝进去。资料中的 USB 下载线工程可能使用 CH340G 或 PL2303要打开原理图确认。CH340G 常用 SOP-16 封装PL2303HX 常见 DIP-28两者的晶振和去耦布局差异很大不能直接互换。3.3 PCB 布局与走线要求地平面、铜皮挖空和线宽红外发射接收一体板的 PCB 布局需要同时满足光路和电路两方面要求。常见布局是让发射管和接收头沿板子长边排列间距控制在 815mm接收头的 OUT 信号线优先短走线直接到单片机引脚中途不要跨越发射驱动三极管的基极走线。在 AD20 中做 PCB 板铜皮挖空是降低接收头附近地平面噪声的常用操作。把 Keep-Out Layer 上画好的闭合区域用 Tools - Convert - Create Cutout from Selected Primitives 转换成挖空区再执行铺铜该区域就会被掏空。这里挖空的主要目的不是散热而是避免铺铜在地平面形成接收天线拾取开关节点的高频噪声。走线要求部分信号线宽度按 0.3mm 起步是可靠选择。0.3mm 线宽在 1oz 铜厚下大概能安全承载 1A 以内电流而发射管脉冲峰值电流通常只有 100mA 左右所以限制线宽的往往不是载流能力而是 PCB 厂家的最小线宽和阻抗一致性。铜厚/线宽常规安全电流适用场景1oz0.2mm0.5A 以下接收头 OUT、复位信号1oz0.3mm0.5~1A发射限流、电源支路1oz0.5mm1~2AUSB 5V 主供电发射驱动管到红外发射管之间的走线要加宽到 0.3mm 以上并且尽量短。红外发射处于脉冲工作状态瞬时 di/dt 较大走线过长会把噪声通过空间耦合到接收头输出端。3.4 DRC 检查和老版本文件转换打样前必须跑一次 DRC。在 AD20 中通过 Design - Rules 设置最小 Clearance一体红外板电压不高但建议 Clearance 至少 6mil高湿环境下爬电距离不能忽略。随后 Run DRC重点看 Short-Circuit、Un-Routed Net 和未连接的 Polygon。PCB 布线规则里最容易漏掉的是铺铜与走线之间的距离规则如果新建了 Keep-Out 挖空区务必确认铺铜边界没有跨越挖空区的圆弧线。如果遇到 PADS 的 PCB 文件提示报错自动关闭不能直接硬打开。常见做法是将原工程中的 .PcbDoc 另存为较新版本再通过 PADS 的转换向导导入或者反过来在 AD 中先转一次中间格式。这类报错多半来自多边形铺铜存在大量细碎铜皮转换前先删除原铺铜转换成功后再重新铺问题会少很多。4. 单片机程序设计从发射调制到接收帧解析4.1 用定时器产生 38kHz 载波发射载波频率和一体化接收头的中心频率需要匹配。以 12MHz 晶振、STC89C52 为例机器周期是 1us。如果用 T0 模式 2 的 8 位自动重装定时器每次中断翻转一次 IO翻转周期是 2 个计数值乘以 1us。要得到 38kHz计数值约等于 13换算成重装值是 256-13243即 0xF3。void timer0_init(void) { TMOD 0xF0; // 保留 T1 的模式设置 TMOD | 0x02; // T0 使用模式28位自动重装 TH0 0xF3; // 256-13定时约13us TL0 0xF3; ET0 1; TR0 1; } void timer0_isr(void) interrupt 1 { ir_carrier ^ 1; // 翻转发射管驱动IO输出方波 }13us 翻转一次意味着半周期 13us、周期 26us实际频率约 38.46kHz在一体化接收头接收带宽内。代码里 0xF3 只能用于 12MHz 晶振如果板子用 11.0592MHz 晶振兼顾串口波特率需要按公式count Fosc / 12 / (2 * 38000)重新计算再取256 - count作为重装值。最常见的踩坑就是直接拷 0xF3 到 11.0592MHz 板子上频率偏差超过接收头带宽导致完全收不到信号。除了载波解码部分还要处理“发射门控”。资料标题里涉及的 51 单片机模拟 PT2262 发射本质上就是按 PT2262 的时序把载波分成一段一段地发出去。每一位数据由高电平脉冲组和低电平等待段组成接收端通过测量连续低脉冲的持续时间来解出 0 和 1。这个时序和红外遥控器的 NEC 协议思路一致状态机写好后可以同时兼容多种编码。4.2 接收端状态机用“超时”思想滤掉噪声接收头输出的是低电平脉冲串直接检测低电平就能触发但会误触发。更可靠的方式是写一个接收状态机。这个思路和 Modbus 单片机帧接收数据程序有异曲同工之处Modbus 依靠两个字节之间超时判断一帧结束红外接收则依靠载波持续时间和脉冲间隔判断有效信号。typedef enum { IR_IDLE, IR_BURST, IR_HOLD } ir_state_t; uint16_t ir_pulse_cnt 0; void ir_task(void) { switch (ir_state) { case IR_IDLE: if (ir_in 0) { ir_pulse_cnt 0; ir_state IR_BURST; } break; case IR_BURST: if (ir_in 0) { ir_pulse_cnt; if (ir_pulse_cnt 8) { ir_state IR_HOLD; // 连续8个低脉冲认定为持续载波 } } else if (ir_idle_over_us(500)) { ir_state IR_IDLE; // 500us内没有新低脉冲丢弃 } break; case IR_HOLD: ir_event_callback(); // 触发反射事件 ir_state IR_IDLE; break; } }IR_IDLE 检测第一次负脉冲IR_BURST 统计连续低脉冲数量IR_HOLD 表示载波已经稳定。ir_idle_over_us 通过定时器判断接收头输出是否还在持续变化如果 500us 内没有新的低脉冲说明刚才的电平只是噪声状态回到 IDLE。把红外状态机和 Modbus 串口接收放在同一个主循环里时注意不要让串口中断处理时间过长。红外载波是 38kHz接收头输出的脉冲宽度在微秒级状态机单次执行时间尽量控制在 100us 以内否则会漏掉连续脉冲。这也是 Modbus 单片机帧接收数据程序里“超时判定”使用的同一种定时器范式。4.3 数字输出与模拟测距的差别一体化接收头的 OUT 是数字电平只能给出“有没有反射物”无法精确测距。如果项目需要区分 5cm 和 15cm 的反射距离应该改用光敏二极管加放大电路或者通过发射电流调制后测量接收幅值。方案输出类型能测距适用场景一体化接收头 38kHz数字脉冲否避障、循迹、边界检测光敏二极管 运放模拟电压是接近感应、距离档位对射式红外开关量否测速、计数很多毕业设计里红外测距模块和红外避障模块容易混用。抗干扰发射接收一体板属于避障用途不能直接拿来替代模拟量测距模块。拿到原理图先看接收端是数字 OUT 还是模拟 OUT这决定了后面程序是写状态机还是写 ADC 采样。5. 整机调试示波器、串口和距离测试5.1 上电前的三个检查点第一量 VCC 和 GND 是否短路。带 USB 下载线部分的工程最常出现极性反接特别是黑色 USB 下载线上若有二极管要确认二极管方向对着 USB 5V 供电入口。第二检查红外发射管正负极。发射管引脚长度通常表示正极剪脚后就不好区分用万用表二极管挡测压降可以判断点亮电压约 1.2V。第三确认接收头没有插反。裸接收头外壳金属屏蔽层有时会与 GND 相连插错后 VCC 对地可能接近短路。5.2 示波器观察点怎么接示波器探头先接发射管阳极确认 38kHz 调制波是否存在。若没有查定时器初始化是否被执行主循环是否把 IO 直接置高把波形拉成了直流。确认发射端正常后再把探头移到接收头 OUT用一张白纸板在 10cm 处来回遮挡观察 OUT 是否出现低电平脉冲。时间轴放在 20us/div 可以清楚看到 38kHz 载波放在 1ms/div 适合看整段发射门控。若 OUT 始终为低先用不透明物体挡住接收头判断是外部红外干扰还是自身发射光串扰。挡住后仍为低说明接收头已经饱和或内部 AGC 被强光压死这时可以降低发射限流电阻值并把发射管和接收头之间的挡墙加高。5.3 串口打印状态数据用串口配合上位机观察触发状态比每次看指示灯更直观。下面是一段简化的串口调试代码检测到反射时输出状态计数void main_loop(void) { while (1) { ir_task(); // 执行接收状态机 if (ir_event_flag) { ir_event_flag 0; putchar(R); // 输出 R 表示反射触发 putchar(0 detect_cnt % 10); putchar(\n); } } }串口波特率建议先用 9600STC 单片机在 12MHz 晶振下 9600 波特率误差较小。注意状态机检测到事件后不要立即长时间发送字符串串口阻塞会占用几十毫秒下一段红外载波可能已经丢失。工程上更推荐只置事件标志由主循环用 FIFO 缓冲区异步发送。5.4 误触发和距离不足的调试排除表现象关键检查点处理方式没有输出发射管是否发光、载波是否工作用手机摄像头看红外光斑检查 T0 中断一直触发环境光过强或接收头临近饱和减小发射电流增加二次确认距离太近发射管和接收头间距/挡墙太矮拉开间距到 10mm 左右加挡墙距离跳变电源纹波大电机换向瞬间压降接收头 VCC 端并联 10uF 电容调试时可以用普通遥控器对着板子按键如果接收头输出有明显变化说明接收通路正常此时若不接任何抗干扰处理板子必然误触发。抗干扰的目标就是把这种误触发率压到“连续 2 个脉冲确认”以上。6. 从课程设计到小批量PCB 走线要求与应用细节验证6.1 接收头焊盘下方的铜皮挖空在 Altium Designer 中对接收头正下方区域做 PCB 板铜皮挖空能有效减少地平面上的开关噪声耦合。操作时注意挖空区域不能覆盖接收头的 3 个焊盘否则会出现连接中断。按照原板设计挖空区域边缘距离焊盘至少留 0.2mm防止 PCB 加工误差造成破孔。先画辅助线再生成挖空区最后铺铜验证连通性这一串动作做完后 DRC 还能保持全绿。6.2 丝印方向和小批量防呆直插封装的红外发射管和接收头外观都是黑色引脚排序很容易在手工插装时搞反。我一般会在丝印层把发射管正极用横线标出接收头按半圆表示引脚顺序。丝印漏了这些信息小批量生产时插件工看错一个元件就够返工。在接收头附近加上“IR-RX”和方向箭头在发射管附近加上“IR-TX”后期维护不用一直翻原理图。丝印模糊时优先补这两处比补元件标号更实用。6.3 出 Gerber 前的最后核对打样前建议从 DXP 工程导出 Gerber而不是直接把 .PcbDoc 发给 PCB 厂。Gerber 文件转成 PCB 文件的做法在返工时也常用把原 Gerber 再导入 Altium可以验证孔位和铜皮一致性。导出时勾选所有需要的光绘层和钻孔文件确认顶层丝印包含上一步新增的方向箭头。最后用 PCB 厂家的在线检查工具跑一遍连接性和间距检查确认后再投板。这样抗干扰红外发射接收一体板就可以从小批量生产的视角完成一轮完整验证。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门