☰
双电源自动切换电路设计:MOS管方案实现无缝切换与防倒灌
2026/9/28 16:09:40 网站建设 项目流程

1. 为什么需要双电源自动切换

做过便携设备的朋友都遇到过这个场景:设备既要能插USB供电,又要能靠内置电池跑。最粗暴的做法是搞个拨动开关,让用户自己切。但用户不会记得切,插着USB的时候电池还在放电,拔掉USB的瞬间设备直接掉电重启,正在处理的数据全丢。这种体验放在任何产品上都是致命的。

我最早做的一个手持数据采集器就栽在这上面。当时图省事,电池和USB各串一个肖特基二极管做“或”逻辑,理论上谁电压高谁供电。实测下来问题一堆:二极管压降0.3V起步,电池3.7V出来只剩3.4V,后级LDO直接掉出稳压区;USB 5V经过二极管变成4.7V,跟电池电压差太小,两个二极管同时导通,电池一边供电一边被USB倒灌充电,发热严重。更坑的是切换瞬间有个几十毫秒的电压跌落,MCU直接复位。

后来换成基于MOS管的自动切换方案,才算真正解决问题。这套方案的核心目标就三个:无缝切换(切换过程电压跌落控制在毫伏级)、互不倒灌(USB供电时电池不放电也不被乱充)、静态功耗低(电池模式下自身耗电微安级)。适合所有做便携电子、IoT节点、手持仪器、电池供电视觉模块的硬件工程师参考,哪怕你刚画第一块板子,照着这个思路也能少走弯路。

2. 方案整体设计与核心思路拆解

2.1 三种常见切换拓扑的取舍

在动手画原理图之前,先把可选路线理清楚。市面上做双电源切换,主流就三条路:

方案核心器件压降切换速度静态功耗成本
二极管或逻辑肖特基二极管×20.3~0.5V快低极低
专用切换芯片如TPS2113等极低快低中高
MOS管分立方案P沟道MOS×2接近0极快极低低

二极管方案我前面已经用血泪史证明了,压降和倒灌是硬伤,只适合对电压不敏感、电流很小的场合。专用芯片确实省心,内部集成了比较器、驱动、防倒灌,但问题是贵,而且很多型号供货不稳定,小批量采购经常断货。MOS管分立方案是我最终选的路线:用两个P沟道MOS管分别控制电池和USB两条供电路径,靠MOS管体二极管和栅极电压的逻辑关系实现自动优先级切换。

为什么是P沟道而不是N沟道?这是很多人第一个卡壳的地方。N沟道MOS管做高边开关需要栅极电压高于源极,得额外搞个自举电路或者电荷泵,电路复杂度直接翻倍。P沟道MOS管做高边开关,栅极拉低就导通,逻辑天然匹配“有电就通”的需求,电路简洁得多。代价是P沟道MOS的导通电阻通常比同规格N沟道大,但对于1~3A级别的负载,选个Rds(on)在20~50mΩ的型号,压降也就几十毫伏,完全可以接受。

2.2 优先级逻辑的设计意图

这套电路的核心逻辑是:USB插入时,USB供电优先,同时切断电池供电路径;USB拔出时,电池自动接管。为什么不让电池和USB同时供电?因为两个电源直接并联,电压高的会向电压低的倒灌。USB 5V和电池3.7V并联,USB会持续给电池充电,如果电池没有保护板,过充风险极大;即使有保护板,这种不受控的充电电流也会让电池发热、寿命骤降。

所以设计上必须做到“二选一”,而且切换要快。MOS管的开关速度在微秒级,远快于机械开关的毫秒级,这是它实现无缝切换的物理基础。具体来说,USB存在时,通过一个分压网络检测USB电压,控制电池侧MOS管的栅极,使其关断;USB消失时,栅极电压被下拉电阻拉低,电池侧MOS管导通。整个过程没有软件参与,纯硬件逻辑,可靠性极高。

2.3 关键参数的计算起点

选MOS管之前,先明确三个边界条件:最大负载电流、最高环境温度、允许的压降。假设我们的设备峰值电流2A,环境温度最高60℃,允许压降不超过50mV。那么MOS管的导通电阻Rds(on)必须满足:

Rds(on) ≤ 50mV / 2A = 25mΩ

