ARTICLE DETAIL

资讯详情

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

推挽输出与开漏输出详解:从MOS管原理到I2C上拉电阻实战

推挽输出与开漏输出详解:从MOS管原理到I2C上拉电阻实战 搞硬件的人迟早会和“推挽输出”“开漏输出”这两个词正面相遇。不管是翻芯片数据手册里的GPIO结构说明还是看I2C总线上拉电阻怎么选又或者给MOS管设计栅极驱动电路这三样东西总是绕不开。很多刚入行的朋友会把推挽电路和开漏输出当成两个孤立的概念去背结果换一个应用场景又糊涂了。这篇文章我就把推挽电路、MOS管推挽输出、开漏输出这三块串起来讲一遍争取用最直白的方式把原理讲透再把我实际调试中踩过的坑一起放出来。先说个大概的定位推挽电路解决的是“输出节点需要快速、强驱动地在高低电平之间切换”的问题开漏输出解决的是“多个设备共享一根信号线、电平还要灵活”的问题而MOS管则是这两种输出结构里最常见的执行器件。搞懂它们的来龙去脉数字电路IO、单片机GPIO、总线通信、电机驱动、电源开关这些场景都会顺很多。1. 推挽电路的底层逻辑谁负责“推”谁负责“挽”1.1 推挽结构的本质一个拉电流、一个灌电流推挽电路英文叫push-pull从名字就能看出来它包含“推”和“挽”两个动作。在电子电路里“推”指的是输出节点向外输出电流也就是sourcing电流通常由上管导通实现“挽”指的是输出节点从外部吸收电流也就是sinking电流通常由下管导通实现。两个管子上下对称放置上管接到电源正端下管接到地中间引出输出节点像跷跷板一样交替工作。用自来水管做类比最直观输出节点就是一个水池上管是注水管下管是排水管。想要水位电压快速升高就把上管打开往池子里灌水想要水位快速降低就打开下管把水放掉。如果只给池子接一根管子上拉、再靠负载自己泄放水位变化就会慢很多。这就是推挽结构最大的价值——它能够主动地“灌”和“抽”电流让输出节点在高低电平之间快速切换而且输出阻抗很低带负载能力强。很多初学模拟电路的同学会被“推挽”这个词吓到其实拆开看就是一个“上管负责输出高电平、下管负责输出低电平”的互补开关结构。关键是这两个管子不能同时导通否则电源到地直接短路这就是后面要说的“直通”问题。1.2 从三极管图腾柱到互补输出级交越失真怎么治推挽电路最经典的实现方式是两只三极管组成的图腾柱结构。常见接法是NPN管做上管PNP管做下管两管的基极接在一起作为输入端发射极接在一起作为输出端这种结构也叫互补射极跟随器。输入信号为正时NPN管导通向负载输出电流输入信号为负时PNP管导通从负载吸收电流。但三极管推挽有一个摆脱不掉的毛病——交越失真。原因是三极管的发射结有一个开启电压硅管大约是0.7V左右。输入电压在0V附近变化时上下两个管子都处于截止状态输出电压会有一段“真空期”波形在这里会出现台阶或平坦区。音频放大器如果存在交越失真声音会变得粗糙难听用作驱动电路时这段盲区也会让输出波形失真。解决办法是在两个基极之间加偏置电压让两只三极管在静态时都处于微导通状态也就是把工作点从B类推到AB类。这样输入信号过零时至少有一只管子处于导通状态交越失真就被压掉了。实际电路里常用两个二极管串联提供偏压或者用三极管Vbe倍增电路。如果你做IGBT驱动电路推挽预驱动级的交越失真、偏置处理同样是绕不开的细节因为IGBT的栅极也需要大电流充放电预驱动级的输出波形质量直接影响IGBT开关损耗。1.3 推挽电路能解决什么问题低阻抗、快翻转、强驱动推挽电路在工程上之所以无处不在是因为它有三个非常明显的优势。第一输出阻抗极低。导通状态下管子处于饱和区或可变电阻区导通压降很小输出电平非常接近电源轨或地逻辑电平一致性很好。第二动态响应快。输出节点无论向上还是向下切换都有主动驱动器件在推上升沿和下降沿都能做得很快适合驱动容性负载。比如单片机IO口连接MOS管栅极栅极等效电容动辄几个纳法用推挽输出能快速完成栅极电荷充放电。第三静态功耗低。除了开关切换瞬间推挽结构在稳态时总有一只管子完全截止没有贯通电流静态功耗非常小。不过推挽结构也有先天短板两个输出端不能直接并接。这和后面讲的开漏输出形成鲜明对比。两个推挽输出接在一起如果一个输出高、另一个输出低那就是电源对地短路轻则波形乱掉重则烧管子。这个问题在做总线复用、多个设备共享信号线路时特别致命。2. MOS管与推挽输出为什么现代电路钟爱这种组合2.1 认识MOS管三个极、导通条件与电流方向MOS管全称是金属氧化物半导体场效应管属于电压控制型器件。它有三个引脚栅极G、漏极D、源极S。栅极和导电沟道之间隔着一层氧化层相当于一个电容所以栅极输入阻抗极高几乎不取持续电流。这是MOS管和三极管最大的区别之一——三极管是电流控制器件需要持续注入基极电流才能维持导通MOS管只要把栅极电压充到阈值以上管子就能保持导通驱动起来省事得多。以最常用的N沟道增强型MOS管为例导通条件是Vgs大于阈值电压Vth。常规接法下漏极D接高电位、源极S接低电位电流方向从D流向S。但有一个容易被忽略的细节MOS管导通之后电流其实是可以双向流动的。因为导通状态下的MOSFET相当于一个阻值很小的电阻电流从D到S或者从S到D都能走取决于外部电路压差方向。唯一的限制是寄生体二极管只有一个方向。这个特性在双向开关、同步整流、电池保护板里应用很广尤其是背靠背MOS管组成的双向导通电路就是利用导通后电流双向流动的原理。MOS管的作用远不止开关。它还能做电平转换、模拟开关、线性放大器。但无论是哪种应用几个关键参数绕不开耐压Vds、导通阻抗Rds(on)、阈值电压Vth、栅极总电荷Qg、寄生电容Ciss/Coss/Crss。很多从三极管转过来的工程师会下意识找MOS管的“β”其实MOS管不讲电流放大倍数更关心跨导gm单位是A/V描述Vgs变化1V能引起Id变化多少安培。仿真模型里偶尔能看到增益系数KP这类工艺参数做应用设计时不用过分深究重点还是盯住Vth、Rds(on)、Qg这三件套。2.2 最简单的推挽输出CMOS反相器如果说推挽电路有个“教科书级”的现代实现那就是CMOS反相器。一个PMOS管做上管一个NMOS管做下管两个栅极接一起做输入两个漏极接一起做输出。输入高电平时NMOS导通、PMOS截止输出被拉到地输入低电平时PMOS导通、NMOS截止输出被拉到电源。这就是最标准的推挽输出。数字芯片内部绝大多数逻辑门、单片机GPIO口的输出级本质都是这个结构。你去看数据手册里GPIO的电气特性通常会写明拉电流能力I source和灌电流能力I sink比如STM32的IO多数引脚可以输出8mA拉电流和20mA灌电流不同系列有差异。这就是推挽输出级中PMOS和NMOS沟道宽度设计不同的结果。一般来说PMOS的迁移率比NMOS低为了获得对称的驱动能力PMOS的沟道面积通常会做得比NMOS大。CMOS推挽输出的最大优点是逻辑摆幅满幅输出高电平接近VDD低电平接近GND抗干扰能力强。它的缺点是输出电平被电源轨牢牢固定没办法灵活地变换电平域。你要是希望这个IO口能输出1.8V也能输出3.3V或者接5V设备那就得另想办法。这就是开漏输出登场的一个重要原因。2.3 三极管与MOS管在推挽应用中的区别做栅极驱动或功率变换时经常要在三极管推挽和MOS管推挽之间做选择。我的经验是小功率、低速场景三极管完全够用大功率、高频、高效率场景优先考虑MOS管。驱动能力上三极管是电流驱动基极需要持续的电流所以前级必须能提供足够的Ib。MOS管是电压驱动栅极只需要充电瞬间的电流稳定后栅极电流几乎为零驱动级的平均功耗更低。开关速度上MOS管多数是多数载流子器件没有少数载流子的存储效应关断时不需要额外抽取存储电荷所以可以工作在很高的频率。三极管关断时有存储时间高频下开关损耗会明显增大。价格和脆性方面三极管耐过流能力相对皮实MOS管栅极氧化层很薄静电就能打穿焊接和操作时需要多注意防静电。但MOS管也有让工程师头疼的一面栅极寄生电容很大。驱动一个功率MOS管你实际上是在给一个几百皮法到几十纳法的电容充电。如果驱动源的输出能力不足栅极电压爬升就会很慢导致管子长时间停留在放大区发热严重。所以“用推挽输出驱动MOS管栅极”就成了天然合理的组合——推挽输出恰好能提供较强的瞬态充放电能力又有低输出阻抗能快速把栅极电压推到位。实际产品里用两枚三极管搭成图腾柱去驱动大功率MOS管/IGBT是电瓶车控制器、电机驱动器里非常经典的做法。3. 设计推挽驱动时绕不开的三座大山米勒电容、死区与SOA3.1 米勒效应与栅极电荷推挽驱动要“喂饱”栅极MOS管栅极驱动最典型的波形特征就是栅极电压Vgs在上升过程中会出现一段“平台期”这就是米勒平台。很多人第一次在示波器上看到这个波形都会愣住明明驱动电压在往上冲Vgs怎么卡住不动了原因是MOS管内部存在栅漏寄生电容Cgd也叫米勒电容。当漏极电压开始变化时Cgd会把漏极的电压变化耦合回栅极形成负反馈导致栅极充电过程被“锁住”一段时间。这段平台期的持续时间主要取决于米勒电容上需要转移的电荷量也就是栅极驱动电流对Cgd的充放电时间。工程上不直接关心Cgd数值更关注总栅极电荷Qg它表示把栅极从0充到指定驱动电压并完成开关过程所需的总电荷量。Qg通常在数据手册里以曲线形式给出是选驱动芯片和计算驱动电流的重要依据。驱动电流的估算公式很直接I Qg / Δt。比如某MOS管的Qg是60nC希望开关时间控制在100ns那驱动源至少需要提供600mA的瞬态电流。这也是为什么很多高性能MOSFET驱动芯片的峰值输出电流标称好几安培不是因为它要持续输出那么大电流而是为了在极短时间内把栅极电荷灌进去。实际用单片机GPIO直接驱动大功率MOS管经常发烫根源就在这里——GPIO的驱动能力可能只有十几毫安栅极电压爬得很慢开关损耗直线上升。栅极串联电阻Rg的选择也很讲究。Rg大开关变慢、EMI改善但开关损耗增大Rg小开关快、损耗低但会带来振铃和过冲。经验上先按驱动电流能力算一个下限再用示波器实测Vds波形微调到振铃可接受的范围内。具体走线时串在栅极的电阻要尽量靠近MOS管栅极减小寄生电感。3.2 死区时间上下管直通一个不留神就冒烟推挽结构最危险的故障就是直通也叫shoot-through。上管还没来得及完全关断下管已经开始导通电源到地之间形成一条低阻通路瞬间电流巨大效率下降是轻的炸管、烧驱动芯片是常有的事。避免直通的标准做法是设置死区时间先彻底关断上管等一小段时间再开启下管从下管切换到上管也是同样顺序。死区时间太短增加直通风险死区时间太长又会让输出波形出现台阶、增加谐波、降低有效占空比。实际项目里如果用分立MOS管搭建推挽结构死区时间通常由前级控制信号保证高频应用甚至要精确到几十纳秒如果使用集成栅极驱动芯片芯片内部通常自带死区控制比如IR2104、UCC27211这类芯片部分型号还允许用外部电阻调整死区时间。我见过不少新手用两个GPIO分别控制上下管觉得软件里加个延时就算死区了。逻辑上没错但要格外小心GPIO输出速度不一致带来的差异以及驱动链路中RC延迟的不对称。最好的做法是硬件上用专用驱动IC或者门电路做互锁保证哪怕软件写疯了硬件层面也不会出现上下管同时导通的情况。做电瓶车控制器这类大功率场景时这条尤其重要功率越大直通一次的损失越大。3.3 SOA与散热能开关不等于能扛住MOS管数据手册里有一个容易被忽略的图安全工作区SOASafe Operating Area。它表示在给定的漏源电压Vds和漏极电流Id组合下管子能安全工作的范围。SOA受三个因素限制最大电流、最大耐压、以及最大功耗对应的等温线。在开关电路中管子不会一直停留在线性区但在开关切换的瞬间Vds和Id同时较大如果这个点超出了SOA哪怕只有几微秒也可能损坏管子。尤其是感性负载关断瞬间Vds会产生尖峰容易触发雪崩击穿。所以设计MOS管开关电路时不能只看Rds(on)和额定电流就完事还要核算开关损耗、导通损耗确认管子结温在允许范围内。散热器选型围绕热阻链来算从结到壳、从壳到散热器、从散热器到环境每一层的热阻都要考虑结温等于环境温度加上总热耗乘以总热阻。如果算出来结温超过150℃要么换更大封装要么提高散热能力要么降低开关频率。顺便提一句这几年车规、工业领域越来越流行“智能MOS管”也就是把驱动、保护过流、过温、短路保护、诊断功能集成进一颗MOS管里类似高端智能功率器件。它降低了系统设计的门槛但原理层面依然离不开对MOS管本身开关特性和热特性的理解。器件再智能外部电路把SOA用爆了也一样会挂。4. 推挽输出与开漏输出两种输出结构的取舍之道4.1 开漏输出到底长什么样开漏输出英文open-drain本质很简单芯片内部只有一个N沟道MOS管漏极直接引出到引脚没有任何上拉到电源的内部结构所以叫“开漏”。同理如果内部是三极管就叫开集电极输出open-collector。这类引脚可以主动把电平拉低但无法主动输出高电平。想让它输出高必须由外部电路提供一个上拉电阻接到你期望的高电平电压源上。很多第一次用开漏引脚的人会觉得很奇怪为什么芯片不能自己输出高电平答案是因为开漏结构追求的不是“能力全”而是“自由”。漏极悬空意味着这个引脚的高电平电压完全由外部上拉电压决定。你要1.8V逻辑就上拉到1.8V你要5V逻辑就上拉到5V。这是推挽输出做不到的。此外多个开漏引脚可以直接接在同一根线上谁想拉低就拉低谁不动作就释放总线天然支持“线与”逻辑不会打架。开漏输出的一个典型表现是I2C设备引脚和大部分单片机的OD模式GPIO。你在数据手册里看到某个引脚标注ODopen-drain实际使用时不接上拉电阻引脚就永远只能输出低电平或者高阻态很多新手在这里翻车。4.2 推挽与开漏的关键差异一览把这两种输出结构放在一起对比会更容易记住它们的适用场景。我整理了一个对比表基本覆盖了核心差异对比项推挽输出开漏输出输出高电平能力强主动拉高到电源轨弱靠外部上拉电阻被动拉高输出低电平能力强强输出电平灵活性固定由芯片电源决定灵活由上拉电压决定多个输出直接并联禁止容易短路打架允许天然线与静态功耗极低上拉电阻始终有静态电流上升沿速度快主动驱动较慢由RC充电决定典型应用GPIO、SPI、UART、栅极驱动I2C、中断信号共享、电平转换、LED灌电流驱动从这张表能看出推挽输出和开漏输出没有绝对的谁好谁坏。如果你需要高速双向驱动、信号完整性高推挽是首选如果需要多设备共享总线、电平灵活切换开漏加外部上拉是唯一合理的选择。至于LED驱动开漏输出的优势在于灌电流方式驱动LED时低电平时MOS管导通电流路径从电源经LED和限流电阻流入引脚芯片不必承受高电压驱动设计起来很简洁。4.3 I2C为什么坚持开漏加上拉电阻I2C总线是最著名的开漏应用场景而且它同时诠释了开漏结构的几乎所有优点。很多人问I2C明明需要双向通信为什么两端设备都必须用开漏输出加上拉电阻而不直接用推挽输出最核心的原因是总线仲裁。I2C允许在一条总线上挂多个主机主机在发送数据时还要同时监听总线电平如果两个主机同时发送一个高电平和一个低电平低电平会赢线与会把总线拉低发送高电平的主机发现总线跟自己想发的不一致就会退出竞争。这种机制叫作仲裁。实现仲裁的前提是所有设备都不能主动强推高电平否则发送低电平的设备会被强行拉高总线直接短路烧毁。开漏结构天然具备“低电平优先”的特性所以I2C必须用开漏加上拉。第二个原因是电平转换方便。同一套I2C总线上主控可能工作在1.8V或3.3V传感器可能工作在5V只要把上拉电阻接到5V所有设备的高电平都被拉到5V低电平仍然是地。不同电压域的设备就能直接通信不需要额外加电平转换芯片。如果改成推挽输出电平域差异会带来很大的兼容性问题甚至烧坏低电压设备的IO口。第三个原因是允许多设备热插拔和动态接入。开漏输出在引脚不动作时呈现高阻态对总线没有负载影响设备直接拔掉也不会影响其他设备通信。推挽输出则不行输出口始终在主动驱动热插拔时的瞬态冲击也是麻烦。但开漏也有代价就是上升沿变成RC充电过程速度受上拉电阻和总线寄生电容限制。上拉电阻选得越大功耗越低但上升沿越慢选得越小上升沿越快但低电平灌电流越大。I2C标准里对上升沿时间有明确要求通常根据总线电容和通信速率来选择电阻常见值在1k到10k之间。高速模式I2C甚至要求上拉电阻低到几百欧姆同时对总线电容有严格限制。我在实际项目里的习惯是先按总线电容和目标上升时间估算再用示波器实测波形微调运行稳定的同时保证边沿不超标。5. 从选型到实战推挽/开漏电路的常见坑与波形排查5.1 输出结构选型速查搞清楚了原理下一步就是选型。结合我自己的项目经验整理一个实用的速查标准驱动MOS管栅极、IGBT栅极选推挽输出而且驱动电流要够大满足Qg需求。实在用GPIO推不动时加一枚专用MOSFET驱动芯片或三极管图腾柱。UART、SPI、PWM、LCD数据线等点对点高速通信选推挽输出边沿快、电平稳定不容易被干扰。I2C、SMBus、1-Wire这类多设备共享总线开漏加上拉电阻总线电容要控制上拉阻值要按速率先算再调。LED指示灯两种都行。推挽输出可以直接输出高电平驱动开漏输出则用灌电流方式反过来接LED到电源、限流电阻到引脚。不同电压域的电平转换用开漏加外部上拉或者用专用电平转换芯片。很多双向电平转换电路本质上就是开漏结构的巧妙应用。多个信号“或”合并、多设备中断输出用开漏所有中断源引脚开漏并接任一个拉低都会让共用信号线变低。5.2 常见问题排查发热、振铃、电平不匹配实际调试中最经典的问题就是“PWM直接接MOS管为什么管子发烫”。原因往往不是管子选小了而是驱动电路没有做好。先用示波器量Vgs波形如果上升沿很缓或者米勒平台特别长说明驱动电流不足、栅极电荷充得慢管子在线性区停留时间过长开关损耗飙升。此时要么加强驱动级要么减小栅极电阻要么降低开关频率。如果Vgs波形有严重振铃说明栅极回路寄生电感偏大或者Rg过小要重新优化走线和电阻。第二个常见问题是推挽输出信号质量差尤其在长线上。推挽输出的输出阻抗低驱动长线时容易发生多次反射波形振铃、过冲严重。解决办法是串接一个几十欧姆到一两百欧姆的源端匹配电阻等于人为抬高输出阻抗让信号源和传输线阻抗匹配。实际阻值要靠示波器观察波形调整目标是让振铃消失的同时不过分牺牲边沿速度。第三个常见问题是开漏输出不工作。很多情况下是忘了接上拉电阻引脚永远只能拉低读不到高电平。还有的是上拉电阻选太大总线电容又大导致上升沿太慢时序不满足协议要求。排查时可以先用万用表或示波器看高电平是否达到预期电平再看上升沿斜率。记住低电平是芯片主动拉的高电平是电阻“蹭”上去的理解这一点排查开漏问题就有了方向。5.3 一个电平转换电路的拆解开漏结构的经典应用最后拆解一个我经常使用的例子用一枚N沟道MOS管实现双向电平转换电路思路完全是开漏结构的延伸。原理很简单低电平侧设备和高电平侧设备各接一枚上拉电阻分别上拉到各自的电源电压中间跨接一枚N沟道MOS管源极接低电平侧漏极接高电平侧栅极再接低电平侧电源。当低电平侧输出低电平时MOS管栅源电压大于阈值MOS管导通高电平侧被拉低当低电平侧释放总线时如果高电平侧驱动拉低MOS管的体二极管会先把低电平侧钳位到接近0V一旦源极电压下降、栅源电压超过阈值MOS管又会导通这样高电平侧也能把低电平侧拉低。两个方向的低电平都能传递高电平则由各自的上拉电阻决定从而实现双向电平转换。这个电路很多I2C电平转换模块在用。自己设计时要注意三点一是MOS管的阈值电压要低于低电平侧的电源电压保证低压驱动能开启二是两边的上拉电阻都要加三是MOS管必须选导通电阻小、栅极电容小的型号否则高速通信时波形和时序会很差。我早期用普通逻辑NMOS搭过通信一上100kHz就有波形畸变换成专门用于电平转换的低Qg管子后跑到400kHz才依然稳定。这块电路的调试心得是信号边沿问题优先查MOS管选型和上拉阻值低电平抬升问题优先查地回路和电流路径。示波器探头要尽量靠近被测引脚避免示波器探头电容影响信号。做硬件设计这几年我越来越觉得推挽和开漏不过是一枚开关管的两面。推挽时刻想着“把电平快速推到目标”开漏时刻想着“把电平释放出去交给外部决定”。搞懂了电流路径、充放电过程跟电平状态之间的关系后面再遇到什么新型总线协议、新接口芯片判断起来就会快很多。真要说有什么实操建议那就是多动手搭电路多拿示波器看波形多把管子发热和波形畸变的坑记录下来这些比背一万次概念都有用。
返回列表