1. 光耦隔离电路为什么值得专门花一篇文章讲
做电子设计的人,尤其接触过家用电器控制板或工业控制设备的,对"光耦"这个名字肯定不陌生。它很小,四只脚或六只脚,黑色封装,看起来其貌不扬,但很多设备能不能稳定工作、能不能通过安规测试、会不会一上电就烧单片机,往往就看它用没用好。
先说一个很现实的场景:洗衣机控制板里,主控芯片是低压微控制器,工作电压5V或者3.3V,但外面要检测220V交流电的过零信号,还要驱动双向晶闸管去控制电机、进水阀。如果220V电网的噪声直接窜进单片机,轻则复位重启,重则直接烧掉芯片。工业环境更狠,PLC要接现场传感器的24V直流信号、接触器触点信号、变频器干扰,现场长线缆一拉几十米上百米,雷击浪涌、电机启停干扰全往输入端灌。要是隔离没做好,PLC模块烧了是小事,现场停机停产才是大问题。
这时候光耦就派上用场了。它的核心价值就四个字:电气隔离。输入端和输出端之间没有导线连接,靠光来传递信号,输入侧可以工作在220V交流环境,输出侧可以工作在5V低压环境,两侧地电位完全独立。这样设计的好处非常直接:低压侧不会被高压电网的浪涌打坏,抗干扰能力大幅提升,同时也能避免接地环路带来的噪声问题。
这篇文章我打算以两个实战项目为主线来讲。第一个是洗衣机控制板里的220V过零检测与继电器驱动,第二个是PLC数字量输入模块的隔离通道设计。这两个案例覆盖了家用消费电子和工业控制两个典型领域,光耦的选型思路、电路参数、踩坑点都不太一样,对照着看会更有价值。无论你是刚入门的电子爱好者,还是想系统补强隔离电路设计经验的工程师,这篇文章都值得你花半小时仔细读完。
顺便说一句,市面上面向工业PLC模块的成品方案里,数字量输入通道几乎清一色都会用光耦做隔离,只是封装、通道数、响应速度各有差别。看懂原理之后,很多看似高端的模块电路,其实也没那么神秘。
2. 光耦的工作原理与关键参数,搞懂这几个才能不翻车
2.1 内部结构:一粒LED加一个光敏接收管
光耦的完整名字叫光电耦合器,内部结构其实特别简单:一个发光二极管,一个光敏接收器件(常见的是光敏三极管,也有光敏二极管、光敏晶闸管、光敏双向晶闸管等),两者封装在同一个壳里。输入侧电流流过LED,LED发光,光通过内部透明介质照射到光敏接收管,接收管导通,输出侧回路就产生了电流。电信号通过"电-光-电"的路径跨越了隔离屏障,两侧没有任何直接电气连接。
这个结构看似简单,但它带来两个很关键的效果。第一,输入侧和输出侧之间没有公共地,两边可以各自独立供电,地电位互不牵连。第二,因为靠光传递信号,单向性非常强,输出侧的干扰很难反向串回输入侧,这对抑制共模干扰特别有用。
有人问,市面上的光耦,输入端和输出端之间的耐压能到多少?常规的4N25、PC817、EL357系列,隔离耐压通常在3750Vrms到5000Vrms之间,也就是说交流有效值3750V以上的电压施加在两侧之间能挺住1分钟左右。这个参数叫隔离耐压或者耐压隔离等级,在需要过安规认证的设计里是硬指标。
2.2 电流传输比CTR:光耦选型的第一个关键数
光耦最核心的直流参数是电流传输比,英文缩写CTR(Current Transfer Ratio)。定义很简单:输出侧集电极电流和输入侧LED正向电流的比值,通常用百分比表示。
比如说PC817A的CTR下限是80%,上限是160%。也就是说,给LED通10mA电流,输出侧理论上能拉出8mA到16mA的集电极电流。这个"范围"非常重要,因为光耦的CTR不是固定值,它受LED老化、环境温度、批次离散性影响很大。同一批次生产的光耦,CTR可能从80%到160%分布,温度一降可能衰减,LED长期工作还会光衰。
CTR怎么影响实际电路?最典型的场景是:你设计了一个输入电路,按照CTR=100%算好输出侧需要有10mA电流才能拉低单片机引脚,结果实际买到的光耦CTR只有70%,那输出侧饱和深度就不够,可能导致逻辑电平不稳定。所以设计时不能按典型值算,要按下限值算,并且留出至少30%到50%的裕量。
选光耦时会看到后缀字母,PC817A、PC817B、PC817C,其实就是CTR分档:A档80%~160%,B档130%~260%,C档200%~400%。做通用数字隔离,选B档或者C档会更好用,因为低CTR光耦在低温下更容易出现驱动能力不足的问题。
2.3 饱和压降、开关速度和集电极/发射极耐压
除了CTR,还有几个参数在搭实际电路时必须看。
第一个是输出侧的饱和压降VCE(sat)。光耦工作在开关状态时,我们希望它要么完全截止,要么深度饱和,这样输出波形才干净。PC817在输入电流足够、输出电流只有几毫安的情况下,饱和压降可以做到0.1V到0.2V,直接驱动TTL和CMOS逻辑都没问题。但如果输出电流很大,比如拉20mA,饱和压降可能会涨到零点几伏甚至更高,这时候就要检查逻辑电平阈值是否还满足要求。
第二个是开关速度。普通光耦PC817的响应速度很一般,传输延迟时间典型值在4微秒到10微秒级别,上升沿和下降沿还有一定的不对称。用在几十千赫兹以下的开关量传输、过零检测、继电器驱动这些场景,完全够用。但如果要传输高频脉冲信号,比如几十千赫兹以上的PWM或者串口信号,就必须用高速光耦,比如6N137、HCPL-0611或者数字隔离器方案。6N137的传播延迟在纳秒到几十纳秒级别,差了一个数量级以上。
第三个是输出侧集电极-发射极耐压VCEO。这个值决定了光耦输出侧能承受多高的电压。PC817的VCEO是35V,用在5V、12V、24V系统里都没问题。如果你要用光耦直接驱动小型继电器线圈,线圈工作电压是24V,那PC817还算勉强能用,但此时要注意继电器线圈的感性反峰电压。更稳妥的办法是光耦输出侧只做信号传输,驱动继电器的工作交给三极管或者达林顿管。
2.4 输入侧LED的电参数:1脚2脚并联电阻的问题从这里找答案
光耦输入侧本质上就是一个LED,所以它有正向电压VF、正向最大电流IF、反向耐压VR这些参数。典型红外面板的VF在1.2V到1.4V之间,最大正向电流50mA左右,连续工作建议不超过20mA,反向耐压通常只有6V左右,这一点经常被忽略。
网上被搜得很频繁的一个问题是:光耦1脚和2脚并联100欧电阻多大?这里说得直白一点,1脚和2脚就是LED的正负极,并联一个电阻通常有两种目的。第一种是为了给输入端提供一个直流泄放通路,防止感应电压积累到LED导通阈值之上,从而误触发光耦,这在长线输入、高阻态输入场景里很常见。第二个作用是配合输入端的串联电容或者电感,形成阻抗匹配或者滤波网络,改善EMC表现。100欧只是常见值之一,实际应用中从100欧到10千欧都有,具体取多少要看信号源内阻、干扰强度、功耗预算。如果你只是想让输入侧在无信号时保持稳定的关断状态,用10千欧左右的并联电阻就够了,功耗小;如果你在做的是高频信号匹配,100欧也不是不能选,但要算一下这个电阻会给信号源增加多少负载。
还有一点要特别注意,光耦LED的反向耐压很低,只有5V到6V。如果输入侧接的是220V交流,反向半周会有很高的反向电压直接加在LED上,这时候必须在输入端串联一个二极管来承受反向电压,或者反向并联一个二极管来钳位,否则LED会反向击穿损坏。洗衣机过零检测电路里就经常看到光耦输入端串联二极管或者加整流桥的接法,道理就在这里。
2.5 为什么说光耦是"最简但是有代价"的隔离方案
光耦的优点很突出:原理简单、成本低、单向隔离、容易实现模拟和数字的双向传递。但它也有一些固有短板。
最典型的就是响应速度上不去,普通光耦做不了高频信号传输。另一个是CTR随温度变化明显,低温时LED发光效率下降,光敏管增益也下降,整体传输比可能掉到常温时的70%甚至更低。再有就是LED的老化问题,长期大电流工作之后光通量会衰减,导致输出侧驱动能力慢慢下降。
还有一个在双向光耦方案里特别典型的缺陷,就是"固有零点死区"。双向光耦输入侧通常是两个反向并联的LED,交流信号过零的附近,两个LED都不导通,输出侧自然也不导通,这就在零点附近形成了一个死区。用双向光耦去检测交流过零信号、去触发双向晶闸管,零点附近会有一段不响应的时间。如果只是做普通的相位控制,这个死区可以接受;但如果做高精度的移相触发,比如需要精确到微秒级的导通角控制,零点死区就会带来明显的控制误差。这也是很多高精度调光、调压场合宁愿用隔离变压器加比较器方案,也不用双向光耦的原因。
3. 洗衣机控制板实战:220V过零检测与继电器驱动
3.1 洗衣机控制板到底需要隔离什么
一台全自动洗衣机的控制板,主控芯片要处理的信号和负载大概分三类。第一类是220V交流侧的负载,包括电机、进水阀、排水泵、加热管,这些负载绝大多数用双向晶闸管或者继电器控制。第二类是220V交流电的过零检测信号,用于晶闸管在电压过零附近导通,减少电磁干扰和电流冲击。第三类是前后面板上的按键、显示、门锁开关、水位传感器等低压信号,这些信号不直接接触220V,但如果控制板布局不好,高压侧的噪声还是会通过地线、走线寄生电容耦合到低压侧。
这里真正需要光耦参与的是第一类和第二类。继电器触点可以切断220V回路,但继电器控制线圈往往也是低压直流,如果直接用单片机引脚驱动继电器,线圈是感性负载,瞬间断电时会产生不小的反向电动势,而且继电器触点通断220V负载时,触点电弧会产生宽频带噪声,通过地线或者电源串扰就能干扰单片机。用光耦把单片机的控制信号和继电器驱动电路隔离开,再把驱动部分单独供电,噪声就没那么容易窜过来。
过零检测就更需要光耦了。单片机需要知道220V电压什么时候过零,才能在正确的时机触发双向晶闸管。直接用电容电阻降压从220V取信号,安全上没有保障,也过不了安规。方案就是用光耦隔离,让交流高压信号只出现在光耦输入端,单片机上只有一个干净的低压方波脉冲。
3.2 过零检测电路的具体搭法
洗衣机控制板上最常见的过零检测电路是这样的:220V交流L线经过限流电阻接到光耦输入端LED的阳极,LED阴极接到N线(零线),光耦输出侧接在单片机的中断引脚上。
限流电阻的取值是关键。光耦LED正常工作电流取5mA到10mA,假设220V交流有效值220V,峰值311V,电阻阻值用(220V - 1.2V)/8mA,也就是大约27千欧到33千欧。电阻功率不能按有效值算完就完事,要考虑峰值和电网波动。220V电网允许波动±10%甚至更高,峰值能到340V左右,电阻上的瞬时功耗按峰值算会很高。通常做法是用两个电阻串联,比如两个15千欧的电阻串联,单个电阻耐压不够时,串联可以分摊电压应力,同时也提高可靠性,防止单个电阻被击穿。
光耦输入端要加反向保护二极管吗?我之前遇到过新人直接拿光耦输入端接220V交流,没过多久LED就坏了。原因就是交流反向半周时,LED承受了超过反向耐压的电压。解决办法有两种:一种是在光耦输入侧反向并联一个普通二极管1N4148,让反向半周电流从二极管走;另一种是在输入端串联整流二极管,只让正半周通过。更稳的做法是使用两颗LED反向并联的"双向光耦",这样两个半周都能工作,也不会出现半周丢失的问题。但这个方案有明显的零点死区,用在电机过零检测上要评估精度是否够用。
输出侧电路就简单了。光耦输出端集电极接单片机VCC,通过上拉电阻到3.3V或5V,发射极接GND。输入侧有电流时,输出侧导通,集电极被拉到低电平;输入侧没有电流时,输出侧截止,集电极通过上拉电阻回到高电平。这样单片机收到的就是一个与220V频率同步的方波,通过检测下降沿或者上升沿就能判断过零时刻。
需要注意一点:光耦的输出波形边沿不会很陡,因为光耦导通和截止都存在延迟,而且集电极上拉电阻越大,RC时间常数越大,上升沿越缓。如果你要做精确的晶闸管触发,建议在光耦输出后加一级施密特触发器整形,比如用74HC14,或者用带施密特触发的单片机引脚内部配置。否则过零信号的抖动误差会被放大到触发角里,导致电机噪音变大。
3.3 继电器隔离驱动电路的接法
洗衣机里,功率更大的负载如加热器、部分电机回路,会优先选择继电器,因为继电器导通压降极小,不像晶闸管有功耗,且触点隔离非常彻底。继电器驱动电路我习惯用这样的结构:单片机GPIO输出控制信号,经过限流电阻接到光耦输入端,光耦输出侧单独供电,输出晶体管驱动继电器线圈,线圈两端反向并联续流二极管。
具体参数:光耦输入端限流电阻按单片机高电平电压3.3V、LED压降1.2V、电流5mA计算,(3.3X - 1.2X)/5mA大约430欧,取470欧。光耦输出侧用PC817,集电极接继电器供电电压12V,发射极接驱动三极管基极,三极管选用8050或者SS8050,基极串联一个1千欧到2千欧电阻。继电器线圈并联1N4007续流二极管,二极管方向是反向并联在线圈两端,断电时给感性电流提供泄放回路。如果不加这个续流二极管,三极管关断瞬间,线圈上会产生几十伏甚至上百伏的反向电动势,直接击穿三极管。
为什么继电器驱动要用"光耦+三极管"两级结构,而不是用光耦直接驱动继电器?因为PC817输出侧能承受的最大电流有限,VCEO是35V,饱和压降会随着输出电流增加而上升。如果继电器线圈电流四五十毫安,直接让光耦去拉,输出侧功耗大、发热明显,长期可靠性差。三极管承担主要的电流开关,光耦只负责传信号,各司其职,寿命和稳定性都会好很多。
3.4 洗衣机控制板布局时容易被忽略的爬电距离
光耦本身隔离了信号,但电路板上的物理布局也很关键。如果光耦输入端和输出端在PCB上的走线距离太近,爬电距离不够,高压电可以顺着板面漏电甚至打火,那么光耦的隔离就白做了。
实际设计中,光耦输入侧区域和输出侧区域要有明确的物理分隔,PCB上一般会开槽,把输入侧和输出侧的铜皮、走线隔开。光耦底部的焊盘之间,也要保证安规要求的爬电距离。比如220V交流侧到低压侧,污染等级2的情况下,基本绝缘的爬电距离通常要求3mm以上,加强绝缘要求翻倍。如果你没有把握,最简单的方法就是参考现有成熟电源模块的布板方式,照葫芦画瓢,不要自己自作聪明把两边走线贴着光耦走。
这个细节在产品开发阶段可能看不出问题,但送到安规实验室做耐压测试时,如果爬电距离不够,打耐压直接拉弧,整个设计就要推倒重来。轻则改版,重则整个结构对不上。所以我在这类电路上吃过亏之后,现在布板第一件事就是先把隔离带划出来,所有高压走线靠一边,低压走线靠另一边,中间留空或者开槽。
4. PLC输入模块实战:从24V开关信号到单片机引脚
4.1 PLC数字量输入通道的常见需求
工业控制里,PLC的数字量输入模块用来读取现场的开关量信号,比如接近开关、限位开关、按钮、接触器辅助触点等。这些信号常见的工作电压是24V直流,但现场环境和洗衣机完全不是一个量级。一是线缆可能非常长,几十米到几百米都有可能,长线会引入感应雷、电机启停浪涌、变频器谐波干扰。二是现场的24V电源和PLC内部5V/3.3V逻辑电源通常不是同一个地,直接连接会产生地环路,地电位差可能达到几十伏甚至更高,轻则信号误判,重则烧毁PLC模块。
所以PLC输入通道设计的第一原则就是隔离。每一路输入或者每一组输入,用光耦把现场24V信号和PLC内部逻辑电源隔离开。这也是为什么你看PLC模块的电路,输入端一排排光耦排列得整整齐齐。
PLC数字量输入还有一个很有意思的需求:要兼容源型输入和漏型输入。这说的是输入端子的电流方向。源型输入,也叫正逻辑输入,电流从PLC模块的输出端流向外部设备,外部设备给一个低电平信号;漏型输入,电流从外部设备流进PLC模块的输入端,模块内部一般是光耦LED的阴极接到公共端。简单理解,源型和漏型区别就是外部接线的正负方向不一样。设计输入电路时,最好能兼容两种接线方式,这样现场工程师怎么接都能用。
4.2 漏型输入电路的一种标准结构
最常见的是漏型输入,电路结构如下:PLC输入端子和24V电源正极之间,外部触点来切换。输入端子经过限流电阻接到光耦LED的阳极,光耦LED的阴极接到输入公共端COM,COM接到24V电源负极。外部触点闭合时,24V正极经过触点进入输入端子,限流电阻,LED,到COM负极,形成回路,光耦导通。触点断开时,回路断开,光耦截止。
这里限流电阻的阻值按照24V供电、光耦LED工作电流5mA到8mA计算。工业上为了抗干扰,输入回路的电流一般不会太小,但也不能太大,太大会让光耦LED长期工作接近额定极限。常见取值是4.7千欧到10千欧之间,配合24V电压,电流大概2.4mA到5mA左右。要注意,PLC输入电路为了增强抗干扰性,还会在输入端加RC滤波。R的取值和C的取值要看响应速度要求。一般数字量输入的滤波时间常数是零点几毫秒到几毫秒,太短滤不掉干扰,太长又会漏掉快速脉冲信号,需要结合使用场景调整。
PLC模块的抗干扰设计还有一招:输入端串联一个小阻值电阻,比如100欧到220欧,限制浪涌电流;再并联一个TVS管或者压敏电阻,把共模和差模浪涌电压钳位在安全范围内。这样即使现场有雷击浪涌进来,在最前端就被泄放掉了,不会伤到光耦。
4.3 兼容源型漏型的改进方案
如果要兼容源型输入,只靠上面那个单一电路是不够的,需要做桥式整流结构。思路是:在光耦LED输入端前面加一个二极管整流桥,这样无论外部接线让电流从哪个方向流入端子,整流桥都会把它整理成同一个方向,驱动光耦LED导通。
这样设计之后,源型接法和漏型接法都能工作。实际电路里,四个二极管分别放在输入端和COM端之间,光耦LED跨接在整流桥的输出端。这个方案有好处也有代价。好处是兼容性好,仓库里备一种模块,源型漏型现场都能用。代价是整流二极管有压降,每个二极管0.7V,两个二极管导通就有1.4V压降,会稍微降低光耦输入回路的驱动电流;同时整流桥结构让LED的半波导通变成了全波导通,零点附近依然存在死区,不适合对过零精度要求高的应用。
如果你做的是高端PLC模块或者定制化IO板,可以考虑用双向光耦直接替代"整流桥+单LED光耦"的方案。双向光耦内部就是两个LED反向并联,交流信号或者方向不定的直流信号都能直接让其中一颗LED导通,省掉了外部整流桥。但正如前面说的,双向光耦在零点附近有固定死区,响应时间也不是很出色,用在低速开关量没问题,如果要检测高速脉冲比如编码器信号,就要换高速数字隔离方案。
对于一般的按钮、限位开关、接触器触点这类低频信号,源漏兼容的整流桥方案完全够用,成本低,零件常见,维修也方便。
4.4 多通道PLC输入的光耦驱动能力分配
PLC输入模块通常有8路、16路甚至更多路,如果每一路都用一颗独立光耦,成本不高,但PCB面积会比较大。市面上也有多通道光耦,比如TLP521-4是四通道,PC847是四通道,用一颗芯片搞定四路隔离。不过多通道光耦的通道间串扰参数要看清楚,相邻通道同时高速翻转时,输出侧波形可能受到轻微影响。对低频开关量输入来说,这点串扰影响很小。
另一个实际问题是输出侧的电流能力。PLC模块的逻辑侧通常是3.3V或者5V单片机,一片单片机引脚有限,不太可能16路输入直接全部接在引脚上,一般会有扩展IO芯片,比如74HC165并行转串行,或者直接用单片机的GPIO口读。光耦输出侧的电阻取值,需要保证高电平和低电平都在单片机的逻辑阈值范围内,而不能只考虑"差不多"。
我实际做8路输入模块时,每一路光耦输出侧都用4.7千欧上拉电阻到3.3V,下拉到GND。输入有信号时,光耦导通,输出引脚被拉到低电平,大约0.1V到0.3V;没有信号时,上拉电阻把电平拉到3.3V。这里存在一个隐患:如果光耦因为干扰误导通,哪怕只是轻微导通几毫安,拉低电平的输出电压也可能从3.3V下降到2V以下,处在逻辑电平的不确定区间。解决的办法是,在光耦输出侧再加一个施密特触发器缓冲器,或者用带有施密特触点的输入引脚,让电平翻转干脆利落。
5. 设计关键细节:零点死区、100欧并联电阻、抗干扰处理是重灾区
5.1 双向光耦的零点死区到底有多大
前面多次提到双向光耦的固有零点死区,这里展开讲一讲。双向光耦输入侧是两颗LED反向并联,在交流输入的一个完整周期里,正半周A管亮,负半周B管亮。问题出在交流电压过零点附近,电压非常低,LED的正向电流几乎为零,必须等电压升高到LED导通阈值以上(大概1V到2V),才会有明显电流。这意味着,在零点前后各有一段角度范围内,光耦是不导通的,输出信号会出现一个"缺口"。
这个间隙有多大?以50Hz工频为例,一个周期20毫秒,对应360度电角度。LED导通阈值按1.5V计算,对于220V交流(峰值311V)来说,达到1.5V所对应的时间非常短,大概几十微秒级别,折合电角度不到零点几度。但对于24V交流或者小信号的交流检测,导通阈值在电压波形中占的比例就大多了。假设输入是5V交流,峰值7.07V,需要达到1.5V才开始导通,这对应的角度大约是反正弦(1.5/7.07),大约12.2度。也就是说,每个零点附近有大约12度的死区,正半周起始的12度内没有信号,负半周也一样。对工频过零检测来说,这意味着你检测到的过零时刻会比真实过零晚或者早一段固定角度,而且这个角度随输入电压幅值波动而变化。
如果只是控制晶闸管做普通的调功调压,死区的影响可以接受,因为晶闸管的触发角本身也不需要精确到零点几度。但如果要做高精度移相控制,比如精密调光、感应加热功率精确控制,零点死区会导致起始导通角不准确,进而影响功率输出精度。所以工业上做高精度移相的场合,很少直接用双向光耦,而是用隔离运放加高速比较器,或者用脉冲变压器方案。搜到"双向光耦方案 电路最简 缺点存在固有零点死区 不适合高精度移相"的说法,说的就是这件事。
5.2 输入端并联电阻的作用与阻值选择
再回到"光耦1脚和2脚并联100欧电阻"这个热搜话题,我猜很多人是被某个电路图里的并接电阻难住了,想知道它到底起什么作用、怎么取阻值。前面提了泄放和匹配两个方向,这里再补充第三个常见用法:抗误触发。
在PLC输入模块这种长线环境里,输入导线很长,会像天线一样接收空间电磁干扰。光耦LED的导通阈值比较低,正向电压1V多,只要几个微安的感应电流就能让LED发光,导致光耦误导通。输入端并联一个电阻后,感应电流先被电阻分流走,只有当信号源的能量足够大,能在电阻两端建立起超过LED导通电压的电压时,光耦才会动作。这就相当于给干扰信号增加了一个门槛。
具体阻值怎么选?如果信号源是PLC输出模块、单片机IO、继电器触点,内阻都很大,那么并联电阻可以选择10千欧到100千欧,这样在正常信号电流下,电阻上分掉的电流很小,不会影响光耦导通。如果你是为了高频信号做阻抗匹配,低阻值比如100欧到1千欧才有意义,但这会让信号源承受更大的负载电流。
我见过有人照抄一个电路,输入端用100欧并联电阻,信号源是单片机引脚,结果单片机引脚输出高电平时,大部分电流都被100欧电阻吃掉了,光耦反而驱动不足。这就是没搞清楚并联电阻用途的典型翻车。所以看到电路图里1脚2脚并联电阻,别急着照抄,先搞清楚它在这条回路里是干什么用的。
5.3 输入端滤波电容:能抗干扰也可能让你丢信号
很多人喜欢在光耦输入端并联一个小电容来做滤波,比如100nF或者1uF。这个方法对低频干扰确实有效,但代价是信号的边沿会被拉缓,导通和关断都会有延迟。
具体算一下:如果并联1uF电容,输入信号源内阻是10千欧,那RC时间常数就是10毫秒。50Hz信号半个周期是10毫秒,信号刚充上电电容还没来得及超过LED导通阈值,输入信号就要切换了,光耦可能根本来不及导通。所以并联滤波电容不是不能加,但电容容值必须和信号频率、信号源内阻配合起来算,不能随手挂一个大电容上去。
工业PLC输入通常会让滤波电容取值小一点,比如1nF到10nF,配合几毫秒的软件消抖,效果比大电容更好。大电容适合那种对响应速度要求极低、但干扰特别强的场合,还要保证信号持续时间远大于RC常数。
5.4 输出侧上拉电阻选多大才合适
光耦输出侧是开集电极结构,必须接上拉电阻才能输出高电平。上拉电阻大小会影响速度、功耗和驱动能力。
速度上,上拉电阻和负载电容构成RC充电回路。电阻太大,高电平恢复得慢,波形上升沿会变得很缓;电阻太小,输出级的功耗会增加,光耦输出三极管在导通时承受的电流也大。市面上常见的取值是1千欧到10千欧,5V系统里常用4.7千欧或者10千欧。
驱动能力上,你需要保证光耦导通时,输出端电压能低于下一级电路的低电平阈值。比如单片机引脚高电平是3.3V,低电平阈值是0.8V,上拉电阻4.7千欧,光耦输出饱和压降按0.2V算,没问题。但如果上拉电阻只有330欧,光耦导通时的输出电流就是(3.3V-0.2V)/330欧,将近9.4mA,这个电流对PC817来说不算大,还能接受。要是上拉电阻再小到100欧,电流超过30mA,就会逼近甚至超过光耦输出侧的额定电流,时间长了容易出问题。
所以输出上拉电阻不能单看一个参数,要结合负载电容、逻辑阈值、光耦允许的电流范围一起考虑。我的习惯是先定逻辑阈值,再定上拉电流,通常让导通电流控制在2mA到5mA之间,然后根据负载电容核算边沿速度,不够快就换高速光耦,而不是把上拉电阻一降再降。
6. 搭建实测电路:从面包板到验证,必须做的几个测试
6.1 用面包板验证过零检测电路的步骤
纸上谈兵比较空,这里给出一个可以实际搭建的过零检测验证方案,适合先在桌面上用小电压模拟220V交流。不要直接拿220V交流做第一次验证,安全风险大。可以先用一个24V交流变压器或者可调交流电源,把光耦输入端通过限流电阻接到低压交流上,输出侧用示波器观察波形。
搭好之后,第一步先测输入侧电流。用万用表串在LED支路里,确认电流在适合的范围内(比如5mA到10mA),太小光耦输出可能不足以完全导通,太大LED会过度发热。第二步测输出侧波形,看示波器波形是否是一个干净的方波,边沿是否锐利。第三步测相位延迟,对比输入电压过零点和输出方波跳变点之间的时间差。如果你的应用对过零时机有要求,这个延迟的时间值就是你后面软件补偿的基础。
没有示波器怎么办?用万用表也能判断:输入侧接上交流电,输出侧接一个LED串联电阻到VCC。输入信号时,输出LED应该以工频频率闪烁,频率可以通过手机慢动作视频确认闪烁是否稳定。但这种验证只能看通断,看不到边沿和延迟,所以有条件还是建议入手一台入门示波器,哪怕是二手的,做这类电路开发完全够用。
6.2 示波器波形观察要点
用示波器看光耦隔离电路,重点看几个地方。
第一,看输出低电平是否足够低。正常情况下光耦饱和导通,输出低电平应该接近0V。如果低电平明显偏高,比如超过0.5V甚至1V,说明输入电流不足,光耦没有进入深度饱和,需要增大输入侧电流或者减小输出侧电流。
第二,看上升沿是否太缓。光耦截止时,上拉电阻给负载电容充电,如果上升沿很慢,输出波形成了一个斜坡而不是矩形波,说明上拉电阻太大或者负载电容太大,后级电路可能识别不了,出现多次触发或者漏触发。
第三,看有没有振铃。输入端信号跳变时,输出侧因为寄生电容和导线电感可能产生振荡,尤其是长线连接时,示波器上能看到高低电平之间来回抖动几下。有振铃的话,就要在输出侧加个小电容滤掉,或者用施密特触发器整形。
实际测量时要注意示波器探头的接地问题。示波器探头的地线夹子通常和示波器外壳地相连,如果测量光耦的高压输入侧,千万别把地线夹子夹在220V回路的非地端子上,否则会短路。正确做法是把示波器和被测电路通过隔离变压器隔离,或者直接用差分探头、隔离探头,很多实验室在调试初级电路时烧示波器,都是探头地线惹的祸。
6.3 万用表能测什么
如果没有示波器,万用表也能做基本的功能性验证。
用二极管档可以测光耦好坏。光耦拆下来,输入侧两个脚之间应该能测到二极管正向压降(大约1V左右),反向应该不通。输出侧集电极和发射极之间,在输入侧不加电流时,应该呈现高阻状态,加上输入侧电流(比如通过一个电阻接5V电源串LED)后,输出侧会被导通,万用表电阻档能看到阻值明显下降。这个办法虽然没法验证速度,但能排查接线错误、器件损坏这类基本问题。
用直流电压档测工作点就更直接了。给电路通电后,分别测光耦输入侧LED两端电压、输出侧集电极电压、上拉电阻两端电压。哪个点的电压和理论值对不上,就能大概定位是哪个环节出了问题。比如LED两端是0V但电路有电流,那可能LED焊反了或者并联保护二极管把电流都短路走了;输出集电极一直高电平,那就是光耦根本没导通,回头查输入侧供电和限流电阻。
6.4 上电时序和浪涌测试,这两个测试别跳过
做可靠的隔离电路,除了功能验证,还要做两个更接近真实工况的测试。
第一个是上电时序测试。PLC输入模块或者洗衣机控制板,上电瞬间供电电压是斜线上升的,不是瞬间跳到5V或者24V。如果光耦输入侧已经有外部信号而输出侧逻辑电源还没建立,输出侧可能出现不确定的状态,后级单片机引脚可能会收到一个假的脉冲。解决方法是加一个电源监控芯片(POR电路),或者在上电期间把单片机的输入使能延后,等电源稳定后再读取输入信号。这个测试很简单,反复上下电一百次,看有没有误动作。
第二个是浪涌抗扰度测试。工业现场最可怕的是雷击浪涌,标准里的测试波形是1.2/50us组合波。在做EMC摸底测试之前,你可以在输入端临时加一个压敏电阻或者TVS管,然后用浪涌发生器打正负极性各几十次。如果光耦没有损坏、输出状态没有被误翻转,基本就能放心了。没有浪涌发生器的话,至少可以用一个高压电容充电后通过电阻开关放电来模拟一个简单的尖峰脉冲,观察光耦输出会不会抖动。
这两个测试本来可以放到最后一章讲,但我把它提前放在验证环节一起说,因为太多人在实验室里测试一切正常,一到现场就被浪涌打得措手不及,问题往往出在测试没做够。
7. 选型建议与常见替换方案对比
7.1 常用光耦型号横向对比
市面上的光耦型号非常多,这里只挑几个最常接触到的做对比。
PC817和EL357是最常见的通用光耦,四脚封装,CTR档位丰富,价格便宜,适用面广。EL357是PC817的改进兼容型号,引脚定义完全一致,可以直接替换,CTR一致性稍微好一些。TLP521和TLP624也是老牌四通道光耦,通道多,省PCB面积,但通道之间的一致性一般。
6N137是高速光耦,内置推挽输出,传输延迟在几十纳秒量级,适合做485通信隔离、PWM信号隔离。HCPL-0601和HCPL-4504也是高速系列,但引脚和输出类型略有差异,要根据具体手册看。
MOC3021系列是双向晶闸管触发器光耦,内部是LED加双向晶闸管过零触发结构,专门用来驱动大功率双向晶闸管,一般是交流电机、加热器控制的桥接环节。注意MOC3021里面的过零检测电路和普通光耦完全不同,选用时别和普通光耦搞混。
| 型号 | 通道数 | 速度 | 典型应用 | 备注 |
|---|---|---|---|---|
| PC817 | 1 | 低频 | 数字量隔离、过零检测 | CTR档位多,最常用 |
| EL357 | 1 | 低频 | 数字量隔离 | PC817兼容替代 |
| TLP521-4 | 4 | 低频 | 多路输入隔离 | 省面积,但通道串扰需注意 |
| 6N137 | 1 | 高速 | 串口/通信隔离 | 需要输出侧供电和去耦电容 |
| MOC3021 | 1 | 低频 | 双向晶闸管触发 | 内置过零检测,不能当普通光耦用 |
选型时先定速度,再定CTR,最后定封装和通道数。速度不够,一切白搭;CTR太低,低温工作不靠谱。
如果你在做新设计,而且信号频率在10MHz以上,光耦可能不是最优选择。近几年数字隔离器(比如ISO7741、ADuM1401、Si8620)在速度、一致性和长期稳定性上都超过了传统光耦,价格也在下降。只是数字隔离器要额外供两侧电源,不能像光耦那样"信号侧无源"工作,这是选型时的一个权衡点。
7.2 光耦直接驱动继电器?什么时候可以,什么时候不行
网上很多人问,光耦能不能直接驱动继电器。答案是:小功率5V继电器勉强可以,12V、24V大功率继电器不建议。
为什么?前面讲过,光耦输出侧允许的集电极电流是几十毫安级别,PC817最大50mA,但在这个电流下饱和压降不低,而且在感性负载关断瞬间,即使有续流二极管,线圈能量在刚开始泄放的时候还是有较高的瞬时电压尖峰,会短暂超过光耦的VCEO额定值。长期运行,光耦的寿命会受到威胁。
小功率继电器,比如线圈电流15mA的5V继电器,用CTR比较高的PC817C或者EL357,勉强能直接驱动。但最好还是加一个三极管或者达林顿管做缓冲,成本只多一两毛钱,可靠性提升非常多。我的原则是,能多一级驱动的绝不省,隔离信号和驱动功率分开,出了问题也好排查。
7.3 如何根据CTR分档做批量生产的余量控制
如果你是做批量产品,光耦的CTR离散性就是个大问题。设计电路时,不能只按典型CTR算,要从最差情况倒推。
最差情况有三个叠加:CTR下限值、LED光衰后的发光效率下降、低温时CTR的额外衰减。经验上,批量产品我会按CTR下限的60%到70%来验算输出侧能否满足后级需求。比如PC817B的下限CTR是130%,实际按80%到90%算,这样即使拿到一批偏下限的料,冬天低温环境也能正常工作。
筛选也不是越严越好。CTR太高也有问题,太高会导致光耦在很小的输入电流下就深度导通,对微弱干扰更敏感,抗干扰能力反而变差。所以很多数据手册按CTR分档是有道理的,A档B档C档各有适用场景,不是越高越好。
7.4 高速信号隔离的替代方案
如果信号速率超过几十千赫兹,普通光耦已经明显吃力,这里有三个常见方向。
第一个是高速光耦,比如6N137,速度能到10Mbps以上,但要注意它内部的推挽输出结构供电电压通常是5V,输出逻辑电平是5V,如果后级是3.3V单片机,可能还要加电平转换电路。
第二个是磁耦或者容耦数字隔离器,比如ADI的ADuM系列、TI的ISO系列、Silicon Labs的Si系列。这些器件速度快、延迟低、一致性好,并且内部集成了隔离电源或者支持双电源供电,越来越被工业通信接口采用。缺点是不能做到信号侧"完全无源",两侧都得有电。
第三个是隔离运放和调制器方案,针对模拟信号的隔离。洗衣机里如果要做电流检测(比如电机电流采样),可以用隔离运放把采样电阻上的电压传到低压侧,再进ADC。这种方案精度高,带宽也够,但成本和电路复杂度都会上一个台阶。
我个人的判断是:传统的低频开关量隔离、过零检测、晶闸管触发,光耦依然是性价比之王,结构简单、维修方便,短期内不会被完全替代。而在高速通信、精密模拟采样这些方向,数字隔离器的优势会越来越明显。
8. 从洗衣机到PLC,隔离设计思路的迁移与常见坑位复盘
8.1 两类场景的设计思路差异
洗衣机控制板和PLC输入模块,虽然都用光耦做隔离,但设计的侧重点差别很大。
洗衣机控制板追求的是成本低、元件少、生产一致性好。过零检测可以接受一定程度的边沿延迟,因为单片机可以做软件补偿;晶闸管触发不需要极其精确,零点附近干扰比较大时,软件处理逻辑可以兜底。所以洗衣机的光耦方案可以尽量简化,限流电阻、光耦、输出上拉三个元件就搞定一条信号链路。
PLC输入模块追求的是可靠性、抗干扰性、兼容性。用户不会拆开PLC模块去调整电路参数,现场环境也不会跟你讲道理,干扰、浪涌、接错线都是常态。所以PLC模块的输入通道往往有限流、滤波、钳位、施密特整形多级保护,一圈防护元件比光耦本身的价值还高。成本虽然上去了,但换来的是恶劣环境下依然稳定运行。
如果你在两类场景之间切换设计思路,千万别把A场景的经验直接套到B场景。用洗衣机控制板的简化设计去做PLC模块,大概率会在EMC测试或者现场应用中翻车;用PLC模块的防护方案去做洗衣机,成本上又过不了关。
8.2 长线干扰导致光耦误触发,这个案例值得复盘
之前做一个定制IO模块,客户反馈现场有一路输入信号总是莫名其妙地变成高电平,频率也不固定,一天几次到几十次。排查了程序,排除了软件问题,用示波器去现场看波形,发现光耦输出侧偶尔会出现一个几百纳秒宽的负脉冲。
这个负脉冲哪来的?后来排查发现,是输入侧长线缆上感应到了变频器的干扰脉冲,脉冲能量不大,但刚好能驱动光耦LED微弱导通。因为光耦输出侧有上拉电阻,光耦只要轻微导通,集电极电压就会被拉低,形成低电平毛刺。
处理办法分几步走:一是在输入端串联一个几千欧的电阻,增加干扰源的负载,降低干扰幅度;二是在输入端并联一个几纳法的电容,把高频干扰对地泄放掉;三是在软件里增加消抖逻辑,连续采样几次都确认是低电平才认定输入有效。三管齐下之后,误触发的问题彻底消失。
这个案例有两点值得记住。第一,光耦输入端不能光想着怎么送信号进去,还得考虑怎么挡住不想要的信号。第二,软件消抖不是万能和唯一的,硬件滤波如果能从源头削弱干扰,软件处理会更轻松。
8.3 焊接和代换时容易踩的坑
光耦这类小元件,焊接和代换看着简单,也有几个细节。
第一是引脚方向。光耦引脚顺序是有标准定义的,比如PC817的1脚是LED阳极,2脚是LED阴极,3脚是发射极,4脚是集电极。不同厂家同一型号的引脚定义一般是通用的,但不同系列(比如PC817和MOC3021)就完全不一样,代换之前一定要查对应数据手册的引脚图。我见过有人把PC817的1、2脚和3、4脚搞反,上电瞬间光耦就烧了。
第二是散热和引脚间距。光耦本身功耗不大,一般不需要额外散热,但周围如果有大功率电阻或者变压器,要注意热辐射对CTR的影响。光耦温度升高,CTR会上升,但LED的光衰速度也会加快,长期高温环境会缩短光耦寿命。
第三是焊接温度和时间。光耦内部是封装好的芯片和引线,过高的焊接温度或者过长的加热时间可能损伤内部连接。手工焊接时,烙铁温度不要超过350度,每个引脚焊接时间控制在两三秒以内。回流焊工艺要按元器件规格书要求设置温度曲线。
8.4 一个自检清单,新设计定型前过一遍
每次做完一块带光耦隔离的板子,我都会对照下面的清单过一遍,确认没有低级错误再去打样:
- 输入侧限流电阻是否按峰值电压和最小预期电网电压验算过?
- LED反向耐压是否足够?交流输入时有没有加反向保护二极管或者采用双向光耦?
- 输入侧并联电阻(如果有)的阻值是否会干扰正常信号的驱动能力?
- 输出侧上拉电阻取值是否满足后级逻辑电平阈值?
- 光耦的CTR是否按批次下限和低温衰减考虑过?
- 隔离耐压是否满足目标安规要求?PCB爬电距离和开槽是否到位?
- 感性负载(继电器线圈等)是否加了续流二极管?
- 高压侧和低压侧的地是否严格分开,没有单点相连之外的第二条通路?
- 上电瞬间输出是否会有毛刺?是否需要软件延时读取?
这些问题看着琐碎,但每一条背后都是我或者同行踩过的坑。经常有人把电路仿真跑通了就急着投板,忽略生产批次和现场环境的离散性,最后返工的时间成本远远超过前期多花的那一点验证时间。
9. 最后说点实际的体会
光耦隔离电路做了这么多年,最大的心得是:它不是一个"接上就能用"的简单器件,你需要同时理解它的输入侧、输出侧、隔离特性以及周围配套元件的相互作用。很多人翻车不在光耦本身,而在限流电阻取值、上拉电阻选择、反向保护缺失这些看起来很小的地方。
如果你让我给一句话建议,那就是:先把光耦的数据手册从头到尾读一遍,尤其是极限参数和CTR曲线部分,然后再查后面具体应用电路的几个关键电阻怎么算。手册看明白了,很多热搜问题的答案自然就清楚了。
再分享一个很实用的小技巧:第一次搭光耦电路,不要直接画板,先在面包板上用可调电源和示波器把波形看明白。输入电流从1mA到10mA慢慢调整,观察输出波形从欠驱动到深度饱和的变化过程。理解了光耦的"驱动电流-输出饱和"之间的关系,后面不管是洗衣机控制板还是PLC输入模块,设计起来都会顺手很多。
这次先聊到这里。光耦相关的话题,后面等我有空再写写高速光耦在通信隔离里的实战差异,还有数字隔离器与传统光耦在EMC表现上的对比。做硬件就是这样,一个器件吃透了,能辐射出一大片设计经验,比追着热门芯片走要踏实得多。