☰
推挽与开漏输出详解:从MOS管原理到Multisim仿真验证
2026/10/6 11:03:06 网站建设 项目流程

我最早想彻底搞懂推挽和开漏,是被一个现象逼的:用STM32的GPIO直接模拟I2C时序,配置成推挽输出,结果总线浮空时读回来的数据全是乱的;后来换成开漏输出、外部加上拉电阻,问题立刻消失。同一个引脚,软件上就改一个寄存器配置,硬件上多一颗电阻,波形和行为就完全不一样。这背后就是芯片内部输出结构在起作用。

当时翻了不少资料,大部分都把推挽和开漏画成等效电路图就结束了,看得似懂非懂。真正让我把这套东西吃透的,是自己动手做了两步:一是把MOS管和推挽、开漏的关系一根线一根线理清楚,二是在Multisim里把两种结构搭出来,用虚拟示波器看波形。本文就用这套思路,从MOS管基础讲到推挽、开漏的完整结构,再到Multisim仿真验证,把这块硬骨头啃下来。

1. 从MOS管到输出结构:为什么非要把基础打牢

1.1 三个极、导通条件和符号上的坑

MOS管全称是金属-氧化物-半导体场效应管,三个极分别叫栅极G、漏极D、源极S。栅极和另外两个极之间隔着一层二氧化硅绝缘层,所以栅极输入阻抗极高,几乎不取电流——这也是MOS管能用电压控制导通的根本原因。实际电路里用的最多的是增强型MOS管,分N沟道和P沟道两种。

N沟道MOS管的导通条件是:Vgs(栅极相对源极的电压)大于开启阈值Vth。举个例子,一个N沟道管Vth=2V,那么Vgs=3V时管子导通,Vgs=0V时管子截止。电流从漏极D流向源极S。P沟道MOS管则完全反过来,Vgs要小于负的Vth才导通,也就是栅极电压要比源极低足够多,电流从源极S流向漏极D。

符号上有个快速识别方法:看箭头方向。N沟道MOS管电路符号里箭头指向栅极(向内),P沟道箭头背离栅极(向外)。这个细节在做仿真和看datasheet时非常容易踩坑,Multisim里选错了沟道,电路死活不通很正常。

1.2 体二极管、寄生电容和米勒效应

MOS管封装内部藏着一个不可避免的结构——体二极管。它连接在漏极和源极之间,方向从源极指向漏极(对N沟道而言)。这个二极管不是设计者想加的,而是半导体工艺天然形成的寄生结构。它的存在意味着:即使MOS管没有导通,只要DS之间加了反向电压,电流也能通过体二极管流过去。这一点在分析开漏输出、桥式电路和电机驱动时非常关键。

另一个绕不开的话题是寄生电容。MOS管的三个极两两之间都有电容:Cgs、Cgd、Cds。datasheet里通常给的是Ciss(输入电容,Cgs与Cgd折算)、Coss(输出电容,Cds与Cgd折算)、Crss(反向传输电容,主要就是Cgd)。这些电容导致MOS管开关不是瞬间完成的,栅极电压充放电需要时间。

米勒效应则专指Cgd把栅极和漏极耦合起来带来的现象。管子从截止到导通过程中,漏极电压大幅变化,会通过Cgd反作用到栅极,导致栅极电压在某个平台期停滞。实测中表现为栅极驱动波形出现一段“平台”,就是所谓的米勒平台。这就是为什么高频开关电路里,驱动MOS管不能只给一个慢吞吞的GPIO信号,需要专门的驱动芯片或者至少加一个栅极电阻来调整开关速度。很多人问“PWM接MOS管发热”,十有八九是栅极驱动能力不足导致管子长时间停留在半导通区,损耗全变成了热量。

1.3 输出结构本质上就是MOS管的组合应用

理解了单管,再看推挽和开漏就简单了。推挽输出靠上下两个MOS管交替导通,一个把输出拉到电源,一个把输出拉低到地,这就是两个开关的组合。开漏输出本质上就是一个N沟道MOS管的漏极引出来,什么都不接,靠外部上拉电阻把电平拉高,这就是一个单管开关的应用。所以前面花这些篇幅讲MOS管的导通条件和寄生参数,绝不是浪费时间——后面分析推挽的交越失真、开漏的上拉电阻计算,全都要用到这里的基础知识。

