
做继电器控制这件事我一开始也跟很多人一样顺手就上了单片机。STM32、51甚至一颗几毛钱的ATtiny都能干而且代码写好之后逻辑随便改。但后来有几个项目让我改回了逻辑芯片现场环境算不上恶劣却要设备在无人看管的状态下长时间运行客户那边又没有人会刷固件。换器件、加功能、调时序都得动程序出一次差成本远高于那一颗芯片的价格。所以重新翻出CD4013把单稳态、双稳态两种最常见的继电器驱动方案从头到尾捋了一遍做了一块兼容板实测下来比单片机方案省心不少。CD4013是一颗非常经典的CMOS双D触发器两个独立的触发单元每个单元含D、CLK、SET、RESET四个输入以及Q和Q非两个输出。把它接成DQ非的形态就是翻转器也就是双稳态模式把RC定时网络接在Q和RESET之间又能组成单稳态延时器。一个芯片两种截然不同的行为而且都能直接为继电器驱动级提供干净、明确的开关逻辑。本文就围绕这两种模式展开把接线、参数计算、继电器驱动细节、实测中踩过的坑一次讲清楚。1. CD4013的时钟锁存逻辑与我的选型理由1.1 先看清D触发器本身的行为再谈应用很多朋友一拿到CD4013先看应用电路却忽略了最核心的时序逻辑。其实只要理解清楚D触发器的锁存行为单稳态、双稳态的接法都能自己推出来不需要背电路。CD4013的每个触发器单元在时钟的上升沿把D引脚的电平锁存到输出Q。这里有一个容易被忽略的细节除了时钟上升沿SET和RESET引脚也能直接改变输出而且优先级比时钟更高。SET为高时Q强制为1RESET为高时Q强制为0。其余时间输出保持原有状态。我用一个简化的真值表来记忆DCLKSETRESETQ时钟沿后0上升沿0001上升沿001XX101XX010任意无上升沿00保持只要记住这五行剩下的事情都好办了。1.2 为什么用CD4013而不是继续用单片机选择CD4013不是因为它比单片机先进而是在特定场景下它更合适。我这里说的特定场景是控制逻辑固定不变、设备需要长期稳定运行、现场震动或静电环境比较杂。单片机方案的逻辑灵活性高但代价是别忘了烧录口、复位电路、晶振、供电稳压还有固件本身可能跑飞的风险。CD4013的优势非常明显工作电压范围宽3V到15V都可以配合继电器驱动级时可以直接用与继电器相同的电源省去稳压。静态功耗极低微安级别长时间待机也不怕。输入阻抗极高对高阻源也能驱动。无程序、无晶振、无复位时序上电行为可以通过外部电阻电容完全控制。价格便宜双单元结构两路继电器控制只需要一颗芯片。当然它也有短板没有编程能力。当逻辑需要变得灵活时比如定时时间现场可调、需要记忆多组状态还是得回单片机。我的经验是项目需求越明确越适合用CD4013需求模糊且要频繁改动的果断用MCU。1.3 输入引脚悬空是大忌这里必须先说一条老工程师都知道的纪律CD4013是高阻抗CMOS输入悬空的引脚相当于一根天线电场干扰、手指触摸、继电器吸合瞬间的电磁脉冲都能让逻辑乱跳。所以所有不用的输入引脚必须接到固定电平。D接VDD或GNDCLK接GNDSET/RESET接GND。这一条在后面的实际电路中会反复用到也是最常见的隐性故障来源。2. 双稳态接法单键开关与上电复位处理2.1 一个反相反馈搞定电平翻转双稳态模式在概念上可以这样理解把输出的反相信号送回D输入端每次时钟上升沿到来时D采样到的正好是当前Q的反相状态于是Q翻转到另一电平。这个状态会一直保持到下一次时钟上升沿所以叫双稳态。具体接线是Q非接到D按钮或其他脉冲源接到CLKQ作为控制输出。每按一次按钮输出状态翻转一次。这就是常见的“一键开关机”电路的核心。用文字描述时序就是假设初始Q为低电平Q非为高电平D采样到高电平按钮按下产生的上升沿到达CLKQ变成高电平此时Q非变成低电平D跟着变低下一次按钮按下CLK上升沿采样到低电平Q翻回低电平。如此循环输出在两个稳定状态之间切换。如果只用一个通道使用CD4013的一半就够了。另一半的输入全部接固定电平防止干扰。很多新手只接了一半剩下半个触发器的D引脚悬空结果整体功耗异常输出偶尔乱跳。2.2 按钮去抖RC时间的取舍机械按钮按下时触点会来回弹跳持续时间通常在5ms到20ms不等CD4013对时钟上升沿非常敏感抖动脉冲会被当作多次触发结果是按一下按钮输出可能翻转了好几次。必须对按钮信号做去抖处理。一个简单可靠的去抖电路是RC低通加施密特整形。用10kΩ电阻串在按钮与CLK之间在CLK对地接一个1µF左右的电容时间常数约10ms。按钮按下后电容充电到CMOS高电平阈值需要一定时间这期间产生的毛刺被电容吸收不会产生多个上升沿。这里要注意CD4013本身的输入没有施密特触发特性如果RC上升沿过缓在阈值点附近会产生振荡或多次触发。所以我的习惯是在RC输出之后再串一个施密特反相器比如CD40106也可以用CD4013之外的缓冲门把缓变的斜坡信号整形成陡峭的上升沿。如果不想增加芯片可以把RC时间常数适当加大比如用100kΩ和4.7µF让压摆率更慢降低误触发的概率。但过慢的上升沿会在阈值附近停留更久反而更容易受干扰所以折中很重要。2.3 上电状态必须明确否则第一次通电就可能误触发CD4013在上电瞬间输出状态是不确定的可能为高也可能为低。在双稳态开关电路里如果上电后Q恰好为高继电器就会在上电时吸合这往往不是期望的行为。比如做延迟断电插座用户希望插上电后设备并不启动结果继电器先合上了这就很麻烦。解决方法是利用SET和RESET引脚做上电初始化。以“上电后输出为低”为例把RESET引脚通过一个电阻接地再通过一个电容接到VDD形成上电复位脉冲。电源刚接通时RESET引脚端的电容电压接近VDDRESET为高强制Q输出为0随后电容通过电阻放电RESET电压下降到低电平阈值以下复位解除电路进入正常状态。这个复位脉冲的宽度用RC时间常数估算。比如100kΩ电阻和1µF电容时间常数100ms考虑到CMOS复位阈值大约在0.5VDD实际有效复位时间约69ms。这个时间足够让VDD稳定下来也让下游继电器驱动级的晶体管完成上电稳定。若是用10kΩ和10µF时间常数同样100ms效果类似。注意复位脉冲结束后RESET必须可靠地处于低电平所以电阻接地必须可靠不能省。对应的如果需要上电后输出为高就把SET引脚接上同等的RC上电复位网络。2.4 双稳态电路完整一环一个完整的双稳态继电器驱动单元包括CD4013的Q非接D构成T触发器。按钮经RC去抖后接入CLK。RESET接上电复位RC网络强制初始状态为低。Q输出接晶体管驱动级继电器线圈并联续流二极管。未使用的半个触发器的D接GNDCLK接GNDSET和RESET接GND。这个电路我在面包板上搭过实测连续按动上百次没有出现一次双翻转上电瞬间继电器保持断开状态符合预期。比起早期不加去抖和复位的版本可靠性提升非常明显。3. 单稳态接法RC定时延时与“约定俗成常数”的真相3.1 从双头脑风暴到单稳态仅仅换了一种反馈单稳态与双稳态的本质区别在于反馈方式。双稳态反馈的是逻辑电平本身Q非接D让输出状态一直保持单稳态反馈的是时间信号利用RC网络让输出在一段时间后自动回到初始状态。CD4013组成单稳态的标准接法如下D接VDDQ通过电阻R接到一个节点该节点对地接电容C同时该节点连接到RESET引脚。CLK作为触发输入。初始时Q为低RESET为低电路不动作。当CLK出现上升沿时D引脚已经是高电平所以Q被置为高。Q为高之后电流通过R给C充电RC节点电压逐渐上升。当这个电压达到RESET的高电平阈值时RESET生效强制Q回到低电平。随后C通过R放电为下一次触发做准备。输出高电平持续的时间就是延时时间。3.2 延时公式里那个让人犯迷糊的常数很多资料上说CD4013单稳态延时约等于1.1RC也有人说是0.7RC实际测算又常常不同。原因是延时时间取决于RC节点的充电起始电压、复位阈值电压、VDD电压、芯片制造工艺和温度。不同厂家、不同批次的CD4013复位阈值并不完全相同通常在0.5VDD到0.7VDD之间。RC节点电压随时间的变化遵循电容充电公式VC(t)VDD×(1−e^(−t/RC))当VC(t)达到复位阈值Vth时产生复位所以tRC×ln(VDD/(VDD−Vth))如果Vth恰好是0.5VDD那么tRC×ln2≈0.693RC如果Vth是0.7VDD那么tRC×ln(1/0.3)≈1.204RC所以所谓1.1RC只是一个居中的估算值。真正的延时受电源电压影响很大VDD上升时复位阈值比例可能改变电容充电时间也跟着变。如果你需要在某个精度范围内定时最稳妥的办法不是背公式而是用示波器实测然后微调R。我做过一个实际例子R1MΩC10µF理论上RC时间常数为10s。实测延时在8.9s到10.5s之间波动与电源电压和温度有关。对于继电器延时控制来说这个波动完全可以接受但如果你要精确到0.1s那CD4013就不合适了老老实实上定时器或晶振分频。3.3 触发方式与被触发后的细节在单稳态模式下触发信号加在CLK引脚。由于D已经接到VDD只要CLK有一次上升沿Q就会变高。但这里有个关键限制单稳态一旦被触发Q为高期间内RESET还没动作时如果再次出现CLK上升沿电路会怎样答案是不会重置延时。因为Q已经为高D也为高再来一个上升沿输出仍为高没有变化。这叫作不可重触发单稳态。如果想实现可重触发比如人体感应灯每检测到一次活动就重新计时需要另外加逻辑在Q为高期间把每次CLK沿都转化为一次复位脉冲并重新开始充电。简单做法是用另一个触发器单元锁定触发信号或者用CD4013之外的逻辑门构造。不过大多数继电器延时场景比如延迟关机、上电延时吸合用不可重触发就足够了。还有一个细节触发脉冲的宽度不能太窄。虽然CD4013对时钟上升沿敏感但如果触发源是继电器触点或其他机械开关必须同样处理去抖。另外如果触发信号在电源上电期间就到来可能造成状态不确定所以单稳态电路同样建议在RESET上加上电复位网络把初始Q钳在低电平。3.4 两路单稳态可以组合出更复杂的时序因为CD4013有两个独立触发器可以级联第一个触发器的Q输出作为第二个触发器的CLK触发源。这样一来可以实现两级延时比如第一级延时3秒后启动第二级再延时5秒后关闭。实际应用中用于功放喇叭保护、排气扇延时关闭、水泵交替运行控制等场景都很实用。我做过一个项目要求设备上电后先等待5秒再吸合继电器断开电源后还要维持继电器2秒用于保存数据。用两个CD4013单稳态单元分别接不同RC参数即可实现整体电路只有十几颗元件功耗很低且不需要软件。4. 继电器驱动级推挽输出之外的晶体管与续流保护4.1 CMOS输出到底能不能直接推继电器看到标题里写着“继电器驱动方案”这是整个电路最需要谨慎对待的部分。CD4013在12V供电下输出高电平能力大概能到10V以上但它的输出电流非常有限CMOS器件一般只能提供1mA左右的驱动电流。继电器线圈的电流少则几十毫安多则上百毫安直接接会让CD4013输出电压跌落甚至烧毁芯片内部输出级。所以驱动继电器必须加晶体管或MOSFET的功率放大级。以最常见的12V继电器为例线圈电阻约267Ω到400Ω工作电流约30mA到45mA。用一个NPN型三极管接成共发射极开关发射极接地集电极接继电器线圈继电器线圈另一端接VDD三极管基极通过限流电阻接到CD4013的Q输出。4.2 基极电阻的计算不能拍脑袋基极电阻的选择核心是保证三极管在CD4013输出高电平时能可靠饱和导通。以2N2222或8050这类型号为例其电流放大倍数hFE通常在100以上但要留出充足的过驱动余量工程上按hFE的1/10到1/20来计算基极电流。假设继电器线圈电流Ic40mA取hFE100驱动电流至少IbIc/1000.4mA。留出5倍余量取Ib2mA。CD4013在12V供电时输出高电平近似为10.5V三极管基极-发射极压降约0.7V则基极电阻上的压降约为10.5−0.79.8V。取Ib2mA电阻R(10.5−0.7)/0.002≈4.9kΩ。用4.7kΩ标称值即可。如果把三极管换成MOSFET比如AO3400这类逻辑电平管栅极电阻只需要一个几百欧到1kΩ的限流电阻因为MOSFET栅极基本不取电流。好处是导通压降极小继电器电压更足但要注意MOSFET的导通阈值确保在CD4013的输出高电平时已经充分导通。4.3 续流二极管不是可选项继电器线圈是典型的电感元件。当三极管从导通变为关断、线圈电流被切断时电感会产生反电动势极性是线圈两端试图维持电流的方向因此会形成一个高压尖峰。这个尖峰可能高达几十伏甚至上百伏足以击穿三极管也可能通过电源线干扰CD4013。处理方式是在继电器线圈两端反向并联一个二极管注意方向二极管的阴极接电源正端阳极接三极管集电极侧。正常导通时二极管截止三极管关断瞬间反电动势让二极管导通把电感电流续流电压被钳制在约0.7V到1V之间保护驱动级。选型方面普通1N4007就能用但切换速度慢如果继电器动作频繁我建议用1N4148或1N5819肖特基二极管恢复更快、尖峰更小。二极管必须紧靠继电器线圈放置如果是PCB板走线尽量短粗。4.4 电源去耦是稳定的最后一块拼图继电器吸合瞬间电流突变很大如果CD4013和继电器共用一个电源这个瞬态会直接落在芯片供电引脚上造成逻辑误动作。我的做法是芯片供电引脚附近放一个100nF陶瓷电容做高频去耦再并联一个10µF到470µF电解电容吸收继电器动作的低频能量。如果项目对稳定性要求极高可以用稳压芯片单独给CD4013供电继电器驱动级直接从主电源取电只在末端共地。5. 实测遇到过的三类问题误触发、上电乱跳、线圈反冲5.1 “按一次却触发多次”的排查过程第一个问题出现在早期双稳态版本上按钮按下输出不是翻转一次而是连续翻转好几次。我把示波器探头接到CLK引脚发现按钮按下的瞬间CLK波形不是一条干净的上升沿而是密集的阻尼振荡衰减波这正是机械触点弹跳的典型波形。一开始我用100nF电容做RC去抖效果不好因为时间常数才1ms而弹跳时间可达10ms以上。换成10kΩ电阻加1µF电容后上升沿被拉缓到10ms级别弹跳毛刺就被淹没在电容充电过程里了。但是又发现一个问题上升沿太缓在CMOS阈值附近电压变化率低这时候稍有一点电源噪声就可能产生二次边沿。所以在RC之后加了施密特反相器整形这个问题才彻底解决。排查的收获是RC时间常数必须覆盖机械触点的最大弹跳时间但也不能无限加大因为上升沿过缓反而容易引入新干扰。最佳方式是RC低通加施密特整形。5.2 上电瞬间继电器“咔哒”一声的根因还有个典型故障一上电继电器就吸合一下或直接保持吸合。用万用表测量Q引脚发现上电后Q电压随机有时候高有时候低。CD4013的锁存器在上电时没有定义输出状态如果恰好为高接管了三极管继电器自然就吸合了。处理方式是加上了电复位网络。我选择把RESET引脚通过100kΩ电阻接地再通过1µF电容接VDD。上电瞬间电容两端电压不能突变RESET被拉高Q强制为低随后电容通过电阻放电约几十毫秒后RESET降到低电平电路解锁。这个复位时间可以让下游稳压电路、继电器电源轨充分稳定。这里有个容易忽略的细节上电复位RC网络中的电阻必须接低电平电容接VDD。如果电阻接到了VDD、电容接地那么上电瞬间RESET是低电平起不到复位作用然后随着电容充电RESET会被拉到高电平电路反而在运行中途被一直强制复位。方向接反是新手常犯的错误。5.3 继电器释放瞬间芯片复位的真实元凶第三次踩坑最隐蔽。一个12V继电器控制电路继电器断开时如果同时观察CD4013的Q引脚会看到瞬间出现一个毛刺严重时整个电路重新进入复位状态。这个毛刺持续时间只有微秒级肉眼看不到但继电器反复吸合释放几次之后三极管或者芯片就莫名其妙损坏了。万用表查不出来必须用示波器看。把探头直接夹在继电器线圈两端断开瞬间能看到一个明显的反向尖峰幅度远超电源电压几十伏。这时反电动势尖峰虽然被下游电路部分吸收但高频能量已经通过电源线耦合进芯片。修复方案是加续流二极管并且把二极管从继电器线圈引脚根部引出尽量减小回路面积。加了之后尖峰消失芯片再没有出现过复位现象。另一个措施是在CD4013的VDD和GND之间加一个100nF陶瓷电容滤除高频干扰。5.4 还有一个隐藏问题未用触发器的处理有一次设备偶发异常我排查了很久最后发现是另一个未使用的触发器输入引脚悬空导致内部振荡产生干扰信号。CD4013内部两个触发器距离很近一个单元的振荡会影响另一个单元。解决办法很简单未使用单元的D接GNDCLK接GNDSET和RESET接GND所有引脚都不悬空。这条经验后来成为我检查所有CMOS电路的固定步骤。6. 一个板子同时兼容两种模式的布局与扩展思路6.1 用跳线切换单双稳态做成通用控制板既然CD4013的两种模式只是反馈方式不同完全可以做成一块兼容板通过跳线选择工作模式。具体思路是把Q非到D的通路设计成可断开同时把D到VDD的通路也设计成可断开。当Q非到D连通时默认D悬空。跳线方案更稳妥的是用两组排针加短路帽双稳态模式将Q非短接到DD不接VDD。单稳态模式将D短接到VDDQ非到D的短接帽断开。电路其他部分完全共用CLK接输入处理Q接驱动级RESET接上电复位和单稳态RC网络。这样一块板子既可用于触摸开关、一键切换照明也能用于延时继电器、设备断电保护非常实用。PCB布局上RC定时元件靠近芯片的RESET引脚驱动级三极管靠近继电器端子续流二极管紧贴继电器线圈引脚。走线遵循一个原则强电流路径小回路弱信号路径短且远离继电器触点。6.2 把两个触发器用起来更复杂的控制逻辑CD4013双通道的潜力值得榨干。单稳态模式下两路不同RC时间的延时单元可以组成先吸合延时、后断开延时的序列。双稳态模式下两个单元级联可以构成两位计数器输出四种状态控制多个继电器的组合逻辑。还有一个小技巧将两个CD4013级联成四路控制用于多设备轮换启动可以避免多台大功率设备同时上电造成电源冲击。这在实际项目中很常见。6.3 什么时候不要用CD4013虽然我在这套方案上投入了不少时间但还是要说句公道话CD4013适合逻辑固定、环境可靠、调试量小的场景。如果延时精度要求高比如误差小于1%、需要现场调整参数、或者需要与上位机通信那就别跟逻辑芯片较劲STM32F103或者一颗8脚单片机才是更好的选择。关键是选型时要判断清楚需求边界不要为了复古而复古。我在实际使用中还有一个习惯新做的CD4013板子第一次上电不会直接接继电器而是先用两节5号电池给芯片供电用LED代替继电器做负载确认单稳态延时和双稳态翻转都符合预期再换成12V继电器实测。这样做既安全又能把逻辑问题和功率问题分开排查。这块板子后来我做了好几个变体分别用在触摸台灯、排风扇延时关闭和小型水泵交替控制上每一版改动都很小运行都很稳定。