ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

光耦隔离电路实战:从过零检测到PLC输入的设计要点

光耦隔离电路实战:从过零检测到PLC输入的设计要点 1. 光耦隔离电路为什么值得专门花一篇文章讲做电子设计的人尤其接触过家用电器控制板或工业控制设备的对光耦这个名字肯定不陌生。它很小四只脚或六只脚黑色封装看起来其貌不扬但很多设备能不能稳定工作、能不能通过安规测试、会不会一上电就烧单片机往往就看它用没用好。先说一个很现实的场景洗衣机控制板里主控芯片是低压微控制器工作电压5V或者3.3V但外面要检测220V交流电的过零信号还要驱动双向晶闸管去控制电机、进水阀。如果220V电网的噪声直接窜进单片机轻则复位重启重则直接烧掉芯片。工业环境更狠PLC要接现场传感器的24V直流信号、接触器触点信号、变频器干扰现场长线缆一拉几十米上百米雷击浪涌、电机启停干扰全往输入端灌。要是隔离没做好PLC模块烧了是小事现场停机停产才是大问题。这时候光耦就派上用场了。它的核心价值就四个字电气隔离。输入端和输出端之间没有导线连接靠光来传递信号输入侧可以工作在220V交流环境输出侧可以工作在5V低压环境两侧地电位完全独立。这样设计的好处非常直接低压侧不会被高压电网的浪涌打坏抗干扰能力大幅提升同时也能避免接地环路带来的噪声问题。这篇文章我打算以两个实战项目为主线来讲。第一个是洗衣机控制板里的220V过零检测与继电器驱动第二个是PLC数字量输入模块的隔离通道设计。这两个案例覆盖了家用消费电子和工业控制两个典型领域光耦的选型思路、电路参数、踩坑点都不太一样对照着看会更有价值。无论你是刚入门的电子爱好者还是想系统补强隔离电路设计经验的工程师这篇文章都值得你花半小时仔细读完。顺便说一句市面上面向工业PLC模块的成品方案里数字量输入通道几乎清一色都会用光耦做隔离只是封装、通道数、响应速度各有差别。看懂原理之后很多看似高端的模块电路其实也没那么神秘。2. 光耦的工作原理与关键参数搞懂这几个才能不翻车2.1 内部结构一粒LED加一个光敏接收管光耦的完整名字叫光电耦合器内部结构其实特别简单一个发光二极管一个光敏接收器件常见的是光敏三极管也有光敏二极管、光敏晶闸管、光敏双向晶闸管等两者封装在同一个壳里。输入侧电流流过LEDLED发光光通过内部透明介质照射到光敏接收管接收管导通输出侧回路就产生了电流。电信号通过电-光-电的路径跨越了隔离屏障两侧没有任何直接电气连接。这个结构看似简单但它带来两个很关键的效果。第一输入侧和输出侧之间没有公共地两边可以各自独立供电地电位互不牵连。第二因为靠光传递信号单向性非常强输出侧的干扰很难反向串回输入侧这对抑制共模干扰特别有用。有人问市面上的光耦输入端和输出端之间的耐压能到多少常规的4N25、PC817、EL357系列隔离耐压通常在3750Vrms到5000Vrms之间也就是说交流有效值3750V以上的电压施加在两侧之间能挺住1分钟左右。这个参数叫隔离耐压或者耐压隔离等级在需要过安规认证的设计里是硬指标。2.2 电流传输比CTR光耦选型的第一个关键数光耦最核心的直流参数是电流传输比英文缩写CTRCurrent Transfer Ratio。定义很简单输出侧集电极电流和输入侧LED正向电流的比值通常用百分比表示。比如说PC817A的CTR下限是80%上限是160%。也就是说给LED通10mA电流输出侧理论上能拉出8mA到16mA的集电极电流。这个范围非常重要因为光耦的CTR不是固定值它受LED老化、环境温度、批次离散性影响很大。同一批次生产的光耦CTR可能从80%到160%分布温度一降可能衰减LED长期工作还会光衰。CTR怎么影响实际电路最典型的场景是你设计了一个输入电路按照CTR100%算好输出侧需要有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的阴极接到输入公共端COMCOM接到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里面的过零检测电路和普通光耦完全不同选用时别和普通光耦搞混。型号通道数速度典型应用备注PC8171低频数字量隔离、过零检测CTR档位多最常用EL3571低频数字量隔离PC817兼容替代TLP521-44低频多路输入隔离省面积但通道串扰需注意6N1371高速串口/通信隔离需要输出侧供电和去耦电容MOC30211低频双向晶闸管触发内置过零检测不能当普通光耦用选型时先定速度再定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表现上的对比。做硬件就是这样一个器件吃透了能辐射出一大片设计经验比追着热门芯片走要踏实得多。
返回列表