ARTICLE DETAIL

资讯详情

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

N-MOS与P-MOS驱动差异详解:从H桥电路到栅极驱动设计

N-MOS与P-MOS驱动差异详解:从H桥电路到栅极驱动设计 1. 为什么要关心N-MOS管和P-MOS管的驱动差别做嵌入式硬件设计这几年我越来越觉得MOS管是这个行业里最熟悉又陌生的元件。说熟悉是因为几乎每个电源电路、电机驱动、信号开关里都能看到它们的身影说陌生是因为很多人用MOS管的方式还停留在照着参考电路抄、换了型号就翻车的水平。尤其是N-MOS管和P-MOS管这对互补器件它们的驱动逻辑完全不同用错一个电平可能就是烧管、冒烟、甚至整块板子报废的下场。1.1 三极管方案和MOS管方案的实际差距先聊一个老生常谈但特别容易被忽略的点为什么现在越来越多的设计从三极管转向MOS管早年我在做LED灯带控制器的时候用的还是S8050这种NPN三极管做开关。三极管是电流驱动器件基极必须持续灌入电流才能维持导通状态。假设驱动的LED灯带需要1A电流三极管的放大倍数取100基极电流至少得10mA如果是多路输出MCU的GPIO根本扛不住还得加一级驱动三极管电路越搞越复杂。MOS管是电压驱动器件栅极只需要建立电压、充满栅极电容漏极电流就可以达到很高。同样驱动1A的负载一个SI2302N-MOS管的栅极只需要MCU的3.3V电平栅极电流只在开关瞬间出现稳态时几乎为零。同样是MCU控制MOS管方案对GPIO的驱动能力要求低得多而且导通电阻可以做到几十毫欧大电流下压降小、发热低效率完全不在一个量级上。关键是MOS管用起来也有讲究尤其是N-MOS管和P-MOS管它们的脾气完全不同。N-MOS管栅极相对源极电压Vgs大于阈值电压就能导通源极接地时驱动最简单P-MOS管则相反Vgs必须低于阈值也就是栅极要比源极低一个电压才能导通。这个相反的关系在高端驱动和低端驱动场景里有着截然不同的设计逻辑。1.2 N-MOS管和P-MOS管使用场景对照我常用的一个选择思路是这样的低端开关负载接电源、MOS管在负载和地之间优先用N-MOS管因为源极直接接地只要栅极电压比地高出一个阈值通常2V~4V就能可靠导通3.3V或5V的MCU电平直接就能驱动。高端开关负载接地、MOS管在电源和负载之间就有意思了。如果负载电压是12V你想用一个N-MOS管做高端开关源极电压会跟着负载状态在0V和12V之间跳变栅极必须有比源极高出一个阈值以上的电压意味着栅极需要12V4V16V以上的驱动电压MCU直接驱动根本做不到。这时候有两个选择要么用自举电路或者专门的高端栅极驱动器给N-MOS管产生一个高于电源的栅极电压要么直接用P-MOS管因为P-MOS管的源极接电源正极是固定的只需要让栅极电压比源极低4V~6V也就是拉低到8V或者直接接地就能导通MCU用一个N-MOS管做电平转换就能轻松驱动。这张表是我做选型时经常对照的基本能覆盖大部分场景对比项N-MOS管低端开关P-MOS管高端开关导通条件Vgs Vth栅极比源极高Vgs Vth栅极比源极低MCU直接驱动容易源极接地栅极上拉到3.3V/5V即可较难需电平转换或专用驱动芯片导通电阻同等封装下一般更低同等封装下一般比N-MOS高成本同等电流等级下更便宜略贵典型封装型号SI2302、AO3400、IRLZ44NAO3401、SI2301、IRF9540典型应用电机调速、LED调光、电源开关电池反接保护、负载高端开关、DC-DC同步整流实际上我后来做的大部分项目低端驱动都用N-MOS管高端驱动则优先考虑P-MOS管。这种做法最大的好处是省掉了自举电路和电平转换芯片电路更简洁故障点更少。核心原则就一句话能用直接驱动的拓扑就不要引入额外的驱动电路。不过N-MOS管和P-MOS管的驱动差异远不只是高低电平反一下这么简单栅极电荷、米勒效应、开关速度、死区时间这些才是决定电路能不能稳定工作的关键。接下来我结合一个实际的驱动电路实例来拆解。2. 一套完整的N/P-MOS管组合驱动电路实例几个月前我在做一个24V直流有刷电机的正反转控制板要求能PWM调速、电流最大5A、带反接保护和过流保护。这个项目最大的挑战在于电机正反转需要一个H桥而H桥的两路高端开关和两路低端开关必须配合工作如果直接用四个N-MOS管搭H桥高端两个管子的驱动就是个大麻烦。2.1 H桥电路结构与复合驱动方案最终我采用的方案是红外半桥驱动芯片分立P-MOS/N-MOS管的组合。两路高端开关用P-MOS管源极接24V漏极接电机正端或负端两路低端开关用N-MOS管源极接地漏极接电机另一端组成了典型的P管上桥N管下桥的互补H桥结构。之所以这样设计主要考虑了三层逻辑。第一层H桥的高端开关如果用N-MOS管栅极驱动电压必须比24V电源还高几伏这就要用自举电容和驱动芯片生成悬浮电压电路复杂不说自举电容的充放电时间还会限制PWM占空比的范围——当占空比接近100%时高端管一直导通自举电容没有机会充电反而会触发欠压保护。改用P-MOS管做高端开关之后源极固定在电源端只需要让栅极电压拉低到接近地电位就能导通对驱动电路的要求大大降低。第二层低端开关用N-MOS管是顺理成章的。N-MOS管在低端位置的驱动门槛低导通电阻小5A电流下损耗可以控制在很低的水平。我选了一颗导通电阻Rds(on)只有20mΩ的N-MOS管理论上5A电流时的导通损耗是5²×0.020.5W一个SOP-8封装的管子配合适当的铜箔散热完全能顶住。第三层用半桥驱动芯片把MCU的控制信号转换成可以直接驱动P管和N管的栅极信号。驱动芯片内部自带电平转换和死区时间控制避免了两个管子同时导通导致的贯穿电流问题这在H桥电路里至关重要——哪怕只有一个微秒的同时导通24V电源通过两个MOS管直接对地短路瞬间电流就能击穿管子。实际的电路结构大致是这样的IR2104半桥驱动芯片负责将PWM信号转换为HO和LO两路输出HO驱动上桥P-MOS管的栅极LO驱动下桥N-MOS管的栅极上桥P-MOS管选用AO3401或者更合适的SI2301耐压-30V额定电流-4A左右导通电阻约65mΩ下桥N-MOS管选用AO3400或者SI2302耐压30V额定电流5.7A导通电阻约28mΩ2.2 关键参数计算与元器件选型很多初学者拿到原理图就往板上焊真到了通电测试的时候才发现管子发热严重甚至直接烧毁。问题往往出在两个地方一是耐压余量不够二是导通损耗算错了。先说耐压。24V系统中MOS管的漏源电压Vds在开关瞬间会有电压尖峰尤其电机是感性负载续流回路不完善时尖峰可能达到电源电压的两倍以上。我在这个项目里做了个简单的示波器测量24V供电下P-MOS管关断瞬间的Vds尖峰接近45V。所以选管子的耐压至少要有1.5~2倍的余量我最终选了耐压40V以上的型号确保极端工况下不击穿。再说电流和损耗。以AO3400为例手册标称5.7A的连续漏极电流看起来5A的应用勉强够用但要注意这个参数是在25°C环境温度和特定的PCB铜箔散热条件下测得的实际高温环境下允许电流会大幅下降。我建议计算一下实际损耗再决定导通损耗P_loss I² × Rds(on) 5² × 0.028 0.7W开关损耗开关频率20kHz每次开关的电压电流交叠时间约50ns开关损耗公式为P_sw 0.5 × Vds × Id × (t_rise t_fall) × f折合下来约0.12W总损耗约0.82WSOT-23封装的AO3400在标准FR-4板上的热阻约200°C/W温升约164°C这已经严重超限了所以我并没有直接用AO3400做5A的持续输出而是选了一颗更大封装的N-MOS管比如DFN封装的AON7405导通电阻8mΩ热阻更低。这里也提醒大家一个经验数据手册里的额定电流只是参考必须用热阻和损耗反推实际温升才是一个合格的设计。栅极电阻的选择也值得单独说。MOS管栅极本身是一个电容如果不加任何电阻直接让驱动芯片驱动栅极电压的上升沿会非常陡峭虽然开关速度快但会产生严重的电压振铃ringing可能超过栅极耐压直接损坏管子。我在栅极串联了一个10Ω的电阻实测振铃幅度从最初的5V降到了1V以内。如果需要更慢的开关速度来减小电磁干扰可以换成22Ω甚至47Ω的电阻代价是开关损耗会增加一些。3. 驱动芯片的选型经验与栅极驱动背后的物理逻辑用驱动芯片驱动MOS管对于很多刚接触这个领域的人来说可能觉得只是放大驱动能力这么简单。但实际上驱动芯片解决的是一个非常底层的物理问题如何在一个极短的时间内向MOS管的栅极电容注入足够的电荷让管子快速、安全地完成开关动作。3.1 为什么栅极电荷比输入电容更值得关注MOS管的数据手册里有两个参数经常把人绕晕输入电容Ciss和栅极电荷Qg。很多人一开始只看Ciss觉得电容小就开关快其实这是个误区。栅极电容不是线性的而且它在不同电压阶段会变化。真正决定驱动难度的是Qg也就是让栅极电压从0升到目标驱动电压比如10V需要的总电荷量单位是纳库仑nC。驱动芯片的输出电流决定了给这些电荷充电的速度充电越快开关时间越短。举个例子IR2104这种驱动器峰值输出电流典型在200mA以上。假如一颗管子的Qg是20nC理论上把栅极充满10V电压需要的时间是Qg / I 20nC / 200mA 100ns。这个开关速度对于20kHz的PWM来说绰绰有余。但如果MCU直接驱动一个大功率MOS管GPIO的灌电流/拉电流能力通常只有20mA左右充满同样电荷就需要1μs开关损耗会增加十倍管子发热就是必然的。这就是驱动芯片的第一个价值提供足够大的峰值电流减少开关时间降低开关损耗。3.2 米勒平台与死区时间的工程经验第二个价值也是驱动芯片最容易被忽视的价值它处理了米勒平台的问题。MOS管在开通过程中Vgs上升到阈值电压之后会进入一个平台期也就是米勒平台。这个阶段栅极电压几乎不变但栅极电流全部用来给米勒电容Cgd充电用于完成漏极电压的下降。如果驱动能力不足米勒平台持续时间会显著拉长管子长时间工作在半导通状态漏极电流和漏源电压同时存在瞬时功耗极高。我调试24V电机驱动的时候专门用示波器观察过这个问题。用驱动芯片驱动时Vgs上升沿几乎是一条直线米勒平台只有几十纳秒拔掉驱动芯片、直接用MCU的GPIO接栅极电阻驱动Vgs波形从0到10V要几百纳秒米勒平台明显凸起管子外壳温度升高了大约15°C。从这个实验就能直观地感受到驱动芯片对开关损耗的改善。驱动芯片的第三个价值在于死区时间管理。H桥电路最危险的情况是两个管子同时导通上桥P-MOS管导通下桥N-MOS管也短暂导通电源到地就短路了。IR2104内部自带死区时间逻辑能保证在进行高低端切换时先关断已导通的管子等待一段间隔之后再打开另一个管子这个时间通常在几百纳秒到几微秒之间。虽然分立元件方案可以用RC延时和逻辑门实现同样的功能但可靠性和一致性远不如专用芯片。3.3 高压侧驱动的自举机制说到上桥P-MOS管的驱动还有一点必须提既然P-MOS管的源极接电源正极栅极必须比源极低才能导通那驱动芯片怎么产生这个低电平以IR2104为例它内部有一个自举二极管和外部自举电容来为高端驱动电路提供一个浮动的电源。当低端N-MOS管导通时VS端被拉到接近地电位VB端通过自举二极管从VCC充电到约12V当低端管关断、高端管准备导通时自举电容两端储存的电压就为高端驱动电路供电让HO端能够输出比VS高12V的电平。对于P-MOS管来说高端驱动电路的输出逻辑要反转但自举供电机制是一样的——这也是为什么使用IR2104时自举电容的容值、ESR不能马虎的原因。自举电容选值上我有个经验一般取0.1μF到1μF之间具体要看高端管的Qg。以Qg20nC的P-MOS管为例自举电容的电荷至少要满足一次开关所需的栅极电荷量且压降不能太大。如果自举电容取0.1μF充电到12V后储存电荷是1.2μC是Qg的60倍完全够用。但要注意电容的耐压值至少要是电源电压加VCC电压的1.5倍否则长时间高压工作下电容会先失效。4. 基于STM32 HAL库的PWM驱动实现刚才说的电路设计只是硬件层面的基础真正要让电机转起来、转得顺滑还需要MCU输出正确的PWM波形。我用的主控是STM32F103系列开发环境是STM32CubeMXHAL库这里分享一下PWM输出的关键配置和实际代码。4.1 定时器PWM初始化与占空比控制STM32的定时器PWM输出原理并不复杂定时器产生一个从0计数到自动重载值ARR的锯齿波比较寄存器CCR决定占空比。输出PWM的引脚有复用功能所以初始化时要把GPIO模式设置为复用推挽输出并选择合适的定时器通道。以TIM3的CH1和CH2为例在CubeMX里的配置逻辑如下选择TIM3将通道1和通道2使能为PWM Generation CH1/CH2预分频器PSC设为71时钟源72MHz这样计数频率就是1MHz自动重载值ARR设为999这样PWM频率就是1MHz / (9991) 1kHz初始脉冲宽度设为500对应50%占空比为什么这样算因为PWM频率的公式是 f_pwm 定时器时钟 / ((PSC1) × (ARR1))。72MHz的主频PSC设71就是除以72得到1MHz的计数频率ARR设999就是每个周期计1000个数最终1kHz。如果你的电机噪音大可以把频率提高到20kHz比如PSC设为71ARR设为49这样PWM频率就是20kHz超出人耳可听范围噪音问题会明显改善。初始化代码在HAL库里面是这样的void MX_TIM3_Init(void) { TIM_OC_InitTypeDef sConfigOC {0}; htim3.Instance TIM3; htim3.Init.Prescaler 71; htim3.Init.CounterMode TIM_COUNTERMODE_UP; htim3.Init.Period 999; htim3.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(htim3); sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 500; sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(htim3, sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(htim3, sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_1); HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_2); }配置完成之后只需要在运行时修改CCR的值就能实现调速// 50%占空比值域0~999 __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, 500); // 30%占空比 __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_2, 300);要注意的是初始化PWM之后如果只在某一路通道上调用HAL_TIM_PWM_Start另外一路的PWM是不会有输出的。这个坑我踩过好几次每次都在检查引脚配置最后才发现是漏掉了通道的启动函数。4.2 互补PWM与死区时间的HAL库配置如果使用互补PWM输出可以直接驱动半桥芯片需要在CubeMX中使能Main Output选项。以TIM1为例TIM1是高级定时器它的CH1和CH1N是一对互补输出CH1N通常是低端管驱动输入CH1是高端管驱动输入。这种模式下ARR设置占空比死区时间则在BDTR寄存器中配置CubeMX中直接填入死区时间数值即可单位是tDTS死区时间单元一般是定时器时钟周期的倍数。死区时间的设置标准是必须大于功率管子的关断延迟时间td(off)与开通延迟时间td(on)的差值。举个例子如果我用的下桥N-MOS管关断延迟是60ns开通延迟是30ns死区时间至少要大于约100ns才能避免直通。工程上我习惯把死区设在500ns以上留出足够的余量。死区太短的后果是管子发烫时间长了烧管死区太长则PWM波形会有明显缺口电机电流波形畸变、效率降低。驱动芯片和MCU配合时还有个小细节IR2104的输入高电平阈值大约在2.4V左右STM32的3.3V输出可以直接驱动但有些老型号的驱动芯片或模块需要5V输入此时MCU和驱动芯片之间就要加电平转换或者选用允许3.3V输入的驱动器。我的习惯是看驱动芯片数据手册中的VIH/低电平阈值参数再做决定不要想当然认为反正MCU是高电平输出就能驱动。5. 实际调试中踩过的坑与排查链路每次写驱动电路的经验我最想分享的都不仅仅是成功路径还有那些让人想砸板子的故障排查过程。这个24V电机驱动板在调试阶段至少经历了三轮炸管-换管-再测试的循环我把最典型的几个问题还原出来供大家参考排查思路。5.1 首轮故障上电瞬间管子直接击穿第一版PCB焊接完成之后接通24V电源还没来得及发PWM信号板子上的N-MOS管就冒烟了。当时第一反应是管子买到了假货或者焊接有短路但用万用表排查后发现原理图设计上有个致命缺陷MCU还没上电初始化时GPIO处于高阻态而半桥驱动芯片的输入引脚悬空内部逻辑状态不确定导致上下桥MOS管同时导通24V通过两个管子直接对地短路。这个问题的根源在于上电时序。解决方式有两种第一种是在MCU的GPIO与驱动芯片输入之间增加下拉电阻确保MCU未初始化时驱动芯片的输入为低电平第二种是改变驱动芯片的使能策略将使能引脚连接到MCU的一个输出引脚并在该引脚下拉MCU启动完成之后再拉高使能。我在后续版本中同时采用了这两种方式可靠性大幅提升。这个排查过程其实很有代表性。很多人在设计MOS驱动电路时只关注稳态工作却忽视了上电和掉电这些瞬态过程。电源电压还没建立稳定控制逻辑尚未初始化这时候任何不确定的栅极信号都可能让MOS管进入危险状态。5.2 第二轮故障电机运行时P-MOS管过热第一轮故障修好之后电机能转了但连续运行几分钟P-MOS管的温度很快就超过80°CN-MOS管反而温升不明显。这个现象本身就有信息量如果两个管子的导通损耗差异不大为什么只有P管发热用示波器抓P管栅极的Vgs波形发现问题出在死区时间和高端管驱动电压幅度上。IR2104的HO输出驱动高端P-MOS管时由于P-MOS管的开启逻辑和N-MOS管相反Vgs需要低于阈值才能导通如果高端驱动电路的电压摆幅不够P-MOS管会长时间工作在放大区半导通状态导通电阻远高于数据手册标称值损耗自然成倍增加。检查自举电容后发现问题更具体我最初用的自举电容是普通的电解电容ESR偏高在20kHz的开关频率下自举电压纹波很大高端驱动的Vgs在导通期间掉了接近2V。换用低ESR的陶瓷电容并联电解电容之后Vgs波形明显平稳P-MOS管的温度降到40°C左右问题解决。这里有个通用经验自举电容的ESR和容量一样重要。容量决定电荷储备ESR决定电压保持能力。对于20kHz以上的PWM选X7R材质的陶瓷电容是最稳妥的它的ESR比电解电容低一个数量级。5.3 第三轮故障对地电压尖峰干扰单片机电机正常转起来之后又出现一个新问题单片机偶尔死机ADC采样值跳变严重。用示波器测量MCU的3.3V电源轨发现上面叠加了幅度超过1V的高频噪声频率与PWM开关频率一致。这是典型的地弹噪声问题。大电流开关的电流回路通过PCB地平面时会在走线寄生电感上产生压降这个压降又会通过参考地耦合到MCU的电源和模拟信号中。解决方案从三方面入手第一单点接地与功率地分开。将MOS驱动电路的地与MCU模拟地分开走线在电源入口处单点汇合避免大电流流过MCU的参考地路径。第二在MOS管的漏极和源极之间增加RC吸收电路也称为缓冲电路。串联电阻吸收共模尖峰电容提供高频通路。参数上取RC时间常数略大于开关周期比如20kHz下R10Ω、C1nF时间常数是10ns用于吸收高频振铃。第三PWM的开关沿适当放缓。栅极电阻从10Ω提高到22Ω后电压变化率降低通过米勒电容耦合到驱动芯片和MCU的高频噪声也随之减小。这轮排查让我养成了一个习惯任何MOS驱动电路只要发现问题先测电源轨的噪声再测开关节点SW点的波形然后用单点接地的思路去优化布局——这个排查顺序能快速定位到绝大多数驱动异常问题。5.4 波形测量的参考地陷阱排查故障的过程中示波器的使用方式也会影响判断。我在测Vgs波形时如果直接用示波器探头的地线夹子夹在MOS管的源极在高频开关环境下会捕捉到很大的振铃让人误以为是电路的振荡。这个现象的根源在于探头地线本身是一个电感夹子引线越长等效电感越大。当示波器探头的地线构成一个大环路时开关节点的高频磁场会在这个环路中感应出电压叠加到真实信号上形成假振铃。正确的测量方法是让探头的接地尽可能短使用接地弹簧tip-to-barrel或者把探头地线环绕几圈减小环路面积或者直接在MOS管源极旁边焊接一个测试点用最短的地线连接。这个细节让我在后续测量省了很多时间。很多时候不是电路有问题而是测量方法引入了虚假信号误导了排查方向。6. 从实例中总结的选型和方法论MOS驱动电路的项目做了不少回头看这个24V电机驱动的实例有几点通用的方法论可以分享。选N-MOS管还是P-MOS管不要陷入哪个性能更好的无谓争论而是看你的源极能不能接地。源极能接地优先选N-MOS管源极必须接电源就选P-MOS管。除非电流实在太大或者开关频率实在太高需要用N-MOS管配合自举驱动方案做高端开关否则P-MOS管在常规应用里是更简单可靠的选择。我最后再分享一个实操中的小技巧手头如果没有驱动芯片用两个三极管也能搭出一个可以驱动P-MOS管的电路。MCU输出高电平时NPN三极管导通把P-MOS管的栅极拉低P-MOS管导通MCU输出低电平时三极管截止P-MOS管栅极通过上拉电阻回到源极电位P-MOS管关断。这种电路虽然开关速度比不上驱动芯片但驱动几安培的负载绰绰有余并且只要一个电阻和一个三极管成本几乎可以忽略。从实际测试数据来看我最终完成的这款电机驱动板在24V/5A连续工作条件下P-MOS管和N-MOS管的温升都控制在30°C以内PWM最高频率支持到30kHz整板在满载工况下运行半小时无异常。对一个中等复杂度的电机驱动应用来说这个方案的稳定性和成本表现都值得参考。想动手试的朋友可以先从IR2104SI2301SI2302这套组合开始等跑通了再根据实际负载调整管子的电流等级整个流程走一遍你对MOS管的驱动理解会有一个质的提升。
返回列表