开关电源环路分析:从传递函数到相位裕度,解决振荡问题
先说一次让我印象特别深的调试经历。去年我调一块反激辅助电源输入是前级母线电压输出目标12V/300mA。空载和轻载都正常可负载一加到接近300mA输出电压就开始出现十几千赫的低频振荡变压器跟着吱吱叫。示波器上能看到开关管驱动脉冲被一条低频包络压着一喘一喘占空比忽大忽小。我当时第一反应是开关尖峰问题RCD吸收、驱动电阻、栅极电阻换了一轮MOS管的Vds尖峰确实压下去了一些可输出振荡纹丝不动。后来一位做电源多年的老工程师过来看了一眼波形问了我一句“你算过这个环路的相位裕度没有”我当场愣住。那之后我才真正开始认真学开关电源的环路分析也才有了这个“环路学习笔记”系列。这篇是第一篇先把最核心的问题说清楚为啥非要知道传递函数不可1. 一次上电震荡暴露了我对环路的一无所知1.1 现象负载刚加上去输出就开始“喘”那块反激电源的开关频率是100kHz左右正常工况下输出纹波只有十几毫伏。但当电子负载加到大半载时示波器上输出纹波突然从十几毫伏跳到了接近一伏而且不是单纯的高频杂讯是一个周期大约70到80微秒的正弦状包络折算过来就是13kHz上下。这个频率人耳刚好能听到变压器、输出电容都在跟着“唱歌”。更典型的特征是开关管的驱动脉冲本身还是100kHz但脉冲宽度被一个低频信号调制一宽一窄交替就像人在喘气。这种波形一出来基本就不用再怀疑其他了——这不是单纯的纹波超标这是环路不稳定最经典的时域表现。这里要和“打嗝”区分一下。打嗝通常是保护电路动作后不断重启输出会掉到零再爬起来间歇性明显。而环路振荡是持续性的输出始终存在但被低频包络调制得很难看。如果你看到的是连续“喘”优先怀疑环路如果是“嘟—停—嘟—停”再去查过流保护、短路保护和VCC欠压重启。1.2 一轮“猜谜式”调试为什么全部失效我当时犯了一个很典型的错误不看环路直接猜元件。前前后后试过四个方向结果全都没用。第一换RCD吸收电路、换输出二极管。RCD吸收是用来限制MOS关断尖峰的它管的是开关瞬态和环路在每个频率下的增益、相位没什么交集。我当时把RCD的电容电阻换了几套Vds尖峰确实从十几伏降到了几个伏但低频振荡一点没变。第二加大输出电容。我并联了额外的电解电容振荡频率确实变了从13kHz挪到了大约8kHz但振荡本身并没有消失。原因也很好理解加大电容改变了LC双极点的位置环路在穿越频率附近的相位关系依然不对问题只是换了个频率继续存在。第三调驱动电阻给栅极加磁珠。这些手段影响的是开关速度、EMI和开关损耗对控制环路的幅频/相频特性几乎没有影响。第四改反馈分压电阻、换光耦。这些操作会改变静态工作点但环路稳定性取决于整个开环增益和相位曲线单纯调分压比解决不了相位裕度不足的问题。连试两天之后我才明白这种“猜谜式”调试的本质是我根本不知道环路在哪个频率增益是多少、相位滞后多少也不知道补偿网络在其中扮演什么角色。没有数学模型所有操作都是盲调。老工程师那句“相位裕度”算是彻底把我问住了。2. 传递函数到底在描述什么电源系统的“频率档案”2.1 从“黑箱”视角看功率级传递函数是控制理论里的基础概念。对一个线性时不变系统来说传递函数描述的是输入信号经过这个系统之后输出会变成什么样。它把系统的行为完全“归档”了所以你可以把电源功率级看成一个黑箱——输入端是占空比d输出端是电压Vout黑箱内部是开关管、变压器、电感、电容这些器件。不过这里有个门槛功率级明明是强非线性系统开关管一会儿通一会儿断怎么用传递函数描述答案是“小信号线性化”。在一个固定的静态工作点附近只加一个很小的扰动然后研究这个扰动如何传播此时系统的行为可以用线性模型近似。这就是我们在电源书里经常看到的小信号传递函数。开关电源环路分析里最常打交道的是“控制到输出”的传递函数一般写作Gvd(s)。它的物理含义是占空比变化一点点输出电压会跟着变化多少、而且这个变化随频率怎么走。Buck电路在CCM连续导通模式下忽略寄生参数Gvd的典型形式长这样Gvd(s) Vin / [1 s/(Q·ω0) (s/ω0)²]其中ω0 1/√(LC)。这个式子说明一件事功率级自身在LC谐振频率附近有一个双极点增益会在这里摔一大截相位也会骤降。反激电源在CCM下更麻烦Gvd里还会多出一个右半平面零点这个后面细说。2.2 幅频和相频少了哪个都说不清“稳定”任何信号经过线性系统无外乎两个变化幅度被放大或衰减、相位被推后或提前。把“放大多少倍”随频率画出来是幅频特性把“相位偏了多少度”随频率画出来是相频特性。两个图叠在一起就是Bode图。判断稳定性时这两个表缺一不可。举个极端例子如果某个频率上增益只有0.1倍那就算相位糟糕到极点信号绕一圈回来也会被衰减掉起不了振荡反过来如果某个频率增益是10倍但相位根本没到临界条件信号绕回来依然是抵消扰动那系统也稳定。只有“增益足够大”和“相位足够差”两个条件同时成立自激振荡才会发生。所以你会发现单看直流增益、单看纹波大小、单看负载调整率都没办法回答“这电源会不会振荡”。必须同时知道整个频率范围内的增益曲线和相位曲线这就是传递函数存在的意义。2.3 油门、音响和方向盘三个生活化类比说起“相位滞后”这个概念做技术的人第一次接触往往都会有点懵我分享几个压箱底的类比。第一个是汽车油门。你踩下油门车速不会瞬间变化发动机响应、变速箱响应都需要时间这就是一个相位滞后。如果这个系统被调得很激进油门反应幅度被放大得非常大你轻点一下油门车速猛冲再松开车速又猛跌。驾驶员和车之间成了正反馈车就会“闯动”。电源环路也一样滞后大、增益高就振荡。第二个是麦克风啸叫。舞台音响里麦克风拾到音箱出来的声音放大后再次从音箱放出来又被麦克风拾到。每一圈信号都有增益、有相位滞后当某个频率满足“绕一圈增益≥1且相位满足条件”时刺耳的啸叫就起来了。开关电源的环路振荡本质上是电路里的“啸叫”只不过传声介质变成了电感、电容和放大器。第三个是高速上修正方向盘。车速越快车辆对方向盘输入的响应越敏感同时转向系统也有滞后。如果你发现偏了再猛打方向等车头转过来又偏反向反复画龙那就是“修正增益”和“修正滞后”不匹配。环路的补偿设计本质就是在解决同样的问题。3. 负反馈变正反馈振荡的本质与稳定性的数学判据3.1 一个闭环电源回路里到底有什么要把“环路”这词讲清楚先看一个完整反馈回路里有哪些环节。以最常见的反激或者Buck反馈为例信号链路大概是输出电压采样分压电阻→ 误差放大器带补偿网络→ PWM比较器 → 驱动级 → 功率级开关管变压器/电感输出滤波电容→ 又回到输出电压。整条链路里每一个环节都会对信号产生影响有的环节提供增益有的环节引入滞后有的环节限制带宽。误差放大器负责把输出电压和基准的偏差放大PWM比较器把模拟误差信号变成占空比功率级再把占空比变化转换为输出电压变化。闭环的目的很简单当输入电压或者负载变化导致输出偏离目标时反馈回路自动调整占空比把输出拉回来。要实现这一点整个环路绕一圈之后的“净效果”必须是负反馈——输出偏高就要压低占空比把输出降回来。这个绕一圈的总增益和总相移就是所谓的环路增益T(s)。环路增益是判断稳定性的核心对象通常我们说的相位裕度、增益裕度都是在T(s)的Bode图上读出来的。3.2 负反馈什么时候变成正反馈负反馈变成正反馈这是整个环路理论里最关键的一跳。一个真实的反馈环路里信号从输出端采样、经过误差放大器、PWM、驱动、功率级再回到输出端这个过程不是瞬间完成的。每一个环节都有延迟频率越高延迟换算成的相位滞后就越大。频率低的时候信号绕一圈几乎没怎么滞后负反馈稳稳当当。随着频率升高相位滞后一点点累积当某个频率下累积到180°时事情就变了原本用来“抵消扰动”的信号变成了“加强扰动”的信号。打个比方你调整方向盘想把车拉回车道中央如果响应延迟太久等你打方向时车已经偏到另一边了这一把修正不但没拉回来反而把车推向更偏的方向。这就是负反馈变正反馈。单有相位滞后还不够还得看增益。信号绕一圈如果被衰减得很厉害比如只剩0.01倍那即使相位条件满足了振幅也起不来。所以振荡的两个条件缺一不可某频率下环路增益 ≥ 1也就是0dB以上同时相位滞后达到-180°。这就是巴克豪森判据的通俗表述。3.3 稳态正常不代表稳定动态一拉就现形很多新手有个误区电源上电能稳定输出12V也不啸叫就认为环路没问题。这个判断并不可靠。真实系统里工作点会漂移。负载电流变化、输入电压变化、温度变化都会改变功率级的特性进而改变环路增益和相位。可能你在某个输入电压、某个负载下电源是稳定的但换到重载、低温相位裕度掉到临界值以下振荡立刻就出来了。这就是为什么很多电源在实验室里常温常载测得好好的一到客户现场就啸叫、就振荡。更隐蔽的情况是“边界稳定”——稳态波形看不出毛病但负载一阶跃输出回摆了好几圈才稳住振铃明显。这种动态响应差的本质也是相位裕度不足。稳定不是一个只有“稳定/不稳定”二选一的开关而是一个连续变量相位裕度45°算稳定30°也算稳定但动态性能差很多。工程师要追求的不是“能稳住”而是“留够裕量”。4. 会看伯德图之后调试思路完全不一样4.1 相位裕度和增益裕度怎么读拿到一张环路的Bode图核心就看两个点。第一看增益曲线穿越0dB的那个频率这叫穿越频率工程上经常写作fc。在fc处读出相位曲线对应多少度相位值距离-180°还有多少度这个差值就是相位裕度PM。第二看相位曲线到达-180°的地方对应的增益曲线还有多少dB低于0dB线这个距离就是增益裕度GM。工程上一般怎么定目标我自己的习惯是PM尽量做到45°以上最好在50°到70°之间GM至少6dB稳妥的话12dB以上。不同应用要求不同但这两个数字可以作为通用锚点。相位裕度和实际表现之间有很直接的对应关系我做了一个经验对照表相位裕度典型现象工程建议小于20°轻载或重载下直接自激振荡动态阶跃严重振铃必须重新设计补偿20°到35°稳态勉强稳住负载突变时回摆多、恢复慢需要优化补偿35°到50°大部分场景可用但裕量偏紧温度和负载漂移后可能恶化可接受不推荐50°到70°动态响应干净利落几乎无回摆推荐目标区间这个表不是精确数学结论但用来做初步判断非常实用。我后来调环路第一件事就是把PM/GM读出来再决定要不要动补偿。4.2 同样拓扑、不同补偿动态负载差多少我在实际项目里做过一组对照用的是同一块反激板子只改反馈补偿网络参数。第一组补偿零点放在大约1kHz附近仿真得到穿越频率约6kHzPM只有30°出头第二组把补偿零点移到4kHz附近穿越频率提到8kHzPM做到了52°左右。用电子负载做10%到90%的脉冲负载示波器直接看输出响应。第一组的下冲约250mV输出回摆了两三个周期才稳住整个过程大约400多微秒。第二组下冲只有160mV几乎看不到回摆恢复时间200微秒左右。同一个功率级、同一颗电感、同一颗输出电容只改了两个小电阻一个小电容动态响应差距就这么大。这种差距靠“听声音、摸温度”根本看不出门道Bode图上一眼就能定位。4.3 为什么“加大输出电容”治不好振荡很多工程师遇到输出振荡第一反应就是堆输出电容。实测下来这个做法经常不解决问题有时候还会让瞬态响应变差。原因是这样的输出电容加大会把LC谐振点压低整个功率级的幅度曲线在更低频率就开始往下掉你要维持相位裕度只能把补偿网络的零点也往低频挪环路带宽就被迫降低。带宽低了系统对负载变化的响应就慢动态下冲反而更大。这还不算完电解电容有等效串联电阻ESRESR会在某个频率形成一个零点这个零点在补偿设计里可以用来提升相位。但ESR会随温度变化、随老化漂移低温下ESR变大零点位置就跑掉了相位裕度也跟着变。我之前那次的经历就是活例子加了电容振荡从13kHz挪到8kHz根本没有消除只是换了个地方继续存在。正确做法是先知道这颗电容在当前温度、当前频率下的实际ESR和容量再决定它在环路里扮演什么角色。指望靠电容“吸收”振荡是把结果当原因在处理。5. 知道传递函数之后环路的下一步怎么走5.1 从Gvd到补偿网络设计一旦有了功率级传递函数后面的事就顺理成章了。补偿网络本质上是在环路里串入一个校正环节Gc(s)用它的零点和极点去修正整个环路的增益和相位。设计目标通常是这样让环路增益的穿越频率落在合适位置一般取开关频率的1/10到1/5同时保证穿越频率处的相位裕度达标。补偿网络有三种常见形态Type I就是纯积分器压低高频增益但相位一直是-90°Type II在积分基础上加一个零点和一个极点可以对冲功率级双极点带来的相位跌落Type III更进一步提供两个零点两个极点适合用来撑高相位。选哪种要看功率级和输出电容的特性。电流模式控制的电源功率级被内环拉成了一阶系统Type II往往就够用电压模式控制的电源LC双极点直接出现在外环里很多时候要上Type III。具体选型规则我打算放到系列下一篇专门写补偿网络设计时展开。这里尤其要提一下反激电源在CCM下的右半平面零点问题。这个零点和普通零点不一样它不提供相位抬升反而让相位继续下降直观理解就是占空比突然加大原边储能时间变长副边向负载传递能量的时间变短在若干个开关周期内输出电压可能反而先掉一下再上升。这个“先反着来”的特性限制了环路带宽穿越频率必须取得显著低于右半平面零点频率通常取它的1/3以下所以重载反激环路经常很难调。5.2 三条路拿到传递函数建模、仿真、实测获取传递函数有三条主流路径我自己是三条都用。第一条是解析建模。状态空间平均法、平均开关模型从电路方程一步步推导出Gvd的表达式。这条路能让你看清每个参数电感、电容、负载电阻到底影响什么但推导繁琐寄生参数多了以后手算很难受。适合学理论阶段打基础。第二条是仿真扫频。PSIM、SIMPLIS这类专门的电源仿真工具可以直接做交流扫描直接在软件里得到环路Bode图非常高效。SIMPLIS对周期性开关电路的建模很友好很多芯片厂商都提供模型设计迭代阶段我基本都靠它。LTspice也可以但需要自己搭平均模型门槛稍高一点。第三条是实测频响。用频响分析仪比如Bode 100、Venable这类设备在真实板子上扫环路得到的是最接近实际的结果。设备门槛比较高中小公司不一定配但一旦有条件这个测量值会极大提升你对板子的信心。三种方式各有适合的场景我整理成表格方式优点缺点适用阶段解析建模物理含义清晰掌握共性规律推导繁琐寄生参数难全学习理论、初步估算仿真扫频快可复用迭代方便依赖芯片模型和寄生参数准确度设计迭代实测频响最接近真实工况可信度高需要频响分析仪设备贵验证设计、出厂评估数字电源方向再多说一句模拟域设计的补偿网络Gc(s)在数字实现里要转成离散域的Gc(z)比如用双线性变换做离散化然后变成DSP或者单片机里的差分方程。而且数字控制多了采样延迟和计算延迟等于在环路里额外加了一份相位滞后所以数字电源的穿越频率通常比模拟电源取得更低。热搜词里那句“数字电源传递函数的离散化”本质上就是这个过程。5.3 写给初学者的学习顺序与书单最后聊一下学习路径。如果让我给刚入门的工程师排一个顺序大概是这样的先拿一个Buck电路手动推一遍CCM模式的稳态增益关系搞清楚占空比怎么算理解状态空间平均和平均开关模型的基本思路尝试推导Buck的Gvd表达式补Bode图知识把极点、零点对幅频和相频的影响彻底吃透用PSIM或者SIMPLIS搭一个实际Buck电路用交流扫描得到Gvd曲线和公式计算结果对比验证自己对建模的理解学Type II、Type III补偿网络设定PM/GM目标仿真验证补偿效果有条件的上频响分析仪实测把“算-仿-测”三条路闭环跑一遍。书这块圈里公认的可以看两本。一本是《开关电源设计第三版》内容覆盖面广适合先建立整体认知。另一本是《开关电源控制环路设计》Basso写的讲建模、补偿、环路测量都系统适合对着仿真边做边读。这两本我都是当工具书用遇到问题翻相关章节比从头到尾啃效率高。最后说一点个人体会。我踩过那次坑之后现在习惯把每一版电源的环路Bode图打印出来PM和GM数值标在图上跟原理图夹在一起。每次调试先看这张纸再决定要不要动电路。这个习惯帮我避免过很多次无意义的换元件实验。如果你现在正处于那种“换了一圈电容电阻还是啸叫”的阶段我建议先停下来把传递函数和Bode图这关过了再回头看你手头那块板子很多问题会突然变得非常清楚。