2. 推挽输出结构拆解:上下管交替导通,但这三个坑必须知道

2.1 互补对称结构的完整工作过程

推挽输出(也叫图腾柱输出)的经典结构是两只互补的管子串联在电源和地之间:上管通常是PNP三极管或P沟道MOS管,下管是NPN三极管或N沟道MOS管,两只管子的输出端连在一起作为输出引脚。

以三极管推挽为例,当输入信号为正半周时,上管(PNP)的发射结电压满足导通条件,上管导通,电流从VCC经过上管流到输出端,输出被拉高到接近VCC;当输入信号为负半周时,上管截止,下管(NPN)导通,输出端通过下管到地,被拉低到接近GND。用MOS管版本同理,只是控制方式从电流变成了电压。

这里有个很重要的特性:无论输出高还是输出低,输出引脚到电源或地之间都有一条低阻抗路径。静态时输出阻抗只有几欧姆甚至更低,所以推挽输出的驱动能力很强,可以直接带LED、蜂鸣器甚至小型继电器。像51单片机的P0口是开漏(因为该引脚还复用总线功能),而P1、P2、P3口内部就带推挽结构,能直接灌入或输出一定电流。

2.2 交越失真的根因与甲乙类改进

交越失真是推挽电路的老大难问题。现象很明显:输入正弦波,输出波形在正负半周交界处出现一段平坦的台阶,像是波形被“咬”了一口。原因在于三极管的发射结存在约0.7V的死区电压(MOS管对应的是阈值电压Vth)。输入信号从正半周跨越到负半周的瞬间,电压在小范围内不足以让上管或下管导通,输出就出现了一段失控区。

解决思路是让两只管子在静态时都处于微导通状态,越过死区。具体做法就是在两个基极之间串联两个二极管(或一个二极管加一个可调电阻),利用二极管的压降给两只管子提供约0.7V的静态偏置。这样输入信号一过零点,对应管子已经处于临界导通状态,不再需要额外克服死区电压,波形就能平滑过渡。这种加了静态偏置的电路叫甲乙类功放,所有音频功放芯片的输出级基本都是这个思路。若不加偏置直接让两只管子工作在乙类状态,对讲机语音、功放输出就会明显失真,这就是热词里“推挽电路为什么会出现交越失真”的完整答案。

2.3 推挽输出的优缺点和风险

推挽输出的优点上文已经提到:输出阻抗低、响应快、驱动能力强。但代价是:两条低阻抗路径之间存在穿通风险。

如果上管和下管同时导通,VCC和GND之间就形成了直流通路,电流会非常大,可能直接烧毁管子。数字芯片内部在处理推挽输出时,会有复杂的时序保证上下管不会同时导通;但用分立元件自己搭推挽时,就一定要考虑这个问题。比如栅极驱动信号边沿太慢,两个管子就有可能在同一时刻都处于导通状态,这就是为什么驱动大功率MOS管时要选带死区时间的专用驱动芯片。

另外,推挽输出的致命弱点是多个输出端不能直接并联。两个推挽输出接在一起,一个输出高、一个输出低,结果就是短路。这个特性在后面对比开漏的“线与”能力时形成鲜明反差。

3. 开漏/开集输出结构拆解:一个字“不”,换来一片应用场景

3.1 开漏和开集到底是啥

开集(OC)是三极管时代的叫法:NPN三极管的集电极不做任何连接到外部,发射极接地,基极接内部驱动信号。开漏(OD)是MOS管时代的叫法:N沟道MOS管的漏极直接引出,源极接地,栅极接内部驱动信号。两种结构原理完全对应,只是器件不同。

可以把开漏输出理解成一个“开路集电极/漏极的开关”:管子导通时,输出引脚被拉到地(输出低电平);管子截止时,输出引脚悬空,什么电平都不是。这时候想要输出高电平,就得靠外部接一个上拉电阻到电源VCC。很多人第一次用I2C时会犯的错就是配置成开漏模式但忘了加上拉电阻,结果总线一直读不到高电平,逻辑分析仪显示SDA和SCL始终在0V附近抖动。