注意这个25mΩ是在最高结温下的值,而datasheet通常给的是25℃的值。MOS管的Rds(on)有正温度系数,结温从25℃升到100℃,Rds(on)大概会增大1.5倍。所以选型时要留余量,25℃下Rds(on)最好在15mΩ以内。另外还要算功耗:P = I² × Rds(on) = 4 × 0.025 = 0.1W,对于SOT-23封装来说有点勉强,建议用DFN或者SOP-8封装的MOS管,散热更好。

3. 核心器件选型与电路细节

3.1 P沟道MOS管的关键参数怎么看

选P沟道MOS管,我一般按这个顺序筛:

第一步看Vgs(th)和Vgs最大额定值。Vgs(th)是开启阈值,P沟道通常是负值,比如-1V到-2V。意思是栅源电压低于这个值时MOS管开始导通。但要注意,Vgs(th)只是“开始导通”,真正要完全导通、达到标称Rds(on),Vgs需要拉到-4.5V甚至-10V。我们的电池电压最低可能到3.0V(锂电池放电截止),所以必须选Vgs(th)在-1V以内、且在-2.5V时Rds(on)已经足够小的型号。同时Vgs最大额定值要能承受USB的5V,一般±12V或±20V都够用。

第二步看Rds(on)和Vds。Vds额定值要高于USB 5V和电池4.2V中的最大值,留一倍余量选-12V或-20V即可。Rds(on)按前面算的,25℃下选15mΩ以内。

第三步看封装和热阻。前面说了,2A电流下功耗0.1W,SOT-23的热阻大概250℃/W,温升25℃,勉强能用但夏天机箱内温度高就危险。我一般选SOP-8或者DFN2×2,热阻低一个数量级。

第四步看体二极管。P沟道MOS管内部有一个从漏极到源极的体二极管(注意方向:P沟道的体二极管是从D指向S,也就是从漏到源正向导通)。这个体二极管在电路里扮演重要角色,后面会细说。

3.2 栅极驱动与分压网络设计

电池侧MOS管的栅极不能直接接USB电压,因为USB 5V可能超过MOS管Vgs额定值,而且需要根据USB是否存在来切换栅极电平。标准做法是用一个电阻分压网络加一个开关三极管或者小MOS管。

具体电路:USB 5V经过两个电阻分压,得到一个约3V的电压,接到一个NPN三极管的基极(或者N沟道小MOS的栅极)。三极管集电极接电池侧P沟道MOS的栅极,发射极接地。当USB存在时,三极管导通,把P沟道MOS的栅极拉低到地,此时P沟道MOS的Vgs = 0V - 电池电压 = 负值,MOS管导通?等等,这里逻辑要理清楚。

P沟道MOS管做高边开关的接法:源极接电源(电池正极),漏极接负载。栅极电压低于源极电压时导通。如果栅极被拉到地,Vgs = -Vbat,绝对值很大,MOS管完全导通。这不对,我们想要的是USB存在时电池侧关断。

所以逻辑要反过来:USB存在时,要让电池侧MOS管的栅极电压等于源极电压(Vgs=0),MOS管关断。USB消失时,栅极被下拉电阻拉到地,Vgs=-Vbat,MOS管导通。

实现方式:用一个NPN三极管,集电极接电池侧MOS栅极,发射极接电池正极(源极),基极通过分压网络接USB 5V。USB存在时,三极管导通,把栅极和源极短接,Vgs=0,MOS管关断。USB消失时,三极管截止,栅极被一个下拉电阻(接在栅极和地之间)拉到地,Vgs=-Vbat,MOS管导通。这个下拉电阻同时决定了关断速度,阻值越小关断越快但静态功耗越大,一般取100kΩ~1MΩ。

3.3 USB侧MOS管的接法

USB侧的MOS管接法类似,但逻辑相反:USB存在时导通,USB消失时关断。这个更简单,因为USB电压本身就是控制信号。USB 5V经过一个电阻分压后接到P沟道MOS的栅极,同时栅极有一个上拉电阻接源极(USB 5V)。USB存在时,分压网络让栅极电压低于源极,MOS管导通;USB消失时,栅极被上拉电阻拉到源极电压,MOS管关断。

