
1. 从两个真实场景说起为什么PMOS值得单独拿出来讲做低功耗设备的人迟早会撞上同一个问题系统大部分时间在睡觉可电池还是掉电比预期快。你查了一圈固件确认MCU进了深度睡眠外设时钟也关了最后拿万用表一量发现某条支路上还挂着几十微安的漏电流。这种看不见的耗电十有八九出在电源通路上——该断的支路没断干净或者断开的方式本身就不对。墨水屏设备是这类问题的重灾区。墨水屏的刷新特性决定了它绝大部分时间处于静态显示状态主控、ADC采样电路、传感器这些模块理论上都可以断电但如果你用NMOS做高边开关或者干脆用一个三极管凑合那休眠电流就很难压下去。另一个典型场景是ADC采样电路采样的时候要给分压网络和基准源供电不采样的时候如果不断开分压电阻上会持续消耗电流几路加起来就是一笔不小的开销。这两个场景的共同点是——都需要一个高边开关而且这个开关的静态功耗要足够低、关断要足够彻底。PMOS在这里就成了一个非常自然的选择。它的导通条件是栅极电压低于源极电压源极接电源正极时只要把栅极拉到地就能导通拉到源极电位就能关断逻辑很直观。但真正把它用好里面有不少细节值得掰开讲。这篇内容面向的是做嵌入式硬件、低功耗产品设计的工程师尤其是接触过墨水屏驱动、电池供电ADC采集这类场景的人。我会从PMOS的导通截止过程讲起把墨水屏电源切换和ADC采样供电控制这两个具体应用拆开把选型、驱动、防倒灌、软启动这些环节的实操经验都摆出来。你如果正在为休眠电流发愁或者想搞清楚PMOS和NMOS在电源开关场景下到底怎么选下面的内容应该能直接用上。2. PMOS导通与截止的完整过程以及它和NMOS的本质差异2.1 导通条件的物理含义PMOS的导通条件是 $V_{GS} V_{TH}$其中 $V_{TH}$ 是负值。翻译成人话就是栅极电压要比源极电压低足够多沟道才会形成。假设源极接3.3V阈值电压是-1.5V那栅极电压要低于1.8V才开始导通拉到0V时导通最充分。这里有个容易被忽略的点PMOS的导通电阻 $R_{DS(on)}$ 是随 $V_{GS}$ 变化的。很多人在选型时只看数据手册上某个特定条件下的 $R_{DS(on)}$比如 $V_{GS}-4.5V$ 时的值但实际电路里如果栅极只拉到1.8V$R_{DS(on)}$ 可能翻好几倍。在ADC采样这种对压降敏感的场景里这个差异会直接影响采样精度。我一般会这样估算先确定源极电压也就是被控支路的供电电压再确定栅极能被拉到的最高和最低电位然后去数据手册里找对应 $V_{GS}$ 下的 $R_{DS(on)}$ 曲线。如果找不到曲线就按最坏情况留2到3倍余量。2.2 截止过程与漏电流的来源PMOS关断时栅极被拉到源极电位$V_{GS}0$沟道消失。但关断不等于完全断开。实际电路中还有几条漏电通路亚阈值漏电即使 $V_{GS}$ 低于阈值沟道里仍有微弱的电流通常在纳安级别温度每升高10°C大约翻一倍。体二极管漏电PMOS的体二极管在关断时是反偏的反偏漏电一般在纳安到微安级别取决于器件质量。栅极漏电栅氧化层越薄栅极漏电越大这在先进工艺的小尺寸MOSFET上更明显。外围电路漏电栅极驱动电路本身如果没处理好比如上拉电阻一直挂着也会贡献漏电。在墨水屏设备里如果休眠电流目标是10微安以下那PMOS的选型就不能只看导通电阻还要看关断漏电。我通常会把数据手册里 $I_{DSS}$零栅压漏电流和 $I_{GSS}$栅极漏电流两个参数单独拎出来看前者要小于1微安后者要小于100纳安。2.3 PMOS和NMOS在电源开关场景下的选择逻辑NMOS做低边开关很顺手源极接地栅极给高电平就导通驱动简单。但低边开关有个致命问题它断开的是负载和地之间的通路负载上仍然挂着电源电压。对于ADC分压网络这种场景分压电阻上照样有电流流过等于没省电。高边开关必须断开负载和电源之间的通路这时候NMOS就尴尬了——源极电位随负载变化栅极需要比源极更高的电压才能导通得额外加自举电路或电荷泵。PMOS则天然适合高边源极接电源栅极拉低就导通拉高就关断驱动逻辑和电源域一致不需要额外升压。代价是PMOS的导通电阻通常比同尺寸的NMOS大2到3倍因为空穴迁移率比电子低。所以在电流较大的场景下PMOS的导通损耗要仔细算。但在墨水屏和ADC采样这类电流不大的场景里通常几十毫安以内这个代价完全可以接受。对比维度PMOS高边开关NMOS低边开关NMOS高边开关驱动复杂度低栅极拉低导通低栅极拉高导通高需要自举或电荷泵关断后负载是否带电否是否导通电阻较大小小适合场景小电流高边通断大电流低边通断大电流高边通断静态功耗控制容易做到极低负载侧仍有漏电驱动电路本身耗电3. 墨水屏电源轨切换PMOS做高边开关的完整设计链路3.1 墨水屏的供电需求拆解墨水屏的驱动电压通常在15V左右而主控和逻辑电路是3.3V或1.8V。这意味着墨水屏设备里至少有两套电源轨一套低压逻辑轨一套高压驱动轨。刷新的时候两套都要上电不刷新的时候高压轨必须彻底断掉否则升压电路本身的静态电流就能把电池吃空。我见过不少设计是用一个负载开关IC来做这件事但负载开关IC本身也有静态电流而且价格不便宜。用一颗PMOS加两个电阻一个三极管成本不到两毛钱静态电流可以做到1微安以下。关键是要把驱动电路设计对。3.2 栅极驱动电路的具体接法最基本的PMOS高边开关电路是这样的PMOS的源极接电源正极漏极接负载栅极通过一个电阻上拉到源极同时通过一个NMOS或NPN三极管拉到地。控制信号给三极管基极三极管导通时把栅极拉低PMOS导通三极管截止时栅极被上拉电阻拉到源极电位PMOS关断。这里有几个参数要算上拉电阻的取值。上拉电阻决定了关断时栅极被拉高的速度也决定了导通时三极管要灌入多少电流。假设电源电压3.3V上拉电阻100kΩ那三极管导通时灌入的电流是33微安。这个电流在导通期间是持续消耗的如果PMOS长时间导通33微安就不算小了。所以上拉电阻要在关断速度和静态功耗之间折中。我的经验是如果PMOS大部分时间关断、偶尔导通上拉电阻可以取大一些比如470kΩ甚至1MΩ如果PMOS频繁开关那就要取小一些保证关断速度。栅极串联电阻。在栅极和驱动三极管之间串一个小电阻通常10Ω到100Ω可以限制栅极充放电电流抑制振铃。这个电阻在低频开关场景下可以省略但在PWM调光或快速切换场景下很有必要。三极管的选型。NPN三极管的集电极-发射极饱和电压要足够低确保能把栅极拉到接近地电位。如果饱和电压有0.3V那 $V_{GS}$ 就只有-3.0V而不是-3.3V导通电阻会大一些。小信号NPN的饱和电压通常在0.1V以内问题不大。3.3 防倒灌体二极管带来的隐患PMOS的体二极管方向是从漏极指向源极对于P沟道器件体二极管阳极在漏极阴极在源极。这意味着即使PMOS关断如果负载侧有高于电源电压的电压电流会通过体二极管倒灌回电源。在墨水屏场景里这个问题尤其要注意。墨水屏的升压电路输出端通常有大电容断电后电容上还存着15V电压。如果PMOS的漏极接升压电路输入端源极接3.3V电源那电容上的电压会通过体二极管倒灌到3.3V轨上可能把主控或其他低压器件打坏。解决办法有两个一是把PMOS放在升压电路的输出侧让体二极管的方向和负载电压方向一致二是在PMOS的漏极和负载之间再串一个肖特基二极管阻断倒灌通路。第一种方案更省器件但要求PMOS的耐压足够高。第二种方案会引入一个二极管压降在低压场景下不太划算。我个人的做法是如果升压电路本身有关断功能大多数升压IC都有EN引脚优先用升压IC的EN引脚来控制PMOS只负责断开输入侧的滤波电容和分压电阻。这样体二极管倒灌的问题就不存在了。3.4 软启动避免上电冲击墨水屏的升压电路输入端通常有大容量电容PMOS导通瞬间电容相当于短路会有很大的冲击电流。这个冲击电流可能触发电源的过流保护也可能在PCB走线上产生电压跌落影响其他电路。软启动的实现方式是在PMOS的栅极和地之间加一个电容利用RC充电延迟来减缓栅极电压下降的速度。具体做法是栅极上拉电阻保持栅极到地之间加一个电容同时驱动三极管的集电极通过一个电阻接栅极。这样三极管导通时栅极电压不是瞬间拉到地而是通过电阻给电容充电慢慢下降。RC时间常数的计算假设上拉电阻100kΩ栅极电容100nF时间常数是10ms。PMOS的导通阈值假设是1.5V那从3.3V降到1.5V需要的时间大约是 $10ms \times \ln(3.3/1.5) \approx 7.9ms$。这个软启动时间对大多数升压电路来说足够了。注意软启动电容会增加关断时间。如果关断速度也很关键那就要在栅极加一个二极管让关断时电容通过二极管快速放电导通时通过电阻慢速充电。4. ADC采样电路的供电控制用PMOS把分压网络的静态功耗压到零4.1 ADC采样电路的功耗构成一个典型的ADC采样电路包括分压网络、基准源、抗混叠滤波器和ADC本身。其中分压网络和基准源是静态功耗的主要来源。假设你用两个100kΩ电阻分压一个12V电压到3V给ADC采样分压电阻上的电流是 $12V / 200kΩ 60\mu A$。如果这个分压网络一直挂着一天就是1.44mAh一年就是525mAh。对于一颗CR2032纽扣电池220mAh来说光这一个分压网络就能在半年内把电池耗光。基准源的静态功耗也不容忽视。一个普通的并联基准源工作电流在1mA左右串联基准源在几十微安到几百微安。如果基准源一直开着功耗同样可观。所以ADC采样电路的低功耗设计核心思路是只在采样的时候给分压网络和基准源供电采样完成后立刻断电。这个通断动作用PMOS来做高边开关是最合适的。4.2 采样时序与PMOS开关的配合这里的关键是时序。ADC采样需要一定的建立时间分压网络和基准源上电后要等电压稳定了才能开始采样。如果PMOS刚导通就启动ADC采样值会偏低。具体时序应该这样安排控制信号拉低PMOS导通分压网络和基准源上电。延时等待建立。延时时间取决于分压网络的RC时间常数和基准源的启动时间。分压电阻100kΩ、ADC采样电容10pF的话RC时间常数是1微秒但基准源的启动时间可能是几百微秒。所以延时要以基准源的启动时间为准通常取1ms到10ms。启动ADC采样采集N次取平均。采样完成后控制信号拉高PMOS关断。等待PMOS完全关断后再进入下一轮避免关断过程中的中间态影响其他电路。这个时序可以用MCU的GPIO配合定时器来实现也可以用ADC的硬件触发机制。比如STM32的ADC可以用定时器触发在触发前几个周期先打开PMOS触发后自动采样采样完成中断里关闭PMOS。用DMA的话可以在DMA传输完成中断里关PMOS这样CPU不用干预时序更精准。4.3 分压电阻的取值与PMOS导通电阻的相互影响分压电阻的取值要兼顾功耗和精度。电阻越大分压网络上的电流越小但输出阻抗越高对ADC的输入阻抗要求越高采样时间也越长。电阻越小功耗越大但采样更快。PMOS的导通电阻在这里会引入一个误差。假设PMOS的 $R_{DS(on)}$ 是1Ω分压电阻是100kΩ那PMOS上的压降是分压网络电流的1Ω倍也就是 $60\mu A \times 1Ω 60\mu V$。相对于3V的采样电压这个误差是0.002%完全可以忽略。但如果分压电阻取1kΩ电流是6mAPMOS上的压降就是6mV误差0.2%这就不能忽略了。所以结论是分压电阻越大PMOS导通电阻的影响越小。在低功耗场景下分压电阻通常取几十kΩ到几百kΩPMOS的导通电阻在几欧姆以内影响可以忽略。但如果你做的是高精度采样分压电阻取小值那就要选 $R_{DS(on)}$ 更小的PMOS或者把PMOS放在分压网络的下端做低边开关但这样分压网络仍然有共模电压问题。4.4 基准源的供电控制细节基准源的供电控制比分压网络更讲究。很多基准源芯片在上电后需要一定的稳定时间而且有些基准源在断电后需要等待一段时间才能再次上电否则输出会不准。我遇到过的一个坑是用一颗串联基准源断电后立刻再上电输出会过冲导致第一次采样值偏高。后来查数据手册才发现这颗基准源的关断后重新启动时间要求是10ms。解决办法是在固件里加一个最小关断时间确保两次采样之间基准源有足够的恢复时间。另一个细节是基准源的输入电容。如果基准源输入端有大电容PMOS导通时的冲击电流会比较大可能需要软启动。但基准源的电流通常很小冲击电流有限一般不需要额外处理。5. 选型、布局与实测那些数据手册不会告诉你的细节5.1 PMOS选型的几个关键参数选PMOS不能只看 $R_{DS(on)}$下面这几个参数在低功耗场景下同样重要阈值电压 $V_{TH}$。阈值电压决定了栅极需要拉到多低才能导通。如果 $V_{TH}$ 是-2.5V而你的控制信号只能拉到1.8V那 $V_{GS}$ 只有-1.5VPMOS可能根本导通不了或者导通电阻极大。所以 $V_{TH}$ 要选绝对值小一些的比如-1.0V到-1.5V确保在低控制电压下也能充分导通。关断漏电流 $I_{DSS}$。这个参数直接决定了PMOS关断后支路的静态功耗。数据手册里的 $I_{DSS}$ 通常是在 $V_{GS}0$、$V_{DS}$ 等于额定电压的条件下测的温度是25°C。实际工作时温度可能到60°C甚至更高漏电流会翻好几倍。所以选型时要留余量25°C下的 $I_{DSS}$ 最好小于100nA。输入电容 $C_{iss}$。输入电容决定了栅极充放电的速度也决定了驱动电路的动态功耗。如果PMOS频繁开关$C_{iss}$ 大的器件会消耗更多驱动功率。在低频开关场景下这个参数不太重要。封装热阻。PMOS导通时会有 $I^2R$ 损耗如果电流较大封装的热阻决定了温升。SOT-23封装的热阻大约200°C/W如果损耗是0.1W温升就是20°C。在高温环境下要留够余量。5.2 PCB布局的注意事项PMOS高边开关的布局有几个要点源极和漏极的走线要短而粗。PMOS的源极接电源漏极接负载这两条走线承载负载电流走线电阻会引入额外压降。在低功耗场景下电流不大但走线电感在开关瞬间会产生振铃所以走线要尽量短。栅极驱动电路要靠近PMOS。栅极走线太长会引入寄生电感导致开关波形变差。上拉电阻和三极管要放在PMOS旁边走线控制在几毫米以内。散热焊盘要接铜皮。如果PMOS有散热焊盘要接到足够大的铜皮上帮助散热。SOT-23封装的PMOS没有专门散热焊盘但可以通过加宽漏极走线来辅助散热。地线要单点接地。驱动三极管的发射极要接到干净的地避免负载电流在地线上的压降影响驱动电平。5.3 实测数据与常见问题排查我在一个墨水屏项目里实测过PMOS高边开关的效果。电源电压3.3VPMOS型号是AO3401上拉电阻470kΩ驱动三极管是MMBT3904。实测数据如下状态电流说明PMOS导通负载空载7μA主要是上拉电阻和三极管基极电流PMOS导通负载满载25mA负载正常工作电流PMOS关断负载空载0.3μA主要是PMOS漏电流和PCB漏电PMOS关断负载满载0.3μA负载被完全断开关断电流0.3μA比很多负载开关IC的静态电流还低。这个结果说明PMOS高边开关在低功耗场景下确实有优势。常见问题排查问题一PMOS关不断。现象是关断后负载上仍有电压。原因可能是栅极上拉电阻没接对或者驱动三极管漏电太大。用万用表测栅极电压如果关断时栅极电压接近源极电压说明上拉正常如果栅极电压明显低于源极说明三极管没完全截止。问题二PMOS导通后压降大。现象是负载电压明显低于电源电压。原因可能是 $V_{GS}$ 不够负PMOS没完全导通。检查驱动三极管的饱和电压或者换 $V_{TH}$ 更低的PMOS。问题三开关瞬间有振铃。现象是示波器上看栅极波形有振荡。原因可能是栅极走线太长或者没有栅极串联电阻。加一个22Ω的栅极电阻通常能解决。问题四休眠电流比预期大。现象是关断后电流仍有几微安。原因可能是PMOS的 $I_{DSS}$ 偏大或者PCB上有其他漏电通路。把PMOS拆掉再测如果电流降下来说明是PMOS的问题如果电流没变说明是PCB漏电。5.4 一个容易忽略的细节控制信号的默认状态MCU的GPIO在上电复位期间通常处于高阻态这时候PMOS的栅极状态是不确定的。如果上拉电阻把栅极拉到源极PMOS关断这是安全的。但如果驱动三极管的基极有漏电或者GPIO内部有弱上拉PMOS可能会误导通。解决办法是在驱动三极管的基极加一个下拉电阻确保MCU复位期间三极管截止。下拉电阻取100kΩ左右对正常驱动影响很小但能保证上电默认状态是关断。另一个细节是GPIO的驱动能力。如果GPIO直接驱动三极管基极要确保GPIO的低电平能灌入足够的基极电流让三极管饱和。假设三极管基极电阻是10kΩGPIO低电平是0V基极电流是0.33mA乘以三极管的放大倍数100集电极能灌入33mA足够把栅极拉低。但如果基极电阻是100kΩ基极电流只有33μA集电极电流只有3.3mA栅极上拉电阻如果取100kΩ需要33μA的灌电流勉强够用但余量不大。所以基极电阻和上拉电阻要匹配计算。6. 从PMOS开关延伸出去的几个实用电路变体6.1 高边PMOS的过流保护PMOS高边开关本身没有限流功能如果负载短路电流会很大。简单的过流保护可以用一个采样电阻加三极管来实现在PMOS的漏极和负载之间串一个小电阻比如0.1Ω电阻上的压降超过0.6V时驱动一个NPN三极管导通把PMOS的栅极拉高PMOS关断。这个电路的特点是打嗝式保护过流时PMOS关断负载电流降为零采样电阻上的压降消失三极管截止PMOS又重新导通。如果短路仍然存在就会反复开关形成打嗝。打嗝频率取决于栅极电容和上拉电阻的时间常数。在墨水屏场景里过流保护不是必须的因为升压电路本身有限流。但在ADC采样电路里如果分压网络短路PMOS可能会过流加一个简单的限流电路能提高可靠性。6.2 用光耦驱动PMOS做隔离高边开关如果控制信号和电源不在同一个地电位上就需要隔离驱动。光耦是常用的隔离器件但光耦的输出端是集电极开路可以直接用来拉低PMOS的栅极。电路是这样的光耦的发光二极管侧接控制信号光敏三极管侧的集电极接PMOS栅极发射极接地。控制信号给高电平光耦导通PMOS栅极被拉低PMOS导通。控制信号给低电平光耦截止PMOS栅极被上拉电阻拉高PMOS关断。光耦的传输速度比较慢适合低频开关场景。在ADC采样这种毫秒级时序的场景里光耦的延迟可以接受。但光耦本身有静态功耗发光二极管需要几毫安的驱动电流在低功耗场景下要权衡。6.3 PMOS电源软启动的另一种实现前面讲的软启动是用RC延迟。另一种方式是用一个电容加一个电阻组成积分电路控制三极管的基极电压缓慢上升从而让三极管的集电极电流缓慢增加PMOS的栅极电压缓慢下降。这种方式的软启动时间更可控因为三极管工作在放大区集电极电流和基极电流成线性关系。但三极管在放大区会有额外的功耗而且温度稳定性不如RC延迟方式。在低功耗场景下RC延迟方式更简单可靠。6.4 PMOS防反接电路如果设备可能接反电源PMOS可以用作防反接保护。电路是这样的PMOS的源极接负载侧漏极接电源侧栅极通过电阻接电源侧。电源正接时PMOS的体二极管先导通源极电压升高栅极被电阻拉到低电位PMOS导通电流通过沟道而不是体二极管压降很小。电源反接时PMOS的体二极管反偏栅极电压相对于源极为正PMOS关断负载得到保护。这个电路在电池供电设备里很实用因为电池接反是常见的人为失误。PMOS的耐压要大于电源电压导通电阻要小避免正常工作时压降太大。7. 写在最后几个我踩过的坑和对应的解法第一个坑是上拉电阻取值太大导致关断太慢。有一次为了省电把上拉电阻取到了1MΩ结果PMOS关断时间到了几十毫秒在关断过程中负载电压缓慢下降导致ADC采样到了中间态的值。后来把上拉电阻降到100kΩ关断时间降到几毫秒问题解决。所以上拉电阻不是越大越好要根据关断时间要求来定。第二个坑是忽略了PMOS的体二极管在关断时的漏电。有一批板子休眠电流偏高查了很久才发现是PMOS的体二极管在高温下漏电偏大。换了一个体二极管漏电更小的型号问题解决。所以选型时不能只看 $I_{DSS}$还要看体二极管的反向漏电。第三个坑是驱动三极管的基极电阻和上拉电阻不匹配。有一次基极电阻取了100kΩ上拉电阻取了10kΩ结果三极管导通时集电极电流不够PMOS栅极拉不到地PMOS导通电阻偏大负载电压偏低。后来把基极电阻降到10kΩ问题解决。这两个电阻要一起算不能分开拍脑袋。第四个坑是PCB布局时把PMOS放在了远离负载的位置。走线长了寄生电感大开关瞬间的振铃很明显还干扰到了旁边的ADC走线。后来把PMOS挪到负载旁边走线缩短到5mm以内振铃消失。高边开关的布局要尽量靠近负载这是经验。第五个坑是忘了在GPIO上加下拉电阻。MCU复位期间GPIO高阻驱动三极管基极悬空PMOS误导通负载上电。虽然时间很短但足以让墨水屏闪一下。加了下拉电阻后上电默认状态是关断问题解决。这些坑都不大但每一个都会让你多花半天到一天的时间去查。希望这篇内容能帮你少走一些弯路。PMOS高边开关本身不复杂但要用到极致把静态功耗压到微安级把可靠性做到位还是需要把每个细节都想清楚。