开漏结构还有一个很容易被忽略的特点:负载不能接在输出引脚和地之间,必须接在电源和输出引脚之间。因为管子只负责拉低,不具备主动拉高的能力。这和“低边开关”的概念完全一致——相当于用手电筒做类比,电池正极接灯泡一端,灯泡另一端接开关,开关另一端接地,按下去灯亮,松手灯灭。开漏输出就是这个开关。

3.2 上拉电阻的计算:从灌电流到上升沿时间

上拉电阻的取值不是随便选的,太大会导致信号上升沿太慢,太小会导致灌电流过大,低电平无法满足规范。这里完整推演一遍。

以I2C总线标准模式(100kHz)为例,假设总线电容Cbus≈200pF,上拉电阻Rp取10kΩ,那么RC时间常数τ=Rp*Cbus=2μs。信号从低到高的上升沿大约需要2.2τ,也就是4.4μs左右。而标准模式下100kHz的时钟周期是10μs,上升沿占了接近半个周期,这显然太危险了。所以标准模式下常用上拉电阻在4.7kΩ左右,快速模式(400kHz)下一般取2.2kΩ到4.7kΩ,高速模式(3.4MHz)更是要取到1kΩ甚至几百欧姆。

另一方面,电阻太小会导致输出低电平时的灌电流过大。I2C协议规定输出低电平最大值VOL=0.4V,假定芯片灌电流能力为3mA,那么上拉电阻的最小值Rmin=(VCC-VOL)/IOL=(3.3-0.4)/0.003≈966Ω。实际工程中,如果I2C只是板内短距离通信,总线电容小,取4.7kΩ或2.2kΩ都很稳;但如果总线上挂了多个设备、走线较长,总线电容变大,上拉电阻就要相应减小。典型的经验值是:标准模式用4.7kΩ,快速模式用2.2kΩ,更高速度就要仔细算,不能靠猜。

3.3 I2C为什么偏爱开漏输出+上拉电阻

I2C协议选择开漏输出,根本原因在于必须支持“线与”和“多主机仲裁”。

I2C总线上允许挂多个设备,所有设备的SDA和SCL引脚都是开漏输出,并共用一个上拉电阻。任何一个设备拉低总线,总线就是低电平;只有当所有设备都不拉低时,总线才被上拉到高电平。这就是“线与”逻辑——相当于多个开关并联,任何一个闭合都会让总线变低。如果换成推挽输出,两个设备同时驱动总线,一个输出高一个输出低,立即短路,总线直接烧毁。

开漏结构还顺带解决了电平转换问题。不同电压域的设备挂在同一条I2C总线上,比如3.3V的传感器和5V的单片机,只要上拉电阻接到5V,开漏输出管到地,两个设备都能正确识别电平,又不会让3.3V器件被5V电压打坏。这在推挽输出下根本无法实现,因为推挽输出高电平时会主动拉到自己的电源电压,不同电压域的设备互相看到对方的电源电压,很容易超出输入耐压范围。

3.4 开漏输出的其他经典场景

除了I2C,开漏结构在数字芯片引脚上也大量出现。比如比较器LM393的输出就是开集结构,需要外加一个上拉电阻到后级电路的电源电压,才能输出对应的高电平。这种灵活性正是开漏的优点——输出高电平的电压可以由外部上拉电源决定,不受芯片自身供电限制。还有单片机的复位脚、中断输出脚,很多也是开漏结构,方便多个信号直接“线与”共享一个中断引脚。

4. Multisim仿真验证:亲手搭出两种结构,波形不会骗人

4.1 Multisim环境准备与常见疑难排查

Multisim是目前院校里最常用的电路仿真软件之一,NI公司出品,有Windows版本。我用的是Multisim 14.x版本,基础操作路径是:打开软件后,从“放置”菜单选“元件”,在“Group”里选“Basic”或“Transistors”等类别,找到需要的元件放到原理图上。