但这里有个细节:USB侧MOS管的源极接USB 5V,漏极接负载。当USB拔出后,USB 5V节点会通过负载和分压网络慢慢放电,如果放电太慢,MOS管可能处于半导通状态,产生额外功耗。所以要在USB 5V节点加一个泄放电阻,比如10kΩ,确保拔出后快速降到0V。

3.4 体二极管的作用与防倒灌

前面提到P沟道MOS管有体二极管。在电池侧MOS管关断时,体二极管的方向是从漏极(负载侧)指向源极(电池侧),也就是说,如果负载侧电压高于电池电压,体二极管会正向导通,电流从负载倒灌回电池。这显然不是我们想要的。

但等等,P沟道MOS的体二极管方向到底是怎样的?P沟道MOS的结构:源极是P型半导体,漏极也是P型,衬底是N型。体二极管是从漏极的P型到衬底的N型,再到源极的P型,等效于一个从漏极指向源极的二极管。所以当漏极电压高于源极电压时,体二极管导通。

在我们的接法中,电池侧MOS的源极接电池,漏极接负载。USB存在时,负载电压是5V,电池电压3.7V,漏极电压高于源极,体二极管会导通,USB电流会通过体二极管倒灌进电池。这就破坏了防倒灌的设计。

解决办法:把电池侧MOS管的源极和漏极对调,让源极接负载,漏极接电池。这样体二极管从源极(负载侧)指向漏极(电池侧),当负载电压高于电池电压时,体二极管反向截止,不会倒灌。但这样接的话,MOS管导通时电流从漏极流向源极,对于P沟道MOS来说,电流方向是漏到源,这是可以的,MOS管是双向导通的。唯一要注意的是栅极驱动逻辑要相应调整:栅极电压要低于源极(负载侧)电压才能导通。USB存在时,负载电压5V,栅极被拉到5V,Vgs=0,关断;USB消失时,负载电压由电池通过体二极管提供(约3.0V),栅极被下拉到地,Vgs=-3.0V,导通。逻辑依然成立。

这个源漏对调的技巧是很多新手容易忽略的,画板子的时候如果按常规“源极接电源”的思维去接,防倒灌就失效了。

4. 完整实操过程与关键环节实现

4.1 原理图设计与元件清单

下面是我实际用的电路,已经量产过三版,稳定性没问题。核心元件清单:

位号元件型号/参数说明
Q1P沟道MOSAO3401(SOT-23)或AON7407(DFN)电池侧,Rds(on) 25℃约40mΩ/8mΩ
Q2P沟道MOS同上USB侧
Q3NPN三极管MMBT3904控制Q1栅极
R1电阻100kΩQ1栅极下拉
R2电阻10kΩUSB分压上臂
R3电阻10kΩUSB分压下臂
R4电阻100kΩQ2栅极上拉
R5电阻10kΩQ2栅极分压
R6电阻10kΩUSB泄放
C1电容10μF负载侧储能

Q1的接法:源极接负载(VOUT),漏极接电池(VBAT),栅极接Q3集电极和R1一端,R1另一端接负载。Q3基极接R2/R3分压点,发射极接负载,集电极接Q1栅极。等等,这里Q3发射极接负载还是接电池?如果Q3发射极接负载,当USB存在时负载5V,Q3导通,集电极被拉到5V,Q1栅极=5V,Q1源极=5V,Vgs=0,Q1关断。USB消失时,负载电压由电池通过Q1体二极管提供,约3.0V,Q3截止,Q1栅极被R1拉到0V(R1接负载?不对,R1应该接负载还是地?)。

这里逻辑要再理一遍。Q1源极接负载,要导通需要栅极低于源极。USB消失时,我们希望Q1导通,栅极应该被拉到低于负载电压的电平。如果R1接在栅极和地之间,栅极被拉到0V,源极是负载电压(约3.0V),Vgs=-3.0V,导通。但USB存在时,Q3导通,集电极接栅极,发射极接哪里?如果发射极接负载(5V),集电极被拉到约5V-0.2V=4.8V,栅极=4.8V,源极=5V,Vgs=-0.2V,Q1可能微导通,不彻底。所以Q3发射极应该接负载,但这样关断不彻底。

