1. 互补推挽到底是个什么东西
1.1 从一个翻车现场说起
前两年帮朋友调一个直流有刷电机的驱动板,方案很简单:MCU出PWM,经过一级三极管推挽,去驱动一颗N沟道MOS管,MOS管再带动电机。板子打回来,上电,电机转了大概三秒钟,啪一声,MOS管炸了,铜皮都掀起来一小块。换了一颗,又炸。当时第一反应是MOS管耐压不够,换了更高耐压的,还是炸。后来拿示波器一测栅极波形,才发现问题根本不在MOS管本身,而是推挽级上下两个管子出现了短暂的“直通”——也就是上下管同时导通,电源直接对地短路,瞬间电流把管子干掉了。
这个坑,几乎每个做电机驱动或者功率开关的人都踩过。而互补推挽这个结构,恰恰就是这类问题的核心。它看起来简单到不行——两个管子,一个拉高一个拉低,中间接输出——但真正用起来,从三极管到MOS管,从MCU的IO口到电机驱动,从信号级到功率级,里面的门道非常多。
这篇文章就把互补推挽的六种经典用法从头到尾捋一遍,每一种都讲清楚它解决什么问题、怎么接、参数怎么算、容易在哪里炸管。内容会涉及三极管推挽、MOS管推挽、MCU直接驱动、电机驱动模块里的推挽结构、IGBT驱动推挽,以及电平转换场景下的推挽用法。不管你是刚接触硬件的新手,还是已经画过几版板子的老手,应该都能从中找到一些能直接抄作业的东西。
1.2 互补推挽的基本结构和工作原理
先把最基础的结构说清楚。互补推挽,英文叫complementary push-pull,核心就是两个极性相反的器件(一个NPN一个PNP,或者一个N沟道一个P沟道),上下叠在一起,中间引出输出点。上管负责“推”(拉高、灌电流),下管负责“挽”(拉低、拉电流),所以叫推挽。
用三极管来举例。上面一个NPN,集电极接电源,发射极接输出;下面一个PNP,集电极接地,发射极接输出。两个基极连在一起作为输入。当输入是高电平时,NPN导通,输出被拉到接近电源电压;当输入是低电平时,PNP导通,输出被拉到接近地。输入悬空或者处于中间电平时,两个管子都接近截止,输出处于高阻态。
这里有一个关键点:三极管的基极-发射极之间有一个约0.7V的导通压降(硅管)。也就是说,输入信号必须高于电源电压加0.7V才能让NPN完全导通,低于地减0.7V才能让PNP完全导通。这就引出了推挽电路最经典的“交越失真”问题——当输入信号在0V附近来回摆动时,两个管子都处于截止区,输出会出现一段死区,波形上表现为一个台阶。
用MOS管做推挽就避开了这个问题。MOS管的栅极是电压驱动,阈值电压虽然也有,但不需要像三极管那样持续灌基极电流。N沟道MOS管在上、P沟道在下,栅极连在一起。输入高时N管导通,输入低时P管导通。但MOS管同样有死区问题,而且因为栅极电容的存在,开关瞬间的驱动能力要求更高。
注意:推挽结构最怕的就是上下管同时导通。无论是三极管还是MOS管,一旦出现直通,电源到地就是一条低阻通路,电流只受限于电源内阻和线路阻抗,管子瞬间就会过热甚至炸裂。后面会专门讲怎么避免这个问题。
1.3 为什么电机驱动和MCU场景下离不开推挽
有人可能会问:MCU的IO口本身就能输出高低电平,为什么还要加推挽?直接驱动不行吗?
答案是:大多数MCU的IO口驱动能力非常有限。以常见的STM32为例,单个IO口的最大灌电流和拉电流通常在20mA到25mA左右,而且所有IO口的总电流还有上限。这个电流用来点个LED、驱动个逻辑输入没问题,但要去驱动MOS管的栅极、驱动电机的控制端、或者驱动光耦,就远远不够了。
MOS管的栅极本质上是一个电容。以一颗常见的IRF3205为例,输入电容大约在3000pF到4000pF。要在几百纳秒内把这个电容充到10V,需要的瞬时电流是:I = C × dV/dt = 4000pF × 10V / 200ns = 200mA。这已经远超MCU IO口的能力了。如果驱动电流不够,MOS管就会工作在放大区而不是开关区,导通电阻大,发热严重,效率低,最终可能热击穿。
推挽级的作用就在这里:它把MCU的小信号电流放大成能够快速充放电栅极电容的大电流。上管负责快速拉高栅极电压,下管负责快速拉低栅极电压,两个管子交替工作,让MOS管始终处于要么完全导通、要么完全截止的开关状态。
在电机驱动场景下,这个需求更加迫切。电机是感性负载,启动瞬间电流可能是额定电流的5到10倍,PWM调速时又需要频繁开关。如果驱动级响应不够快,MOS管在开关过程中产生的损耗会急剧增加。互补推挽就是解决这个问题的经典方案。
2. 六种经典用法逐一拆解
2.1 用法一:三极管互补推挽驱动MOS管栅极
这是最经典、最基础的一种用法。MCU出一路PWM信号,经过NPN和PNP组成的互补推挽,去驱动一颗N沟道MOS管的栅极。
具体接法是这样的:NPN三极管的集电极接12V电源(或者MOS管需要的栅极驱动电压),发射极接MOS管栅极;PNP三极管的集电极接地,发射极也接MOS管栅极;两个三极管的基极连在一起,通过一个限流电阻接MCU的PWM输出。MOS管的栅极和源极之间还需要一个下拉电阻,通常是10kΩ,作用是当推挽级没有输出时,确保栅极电压被拉到地,MOS管可靠关断。
这个电路的工作逻辑很清晰。PWM高电平时,NPN导通,12V通过NPN的集电极-发射极给MOS管栅极充电,栅极电压迅速上升到接近12V,MOS管完全导通。PWM低电平时,PNP导通,MOS管栅极通过PNP的发射极-集电极放电到地,栅极电压迅速下降到接近0V,MOS管完全关断。
这里有几个参数需要仔细算。首先是基极限流电阻。假设MCU输出3.3V,三极管基极-发射极压降0.7V,那么电阻上的电压是2.6V。如果希望基极电流在10mA左右,电阻值就是2.6V / 10mA = 260Ω,取标准值270Ω或者330Ω都可以。基极电流越大,三极管饱和越深,推挽级的输出阻抗越低,充放电速度越快。但基极电流也不能太大,否则MCU的IO口可能承受不了。
其次是推挽级三极管的选择。NPN和PNP需要配对使用,参数尽量接近。常用的型号有S8050(NPN)和S8550(PNP),或者2N3904和2N3906。如果驱动电压更高、电流更大,可以用2N2222和2N2907,或者BC337和BC327。关键参数是集电极最大电流、集电极-发射极击穿电压和特征频率。对于驱动MOS管栅极这种应用,集电极电流有几百毫安就够了,击穿电压要高于驱动电压,特征频率最好在100MHz以上。
实操心得:很多人在这个电路上翻车,是因为忽略了NPN和PNP的开关速度差异。PNP三极管通常比NPN慢一些,导致关断延时比导通延时大。如果PWM频率很高(比如超过50kHz),这个差异会导致波形不对称,MOS管开关损耗增加。解决办法是选择特征频率更高的PNP,或者在PNP的基极串联一个小电阻来加速关断。
还有一个容易忽略的点:推挽级的供电电压。如果MOS管需要10V以上的栅极驱动电压才能完全导通,而MCU只能输出3.3V,那么推挽级必须用独立的12V电源供电。这个12V电源的纹波和稳定性直接影响MOS管的开关性能。实测中,如果12V电源纹波超过200mV,MOS管栅极波形上会出现明显的抖动,开关损耗会增加不少。
2.2 用法二:MOS管互补推挽做电平转换
MCU的IO口是3.3V,但外设需要5V的逻辑电平,这种情况非常常见。比如驱动LCD数码管的段码、驱动某些老式的逻辑芯片、或者和5V的单片机通信。这时候可以用一对互补MOS管做电平转换。
电路结构是这样的:P沟道MOS管的源极接5V,漏极接输出,栅极接3.3V的输入信号;N沟道MOS管的源极接地,漏极接输出,栅极也接3.3V的输入信号。当输入为3.3V高电平时,P管截止,N管导通,输出被拉到地;当输入为0V低电平时,P管导通,N管截止,输出被拉到5V。注意这里输入和输出是反相的,如果需要同相,可以再加一级反相器,或者把P管和N管的位置对调。
这个电路的关键在于MOS管的阈值电压。P管的阈值电压通常在-1V到-3V之间,N管的阈值电压在1V到3V之间。3.3V的输入信号要能够可靠地控制这两个管子。如果P管的阈值电压是-2V,那么当输入为3.3V时,栅源电压是3.3V - 5V = -1.7V,这个电压可能不足以让P管完全截止,会有漏电流。解决办法是选择阈值电压更低的MOS管,或者用专门的电平转换芯片。
注意:用MOS管做电平转换时,如果输入信号的上升沿和下降沿比较慢,MOS管会在阈值附近停留较长时间,导致两个管子同时导通,产生直通电流。虽然MOS管的直通电流通常比三极管小,但在低功耗场景下仍然不可接受。建议在输入信号上增加施密特触发器整形,或者选择带滞回特性的电平转换芯片。
实测中,用BSS138(N沟道)和BSS84(P沟道)做3.3V到5V的电平转换,在100kHz以下的信号频率下表现稳定。但如果信号频率超过500kHz,输出波形的上升沿和下降沿会明显变缓,因为MOS管的栅极电容和负载电容形成了RC延迟。这时候需要减小上拉电阻或者选择输入电容更小的MOS管。
2.3 用法三:电机驱动模块里的H桥推挽结构
L298N、TB6612、L293D这些常见的电机驱动模块,内部的核心就是H桥。而H桥的每一个桥臂,本质上就是一个推挽结构。以TB6612为例,它的输出级是N沟道和P沟道MOS管组成的互补推挽,每个桥臂上下各一个管子,四个管子组成完整的H桥。
H桥推挽的工作逻辑比单管推挽复杂一些。以驱动直流有刷电机正转为例:左上桥臂的P管导通,右下桥臂的N管导通,电流从电源经过左上P管、电机、右下N管到地。反转时,右上P管和左下N管导通,电流方向相反。调速时,PWM信号控制导通桥臂的开关频率。
这里最核心的问题是“死区时间”。因为H桥的上下桥臂不能同时导通,否则电源直接短路。所以在切换导通状态时,必须先关断当前导通的管子,等待一段时间(死区时间),再导通另一组管子。TB6612内部集成了死区时间控制,通常在几百纳秒左右。但如果用分立元件搭H桥,死区时间必须由MCU或者专门的驱动芯片来保证。
实操心得:用L298N驱动电机时,如果PWM频率超过20kHz,模块发热会明显增加。原因是L298N内部的推挽级是双极型三极管,开关速度有限,高频下开关损耗大。如果要用高频PWM,建议换用TB6612或者DRV8833这类MOS管输出的驱动模块。实测TB6612在100kHz PWM下仍然能保持较低的温度,而L298N在20kHz以上就开始烫手了。
另一个常见问题是电机的反电动势。电机在断电瞬间会产生反向电压,这个电压可能远高于电源电压。如果推挽级的MOS管耐压不够,就会被击穿。所以在电机两端需要并联续流二极管,或者在H桥的每个MOS管旁边反并联一个快恢复二极管。TB6612内部已经集成了这些二极管,但分立元件搭H桥时必须自己加。
2.4 用法四:IGBT驱动的三极管推挽
IGBT在电机驱动、逆变器、大功率开关电源里用得很多。IGBT的栅极特性介于MOS管和三极管之间:它是电压驱动,但栅极电容比MOS管大得多,而且有一个米勒平台区。驱动IGBT需要更大的瞬时电流和更精确的电压控制。
用三极管互补推挽驱动IGBT是最经典的方案之一。电路结构和驱动MOS管类似,但参数要求更高。IGBT的栅极电荷通常在几百纳库仑到几微库仑,要在几百纳秒内完成充放电,峰值电流可能达到几安培。所以推挽级的三极管需要选择功率型,比如MJE182和MJE172,或者2SC5171和2SA1930。
推挽级的供电电压也需要仔细设计。IGBT通常需要15V左右的栅极驱动电压才能完全导通,关断时需要-5V到-8V的负压来确保可靠关断。所以推挽级通常采用正负双电源供电,上管接+15V,下管接-8V。这样当上管导通时,栅极被拉到+15V;下管导通时,栅极被拉到-8V。
注意:IGBT的栅极不能悬空。如果推挽级出现故障导致栅极悬空,IGBT会因为没有放电回路而保持导通状态,最终过热炸裂。所以栅极和发射极之间必须有一个下拉电阻,通常是10kΩ到20kΩ。这个电阻还能在推挽级没有输出时提供一条放电通路。
实测中,用三极管推挽驱动IGBT时,最头疼的问题是米勒平台。当IGBT从关断转向导通时,栅极电压会在一段时间内停滞在米勒平台电压附近,这时候集电极电流在上升但集电极-发射极电压还没下降,损耗非常大。解决办法是增大推挽级的驱动电流,让栅极快速越过米勒平台。具体来说,可以把推挽级三极管的基极限流电阻减小到100Ω左右,让基极电流达到20mA以上。
2.5 用法五:MCU直接驱动推挽级做信号放大
有些场景下,MCU需要输出的不是功率,而是一个被放大的模拟信号或者高频脉冲。比如驱动超声波换能器、驱动LED阵列、或者做红外发射。这时候可以用MCU的IO口直接驱动互补推挽,推挽级的输出再去驱动负载。
这种用法和前面几种的区别在于:推挽级工作在开关状态还是线性状态。如果驱动的是方波信号,推挽级工作在开关状态,效率高,发热小。如果驱动的是模拟信号,推挽级需要工作在线性区,这时候交越失真的问题就非常突出。
解决交越失真的经典方法是给推挽级加一个偏置电压,让两个管子在没有信号输入时处于微导通状态。具体做法是在两个三极管的基极之间串联两个二极管(或者一个二极管加一个电阻),利用二极管的压降提供约1.4V的偏置电压。这样当输入信号在0V附近时,两个管子都已经微微导通,输出波形就不会出现死区台阶。
实操心得:用MCU的PWM加RC滤波产生模拟信号,再经过推挽级放大,这个方案在低成本场景下很常见。但要注意MCU的PWM分辨率。如果PWM是8位的,那么输出模拟信号的精度最多也就是8位,而且RC滤波会引入延迟。如果对精度要求高,建议直接用DAC芯片,不要走PWM加推挽这条路。
另一个坑是推挽级的静态工作点。如果偏置电压设置不当,两个管子可能会同时导通,产生较大的静态电流。实测中,偏置电压在1.2V到1.4V之间比较合适,对应的静态电流在几毫安到十几毫安。如果静态电流超过50mA,管子会明显发热,需要加散热片或者重新调整偏置。
2.6 用法六:FPGA输出到达林顿管再输出的推挽变种
FPGA的IO口驱动能力通常比MCU还弱,而且电压等级更多(1.2V、1.5V、1.8V、2.5V、3.3V都有)。当FPGA需要驱动大电流负载时,经常采用“FPGA输出 -> 推挽级 -> 达林顿管 -> 负载”的结构。
达林顿管本质上就是两个三极管级联,电流放大倍数等于两个管子放大倍数的乘积。比如用两个放大倍数100的三极管组成达林顿管,总放大倍数就是10000。这样FPGA只需要输出很小的电流,就能控制很大的负载电流。
推挽级在这里的作用是快速驱动达林顿管的基极。因为达林顿管的基极-发射极之间有两个PN结,压降大约是1.4V,而且输入电容也比较大。用推挽级驱动可以保证达林顿管快速开关,减少开关损耗。
注意:达林顿管的饱和压降比较高,通常在1V到1.5V之间。这意味着在导通状态下,达林顿管上的功耗比较大。如果负载电流是1A,那么达林顿管上的功耗就是1W到1.5W,需要加散热片。如果对效率要求高,建议用MOS管代替达林顿管。
实测中,这个结构在驱动电磁阀、继电器、大功率LED时表现稳定。但要注意达林顿管的关断速度比较慢,因为基极存储电荷需要时间释放。推挽级的下管可以提供一条快速放电通路,把基极电荷迅速抽走,关断时间可以从几十微秒缩短到几微秒。
3. 炸管避坑指南
3.1 直通:最致命的杀手
直通是推挽电路最致命的问题。上下管同时导通,电源到地形成低阻通路,电流瞬间飙升到几十安培甚至上百安培,管子几毫秒内就会炸裂。
直通的原因通常有三个。第一个是输入信号在切换瞬间没有死区时间。比如MCU的PWM从高变低时,NPN还没完全关断,PNP就已经开始导通,两个管子重叠导通。第二个是推挽级的供电电压波动,导致管子的开关阈值发生变化。第三个是温度升高后,管子的开关速度变慢,原本够用的死区时间变得不够了。
避免直通的方法有几个。最直接的是在MCU的PWM输出上增加死区时间,通常几百纳秒就够了。如果MCU不支持硬件死区,可以用RC延时电路在推挽级的输入端制造死区。另一个方法是在推挽级的输出端串联一个小电阻(比如1Ω到10Ω),限制直通电流。但这个电阻会影响正常的充放电速度,需要权衡。
实操心得:我自己的做法是在推挽级的输入端加一个施密特触发器(比如74HC14),利用它的滞回特性来整形信号,同时在后级加RC延时。实测下来,这个方法可以把直通概率降到几乎为零。但要注意RC延时不能太大,否则会影响PWM的占空比精度。
3.2 栅极振荡:看不见的杀手
MOS管和IGBT的栅极是一个电容,加上线路上的寄生电感,就形成了一个LC振荡回路。当推挽级快速充放电时,栅极电压上会出现振铃,严重时振荡幅度可能超过管子的最大栅极电压,导致栅极击穿。
栅极振荡的频率通常在几十兆赫兹到几百兆赫兹。用示波器观察时,可以看到栅极波形上有明显的高频毛刺。这些毛刺不仅会增加开关损耗,还可能让管子误导通。
抑制栅极振荡的方法是在栅极串联一个电阻,通常是几欧姆到几十欧姆。这个电阻和栅极电容形成RC低通滤波,可以衰减高频振荡。但电阻太大会减慢开关速度,增加开关损耗。实测中,对于大多数MOS管,栅极电阻在10Ω到22Ω之间比较合适。
另一个方法是在栅极和源极之间并联一个TVS二极管,把栅极电压钳位在安全范围内。TVS的响应速度要快,结电容要小,否则会影响正常开关。
3.3 散热设计:别等炸了才想起来
推挽级的管子虽然工作在开关状态,但开关损耗和导通损耗仍然会产生热量。如果散热设计不到位,管子温度升高,开关速度变慢,直通风险增加,最终形成恶性循环。
计算散热需求时,需要先估算总功耗。导通损耗是I² × Rds(on) × 占空比,开关损耗是0.5 × Vds × Id × (tr + tf) × fsw。以一颗MOS管为例,如果导通电阻是10mΩ,电流是5A,占空比50%,导通损耗就是0.125W。开关损耗如果上升时间和下降时间各100ns,频率100kHz,那么开关损耗是0.5 × 12V × 5A × 200ns × 100kHz = 0.6W。总功耗约0.725W。
对于SOT-23封装的MOS管,热阻大约是200°C/W,0.725W的功耗会让结温升高145°C,加上环境温度25°C,结温就是170°C,远超最大允许结温150°C。所以必须换用更大的封装,比如TO-252或者TO-220,或者加散热片。
注意:很多人在计算散热时只考虑导通损耗,忽略了开关损耗。在高频PWM场景下,开关损耗可能比导通损耗还大。实测中,如果MOS管不加散热片,在1W功耗下工作几分钟就会烫手,长期工作可靠性很差。
3.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 上电就炸管 | 直通 | 测上下管栅极波形是否重叠 | 增加死区时间,加限流电阻 |
| 工作几分钟后炸管 | 散热不足 | 测管子表面温度 | 换大封装,加散热片 |
| 波形有高频毛刺 | 栅极振荡 | 示波器看栅极波形 | 串联栅极电阻,加TVS |
| 输出电平不对 | 阈值电压不匹配 | 测输入输出电平 | 换低阈值管子,加偏置 |
| 关断延时大 | 存储电荷释放慢 | 测关断波形 | 减小基极电阻,加加速电容 |
| 静态电流大 | 偏置不当 | 测静态电流 | 调整偏置电压,换配对管 |
4. 实操过程与核心环节实现
4.1 从需求到选型:一个电机驱动板的完整设计流程
假设我们要设计一个直流有刷电机的驱动板,需求是:电机电压12V,额定电流2A,启动电流5A,PWM频率20kHz,MCU是3.3V的STM32。
第一步是确定功率级。电机电流2A,启动电流5A,考虑余量,MOS管的额定电流至少10A,耐压至少30V。选IRF3205,额定电流110A,耐压55V,导通电阻8mΩ,完全够用。
第二步是确定推挽级。IRF3205的栅极电荷是63nC,要在200ns内完成充放电,驱动电流是63nC / 200ns = 315mA。推挽级三极管选S8050和S8550,最大集电极电流1.5A,特征频率100MHz,满足要求。
第三步是计算基极限流电阻。MCU输出3.3V,三极管基极-发射极压降0.7V,希望基极电流15mA,电阻值 = (3.3V - 0.7V) / 15mA = 173Ω,取180Ω。
第四步是确定栅极下拉电阻。10kΩ是常用值,确保栅极在无信号时可靠关断。
第五步是确定推挽级供电。IRF3205需要10V以上的栅极电压才能完全导通,所以推挽级用12V供电,和电机共用电源。但要注意,电机启动时12V电源会有波动,如果波动超过MOS管的最大栅极电压(通常±20V),需要加稳压或者TVS钳位。
4.2 关键波形实测与分析
板子焊好之后,上电之前先做静态测试。不接电机,用示波器测推挽级的输入和输出波形。输入是MCU的PWM,应该是干净的3.3V方波。输出应该是12V方波,上升沿和下降沿应该在200ns以内。
如果输出波形的上升沿很慢,比如超过1μs,说明推挽级的驱动电流不够。检查基极限流电阻是否太大,或者三极管的放大倍数是否太低。如果输出波形有振铃,说明栅极振荡,需要串联栅极电阻。
接上电机后,再测MOS管的漏极波形。在MOS管导通时,漏极电压应该接近0V;关断时,漏极电压应该接近12V。如果关断时漏极电压有尖峰,说明电机的反电动势没有被续流二极管吸收,需要检查续流二极管是否接好。
实操心得:测波形时,示波器的探头地线要尽量短,最好用弹簧地针,不要用长地线夹。长地线夹会引入寄生电感,导致波形上出现虚假的振铃,让你误以为电路有问题。我刚开始调试时就吃过这个亏,换了短地线之后,波形立刻干净了。
4.3 从原理图到PCB的布局要点
推挽电路的PCB布局有几个关键点。第一,推挽级的供电走线要尽量短而粗,减少线路电感。第二,MOS管的栅极走线要尽量短,避免引入额外的寄生电感。第三,续流二极管要尽量靠近MOS管,减少续流回路的面积。第四,推挽级的地和功率地要分开走,最后在电源入口处单点接地。
实测中,如果推挽级的供电走线太长(超过5cm),栅极波形上会出现明显的振铃。解决办法是在推挽级的电源引脚旁边加一个100nF的陶瓷电容和一个10μF的电解电容,就近提供瞬态电流。
另一个容易忽略的点是散热焊盘。MOS管的散热焊盘要尽量大,最好铺铜并打过孔到背面。如果MOS管是TO-252封装,散热焊盘的面积至少要有1cm²,否则散热不够。
5. 常见问题与排查技巧实录
5.1 推挽级输出波形不对称怎么办
波形不对称通常表现为上升沿快、下降沿慢,或者反过来。原因可能是NPN和PNP的开关速度不一致,或者基极限流电阻不对称。
排查方法是分别测NPN和PNP的基极波形,看驱动信号是否对称。如果NPN的基极电流明显大于PNP,说明限流电阻不匹配。解决办法是给NPN和PNP分别串联不同阻值的电阻,让两个管子的基极电流接近。
另一个原因是负载不对称。如果推挽级的负载是一个电容(比如MOS管栅极),充电和放电的回路阻抗可能不同。充电时电流经过NPN,放电时经过PNP,如果两个管子的导通电阻不同,波形就会不对称。解决办法是选择配对的三极管,或者用MOS管做推挽级,因为MOS管的导通电阻更容易匹配。
5.2 MCU的PWM频率和推挽级怎么匹配
PWM频率的选择需要权衡。频率太低,电机噪音大,电流纹波大;频率太高,推挽级和MOS管的开关损耗大,发热严重。
对于有刷直流电机,PWM频率通常在10kHz到30kHz之间。这个范围高于人耳听觉上限(20kHz),电机不会发出刺耳的啸叫。对于无刷电机,PWM频率可能更高,达到50kHz甚至100kHz。
推挽级的开关速度必须跟得上PWM频率。如果PWM频率是20kHz,周期是50μs,推挽级的上升和下降时间应该在1μs以内,占周期的2%以下。如果上升时间超过5μs,占周期的10%,波形就会明显失真,MOS管开关损耗也会增加。
注意:如果MCU的PWM频率可调,建议从10kHz开始测试,逐步提高频率,观察推挽级和MOS管的温度变化。找到温度开始明显上升的频率点,然后留50%的余量作为工作频率。
5.3 用L298N和TB6612时推挽级的差异
L298N内部是双极型三极管H桥,推挽级的开关速度慢,饱和压降大(约1.8V),效率低。但它的驱动能力强,单通道可以持续输出2A电流,峰值3A。适合驱动大电流、低频率的场景。
TB6612内部是MOS管H桥,开关速度快,导通电阻小(约0.5Ω),效率高。但它的持续电流只有1.2A,峰值3.2A。适合驱动小电流、高频率的场景。
实测中,用L298N驱动12V 1A的电机,模块表面温度在50°C左右;用TB6612驱动同样的电机,温度只有35°C左右。但如果电机电流超过1.5A,TB6612会触发过流保护,而L298N还能继续工作。
选择哪个模块,取决于电机的电流和PWM频率。如果电机电流小于1A,PWM频率高于20kHz,选TB6612。如果电机电流大于1.5A,PWM频率低于10kHz,选L298N。
5.4 无电解电容电机驱动的推挽设计
有些场景下(比如高温环境或者长寿命要求),电解电容的寿命成为瓶颈。这时候需要设计无电解电容的电机驱动,推挽级的设计也要相应调整。
无电解电容意味着电源的瞬态响应变差,推挽级需要更大的本地储能电容。通常用多个陶瓷电容并联,比如10个10μF的X7R陶瓷电容,总容量100μF。这些电容要尽量靠近推挽级的电源引脚,减少线路电感。
另一个调整是降低PWM频率。没有电解电容的情况下,电源纹波会比较大,如果PWM频率太高,纹波会耦合到推挽级的输出,导致MOS管误导通。实测中,无电解电容方案的PWM频率通常限制在5kHz到10kHz。
推挽级的三极管也需要选择低饱和压降的型号,减少功耗。比如用2SC5706和2SA2125,饱和压降只有0.2V左右,比S8050的0.5V低不少。
5.5 推挽级驱动光耦的注意事项
光耦的输入端是一个发光二极管,需要10mA到20mA的驱动电流。推挽级可以直接驱动光耦,但要注意光耦的响应速度。
普通光耦(比如PC817)的响应时间在几微秒到几十微秒,不适合高频PWM。高速光耦(比如6N137)的响应时间在几十纳秒,可以用于高频场景。但高速光耦的驱动电流要求更大,通常需要20mA以上。
推挽级驱动光耦时,上管导通时电流经过限流电阻流入光耦的阳极,光耦发光。下管导通时,光耦的阳极被拉到地,光耦熄灭。限流电阻的计算方法是:(推挽级供电电压 - 光耦正向压降) / 期望电流。比如供电12V,光耦正向压降1.2V,期望电流15mA,电阻值 = (12V - 1.2V) / 15mA = 720Ω,取680Ω。
实操心得:光耦的电流传输比(CTR)会随着温度和时间衰减。设计时不要卡着最小CTR算,要留至少50%的余量。我见过一个产品,出厂时光耦工作正常,用了两年后CTR衰减到原来的60%,推挽级的输出电流不够,光耦无法完全导通,导致电机时转时不转。后来把限流电阻减小了30%,问题才解决。
6. 一些零散但重要的经验
6.1 三极管推挽和MOS管推挽怎么选
三极管推挽的优点是便宜、驱动简单、不需要额外的栅极驱动电压。缺点是基极需要持续电流,静态功耗大,开关速度受限于少数载流子的存储效应。
MOS管推挽的优点是开关速度快、静态功耗几乎为零、驱动电压范围宽。缺点是栅极电容大,需要更大的瞬时驱动电流,而且P沟道MOS管的选择比N沟道少,价格也贵一些。
选择原则:如果PWM频率低于50kHz,驱动电流小于500mA,用三极管推挽就够了。如果PWM频率高于100kHz,或者驱动电流大于1A,建议用MOS管推挽。如果对静态功耗有严格要求(比如电池供电),必须用MOS管推挽。
6.2 推挽级的供电从哪来
推挽级的供电可以来自电机电源,也可以来自独立的稳压电源。如果来自电机电源,要注意电机启动和制动时的电压波动。电机启动时,电源电压可能瞬间跌落20%到30%;电机制动时,电源电压可能瞬间升高50%甚至更多。
如果推挽级的供电波动太大,会导致MOS管的栅极电压不稳定,开关损耗增加。解决办法是在推挽级的电源入口加一个LC滤波器,或者用独立的稳压器给推挽级供电。实测中,用7812给推挽级供电,栅极波形明显比直接用电機电源干净。
6.3 什么时候不需要推挽
推挽不是万能的。如果MCU的IO口驱动能力足够(比如某些增强型IO口可以输出100mA),而且负载电容不大(比如小于100pF),可以直接驱动,不需要推挽级。
如果负载是纯电阻,而且电流在MCU IO口的能力范围内,也不需要推挽。比如驱动一个LED,串联限流电阻后直接接IO口就行。
推挽级主要用在三种场景:驱动电容性负载(MOS管栅极、IGBT栅极)、驱动电感性负载(电机、继电器)、需要电平转换或信号放大的场景。如果不符合这三种场景,先想想有没有更简单的方案。
6.4 一个容易被忽略的细节:推挽级的输出串联电阻
在推挽级的输出和负载之间串联一个小电阻(通常1Ω到10Ω),可以限制峰值电流,抑制振荡,还能在直通时限制电流。这个电阻的功耗要算清楚:如果峰值电流是1A,电阻是5Ω,瞬时功耗就是5W。虽然持续时间很短,但电阻的脉冲功率承受能力要足够。
实测中,用5Ω的0805封装电阻,在1A峰值电流下工作几分钟就会发烫。后来换成1206封装,问题解决。如果峰值电流更大,建议用2512封装或者多个电阻并联。
6.5 调试时先低压后高压
第一次调试推挽电路时,不要直接上12V或者24V。先用3.3V或者5V的低压测试,确认波形正确、没有直通、没有振荡,再逐步提高电压。这样即使有问题,管子也不会炸,损失小。
我自己的习惯是先用可调电源,从1V开始,每步增加1V,同时观察波形和电流。如果电流突然增大,立刻断电检查。这个方法帮我避免了很多次炸管。
6.6 备件要充足
调试功率电路时,管子炸掉是家常便饭。建议每种型号的管子至少备5颗,三极管备10颗。炸管的时候不要心疼,换一颗继续调。但每次炸管都要分析原因,不能炸了换、换了炸,那样永远找不到问题。
我自己的记录本上,每次炸管都会记下:炸的是哪个管子、当时的电压电流、波形什么样、换了什么之后好了。积累了几十次之后,现在看到波形就能大概判断问题在哪。
6.7 用仿真验证再打板
现在的仿真工具很强大,LTspice、Multisim都可以仿真推挽电路。打板之前先仿真一遍,看看波形、电流、功耗是否正常。仿真虽然不能完全替代实测,但可以发现大部分设计错误,比如直通、振荡、驱动不足。
仿真时要注意模型的准确性。三极管模型要选实际使用的型号,MOS管模型要包含栅极电容和导通电阻。如果模型不准,仿真结果可能和实测差很远。我一般会在仿真之后,再用面包板搭一个简单电路验证关键波形,确认无误再打板。
6.8 温度对推挽级的影响
三极管的放大倍数随温度升高而增大,MOS管的导通电阻随温度升高而增大。这些变化会影响推挽级的工作点。
在高温环境下(比如50°C以上),三极管推挽的基极电流会增大,静态功耗增加。如果散热不好,可能形成正反馈:温度升高 -> 基极电流增大 -> 功耗增加 -> 温度进一步升高。解决办法是在基极串联一个负温度系数的热敏电阻,或者用恒流源驱动基极。
MOS管推挽在高温下导通电阻增大,开关损耗增加。如果散热设计只考虑了常温,高温下可能过热。建议散热设计时按最高环境温度加20°C的余量来算。
6.9 推挽级的EMI问题
推挽级的快速开关会产生电磁干扰(EMI)。干扰主要通过两条路径传播:传导干扰通过电源线传播,辐射干扰通过空间传播。
抑制传导干扰的方法是在推挽级的电源入口加共模电感和X电容。抑制辐射干扰的方法是减小推挽级的环路面积,把输入输出走线尽量靠近,减少天线效应。
实测中,如果推挽级的开关时间在100ns以内,EMI通常比较明显。如果开关时间在500ns以上,EMI会小很多。所以在EMI要求严格的场景下,可以适当减慢开关速度,牺牲一点效率换取EMI达标。
6.10 最后再分享一个小技巧
如果你不确定推挽级的驱动电流够不够,可以用一个简单的方法测试:在推挽级的输出端接一个已知容值的电容(比如1nF),用示波器测输出波形的上升时间。上升时间tr和驱动电流I的关系是:I = C × V / tr。比如C=1nF,V=12V,tr=100ns,那么I = 1nF × 12V / 100ns = 120mA。如果这个电流小于你的设计目标,说明驱动能力不够,需要减小基极限流电阻或者换更大电流的三极管。
这个方法不需要复杂的设备,一个示波器和一个电容就能搞定。我每次设计新的推挽电路时都会先做这个测试,确认驱动能力之后再接实际负载。踩过几次坑之后,这个习惯帮我省了不少炸管的钱。