实际使用中经常遇到两个问题。一个是“访问数据库发生错误”或者“主数据库无法访问”,这个大概率是软件安装目录权限不足或数据库路径损坏。解决办法:以管理员身份运行Multisim;如果还不行,打开“Options”>“Global Preferences”检查数据库路径是否正确;终极手段是卸载后重新安装到非系统盘。另一个问题是“仪器不全”——在右侧仪器栏里找不到逻辑分析仪或示波器,这通常是因为软件版本精简了。完整的虚拟仪器在“Simulate”>“Instruments”菜单里可以调出来,如果这个菜单里也没有,说明安装的是定制精简版,建议换完整安装包。还有“Multisim仿真速度太慢”的问题,可以在“Simulate”>“Interactive Simulation Settings”里把瞬态分析的步长调大一些,或者把仿真结束时间缩短,速度会有明显提升。

4.2 推挽电路仿真:从截止到交越失真复现

在Multisim里搭建推挽电路,推荐直接用三极管版本,因为三极管推挽的特性曲线更直观。步骤如下:

第一步:放置两只三极管Q1(NPN,型号2N3904)和Q2(PNP,型号2N3906),R1作为上管基极串阻取1kΩ,R2作为下管基极串阻取1kΩ,两只三极管的发射极接在一起作为输出端,Q1的集电极接VCC(12V),Q2的集电极接地。

第二步:输入信号用函数发生器(Function Generator),设置为正弦波,频率1kHz,幅度设置成8V左右,确保输入有足够摆幅让两只管子充分导通。函数发生器的输出端通过两个串接电阻分别接到两只三极管的基极。

第三步:用示波器的A通道接输入信号,B通道接输出端,共地。运行仿真后拉大波形,仔细观察过零点的位置,能看到明显的交越失真台阶。

接着做对比实验:在两只基极之间串联两个1N4148二极管(方向是让静态电流通过二极管流经两只基极),两只二极管的压降合计约1.4V,这个压降刚好让两只三极管处于临界导通状态。再次运行仿真,波形台阶消失,正弦波变得平滑干净。两个波形截图放一起,交越失真的成因和消除方法一目了然。

4.3 开漏电路仿真:没有上拉只能永远输出低

开漏结构更简单。从“Basic”里找一只N沟道增强型MOS管(比如2N7000),或者用NPN三极管2N3904代替实现开集效果也行。用5V直流电源作为VCC,接一个1kΩ上拉电阻Rp到输出节点,MOS管的漏极接输出节点,源极接地,栅极接一个方波信号源(频率1kHz,幅度0~5V)。

先跑一个没有上拉电阻的仿真:把Rp断开,只留MOS管和信号源。运行后示波器观察输出端,看到的是:当栅极为高时输出为0V,栅极为低时输出悬空——但示波器显示的悬空电压取决于输入阻抗和周边杂散参数,实际表现就是一坨噪声或无意义的电压。这就是开头说的“不加上拉电阻,I2C总线永远没有确定的高电平”。

然后接上Rp,再运行仿真。栅极为高时,MOS管导通,输出拉低到约0V;栅极为低时,MOS管截止,输出被Rp上拉到5V。示波器上能清晰看到方波翻转。再进一步,把Rp从1kΩ改成100kΩ,对比输出波形的上升沿,能明显看到上升沿变缓了——这就是RC充放电在起作用,印证了前面关于上拉电阻选值的计算逻辑。

4.4 仿真验证的边界:模型再准也不等于实物

Multisim仿真能帮我们理解电路工作原理,但它有天然局限:元件模型是理想化的,不包含实际PCB走线寄生电感和引脚寄生电容,也模拟不了环境噪声和温度漂移。比如I2C总线的实际波形,受PCB布局、连接线长度、过孔数量影响很大,这些在Multisim里根本体现不出来。

所以我的建议是:仿真用来验证原理、确认接线思路没问题;实际参数还要回到datasheet和具体工况中核算。比如上拉电阻取值,仿真里1kΩ和4.7kΩ波形几乎看不出差别,但实际在长距离I2C总线上,电阻就非常敏感。仿真帮我们建立起直觉,实物调试帮我们积累经验,两者结合才完整。

5. 实际电路设计中的选型建议与避坑清单

5.1 一张表看懂该用推挽还是开漏