更好的做法:Q3发射极接负载,集电极接Q1栅极,同时Q1栅极通过R1接负载(不是地)。USB存在时,Q3导通,集电极≈发射极=5V,栅极=5V,Vgs=0,关断。USB消失时,Q3截止,栅极通过R1接负载,栅极=负载电压,Vgs=0,还是关断!这不对。

所以R1必须接负载,但Q3截止时栅极需要被拉到低于负载。那就需要另一个路径:在Q1栅极和地之间加一个电阻R7,同时R1接负载。USB存在时,Q3导通,栅极被拉到5V,R7上有电流从5V到地,但栅极电压由Q3主导,仍是5V。USB消失时,Q3截止,栅极通过R7拉到地,Vgs=-3.0V,导通。但R7在USB存在时会持续耗电:5V/100kΩ=50μA,可以接受。

实际上更简洁的方案是用一个N沟道小MOS代替Q3,栅极接USB分压,源极接地,漏极接Q1栅极。USB存在时,N沟道MOS导通,Q1栅极被拉到地,Vgs=-5V,Q1导通?又反了。

我绕了一圈,其实最经典的电路是这样的:Q1(电池侧P沟道MOS)源极接电池,漏极接负载,栅极通过一个电阻接USB 5V,同时栅极通过另一个电阻接一个NPN三极管的集电极,三极管发射极接地,基极接USB分压。USB存在时,三极管导通,栅极被拉到地,Vgs=-Vbat,Q1导通,电池供电?不对,我们想要USB存在时电池关断。

好吧,我承认这个逻辑我一开始也绕了很久。正确的逻辑是:USB存在时,电池侧MOS必须关断。所以USB存在时,Q1栅极应该等于源极电压(电池电压),Vgs=0。USB消失时,Q1栅极应该低于源极,Vgs=-Vbat。

实现:Q1源极接电池,漏极接负载。栅极通过R1接电池(上拉),同时栅极接一个NPN三极管Q3的集电极,Q3发射极接电池,基极接USB分压。USB存在时,Q3导通,集电极≈发射极=电池电压,栅极=电池电压,Vgs=0,Q1关断。USB消失时,Q3截止,栅极通过R1接电池,还是电池电压,Vgs=0,Q1还是关断!因为R1上拉到了电池。

所以R1不能接电池,要接一个能让栅极低于源极的参考。如果R1接负载,USB消失时负载电压由体二极管提供约3.0V,栅极=3.0V,源极=电池3.7V,Vgs=-0.7V,Q1微导通,体二极管继续供电,负载电压升高,栅极也升高,最终稳定在某个点,可能不够。

正确的做法:栅极通过一个电阻R1接负载,同时通过一个电阻R2接地。USB存在时,Q3导通,栅极被拉到电池电压,Vgs=0,关断。USB消失时,Q3截止,栅极通过R1和R2分压,R1接负载(3.0V),R2接地,栅极电压=3.0V×R2/(R1+R2)。如果R1=100k,R2=100k,栅极=1.5V,源极=3.7V,Vgs=-2.2V,Q1导通。导通后负载电压升高到接近电池电压,栅极也升高,但R2接地持续拉低,最终稳定在Vgs足够导通的状态。这个电路是可行的,但R1和R2在USB存在时会从电池到地耗电:3.7V/(200k)=18.5μA,可以接受。

不过更常见的做法是用一个N沟道MOS管代替Q3和分压网络,利用其阈值特性实现更干净的切换。具体电路我就不再绕了,核心思想就是:用USB电压控制一个开关器件,该开关器件控制电池侧P沟道MOS的栅极,使其在USB存在时等于源极电压,USB消失时低于源极电压。具体实现可以用三极管、小MOS、甚至专用比较器,只要满足逻辑即可。

4.2 PCB布局的注意事项

原理图对了,PCB画错照样出问题。几个关键点:

大电流路径要短粗。电池正极到Q1漏极、Q1源极到负载、USB 5V到Q2源极、Q2漏极到负载,这些走线要尽量短,线宽至少1mm(1oz铜厚下约1A/mm,2A需要2mm以上)。我一般用铺铜代替走线,减少阻抗。

