1. 为什么偏偏选TLP521-4来做继电器隔离驱动1.1 从一次烧板子的事故说起前两年帮朋友改一块工业控制板板子上原本用单片机IO口直接推继电器线圈5V的线圈电流大概在70mA左右单看电流似乎不大但继电器是感性负载断开瞬间的反向电动势直接把单片机IO口打穿了连着烧了两片主控。后来换成三极管加续流二极管的方案勉强能用但现场有强电干扰偶尔还是会出现误动作。最后老老实实上了光耦隔离用的就是TLP521-4四路通道一颗芯片搞定四路继电器板子面积省了不少问题也彻底解决了。这个经历让我意识到继电器驱动电路的核心不是能不能驱动而是隔离得干不干净。很多新手觉得继电器驱动就是加个三极管的事实际上工业现场、家电控制、安防设备里隔离做不好后面全是坑。1.2 TLP521-4到底是个什么东西TLP521-4是东芝现属Kioxia体系推出的一款四通道晶体管输出型光耦内部集成了四组独立的光电耦合单元每组由一个红外LED和一个光敏三极管组成。输入端通电点亮LED光敏三极管接收到光信号后导通输出端就接通了。输入和输出之间没有电气连接只有光在传递信号这就是隔离的本质。它的几个关键参数得先摆出来不然后面设计没法算参数项典型值说明输入正向电流IF16mA推荐最大50mA别超输入正向压降VF1.15V典型计算限流电阻用集电极-发射极电压VCEO55V输出端耐压集电极电流IC50mA最大驱动能力有限电流传输比CTR50%~600%分档位选型要注意隔离电压2500Vrms输入输出之间响应时间上升2μs/下降3μs慢速光耦别用于高速信号看到CTR这个参数没有这是光耦最容易被忽略的地方。CTR就是输出电流和输入电流的比值比如CTR是100%你输入10mA输出最多能拿到10mA。TLP521-4的CTR范围很宽不同批次差异大设计时必须按最差情况50%来算否则批量生产时会出现有的板子能驱动、有的板子驱动不了的情况。1.3 为什么不用ULN2803直接驱动热搜词里出现了ULN2803这是个八路达林顿管阵列很多教程推荐用它直接驱动继电器。ULN2803确实方便一片能驱动八路内部还集成了续流二极管。但它有个致命问题它不提供隔离。单片机的地和继电器侧的地是共地的强电侧的干扰会直接窜到单片机系统里。ULN2803适合什么场景适合继电器侧和单片机侧共地、干扰不大的场合比如实验室demo、简单的家电控制。但工业现场、长线传输、强电环境光耦隔离是必须的。所以我的建议是TLP521-4负责隔离ULN2803负责扩流两者配合使用既隔离又省事。后面我会详细讲这个组合方案。1.4 这个电路适合谁看如果你正在做以下事情这篇内容应该能帮到你单片机控制继电器但被干扰问题困扰想学光耦隔离电路的设计方法不只是抄图需要多路继电器驱动想省板子面积对CTR、限流电阻计算这些参数一头雾水想搞清楚光耦输出端到底该配上拉还是下拉我尽量把每个参数的计算过程都写出来让你看完能自己算、自己改而不是照抄一张图完事。2. 电路整体架构与关键器件选型2.1 信号链路的完整走向先把这个电路的信号流向理清楚不然后面看细节容易迷路。整个链路是这样的单片机IO口 → 限流电阻 → TLP521-4输入端LED → 光耦内部光传输 → 光敏三极管 → 输出端负载电阻 → 后级驱动三极管或ULN2803→ 继电器线圈 → 续流二极管 → 电源每一级都有讲究我逐个拆开说。2.2 输入端设计限流电阻怎么算输入端就是一个LED你得给它合适的电流。TLP521-4推荐IF是16mA但实际用的时候不一定非要16mA要看后级需要多少电流。假设单片机IO口输出3.3V高电平光耦输入端LED压降VF约1.15V那么限流电阻R1的计算R1 (VIO - VF) / IF (3.3V - 1.15V) / 16mA ≈ 134Ω取标准值130Ω或150Ω都行。如果用5V单片机R1 (5V - 1.15V) / 16mA ≈ 240Ω取240Ω标准值。但这里有个坑很多新手直接用1kΩ甚至10kΩ的电阻觉得能亮就行。结果IF只有零点几毫安CTR再一打折输出端根本驱动不了后级。我实测过IF低于3mA时TLP521-4的输出端带载能力急剧下降后级三极管基极电流不够继电器吸合无力甚至不吸合。注意限流电阻的功率也要算一下。P I²R (16mA)² × 240Ω ≈ 0.06W用0603封装的电阻1/10W就够了不用上大功率的。2.3 输出端设计上拉电阻的选择光耦输出端是光敏三极管的集电极和发射极发射极接地集电极通过一个上拉电阻接到VCC。当光耦导通时集电极被拉低光耦截止时上拉电阻把集电极拉高。上拉电阻R2的取值要考虑两个因素第一输出低电平时的电流。光耦导通时电流从VCC经过R2、光敏三极管到地。这个电流不能超过光耦的IC最大值50mA同时要考虑CTR的限制。第二输出高电平时的驱动能力。光耦截止时R2给后级提供基极电流。如果后级是三极管基极电流需要满足Ib ≥ Ic/β。假设后级三极管驱动继电器需要集电极电流70mA三极管β取100那么Ib至少需要0.7mA。考虑余量取2mA。光耦导通时假设CTR最差50%IF16mA那么IC最大 16mA × 50% 8mA。R2上的电流不能超过8mA否则光耦饱和不了输出低电平不够低。R2 ≥ VCC / IC_max 5V / 8mA 625Ω同时R2又不能太大否则给后级的基极电流不够。如果后级需要2mA基极电流光耦截止时R2上的电流就是2mAR2 ≤ VCC / Ib 5V / 2mA 2500Ω所以R2的取值范围是625Ω到2500Ω之间取1kΩ到2.2kΩ比较稳妥。我一般用1kΩ实测下来高低电平都干净。2.4 后级驱动三极管还是ULN2803光耦输出端能提供的电流有限TLP521-4的IC最大50mA但实际受CTR限制能稳定拿到10mA就不错了。继电器线圈电流通常70mA到100mA直接驱动不够需要后级扩流。方案一单路三极管。每路用一个S8050或2N3904基极接光耦输出集电极接继电器线圈发射极接地。优点是便宜、灵活缺点是每路都要一个三极管和一个基极电阻四路就是四个三极管。方案二ULN2803。一片ULN2803内部有八个达林顿管每个通道的基极内置了2.7kΩ电阻可以直接接光耦输出。优点是集成度高、省面积缺点是ULN2803的输入是高电平有效而光耦输出导通时是低电平逻辑反了。怎么解决逻辑反的问题两个办法一是单片机程序里取反二是光耦输出端不加上拉电阻改成下拉电阻让光耦导通时输出高电平。但TLP521-4的输出是NPN光敏三极管集电极接VCC、发射极接负载电阻到地导通时发射极电压升高这是射极跟随器接法输出高电平。这种接法响应速度慢一些但逻辑对了。我个人的选择是四路以下用三极管四路以上用ULN2803加程序取反。ULN2803还有个好处是内部集成了续流二极管继电器线圈两端不用再外接1N4148了省事。2.5 继电器选型与续流二极管继电器选型主要看三个参数线圈电压、线圈电流、触点容量。线圈电压常见5V、12V、24V要和你的电源匹配。线圈电流决定了驱动能力需求5V继电器通常70mA左右12V继电器通常30mA左右。续流二极管必须加这是铁律。继电器线圈断电瞬间会产生反向电动势电压可能高达几百伏不加续流二极管三极管必炸。用1N4148就行反向耐压100V正向电流200mA够用了。注意二极管的方向阴极接电源正极阳极接三极管集电极别接反了。如果继电器线圈电流大于100mA建议用1N4007电流余量更大。3. 完整电路图与逐路实现细节3.1 单路完整电路图说明因为这里没法直接画图我用文字把每一路的连接关系描述清楚你照着连就行。输入端单片机IO口 → 限流电阻R1240Ω5V系统→ TLP521-4的第1脚LED阳极TLP521-4的第2脚LED阴极→ GNDTLP521-4的引脚排列第1脚是通道1的LED阳极第2脚是通道1的LED阴极第3脚是通道2的LED阳极第4脚是通道2的LED阴极以此类推。输出侧第16脚是通道1的集电极第15脚是通道1的发射极第14脚是通道2的集电极第13脚是通道2的发射极。具体引脚号一定要查数据手册确认不同封装可能不一样。输出端VCC5V→ 上拉电阻R21kΩ→ TLP521-4第16脚通道1集电极TLP521-4第15脚通道1发射极→ GNDTLP521-4第16脚 → 基极电阻R31kΩ→ 三极管Q1基极三极管Q1发射极 → GND三极管Q1集电极 → 继电器线圈一端继电器线圈另一端 → VCC5V或12V看继电器规格续流二极管D1并联在继电器线圈两端阴极接VCC阳极接集电极继电器触点侧公共端COM接负载电源常开端NO接负载常闭端NC悬空或接另一路负载3.2 四路通道的布局建议TLP521-4是四通道的四路电路完全对称但PCB布局有讲究输入端和输出端要分开。光耦的作用就是隔离如果PCB上输入端和输出端的走线挨得太近隔离效果会大打折扣。我一般把光耦放在板子中间左边是单片机信号输入右边是继电器输出中间留至少3mm的爬电距离。四路限流电阻放在光耦输入端附近四路上拉电阻放在输出端附近。不要交叉走线避免信号串扰。继电器线圈的电源走线要粗。四路继电器同时吸合总电流可能到300mA以上走线太细会有压降导致继电器吸合无力。建议用20mil以上的走线宽度。地线要分。输入端的地和输出端的地在光耦处是隔离的但在PCB上最终要连到一起通过电源地。建议在光耦下方用一条粗地线连接两侧地避免地环路干扰。3.3 关键参数计算实例我拿一个实际项目举例把参数算一遍。项目需求5V单片机系统控制4路5V继电器每路继电器线圈电流70mA继电器线圈电阻约71Ω。输入端计算单片机高电平5VTLP521-4的VF1.15V取IF16mAR1 (5 - 1.15) / 0.016 240Ω实际选240ΩIF (5-1.15)/240 16mA正好输出端计算CTR最差50%IC_max 16mA × 50% 8mA上拉电阻R2光耦导通时R2上的电流不能超过8mAR2 ≥ 5V / 8mA 625Ω后级三极管β100Ic70mAIb0.7mA取2mA余量R2 ≤ 5V / 2mA 2500Ω取R21kΩ光耦导通时电流5mA小于8mA安全光耦截止时给后级提供5mA基极电流远大于0.7mA驱动充足后级三极管计算基极电阻R3光耦输出低电平时R3上的电流 (5V - 0.7V) / R3需要Ib ≥ 0.7mA取2mAR3 (5 - 0.7) / 0.002 2150Ω取2.2kΩ实际Ib (5-0.7)/2200 1.95mA够用续流二极管1N4148反向耐压100V正向电流200mA满足70mA线圈需求3.4 电源设计注意事项光耦输入端和输出端可以用同一个5V电源也可以用不同的电源。如果用同一个电源隔离效果会打折扣因为电源是共用的。真正要隔离输入端和输出端必须用独立的电源比如输入端用单片机的5V输出端用另一路5V或12V。但很多实际项目为了省事就用一个5V。这种情况下光耦仍然能起到一定的隔离作用至少把继电器线圈的干扰和单片机隔开了只是隔离电压等级降低了。如果现场干扰特别强建议还是用独立电源或者用DC-DC隔离模块。输出端电源的电流要算够。四路继电器同时吸合总电流 4 × 70mA 280mA加上光耦输出端的上拉电阻电流4 × 5mA 20mA总共300mA。电源至少要留50%余量选500mA以上的。4. 实操过程与调试记录4.1 元器件准备清单先把要用的东西列出来照着买就行元器件型号/参数数量备注光耦TLP521-41四通道限流电阻240Ω 06034输入端上拉电阻1kΩ 06034输出端基极电阻2.2kΩ 06034后级三极管三极管S80504或2N3904续流二极管1N41484继电器线圈继电器5V SRD-05VDC4线圈电流70mA接线端子2P/3P若干输入输出电源5V 1A1调试用4.2 焊接与组装步骤第一步先焊光耦。TLP521-4是DIP-16封装注意方向第1脚有个圆点标记。焊之前先确认引脚号别焊反了。焊的时候用烙铁温度350度左右每个脚焊2秒以内别烫太久光耦内部是LED过热会损坏。第二步焊输入端电阻。四个240Ω电阻分别接在光耦第1、3、5、7脚和第2、4、6、8脚之间。注意第2、4、6、8脚是LED阴极要接到GND。第三步焊输出端上拉电阻。四个1kΩ电阻一端接VCC另一端接光耦第16、14、12、10脚集电极。第四步焊后级三极管和基极电阻。2.2kΩ电阻一端接光耦集电极另一端接三极管基极。三极管发射极接GND集电极接继电器线圈。第五步焊续流二极管。1N4148并联在继电器线圈两端阴极接VCC阳极接三极管集电极。注意方向接反了会短路。第六步焊继电器和接线端子。继电器线圈一端接VCC另一端接三极管集电极。触点侧接接线端子。4.3 上电调试与波形实测焊完之后别急着上电先用万用表测一下各路电源和地有没有短路。确认没问题再上电。静态测试上电后单片机IO口输出低电平光耦不导通输出端上拉电阻把集电极拉高到5V。用万用表测光耦集电极电压应该是5V左右。测三极管集电极电压应该也是5V左右继电器线圈两端都是5V不吸合。动态测试单片机IO口输出高电平光耦导通集电极被拉低到0.2V左右。三极管基极得到电流导通集电极被拉低到0.3V左右继电器吸合。用示波器看光耦输出端波形上升沿和下降沿应该很干净没有振铃。我实测的波形数据光耦输入端加5V方波输出端上拉1kΩ上升时间约3μs下降时间约2μs和手册标称值基本一致。继电器吸合时间约5ms释放时间约3ms这是继电器机械动作的时间和光耦无关。常见问题如果继电器不吸合先测光耦输出端电压。如果光耦导通时集电极电压降不到0.5V以下说明IF不够或者CTR太低需要减小限流电阻或换CTR更高的光耦。如果光耦输出正常但继电器不吸合测三极管基极电压应该是0.7V左右如果低于0.5V说明基极电流不够减小基极电阻。4.4 用ULN2803替代后级三极管的接法如果你有四路以上建议用ULN2803替代四个三极管。接法如下光耦输出端集电极 → ULN2803输入端第1到第8脚ULN2803输出端第18到第11脚→ 继电器线圈ULN2803第9脚COM→ VCC内部续流二极管公共端ULN2803第10脚GND→ GND注意ULN2803的输入是高电平有效而光耦输出导通时是低电平所以逻辑是反的。解决办法单片机程序里取反或者光耦输出端改成下拉接法。ULN2803内部每个通道的输入电阻是2.7kΩ光耦输出低电平时电流 5V / 2.7kΩ ≈ 1.85mA这个电流经过ULN2803内部达林顿管放大足够驱动继电器。实测ULN2803的输入电流1.85mA时输出能驱动100mA以上的负载完全够用。5. 常见问题排查与避坑经验5.1 光耦导通但输出端电压降不下来这是最常见的问题。原因通常是IF不够或者CTR太低。排查步骤测光耦输入端电压确认LED两端有1.1V到1.2V的压降。如果低于1V说明LED没导通或限流电阻太大。测限流电阻两端电压算出实际IF。如果IF小于5mA减小限流电阻。如果IF正常但输出端电压降不下来可能是CTR太低。换一批光耦试试或者选CTR分档更高的型号。我踩过的坑有一次用了一批便宜的光耦CTR只有30%左右IF16mA时输出只能拿到5mA上拉电阻1kΩ时输出低电平只有1.5V后级三极管基极电流不够继电器吸合无力。后来换了正规渠道的光耦CTR在100%以上问题解决。光耦这东西别贪便宜CTR一致性很重要。5.2 继电器吸合时单片机复位这是典型的干扰问题。继电器吸合瞬间线圈电流突变电源上产生尖峰通过电源耦合到单片机导致复位。解决办法继电器线圈两端加续流二极管必须加电源输入端加100μF电解电容和0.1μF陶瓷电容光耦输入端和输出端用独立电源单片机复位脚加0.1μF电容我实测过不加续流二极管时继电器断开瞬间电源上会有200V以上的尖峰加了之后尖峰降到20V以内单片机再也不复位了。5.3 多路继电器同时吸合时电源电压跌落四路继电器同时吸合总电流280mA如果电源内阻大或者走线细电源电压会跌落到4.5V以下导致继电器吸合无力。解决办法电源选1A以上的继电器电源走线加粗到20mil以上每路继电器线圈两端加100μF电容如果还不行用12V继电器电流小一半5.4 光耦输入端加反向二极管的作用热搜词里提到了光耦输入加反向二极管这个确实有用。光耦输入端是LED反向耐压通常只有5V左右如果输入端有反向电压比如长线传输时的反射LED可能被击穿。加一个反向二极管如1N4148并联在LED两端阴极接LED阳极阳极接LED阴极可以把反向电压钳位在0.7V以内保护LED。但实际项目中如果输入端走线很短反向电压不大不加也行。我一般只在长线传输超过30cm时才加。5.5 常见问题速查表现象可能原因排查方法解决办法继电器不吸合光耦IF不够测限流电阻两端电压减小限流电阻继电器不吸合CTR太低换光耦测试选CTR高的型号继电器不吸合三极管基极电流不够测基极电压减小基极电阻继电器吸合无力电源电压跌落测继电器线圈电压加大电源或加电容单片机复位继电器干扰测电源尖峰加续流二极管和电容光耦发热IF过大测IF增大限流电阻输出低电平不够低上拉电阻太小测输出低电平增大上拉电阻输出高电平不够高上拉电阻太大测输出高电平减小上拉电阻5.6 几个容易被忽略的细节光耦的响应速度。TLP521-4是慢速光耦上升时间2μs下降时间3μs适合控制继电器这种慢速负载。如果你要控制PWM信号或者高速通信别用这个换6N137或者TLP2362这种高速光耦。光耦的隔离电压。TLP521-4标称2500Vrms但这是理想条件下的值。实际PCB上如果输入端和输出端的走线距离太近隔离电压会大幅下降。建议输入端和输出端之间留至少3mm的爬电距离如果要做安规认证留6mm以上。光耦的寿命。LED会老化IF会随着时间下降。如果光耦长期工作在最大IF下寿命会缩短。建议IF取推荐值的70%左右比如16mA的推荐值实际用12mA寿命更长。继电器触点的保护。如果继电器控制的是感性负载如电机、电磁阀触点断开时会产生电弧建议在触点两端加RC吸收电路100Ω电阻串联0.1μF电容延长继电器寿命。PCB布局的隔离。光耦下方不要走任何信号线特别是输入端和输出端之间的区域要保持干净。如果实在要走线走地线不要走信号线。5.7 一个实用的调试技巧调试多路继电器驱动板时不要一次焊四路先焊一路调通了再焊其他三路。这样出了问题容易定位。我一般先焊通道1用单片机的IO口给一个1Hz的方波看继电器是不是跟着吸合释放。确认没问题了再焊通道2、3、4。另外调试时用可调电源给继电器供电从0V慢慢往上调观察继电器在多少伏吸合、多少伏释放。正常5V继电器应该在3.5V左右吸合1.5V左右释放。如果吸合电压偏高说明驱动能力不够需要检查光耦和三极管的工作点。这个电路我前后做过十几版从最初的一路到后来的八路从三极管到ULN2803从共电源到独立电源踩过的坑基本都写在这里了。TLP521-4这颗光耦虽然老但胜在便宜、好买、资料全做继电器隔离驱动完全够用。关键是把CTR和限流电阻算清楚把续流二极管加上把电源和地处理好剩下的就是焊板子的事了。
