简介:一份面向电子初学者的红外发射接收电路讲解文档,围绕HS38(HS0038)红外接收模块和38kHz方波信号的生成与检测展开,可帮助入门者理解遥控设备、智能家居等场景中的基础红外通信原理。压缩包内包含1个doc文档,体积仅47KB,内容精炼,直接给出HS38常见引脚图及简单发射接收电路示意,省去网上难以查找的麻烦。文档详细介绍了使用单片机或555定时器产生38kHz方波的方法,并指出通过调整20%~30%占空比可降低发射功率,同时可借助示波器观察HS38输出脚的高低电平变化来验证电路是否正常工作;还提供了针对少数引脚不一致模块的试触鉴别思路,方便初学者动手调试。这份资料已有1667人学习下载,适合作为电子技术课程或课外实验的配套参考,帮助初学者建立从红外发射到接收的完整认知。
1. 一个红外发射接收电路能做多少事:38kHz 调制才是关键词
红外发射接收电路大概是电子入门里最容易被低估的实验。一个红外发射管、一个接收模块、几根杜邦线,看起来连限流电阻都没有,却能实现不依赖 WiFi 和蓝牙的点对点信息传输:给发射管加上 38kHz 方波,接收模块 HS38 的输出脚立刻拉低到 0,手一挡或停止发射,输出脚立刻回到高电平 1。对刚接触单片机、想做智能小车避障或者自制遥控器的人来说,这套电路的真正价值在于把"看不见的光"变成一张能直接观察的电平波形,从而理解载波调制到底是怎么一回事。很多人第一次玩的时候直接把发射管当灯珠点亮,发现接收模块根本没反应,问题就出在没把光调制成 38kHz。下面从接收模块内部结构讲起,逐步拆清楚 555 和单片机产生 38kHz 方波的参数设置、示波器实测方法,以及几条最容易翻车的细节。
2. 接收模块 HS38 不是光敏二极管:带通与解调才是核心
2.1 半个黑匣子的内部结构:光电二极管、带通、AGC 与解调输出
把 HS38 当成光敏二极管用,是新手最先掉的坑。光敏二极管输出的是随光强变化的模拟电流,而 HS38 输出的是干净的数字电平,两者本质上是两种器件。HS38 这类一体化红外接收模块,内部大致包含了四部分:光敏接收管负责把红外光变成电流;前置放大器把微弱信号放大;38kHz 带通滤波器把非目标频率的成分滤掉;最后经过比较整形和输出级,对外呈现标准的高/低电平。
所以它的行为可以概括成一句话:收到 38kHz 调制红外光时输出低电平 0,没有收到时输出高电平 1。这里的关键是"调制"两个字。用手电筒直射接收面,输出不会变低,因为手电筒是直流光,在带通滤波器眼里属于低频成分,直接被滤除。同样,旁边有人用空调遥控器按键,如果遥控器恰好也是 38kHz 载波,HS38 的输出也会跟着抖动——这就是后面避坑章节要处理的干扰问题。
另一个容易忽略的点是输出脚能不能直接接单片机。HS38 输出级通常已经内置上拉或推挽结构,可以直接驱动单片机的 GPIO 输入引脚,不需要额外加上拉电阻。如果手头模块是集电极开路输出型,则必须加一颗 10kΩ 上拉到 VCC,否则输出脚悬空时电平不定。判断方法是看模块手册里的输出结构说明,没有手册时用示波器测空载输出是否稳定在高电平来反向确认。
2.2 频率为什么刚好是 38kHz:标准、干扰与器件性能的平衡
38kHz 不是一个拍脑袋定出来的数。早期红外遥控系统在制定方案时,要同时避开几类干扰:电源工频 50/60Hz 以及它的谐波集中在几千赫兹以下,接收端需要把这些滤掉;荧光灯和节能灯的驱动频率虽然也会产生红外噪声,但能量集中在低频段或特定高频段,38kHz 落在一个相对干净的位置。再加上光电二极管和红外发射管在高频段的响应会衰减,载波频率定得太高,发射效率和接收灵敏度都会下降;定得太低,又容易被环境光噪声覆盖。综合下来,36kHz 到 40kHz 就成了红外遥控的通用频段,而 38kHz 是其中最主流的取值。
市面上常见的 38kHz 接收头型号不少,引脚功能大体一致,但中心频率可能有细微差别。
| 型号示例 | 中心频率 | 输出逻辑 | 备注 |
|---|---|---|---|
| HS38 / HS0038 | 38kHz | 收到载波输出低 | 常见于遥控接收 |
| TL0038 | 38kHz | 收到载波输出低 | 引脚兼容性较好 |
| VF0038 系列 | 36/38/40kHz 可选 | 收到载波输出低 | 选购时确认后缀频率 |
要注意的是,HS38 的带通不是无穷窄,通常在中心频率 ±2kHz 至 ±4kHz 范围内仍能响应,但灵敏度会明显下降。有人用 555 随手搭了个 40kHz 的方波,发现近距离也能触发,那是碰巧落进了带宽范围;如果把频率偏到 50kHz 以上,接收头大概率纹丝不动。所以调试时先确认载波频率,再用示波器看实际波形,不要默认"差不多就行"。
2.3 引脚判别:丝印、斜切角与试触法的正确顺序
HS38 这类三脚模块的封装很有辨识度:黑色环氧外壳,一侧有凸起的接收面,另一侧伸出三根 2.54mm 间距的引脚。麻烦的是,不同品牌对引脚顺序的定义并不统一,常见排列可能是 OUT/GND/VCC,也可能是 VCC/GND/OUT,插反就会烧模块。网上很难找到通用引脚图,所以判别要按优先级来。
第一步看外壳特征。多数模块在 1 脚方向留有一个斜切角或注塑圆点,这是封装厂用来标记方向的参考点。第二步看丝印,型号字样旁边的缺口或圆点位置通常对应 1 脚,但这个规律在杂牌模块上不一定可靠。第三步才是试触法,而且必须带着限流和短接触的前提来做。
| 外观特征 | 含义 | 处理方式 |
|---|---|---|
| 外壳斜切角 | 1 脚参考标记 | 配合手册确认引脚定义 |
| 丝印型号旁圆点 | 部分厂商标记 1 脚 | 优先查数据手册核对 |
| 表面无任何标记 | 杂牌或散装模块 | 用万用表二极管档辅助判断 |
用万用表二极管档测引脚间寄生结构时,GND 与 VCC 之间通常会看到 0.4V 到 0.7V 的正向压降,因为模块内部有逻辑电路和保护二极管;如果两脚间完全不通,多半是信号脚和保护结构的关系。这个规律能帮你排除一部分错误接法,但最终确认还要靠 4.3 小节的通电视触流程。我之前拿到一包无标记模块,就是靠斜切角加二极管档先圈定 GND 和 VCC,再把剩下那根当 OUT,通电后一次成功。
3. 发射端怎么产生 38kHz 方波:555 定时器参数计算与低占空比改造
3.1 555 标准接法:先算出频率,再谈占空比
用 555 定时器做 38kHz 载波源是最常见的方案,因为 NE555 到处都是,成本也低。标准无稳态接法的频率公式是 f = 1.44 / ((R1 + 2 × R2) × C),其中 R1 是接在电源和放电脚之间的电阻,R2 是放电脚到定时电容之间的电阻。这个公式的前提是定时电容从 1/3 VCC 充到 2/3 VCC、再放回 1/3 VCC,每次充放电周期都通过 R1 和 R2 的串并联路径完成。
实际取值时,我习惯先把电容选定在 680pF 到 1nF 之间,然后反推电阻。电容选太大会让电阻值掉到几百欧,功耗上升;选太小又会让电阻值偏大,受引脚分布电容影响明显。举一个可直接抄的参数组合:
| 目标频率 | C | R1 | R2 | 理论频率 | 理论占空比 |
|---|---|---|---|---|---|
| 38kHz | 680pF | 1.2kΩ | 27kΩ | 约 38.4kHz | 约 54% |
| 38kHz | 820pF | 1.5kΩ | 22kΩ | 约 38.9kHz | 约 55% |
电阻取 E24 系列标准值后,理论频率会偏离 38kHz 一点,这没关系。上电后用示波器实测发射脚波形,如果频率偏高,就微调 R2 增大阻值;频率偏低,就减小 R2。每换一次电阻,都要重新看一次波形,不要只看计算值。
还要提醒一点:NE555 的频率精度受温度影响,定时电容最好选 C0G/NPO 材质的陶瓷电容,别用高介电常数的 X5R/Y5V,后者容值随电压和温度漂移明显,可能会把 38kHz 偏到 42kHz 去。
3.2 50% 占空比不够用:二极管改造与发射管限流
标准 555 接法输出的占空比天然大于等于 50%,高电平时间比低电平长。这在驱动红外发射管时是个问题:发射管在载波高电平期间导通发光,占空比越高,平均电流越大,连续工作时外壳会烫手。原资源里提到的 20% 到 30% 占空比,就是为了在保证接收头能识别载波的前提下,把发射功率压下来。
把占空比降下来的常见做法是在定时电阻上并联二极管,让充电和放电走不同路径。充电时电流经二极管正向导通,跳过部分电阻,高电平时间变短;放电时二极管反向截止,电流按原路径走,低电平时间保持不变。这个改装的难点在于二极管方向接反会导致占空比反而升高,我用示波器观察时踩过这个坑。调试顺序建议是:先把标准接法调到 38kHz,确认发射管两端波形正常,再并上二极管观察占空比变化,一次只改一个变量。
发射管电流也不能忽略。红外 LED 的正向压降通常只有 1.2V 到 1.5V,直接接 5V 电源会过流烧毁。原资源里为了简化教学省略了限流电阻,但实际使用时必须补上。限流电阻的计算是 R = (VCC - VF) / I,按峰值电流 10mA 到 20mA 取值:
| 供电电压 | 红外 LED VF | 目标峰值电流 | 建议限流电阻 |
|---|---|---|---|
| 3.3V | 1.3V | 10mA | 200Ω |
| 5V | 1.3V | 15mA | 约 247Ω,取 220Ω 或 270Ω |
3.3 单片机 PWM 输出 38kHz:参数计算与代码示例
如果手头有单片机,用 PWM 模块产生 38kHz 比 555 省事得多,频率稳定度也好一个量级。核心思路是让定时器以 38kHz 的频率循环计数,然后通过比较寄存器控制输出引脚在一个周期内的高电平时间。
/* 定时器 PWM 初始化伪代码,适用于常见 8 位定时器 */ #define F_CPU 12000000UL /* 系统时钟 12MHz */ #define PWM_PERIOD 26 /* 定时器周期计数,38kHz 对应的计数值 */ #define PWM_DUTY 7 /* 高电平计数值,约 27% 占空比 */ void pwm_38k_init(void) { /* 配置定时器为快速 PWM 模式,计数上限 PWM_PERIOD */ /* 配置比较寄存器 OCR = PWM_DUTY */ /* 使能输出引脚,当计数小于 OCR 时输出高电平 */ }PWM_PERIOD 的来历:38kHz 对应周期约 26.3us,12MHz 时钟下每个机器周期 1us,所以一个载波周期需要的计数次数是 26,实际频率约 38.46kHz,已经在 HS38 的带宽范围内。PWM_DUTY 取 7,高电平时间约 7us,占空比约 7/26 约 27%,正好落在原资源推荐的 20% 到 30% 区间。如果换用 8MHz 晶振,PWM_PERIOD 就是 8MHz/38kHz 约 210,需要改用 16 位定时器;如果换用 16MHz,PWM_PERIOD 约 421,同样需要 16 位计数。调整占空比时,只需修改 PWM_DUTY,保持 PWM_PERIOD 不变。
单片机输出脚的驱动能力通常只有几毫安到二十毫安,驱动红外发射管时同样要串限流电阻。另外,如果单片机引脚输出的是 3.3V 电平,而接收模块用 5V 供电,电平兼容性一般没问题,因为 HS38 只关心有没有载波,不关心发射端电压多高。
4. 示波器实测链路:从发射管到接收输出的完整验证流程
4.1 静态检查:先量供电,再量输出,别一上来就跑方波
很多人拿到电路第一件事就是把发射端和接收端同时上电,然后盯着示波器看有没有波形。这个习惯不好,因为一旦没反应,你分不清是发射端的问题还是接收端的问题。我一般会让接收端先单独上电,做一个静态检查。
第一步,用万用表直流档量 HS38 的 VCC 和 GND,确认电压在 4.5V 到 5.5V 之间,模块在 5V 供电下工作最稳定。第二步,示波器探头接 OUT 脚,地线夹接 GND,正常时应看到接近 VCC 的高电平,比如 4.8V。第三步,用手指在接收面正前方快速晃动,OUT 上会同步出现低电平毛刺,这是因为手指遮挡和反射改变了到达接收面的红外光强度,而模块内部的带通和整形电路对变化产生了响应。如果第三步完全没有反应,先怀疑引脚定义是不是搞错了,尤其是 OUT 和 VCC 对调的情况。
静态检查的价值在于把"接收模块本身好不好"这个问题先回答掉。如果接收端自己就输出乱跳,那后面发射端做得再好也白搭。反过来,如果静态下 OUT 稳定在高电平,手指晃动有毛刺,说明模块供电、引脚、输出级都正常,问题只可能出现在发射端或光路上。
4.2 遮挡与距离测试:判读口诀"照射为低、遮挡为高"
发射端调好之后,把红外发射管放在与 HS38 接收面同一水平线上,间距先设 20cm 到 30cm,不要贴着放。示波器通道接 HS38 的 OUT,此时应该看到低电平。用手掌或一块不透光纸板挡在发射管和接收头之间,OUT 立刻跳回高电平。判读口诀就八个字:照射为低,遮挡为高。
这里有个容易误判的细节:用手直接捂在接收头透镜上,有时候输出反而变低,因为手会反射红外光,而且手掌靠近时接收头可能进入饱和区,波形表现不稳定。更稳的遮挡方式是用硬纸板挡在发射管出光路径上,或者直接把发射端断电。遮挡测试时还要注意示波器的时基设置,不要用太快的时基去看一个持续变化的电平,把时基设在 10ms 到 100ms 档,能看到清晰的跳变沿即可。
距离测试方面,我习惯从 30cm 开始,每缩短 10cm 观察一次输出波形。短距离内波形依然干净的,说明链路没问题;如果近距离输出乱跳或持续低电平,大概率是接收头饱和,解决办法是拉开距离或衰减光强。这个过程能同时验证发射端占空比是否合理、限流电阻是否合适、光路是否对准。
4.3 试触法鉴别引脚:一种有前提、要限流、短接触的野路子
原资源里说网上很难找到引脚图,建议用试触法鉴别。这个方法在实操中确实有用,但必须控制风险。裸奔试触等于盲接电源,我见过有人把引脚顺序猜错,模块当场冒烟。正确的试触法要串电阻、短接触、一次只动一根脚。
第一步,模块断电,用万用表二极管档测三根脚两两之间的压降。通常能找到一对脚有 0.4V 到 0.7V 的正向压降,这对脚大概率是 GND 和 VCC。第二步,把模块剩下那根脚当 OUT 候选,通过一颗 1kΩ 电阻接到一个 LED 的负极,LED 正极接 VCC。第三步,给模块上电,用发射端对准接收面,观察 LED 是否随遮挡亮灭变化。如果 LED 状态与预期一致,引脚确认完毕;如果不对,断电后换一个候选脚重复。
| 试探动作 | 预期结果 | 引脚结论 |
|---|---|---|
| 二极管档测到 0.5V 压降 | 正向导通 | 该脚为 GND 或 VCC |
| OUT 串 1kΩ 接 LED,发射端对准 | LED 随遮挡亮灭 | 该脚为 OUT |
| 模块发烫或输出恒定 | 接反 | 断电重判引脚 |
每次通电试探时间不要超过一秒,测完就断电,防止模块已经损坏的情况下继续发热。这个方法只适用于实在找不到手册的杂牌模块,正规型号还是先查数据手册最稳妥。从那以后我拿到陌生接收头,都先做二极管档预判再上电,基本没有再烧过模块。
5. 红外收发避坑清单:最常见的 5 个翻车现场与排查顺序
5.1 输出脚电平忽高忽低:供电纹波与环境光是第一嫌疑
现象:HS38 的 OUT 脚在没有任何发射源的情况下,示波器显示一串不规律的低电平脉冲,或者万用表测到电压来回跳。
原因:最常见的是供电纹波混进了模块内部的比较器参考端,尤其是用开关电源给整个电路板供电时,开关噪声可能落在 38kHz 附近,被带通滤波器当成有效信号。另一个来源是周围环境里真的有 38kHz 红外光,比如隔壁的空调遥控器、电视遥控器,甚至某些 LED 灯泡的 PFC 驱动电路辐射。
解决:在 HS38 的 VCC 和 GND 引脚根部并一颗 100nF 陶瓷电容,再并一颗 10uF 到 47uF 的电解电容,电容尽量贴近模块引脚。这个组合能压住大部分高频纹波和低频跌落。如果处理后仍然乱跳,用不透明胶带完全封住接收面,输出依旧混乱,说明是电干扰而不是光干扰,重点查电源走线。反之胶带贴上后波形安静,说明是光干扰,调整接收头朝向或远离干扰源。
5.2 距离一近反而失灵:接收头自动增益控制导致饱和
现象:发射管和接收头相隔 2cm 到 5cm 时,OUT 一直低电平或者波形完全混乱;把距离拉到 20cm 以上,反而恢复正常。
原因:HS38 内部有自动增益控制电路,当入射红外光强度过大时,AGC 会自动压低前置放大器的增益,防止后级饱和。距离太近时,发射管的光直接灌进接收面,增益被压到最低,反而解调不出载波。这是这类一体化接收头的共性,不是模块坏了。
解决:近距测试不是这类模块的强项,把测试距离拉开到 20cm 以上。如果应用场景必须近距离工作,就在发射管前面垫一两层 A4 纸衰减光强,或者调大限流电阻降低发射功率,让接收端不要进入饱和区。判断是否饱和很简单:在发射管前逐步叠纸,观察 OUT 从乱跳变稳定的过程,找到一个合适的衰减量。
5.3 万用表测出中间值电压:动态脉冲被当成平均值
现象:发射端工作时,用万用表直流档量 OUT 脚,读数停在 1.2V 到 2.5V 之间的某个值,不上不下,怀疑模块输出级坏了。
原因:HS38 输出的是快速翻转的方波,万用表直流档测的是平均电压。占空比接近 50% 时,平均值大约就是 VCC 的一半,看起来像"坏了一半"。其实输出级工作正常,只是万用表不能表达快速变化的逻辑电平。
解决:优先用示波器观察,看波形高低电平是否干净。没有示波器时,用一颗 1kΩ 电阻串联 LED 接到 OUT 脚,LED 能随遮挡亮灭,就说明输出在正常翻转。部分数字万用表带频率档,可以直接测 OUT 上的频率,如果在 8kHz 到 20kHz 范围跳动,说明解调后的基带信号存在。用万用表判断动态信号是典型的思维误区,记住这个场景是"平均电压"而不是"真实电平"。
5.4 模块发烫或上电即异常:引脚判定错误在作祟
现象:正常接 VCC 和 GND 后,HS38 表面迅速升温,OUT 输出要么恒低要么恒高,怎么遮挡都没反应。
原因:引脚定义判断错误,最常见的把 OUT 当成 VCC 接上电源,或者把 GND 和 VCC 对调。一体化接收头内部有极性保护结构,但反向电压超过承受值后一样会烧。
解决:断电后先看外壳斜切角和丝印,重新用二极管档测引脚间的寄生结构。GND 与 VCC 之间有二极管压降,OUT 对 GND 和对 VCC 的压降通常一个通一个不通,据此大概率能圈定电源脚。确认引脚顺序后更换新模块再上电,上电前先串一个 100Ω 限流电阻在 VCC 路径上,如果模块短路,电阻会发热但不会立刻烧毁模块,这是低成本保护手段。换好模块后如果还发烫,就不要重复上电,改查供电电压是否正确。
5.5 发射管常亮但收不到:限流电阻与驱动能力的边界
现象:红外发射管像指示灯一样稳定发光,看不到闪烁感,接收端 OUT 一直高电平,怎么对准都没反应。
原因:发射管没有串限流电阻,一直出直流光;或者单片机 IO 口驱动能力不够,输出电流不足,发射管峰值电流太小。还有一个可能,就是 555 产生的方波频率严重偏离 38kHz,比如电容用错导致实际频率到了 60kHz 以上。
解决:先量发射管两端的波形,确认是不是 38kHz 方波。如果输出恒定高电平,说明发射端没有在振荡,检查 555 的触发脚和阈值脚连线。如果是方波但频率不对,用示波器数一下周期,按 f = 1/T 换算成频率,然后回头调整 R2 和电容。确认载波频率正确后,再串上限流电阻,把发射管峰值电流控制在 10mA 到 20mA。最后把万用表拨到直流电流档,串进发射回路,看到 15mA 左右读数,说明驱动电流正常。这样从波形到电流逐项排查,比盲目换模块有效得多。
6. 进阶玩法:把 38kHz 接收头变成解码遥控信号的输入级
6.1 用捕获中断读脉宽:逻辑 0 与逻辑 1 的鉴别依据
HS38 输出的并不是 38kHz 正弦波本身,而是把载波解调后的基带脉冲:有载波的时间段输出低电平,没有载波的时间段输出高电平。遥控器就是利用这个特性,把载波的"有无"按时间长度编码成数据。常见遥控协议的典型值大致是这个量级。
| 脉冲组合 | 含义 |
|---|---|
| 低电平约 560us + 高电平约 560us | 逻辑 0 |
| 低电平约 560us + 高电平约 1690us | 逻辑 1 |
| 低电平约 9ms + 高电平约 4.5ms | 引导码 |
把 HS38 的 OUT 接到单片机的外部中断引脚,配合定时器测量每次跳变的间隔,就能读出每一段低电平和高电平的持续时间,再按协议规则拼出地址码和数据码。验证方法很简单:对着电视遥控器按一个键,用示波器看 OUT 波形,找一段引导码和连续的数据码,量出低电平和时间长度,和你手里协议文档里标注的值做对比。如果对不上,多按几个键取平均,因为遥控器发射时通常会把同一帧数据重复发送三次以上。
6.2 发射端三件习惯与一个简单的灵敏度验证技巧
说回发射端。我在实际项目里总结出三个改不掉的习惯:一是任何红外发射管都必须串限流电阻,就算临时用最小阻值档也要先串一颗;二是单片机产生载波时占空比固定在 20% 到 30%,不为了省事直接给 50%;三是接收模块的电源脚旁边永远有一颗 100nF 电容,除非板子上已经有大容量电容紧挨着。这三个习惯帮我挡掉了大半调试问题。
还有一个验证灵敏度的简单技巧:拿一张小纸条,贴在发射管出光面上,纸条厚度相当于光强衰减一档。正常距离下调到接收稳定的位置,然后逐步加纸层数,直到 OUT 开始乱跳。能承受的纸层数越多,说明链路裕量越大,这比靠手挡来感觉可靠得多。如果两三层纸就乱跳,说明发射电流或对准角度还有优化空间。
红外链路的调试本质是频率和光路的双重验证。从那次在近距饱和上吃过大亏之后,我每次做红外联调都强制自己走一遍三连验证:先静态测接收头高电平,再确认发射端 38kHz 波形和三成占空比,最后做遮挡测试看输出翻转。这套流程帮我少拆过很多次板子,也方便你复现时快速定位问题所在。希望帮到你。
本文还有配套的精品资源,点击获取