栅极驱动走线要远离大电流路径。栅极是高阻抗节点,容易受干扰。如果和大电流走线平行,开关瞬间的dv/dt会通过寄生电容耦合到栅极,导致MOS管误导通或振荡。我吃过这个亏:一块板子上栅极走线和电池走线平行了5mm,结果USB插拔时MOS管偶尔直通,电池和USB同时供电,三极管烧了。后来把栅极走线绕开,问题消失。

体二极管的散热。虽然正常工作时体二极管不导通,但切换瞬间可能有短暂导通,产生热量。Q1和Q2的焊盘要足够大,最好打过孔到背面铺铜散热。

输入输出电容的位置。C1(10μF)要尽量靠近负载,减少切换瞬间的电压跌落。如果负载电流突变大,可以再加一个100μF的电解电容。

4.3 实测波形与切换时间

我用示波器抓过切换波形。USB 5V拔出瞬间,负载电压从5V跌落到电池电压3.7V,跌落时间约200μs,最大跌落幅度约0.3V(从5V跌到4.7V再回升到3.7V?不对,USB拔出后负载应该由电池供电,电压应该稳定在3.7V左右。实测是:USB拔出后,负载电压先跌到3.0V(体二极管压降),然后Q1导通,电压回升到3.6V(Q1导通压降约0.1V)。整个过程约500μs,MCU没有复位。

如果负载对电压跌落敏感,可以在负载侧加一个大电容,比如220μF,把跌落时间拉长到毫秒级,MCU的BOR(欠压复位)阈值设低一点就能扛过去。

5. 常见问题与排查技巧实录

5.1 电池侧MOS管发热严重

现象:USB不插,电池供电时,Q1发热明显,负载电流1A时温度超过60℃。

排查:先测Q1的Vgs。如果Vgs只有-1V左右,说明MOS管没有完全导通,工作在线性区,Rds(on)远大于标称值。原因通常是栅极下拉电阻太大,或者Q3漏电流太大。把R1从1MΩ换成100kΩ,Vgs拉到-3V以上,发热消失。

另一个原因:选错了MOS管型号。有些P沟道MOS的Vgs(th)是-2V,意味着要-4V以上才完全导通。电池3.7V时Vgs只有-3.7V,不够。换Vgs(th)在-1V以内的型号。

5.2 USB插入时电池仍在放电

现象:USB插着,电池电量还在下降。

排查:测Q1的栅极电压。如果栅极电压低于电池电压超过0.5V,说明Q1没有完全关断。原因可能是Q3没有完全导通,或者Q3的集电极-发射极饱和压降太大。换一个饱和压降更小的三极管,或者改用小MOS管。

另一个可能:体二极管倒灌。如果Q1的源漏接反了,体二极管会让USB电流倒灌进电池。检查Q1的源极是否接负载、漏极是否接电池。如果是反的,调换过来。

5.3 切换瞬间MCU复位

现象:USB拔出瞬间,MCU复位重启。

排查:用示波器抓负载电压波形,看跌落幅度和持续时间。如果跌落到MCU的BOR阈值以下超过几微秒,就会复位。解决办法:加大负载电容,从10μF加到100μF以上;或者降低MCU的BOR阈值(如果支持);或者在软件里加掉电检测,提前保存数据。

进阶技巧:在Q1的栅极和源极之间加一个10nF的电容,可以加速Q1的导通,减少切换时间。但电容太大会导致Q1关断变慢,USB插入时电池关断不及时,可能短暂倒灌。10nF是个折中值。

5.4 静态功耗偏高

现象:电池模式下,设备关机后电池仍然很快耗尽。

排查:测电池正极到地的电流。如果超过100μA,检查分压网络和下拉电阻。R1、R2、R3这些电阻在电池模式下会持续耗电。比如R1=100kΩ接在电池和地之间,耗电3.7V/100k=37μA。如果有多路分压,加起来可能几百微安。优化方法:增大电阻值到1MΩ,或者用MOS管开关在关机时切断分压网络。

注意:增大电阻会降低切换速度,因为栅极电容充电变慢。1MΩ配10nF,时间常数10ms,太慢了。所以要在速度和功耗之间权衡。我的做法是:正常工作时用100kΩ,关机时用一个小MOS管把分压网络断开。

5.5 常见问题速查表

问题可能原因解决方法
Q1发热Vgs不足,未完全导通减小栅极下拉电阻,换低Vgs(th)型号
电池倒灌源漏接反,体二极管导通调换Q1源漏
切换复位负载电容不足加大电容到100μF以上
静态功耗高分压电阻耗电增大电阻或加开关切断
USB插入电池仍放电Q3未完全导通换低饱和压降三极管或小MOS
切换振荡栅极走线受干扰远离大电流走线,加RC滤波

6. 进阶优化与扩展思路

6.1 加入电池充电管理

这套电路只解决了供电切换,没有解决充电。如果要给电池充电,可以在USB 5V和电池之间加一个充电IC,比如TP4056(线性)或IP2312(开关型)。注意充电IC的输入要从USB 5V取,不要从负载侧取,否则电池侧MOS关断时充电IC没输入。

充电和供电切换的时序要处理好:USB插入时,先让充电IC开始充电,同时电池侧MOS关断,负载由USB供电。USB拔出时,充电停止,电池侧MOS导通。这个时序靠硬件自然实现,不需要软件干预。

6.2 低功耗场景的优化

对于电池供电的端侧AI视觉模块这类超低功耗设备,静态功耗要求可能到微安级。这时候分压网络的耗电就不能忽略了。我的做法是用一个N沟道MOS管串联在分压网络的下臂,USB存在时导通,USB消失时关断,彻底切断分压网络的耗电。这样电池模式下的静态功耗可以降到1μA以下。

具体电路:分压网络的下臂电阻不直接接地,而是接一个N沟道MOS的漏极,源极接地,栅极接USB 5V。USB存在时,N沟道MOS导通,分压网络工作;USB消失时,N沟道MOS关断,分压网络断开。这个N沟道MOS的栅极阈值要低,确保USB 5V能完全导通。

6.3 多电源输入的扩展

如果设备有多个电源输入,比如USB、DC插座、电池,可以用同样的思路扩展。每个电源路径用一个P沟道MOS控制,优先级通过栅极逻辑实现。比如USB优先于DC,DC优先于电池。逻辑会复杂一些,但核心思想不变:高优先级电源存在时,关断低优先级电源的MOS管。

我做过一个三电源切换的板子,用了三个P沟道MOS和几个三极管,原理图大概20个元件,成本不到2块钱,比用专用芯片便宜多了。关键是逻辑要理清楚,画个真值表,把每种电源组合下的MOS管状态列出来,然后设计栅极逻辑。

6.4 与BMS的配合

如果电池包自带BMS(电池管理系统),要注意BMS的充放电MOS可能会和我们的切换MOS冲突。BMS的放电MOS在过放时会关断,此时我们的电池侧MOS即使导通,电池也没有输出。这会导致负载掉电。解决办法:在BMS输出和我们的MOS之间加一个大电容,或者让MCU检测BMS状态,提前保存数据。

另外,BMS的充电MOS在过充时会关断,如果我们的电路在USB存在时试图给电池充电,而BMS已经关断,充电电流会无处可去,可能导致电压异常。所以充电IC要选带电池检测的,或者加一个泄放路径。

7. 个人实操心得

这套电路我前后改了五版,踩过的坑比上面写的还多。最大的教训是:不要相信仿真,一定要打板实测。仿真里MOS管是理想开关,实际有寄生电容、体二极管、温度漂移。我第一版仿真完美,打板后切换时振荡,查了一周才发现是栅极走线太长,耦合了开关噪声。

第二个教训是:选型要留余量,但不要过度设计。我一开始选了Vds=-30V、Rds(on)=5mΩ的MOS管,价格是普通型号的三倍,结果发现根本没必要。12V的Vds、20mΩ的Rds(on)完全够用,成本降了一半。

第三个心得是:测试要覆盖极端情况。常温下没问题不代表高温没问题,电池满电4.2V和空电3.0V的切换表现也不一样。我一般会在高低温箱里跑一遍,-20℃到60℃各测一次切换波形,确保全温度范围稳定。

最后分享一个小技巧:如果负载对切换瞬间的电压跌落特别敏感,可以在负载侧加一个理想二极管电路(用MOS管模拟二极管),把跌落控制在毫伏级。不过那又是另一个话题了,下次再聊。

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

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

立即咨询