ARTICLE DETAIL

资讯详情

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

推挽输出与开漏输出详解:从MOS管原理到Multisim仿真

推挽输出与开漏输出详解:从MOS管原理到Multisim仿真 别的不说光“推挽输出”和“开漏输出”这两个词我当年刚接触单片机的时候就傻傻分不清后来做板子踩了几次坑才老老实实把MOS管内部结构翻出来啃了一遍。这篇文章我不讲废话直接把推挽和开漏从管子层面拆开配合Multisim仿真实测把波形、原理、适用场景一次讲透。本文适合刚学完MOS管基础、准备上手实际电路设计或者被I2C上拉电阻、PWM驱动、电平匹配这些问题折磨过的同学。核心内容包括MOS管开关的本质、推挽输出级的工作过程、开漏(OD/OC)结构为什么必须配上拉电阻、推挽和开漏怎么选以及怎么用Multisim搭电路验证以上所有结论。我会尽量用大白话讲但涉及关键波形和参数时绝不含糊。1. 为什么要从MOS管拆起输出结构的“地基”逻辑1.1 抛开器件谈输出结构等于纸上谈兵很多教程上来就画推挽电路、开漏电路的框图告诉你“推挽就是两个管子交替导通开漏就是漏极开路”。这种讲法不算错但它掩盖了一个最根本的问题这两个结构不是凭空发明的它们是根据MOS管自身的特性“长”出来的。MOS管有三个极栅极(G)、漏极(D)、源极(S)。对N沟道增强型MOS管来说只要栅源电压Vgs超过阈值电压Vth漏极和源极之间就形成导电沟道管子导通电流从D流向S对NMOS而言。这里有个新手最容易忽略的点MOS管导通的本质是电压控制它本身不向外输出电流它只是给外部电路提供一条可控的通路。理解到这一层推挽和开漏的本质就清晰了。所谓“输出结构”本质上是回答一个问题我拿MOS管当开关怎么接才能让对外输出的引脚(通常是漏极D)在需要的时候变成高电平、低电平或者高阻态。不同的接法就是推挽和开漏的区别。1.2 MOS管的寄生电容和米勒效应仿真时必须正视除了三个极MOS管还有三个寄生电容Cgs栅源电容、Cgd栅漏电容也叫米勒电容、Cds漏源电容。这些电容数值很小几皮法到几十皮法但在高频开关场景下它们才是主角。米勒效应是其中最容易让人困惑的因为Cgd跨接在栅极和漏极之间当漏极电压快速变化时会通过Cgd反向耦合到栅极导致栅极电压出现一个“平台期”。在波形上你会看到栅极驱动电压不是干净利落地上升而是在中间停一下。这个平台期就是米勒平台。我在Multisim里仿真MOS管开关电路时第一眼看到这个平台还以为是软件仿真步长有问题折腾了半天才发现是真实物理现象。为什么说仿真时必须正视因为如果你用的是理想开关模型仿真波形会很漂亮但实际电路里的开关损耗、驱动电流需求全都被理想模型掩盖了。建议仿真时选具体的MOS管型号模型比如2N7002、IRF540这类常用管子而不是用抽象的VDS开关模型。1.3 驱动电路的本质给寄生电容充放电MOS管的栅极输入阻抗极高绝缘栅所以静态时栅极几乎不取电流。但问题在于要让Vgs快速从一个电平切换到另一个电平你需要对Cgs和Cgd充电/放电。充放电时间直接决定了开关速度。打个比方栅极的寄生电容就像一个水桶你要把水桶灌满或者倒空水管越粗驱动电流越大动作越快。推挽输出级的一个重要作用就是提供“粗水管”一个管子负责往电容里灌水拉电流另一个管子负责把水倒掉灌电流这样栅极电压才能快速上升和下降减少开关损耗。实操心得我用Multisim仿真时喜欢加一个电流探针看栅极驱动电流瞬态值。你会发现瞬间电流轻松超过几百毫安而普通IO口直接驱动的话单片机的GPIO最大输出电流一般只有20mA左右这就是为什么大功率MOS管不能直接接单片机IO的原因——不是电压不够是瞬间电流不够开关速度上不去。2. 推挽输出结构用两个管子解决“双向驱动”问题2.1 互补推挽的结构与工作过程推挽输出级最常见的形态是一个P沟道MOS管加一个N沟道MOS管组成互补推挽结构也叫图腾柱输出。两个管子的栅极接在一起作为输入端P管源极接电源VccN管源极接地两个漏极接在一起作为输出端。当输入为高电平时P管截止N管导通输出被拉低到GND当输入为低电平时N管截止P管导通输出被拉到Vcc。看出来了吗输出高低电平切换的瞬间总有一个管子处于导通状态给输出端提供一条低阻抗的通路。关键点在于推挽结构同时具备“拉电流”和“灌电流”能力。输出高电平时电流从Vcc经P管流向负载输出低电平时电流从负载经N管流向GND。负载需要的电流由电源通过管子直接提供不经过任何电阻限流所以带载能力强电平摆幅接近轨到轨。2.2 交越失真推挽电路最经典的坑交越失真说起来特别简单P管和N管的导通阈值不一样在输入信号过零电压附近0V附近两个管子可能都处于截止状态输出端既不拉也不灌输出电压就会出现一段死区。在正弦波输出中你会看到过零点的波形被“削”平了一小段。Multisim仿真这个现象特别直观。我用两个MOS管搭了个简单的推挽跟随器输入1kHz正弦波输出波形在过零位置有明显的平台畸变。有些新手会怀疑是仿真收敛问题其实不是这就是真实的交越失真。解决交越失真的标准做法是给两个栅极之间加一个偏置电压“AB类偏置”让两个管子在静态时都稍微导通一点这个偏置可以由两个串联二极管或一个小电压源提供。仿真里我习惯用两个二极管1N4148串联提供约1.2V偏置效果立竿见影。2.3 推挽结构在实际电路里的典型应用推挽结构应用极广我罗列几个最常见的场景栅极驱动电路驱动大功率MOS管或IGBT时先用一个小推挽级增强单片机IO的驱动能力再驱动大管的栅极。数字电路输出级CMOS逻辑门的输出级本质就是推挽结构这也是为什么CMOS输出高电平和低电平都非常“硬”的原因。电平转换单向用一个开漏/集电极开路结构配合上拉到目标电压或者用推挽结构直接驱动不同电压域的设备当然要注意电压兼容性。音频功率放大Class B/AB类功放的输出级原理和上面分析的完全一样。避坑提醒推挽结构最忌讳两个输出端直接短接在一起。假设两个推挽输出一个输出高一个输出低那就相当于P管和N管直接串联从Vcc到GND打出一条直流通路瞬间电流可以把管子烧掉。所以推挽输出结构的IO口绝对不能直接并联使用否则轻则发烫重则冒烟。3. 开漏(OD/OC)输出结构为什么I2C非得配上拉电阻3.1 开漏结构的本质“只拉低不拉高”开漏输出结构如果用MOS管实现典型形态是一个N沟道MOS管源极接地漏极作为输出端栅极接输入信号。当输入为高电平时MOS管导通输出被拉到GND低电平当输入为低电平时MOS管截止输出端的电平完全取决于外部电路——如果什么都不接输出就是悬空的高阻态。这就是开漏和推挽最本质的区别推挽结构既能主动拉高也能主动拉低开漏结构只能主动拉低不能主动拉高。那高电平从哪来答案就是上拉电阻。漏极外部接一个电阻到电源Vcc当MOS管截止时电阻把输出端“弱弱地”拉到高电平。说“弱弱地”是因为上拉电阻通常比较大几kΩ它能提供的电流有限电平漂移能力和推挽完全不是一个量级。开漏的“漏”字指的就是漏极。开集电极(OC)是双极性三极管时代的同构概念——集电极开路同理只能用下拉功能配合外部上拉实现两种电平。3.2 I2C为什么死磕开漏输出加上拉电阻这是面试高频题也是实际工程绕不开的问题。I2C协议里SCL和SDA两根线都是开漏结构靠上拉电阻提供高电平。它这么设计有四个核心理由第一多设备线与。开漏输出在不驱动的时候处于高阻态多个设备的开漏输出可以直接并联在一条总线上。任何一个设备拉低总线总线就变低所有设备都释放总线时总线被上拉电阻拉高。这就是“线与”逻辑。如果是推挽输出两个设备同时输出不同电平结果就是前面说的短路烧管子。第二双向通信。I2C是双向协议主机要发数据也要收从机的应答ACK信号。开漏结构天然支持“写1”时释放总线、靠上拉电阻维持高电平这样自己也能读回总线状态数据方向切换不用额外的方向控制引脚。第三电平兼容。因为高电平由上拉电阻决定你可以把上拉电阻接到1.8V、3.3V或5V只要所有设备都能承受对应电压总线电平就被仲裁到那个电压。不同电压域的设备不需要额外的电平转换芯片就能挂在同一条总线上正常工作。第四协议鲁棒性。总线空闲状态是高电平任何设备拉低总线都会产生一个明确的下跳沿适合做起始条件、停止条件的检测。而“线或”结构支持挂载多主机总线仲裁也依赖开漏结构。3.3 上拉电阻的取值计算不是拍脑袋上拉电阻选多大不能靠感觉。这里有两个约束条件最小值约束电阻太小会让导通时的灌电流太大。假设总线低电平规定为VOL(max)0.4V器件允许的最大灌电流IOL(max)一般在3mA到20mA之间那么上拉电阻最小值Rmin (Vcc - VOL) / IOL。比如Vcc3.3VIOL取3mA(3.3-0.4)/0.003 ≈ 966Ω所以通常取1kΩ以上就安全。最大值约束电阻太大会让上升沿时间太长。总线寄生电容Cbus包括PCB走线、器件引脚电容一般估算10pF到50pF和上拉电阻构成RC充电回路上升时间约0.847RC。I2C标准模式100kbps要求上升时间不超过1000ns快速模式400kbps要求不超过300ns。如果Cbus50pFRmax ≈ 300ns / (0.847×50pF) ≈ 7.1kΩ。所以实际上4.7kΩ是最经典的选择兼顾了电流限制和上升沿速度。对于低频慢速总线或者长线缆可以放宽到10kΩ。对于高速模式1MHz以上上拉电阻可能要降到1kΩ甚至几百欧姆。实操心得我见过有人把上拉电阻焊成100Ω结果一跑I2C主控芯片发烫。原因很简单总线被拉低时100Ω电阻上的电流 3.3V/100Ω 33mA远超过GPIO的灌电流能力芯片内部的保护二极管都开始工作了。反过来上拉电阻用到100kΩ波形上升沿惨不忍睹——用示波器看简直像锯齿波通信时好时坏。这种问题排查起来坑死人所以上拉电阻选型真的是硬功夫。3.4 开漏结构的其他应用场景除了I2C开漏结构还有两个非常经典的用途电平转换一个5V系统输出开漏上拉电阻接到3.3V系统输出高电平时就是3.3V输出低电平时是0V完美实现电平匹配。这是最简单、成本最低的电平转换做法很多开发板上就是这么干的。输出“线与”逻辑比如多个中断源共享一个中断引脚每个设备开漏输出接这个引脚。任何一个设备触发中断时拉低引脚MCU检测到低电平就知道有中断发生。这在嵌入式系统里非常常用。4. 推挽和开漏直接对比怎么选、怎么避坑4.1 结构、带载能力和电平特性对照为了让大家一眼看清两者差异我整理了一个对比表对比项推挽输出开漏输出(OD/OC)内部结构P管N管互补单个N管(或NPN)输出高电平由内部管子主动拉高接近Vcc依赖外部上拉电阻输出低电平由内部管子主动拉低接近GND由内部管子主动拉低接近GND高阻态无有管子截止时输出悬空拉电流能力强弱由电阻上限灌电流能力强强但不能超过管子额定多设备并联不建议会短路天然支持线与电平适配内部电平决定外部上拉决定典型应用GPIO、栅极驱动、功放I2C、电平转换、线与中断4.2 选择决策一张流程图帮你判断其实选择推挽还是开漏核心就三个问题你的总线上是否会挂多个设备是 → 开漏你的输出电平需要和外部电压域匹配吗是 → 开漏你需要强驱动能力、快速边沿、轨到轨输出吗是 → 推挽这里有一个非常容易踩的坑开漏结构并不是万能的。它虽然解决了多设备和电平转换问题但它的上拉电阻带来的RC延迟意味着在高速高频场景下不如推挽。如果你把开漏输出用在SPI这类高速总线几十MHz上拉电阻再小也很难达到要求上升沿会明显变缓信号完整性完全没法看。所以SPI、UART这类点对点高速通信基本都是推挽输出只有像I2C这种需要多设备挂载、速率也不算太快的总线才用开漏。4.3 新手最常踩的三个雷区雷区一把开漏输出当推挽用——没接上拉就说输出“坏了”。有个同事调试的时候用万用表测开漏输出引脚的静态电压发现逻辑不对查了半天硬件。其实开漏引脚在管截止时就是悬空万用表的内阻会读到不确定的电平必须接上拉电阻才有稳定的高电平。雷区二推挽输出并联使用企图加大驱动电流。前面说过推挽输出并联是灾难。如果你真的需要更大的驱动能力正确做法是用推挽去驱动一个大功率MOS管的栅极而不是把两个GPIO并联。雷区三开漏总线上拉电压超过某颗芯片的耐压。I2C总线上挂了一堆不同电压域的设备上拉电阻接到了某一颗芯片不能承受的高电压上结果这颗芯片的IO口保护二极管被反向击穿。选上拉电源时一定要确认总线上所有设备都能耐受这个电压。5. Multisim仿真验证把电路跑起来看波形5.1 仿真推挽输出观察交越失真和偏置改善Multisim操作其实不复杂核心步骤我走一遍新建原理图从“Place Component”面板里找到MOS管。推荐用IRFZ44NN管和IRF9540NP管这两个是Multisim自带的常用模型。按互补推挽结构接线P管IRF9540N源极接Vcc12V漏极接输出节点N管IRFZ44N源极接地漏极接同一输出节点。两管栅极并在一起接信号源。信号源用Function Generator输出1kHz正弦波幅值设为5V保证能超过两个管子的Vth。输出节点接一个1kΩ负载电阻到地再放一个示波器探针。点击仿真运行打开示波器你能看到输出波形过零点有水平平台——这就是交越失真。接下来优化在输入信号和两管栅极之间加两个1N4148二极管串联提供偏置电压再跑一次仿真。输出波形过零点附近就平滑多了。这就是从Class B到Class AB的转化波形对比非常直观。操作细节Multisim里信号源的幅值设置要留意默认是“峰值”还是“有效值”。我一般直接看示波器显示输入幅值5V峰值的正弦波叠加偏置后栅极驱动范围足以覆盖两个管子的死区。5.2 仿真开漏输出重点验证“线与”逻辑和上拉电阻作用开漏仿真更简单但信息量不小用一个N沟道MOS管2N7000就行搭开漏结构漏极作为输出源极接地栅极接一个方波信号源。输出节点接一个4.7kΩ上拉电阻到Vcc3.3V。接示波器看输出波形方波高电平时输出为3.3V方波低电平时输出0V。断开上拉电阻再测一次你会发现输出高电平部分变成一条随机的斜线或者直接就是畸变的残波——这就是开漏悬空的后果。还可以做“线与”仿真再复制一个同样的开漏电路两个输出接在同一个节点上各自独立控制。两个方波信号源分别给不同频率观察公共节点的输出。你会发现只要任何一个管导通输出就是低电平只有两个管同时截止输出才被上拉为高。这个实验能在示波器上清晰看到数字“线与”效果比看框图印象深刻得多。5.3 Multisim常见问题速查仿真遇到坑怎么办Multisim虽好但使用中难免踩坑我把常见的几个问题和解决办法整理如下现象原因解决办法启动时提示“访问数据库发生错误”主数据库路径异常或索引损坏关闭软件删除数据库缓存文件通常在用户目录下的National Instruments/Database文件夹重新打开或者用管理员权限运行软件设备库/元器件缺失安装不完整或数据库损坏修复安装控制面板—程序—更改—修复或通过Tools/Database/Database Manager恢复默认库仿真速度极慢步长过小或电路包含高Q值谐振、理想开关震荡降低仿真停止时间加大仿真步长(Simulation/Interactive Simulation Settings)把理想开关换成带型号的MOS管模型减少收敛抖动示波器/仪器找不到仪器面板被隐藏或未放置按快捷键G打开“放置仪器”面板或者从View/Toolbars里启用Instrument工具栏仿真报“convergence failure”电路存在死循环或初始条件不明确给电路加一个初始条件IC元件或者把仿真模式从Transient切换为DC Operating Point跑一次再进行瞬态仿真电流源不工作电流源需要闭合回路检查电流源两端是否形成完整回路必要时串一个检流电阻再测压降换算电流实操经验我这里重点说说“仿真速度修改”这件事。如果电路规模大或者仿真时间设得很长你会发现跑起来慢得像PPT翻页。其实除了调整仿真步长还有一个特别实用的技巧先用DC Operating Point直流工作点确定静态电压再跑Transient瞬态分析。这样仿真器有了初始条件收敛速度快很多。以及在不需要看高频细节时把仿真停止时间设短一点而不是靠拉长波形窗口来观察效率会高很多。5.4 用Multisim验证一个完整场景开漏I2C通信波形最后分享一个综合实验能帮助你彻底理解开漏加上拉电阻的实际应用场景。我在Multisim里模拟I2C总线的SDA线工作逻辑搭两个开漏输出电路两个2N7000模拟主机和从机的输出级。公共节点通过4.7kΩ上拉电阻连接到3.3V。主机和从机分别由两个方波信号源控制模拟各自发送的数据速率设100kHz。示波器挂在公共节点上看波形。设置一个典型场景主机发送起始条件拉低总线从机释放总线主机继续传输数据最后主机释放总线上拉电阻将总线拉高。你在示波器上能看到非常标准的I2C电气波形——高电平稳定在3.3V低电平接近0V边沿清晰虽然受RC限制有轻微圆角。如果我把上拉电阻改成100kΩ再跑一次你会发现高电平虽然还能到3.3V但上升沿明显变缓波形变成“爬坡”状。在100kHz的时序下这个缓坡会让器件误判高电平到位太晚导致数据采样点偏移。这就是上拉电阻不能随便选大的原因——不是理论层面上的“无法工作”而是电气特性都会让协议不堪重负。这个仿真实验做完我敢说你对“开漏为什么配上拉电阻、电阻到底怎么选”的理解会比看十篇文章都管用。6. 最后再分享两个实操小技巧说几个我在实际项目中总结的小经验不一定教材里有。第一个是关于单端信号线的电平转换。如果你要在3.3V MCU和5V外设之间通信开漏上拉电阻是最省钱的方案但要注意一点开漏结构的上拉电阻会拉长上升沿所以通信速率不能太高。做UART这种115200bps甚至更低速率没问题但如果你硬要跑1Mbps以上还是老老实实用电平转换芯片比较靠谱。第二个是关于推挽驱动MOS管的栅极电阻。很多人画电路图时忽略栅极串联电阻直接推挽输出到MOS管栅极结果EMI超标或者管子震荡。推挽输出级虽然驱动能力强但栅极寄生电感和Cgs组成的谐振回路在快速边沿触发下很可能让人头疼。我习惯在栅极串联一个10Ω到22Ω的电阻成本几毛钱但能有效抑制振铃。仿真里注意看栅极波形如果有过冲震荡就试着加这个小电阻。第三个是关于Multisim仿真模型的真实性。Multisim自带的模型在不同型号之间差异很大有些模型过于理想仿真结果只能看个趋势。我做推挽仿真时IRFZ44N和IRF9540N的表现就比某些通用模型更接近实物尤其是Vgs(th)和导通电阻。如果你要跟实际硬件对照最好选具体型号再去看数据手册核对仿真参数。这篇文章从MOS管的基本特性讲到推挽和开漏的内部结构再讲到了上拉电阻的计算和Multisim仿真的完整操作算是把输出结构这个知识点串了一遍。说真的这些东西看起来零散但在实际电路里是绕不过去的基本功。尤其是开漏上拉电阻I2C通信不稳定、传感器读不到数据、总线冲突这些问题排查到最后往往就是一颗电阻的事。希望这篇内容能帮你少走点弯路。
返回列表