场景推荐输出结构关键原因
普通GPIO驱动LED、蜂鸣器推挽驱动能力强,可以直接灌/拉电流,无需外部电阻
模拟I2C总线(SCL/SDA)开漏 + 上拉支持线与,多设备共存,推挽会短路
多路中断信号共用一条MCU引脚开漏 + 上拉线与取或,任何一路触发都能拉低中断线
不同电平域之间通信开漏 + 上拉到目标电平输出高电平由外部上拉电源决定,天然支持电平转换
高速信号输出(SPI等)推挽上升沿陡峭,响应快,开漏驱动力不足
恒流源、功率开关等大电流控制开漏(低边开关)单管承担大电流,功耗和散热好处理

5.2 我踩过的坑:从输出结构导致的玄学故障

第一个坑:把I2C引脚配置成推挽输出还外接了上拉电阻。结果通信时好时坏,逻辑分析仪抓到SDA线在SCL高电平期间跳变。原因就是推挽高电平时主动输出3.3V,外部上拉电阻到5V,两个电源在引脚处打架,产生了不稳定的电流路径。后来的经验是:凡是明确接在开漏协议总线上的引脚,GPIO模式必须配对成开漏,不要再想当然。

第二个坑:开漏输出忘记加上拉电阻,用万用表量引脚电压,居然能测到3.0V左右的“高电平”。这是因为万用表内阻高达10MΩ,通过内部保护二极管或PCB漏电微弱地充上了一点电压,看起来像高电平,实际驱动能力为零。接到负载或逻辑芯片上立刻掉到0.8V以下,表现为“时好时坏”。现在我的调试顺序固定了:先查上拉电阻在不在、阻值对不对,再量静态电平,最后才看动态波形。

第三个坑:PWM波直接驱动MOS管栅极,导致MOS管严重发热。之前分析过,这是栅极驱动能力不足、管子长时间在放大区(半导通状态)导致的开关损耗。后来改成用专门栅极驱动芯片(比如IR2110或者简单的推挽驱动级),发热问题立刻缓解。这也是推挽结构的一个绝佳应用场景——用推挽去驱动大功率MOS管的栅极,既能提供足够大的瞬间充放电电流,又能保证栅极电压快速摆到目标值,减少米勒平台停留时间。

5.3 一个小技巧:用推挽驱动栅极时务必要加电阻

如果用推挽结构去驱动MOS管栅极,输出的上升沿会非常陡峭,这时建议在推挽输出和MOS管栅极之间串联一个10Ω到100Ω的电阻。这个电阻的作用是限制栅极充电电流的峰值,同时抑制振铃。MOS管栅极和源极之间总是存在寄生电容,推挽输出直接驱动时,驱动源阻抗极低,LC谐振很容易在栅极波形上产生高频振荡,严重时会影响EMC性能甚至导致MOS管误开关。串一颗小电阻,相当于增加阻尼,实测波形明显更干净。

6. 收尾之前:关于Multisim仿真的一点心得

我个人觉得Multisim这类仿真工具最值钱的地方不在于“仿真结果准不准”,而在于它能让你零成本、零风险地看到电路内部每个节点的电压电流变化。你可以在推挽电路的基极加一个探针,看两只管子交替导通的时刻;也可以给开漏输出接上不同阻值的上拉电阻,直观感受对波形边沿的影响。这种肉眼可见的因果关系,比对着公式推导印象深得多。

如果你正在学MOS管或数字电路输出结构这块,我的建议是别只盯着datasheet里的等效电路图,动手在Multisim里把电路搭出来跑一遍。先把推挽的不加偏置和加偏置对比一次,再把开漏的加上拉和不上拉对比一次,半小时做完,比看十篇教程都有效。把波形现象和你理解的原理对上号,以后再遇到实际电路中的“玄学问题”,你就能下意识地想到:是不是输出结构用错了,或者上拉参数选得不合适。

这个知识点覆盖的内容不算深,却连接着MOS管、模拟电路和数字接口协议好几个领域。把推挽和开漏彻底搞懂之后,再去看运放的输出级、电平转换电路、总线驱动器,都会有一种豁然开朗的通透感。这套从原理到仿真再到选型的思路,值得你也走一遍。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询