开关电源的环路补偿调不好,十有八九是模型没建对。我见过太多工程师一上来就打开仿真软件扫频,结果相位裕度怎么调都不对,最后靠试凑电容电阻蒙一个能用的值交差。问题的根子往往不在补偿网络本身,而在于对开关变换器这个"非线性时变系统"的建模理解不到位。大信号模型和小信号模型,这两个词听起来像是教科书里的学术概念,但实际调试中分不清它们各自的适用边界,就会陷入"仿真明明稳定、实测一加载就振荡"的困境。这篇内容适合正在做电源环路设计、想搞清楚模型来龙去脉的硬件工程师,也适合刚接触开关变换器建模、被各种平均法和线性化绕晕的初学者。我会从为什么需要两套模型讲起,把状态空间平均法的推导逻辑、小信号线性化的操作细节、以及实际扫频验证时容易踩的坑,一条线串下来。
1. 为什么一个变换器需要两套模型
1.1 开关变换器的本质:周期时变非线性系统
Buck、Boost、Buck-Boost这些基本拓扑,开关管在每个周期内交替导通和关断,电路结构在两种甚至三种状态之间跳变。这意味着描述它的微分方程在时间上不连续——导通时是一个方程组,关断时是另一个方程组,切换瞬间还有状态变量的连续性约束。这种系统在数学上叫"分段线性时变系统",直接对它做拉普拉斯变换是没有意义的,因为拉普拉斯变换要求系统是线性时不变的。
那为什么我们平时又能用传递函数来分析环路?这就引出了建模的核心思路:用某种平均手段,把一个周期内的两种状态"揉"成一个连续的等效模型。但"揉"的方式不同,得到的模型适用场景就完全不同。大信号模型保留的是非线性的大范围行为,小信号模型则是在某个稳态工作点附近做线性化,只描述小扰动下的响应。两者不是替代关系,而是互补关系。
我刚开始学的时候有个误区,觉得小信号模型更"精确"所以更重要。后来做多了才发现,大信号模型决定了你的系统能不能启动、会不会在负载突变时崩溃,小信号模型只决定稳态附近的小扰动稳定性。一个电源如果大信号行为有问题,小信号环路调得再漂亮也没用。
1.2 大信号模型回答的是"能不能活下来"
大信号模型关注的是变换器在大的瞬态变化下的行为。比如启动瞬间,输出电压从零上升到额定值,这个过程中电感电流可能远超稳态值,占空比可能饱和到极限。再比如负载从满载突然切到空载,输出电压会冲高多少、多久能恢复。这些问题都是大信号问题,因为工作点发生了大范围移动,小信号线性化的前提——"工作点附近小扰动"——根本不成立。
实际工程中,大信号模型主要用来分析几个场景:启动浪涌电流、负载阶跃响应的大信号包络、输入电压大幅跳变时的稳定性、以及保护电路触发后的恢复过程。这些场景下,变换器可能进入非线性区域,比如占空比达到最大或最小限幅、电感电流进入断续模式、或者误差放大器输出饱和。小信号模型在这些区域完全失效。
1.3 小信号模型回答的是"稳不稳、快不快"
小信号模型是在一个确定的稳态工作点(比如额定输入电压、额定负载)附近,对系统施加一个小扰动,观察输出如何响应。这个"小"是相对的,通常要求扰动幅度远小于稳态量,使得非线性项可以用泰勒展开的一阶项近似。得到的是一个线性时不变系统,可以用传递函数、波特图、极点零点来分析。
环路补偿设计几乎完全依赖小信号模型。因为环路稳定性、相位裕度、穿越频率这些指标,本质上都是小信号概念。你扫频仪测出来的波特图,也是小信号结果——扫频信号的幅度通常只有稳态量的百分之几。所以如果你的小信号模型建得准,补偿网络设计就有据可依;建不准,就只能靠试凑。
1.4 两套模型的衔接点:稳态工作点
大信号模型和小信号模型之间的桥梁是稳态工作点。大信号模型在稳态时退化为一个直流工作点,这个工作点就是小信号线性化的展开点。换句话说,小信号模型是大信号模型在稳态点的一阶泰勒展开。这个关系很重要,因为它意味着:如果稳态工作点算错了,小信号模型一定错。
我见过一个案例,工程师用理想占空比公式D=Vout/Vin去算Buck的稳态点,但实际电路有二极管压降和MOS管导通电阻,真实占空比偏高。结果小信号模型预测的穿越频率和实测差了将近百分之二十,补偿网络怎么调都对不上。后来把导通损耗考虑进去重新算稳态点,模型立刻准了。这个坑很典型,后面还会展开讲。
2. 状态空间平均法:从开关纹波中提取连续模型
2.1 平均法的核心思想与适用前提
状态空间平均法的思路很直接:既然开关变换器在每个周期内交替处于不同状态,那我就把一个周期内的状态方程按时间加权平均,得到一个等效的连续状态方程。具体来说,如果开关管导通时间为dTs,关断时间为(1-d)Ts,那么平均后的状态方程就是两个状态方程的加权和,权重分别是d和(1-d)。
这个操作成立的前提有三个:第一,开关频率远高于变换器的自然频率(LC谐振频率)和环路带宽,这样在一个开关周期内,状态变量的变化可以忽略,平均才有意义;第二,状态变量在一个周期内的纹波远小于其平均值,这样用平均值代替瞬时值才不会引入太大误差;第三,开关频率远高于扰动信号的频率,这样占空比在一个周期内可以视为常数。
实际设计中,开关频率通常是环路穿越频率的十倍以上,LC谐振频率的五到十倍以上,所以前两个条件一般满足。第三个条件在负载瞬变时可能不成立,因为瞬变信号的频谱很宽,高频分量可能接近开关频率,这时候平均法就有误差了。这也是为什么大信号瞬态分析有时需要更精确的模型,比如考虑采样效应的离散时间模型。
2.2 以Buck为例推导平均状态方程
拿Buck变换器做例子,电感电流iL和电容电压vC作为状态变量。开关管导通时,电感两端电压是Vin-Vout,电容被电感充电;开关管关断时,电感通过续流二极管续流,两端电压是-Vout。两种状态的状态方程可以写成统一形式:
导通期间:
diL/dt = (Vin - vC) / L dvC/dt = (iL - vC/R) / C关断期间:
diL/dt = -vC / L dvC/dt = (iL - vC/R) / C按占空比d加权平均:
diL/dt = [d(Vin - vC) + (1-d)(-vC)] / L = (dVin - vC) / L dvC/dt = (iL - vC/R) / C注意电容方程在两种状态下相同,因为电容始终与负载并联。平均后的方程里,dVin这一项是非线性的——d和Vin都是变量,它们的乘积就是非线性项。这就是为什么平均模型仍然是大信号非线性模型,不能直接做拉普拉斯变换。
2.3 平均模型的非线性项从哪来
非线性项的来源是开关动作本身。开关管可以看作一个乘法器:它把输入电压Vin和占空比d相乘,得到平均输出电压dVin。这个乘法关系就是非线性的根源。类似地,Boost变换器中输入电流和占空比也有乘积关系,Buck-Boost同样如此。
除了占空比与电压电流的乘积,还有其他非线性源:二极管的正向压降随电流变化、MOS管的导通电阻随温度变化、电感磁芯的饱和特性、电容的电压系数等。但在基础建模中,通常先忽略这些二阶效应,只保留占空比乘积这个主要非线性项。等模型基本准了,再逐步加入损耗和寄生参数修正。
理解非线性项的来源很重要,因为小信号线性化就是围绕这些非线性项做文章。线性化的本质,就是把乘积项dVin在稳态点附近展开,保留一阶项,丢掉高阶项。展开的质量直接决定小信号模型的精度。
2.4 平均模型的仿真验证方法
建完平均模型后,怎么验证它是对的?最直接的方法是用仿真软件搭两个电路:一个是开关级电路(含实际开关管和二极管),一个是平均模型电路(用受控源实现平均方程)。给两者相同的输入和负载条件,比较输出电压和电感电流的波形。
在稳态下,两者应该几乎重合。在负载阶跃下,平均模型能捕捉到低频包络,但会丢失开关纹波和高频振荡。如果平均模型的低频响应和开关级电路对不上,说明平均方程推导有误,或者稳态点算错了。我习惯先用一个简单的电阻负载做稳态验证,确认直流工作点一致,再做负载阶跃验证动态响应。
注意:平均模型仿真时,受控源的实现要小心。占空比d应该由控制环路产生,而不是直接给一个常数。如果直接给常数d,那只是验证了开环稳态,没有验证闭环动态。正确的做法是把补偿网络也加进去,让平均模型和开关级电路在同一个闭环下比较。
3. 小信号线性化:在稳态点附近做一阶近似
3.1 线性化的数学操作:泰勒展开与一阶项保留
小信号线性化的标准操作是:把平均模型中的每个变量写成"稳态值+小扰动量"的形式,比如d=D+d̂,Vin=Vin_bar+v̂in,iL=IL+îL,vC=VC+v̂C。代入平均方程后,利用稳态关系消去直流项,然后忽略所有小扰动量的乘积项(因为它们远小于一阶项),剩下的就是线性化的小信号方程。
以Buck的电感方程为例,平均方程是diL/dt=(dVin-vC)/L。代入d=D+d̂,Vin=Vin_bar+v̂in,vC=VC+v̂C:
diL/dt = [(D+d̂)(Vin_bar+v̂in) - (VC+v̂C)] / L展开后:
diL/dt = [D·Vin_bar + D·v̂in + d̂·Vin_bar + d̂·v̂in - VC - v̂C] / L稳态时D·Vin_bar=VC,所以直流项抵消。d̂·v̂in是二阶小量,忽略。剩下:
dîL/dt = (D·v̂in + d̂·Vin_bar - v̂C) / L这就是线性化后的小信号方程。对它做拉普拉斯变换,就能得到传递函数。
3.2 稳态工作点的计算精度决定模型上限
线性化的展开点是稳态工作点,所以稳态点的精度直接决定小信号模型的精度。前面提到的导通损耗问题就是一个典型例子。理想Buck的稳态占空比是D=Vout/Vin,但实际电路中,电感有直流电阻DCR,MOS管有导通电阻Rds(on),二极管有正向压降Vf。考虑这些损耗后,稳态占空比会偏高。
具体修正方法是:在稳态时,电感两端平均电压为零,所以导通期间电感电压和关断期间电感电压的加权和为零。考虑MOS管导通电阻和电感DCR后,导通期间电感电压是Vin-IL·(Rds(on)+DCR)-Vout,关断期间是-Vf-IL·DCR-Vout。令加权和为零,解出D。这个计算不复杂,但很多工程师图省事直接用理想公式,结果模型精度打折扣。
我的经验是:如果输入输出电压差不大(比如12V转5V),理想公式和实际占空比差几个百分点,影响还可接受;但如果输入输出电压接近(比如5V转3.3V),理想公式的误差可能超过百分之十,小信号模型的穿越频率会明显偏移,这时候必须考虑损耗修正。
3.3 从线性化方程到传递函数的整理技巧
线性化后得到一组小信号状态方程,接下来要整理成传递函数。标准做法是对每个方程做拉普拉斯变换,把微分算子换成s,然后消去中间变量,得到输出对控制量(占空比)的传递函数Gvd(s),以及输出对输入电压的传递函数Gvg(s)。
以Buck为例,线性化后的方程组是:
s·L·îL = D·v̂in + d̂·Vin_bar - v̂C s·C·v̂C = îL - v̂C/R消去îL,令v̂in=0(求Gvd时输入扰动为零),得到:
Gvd(s) = v̂C/d̂ = Vin_bar / (1 + s·L/R + s²·LC)这就是Buck的经典二阶传递函数,直流增益是Vin_bar,双重极点在1/sqrt(LC)处。这个结果和教科书一致,说明推导没问题。
整理传递函数时有个技巧:先把方程写成矩阵形式,然后用克莱姆法则或者符号计算工具求解。手推容易出错,尤其是Boost和Buck-Boost的传递函数有右半平面零点,符号容易搞混。我一般用Python的sympy库做符号推导,验证手推结果。
3.4 右半平面零点:Boost和Buck-Boost的固有难题
Boost和Buck-Boost的小信号传递函数里有一个右半平面零点,这是它们和Buck的本质区别。右半平面零点带来的相位滞后随频率增加而增大,而且幅度增益也在增加,导致闭环带宽受限、相位裕度难调。这个零点的物理来源是:占空比增加时,Boost的输出电压瞬时反而下降(因为电感充电时间变长,向输出电容充电的时间变短),然后才慢慢上升。这个"先降后升"的反向响应就是右半平面零点的表现。
右半平面零点的频率近似为R(1-D)²/(2L)(Boost),和负载电阻、占空比、电感量有关。负载越轻(R越大),零点频率越高,相对好处理;负载越重,零点频率越低,越容易侵入环路带宽。设计Boost环路时,穿越频率通常要压在右半平面零点频率的五分之一以下,否则相位裕度不够。
我调过一个Boost电路,输入5V输出12V,负载电流从0.1A到1A变化。轻载时环路很稳,重载时振荡。后来一算,重载时右半平面零点频率降到了3kHz左右,而穿越频率设在了5kHz,正好撞上。把穿越频率降到1kHz以下,问题解决。这个教训是:Boost的环路带宽不能只看额定负载,要看最重负载下的右半平面零点频率。
4. 实际扫频验证:模型准不准,扫一把就知道
4.1 扫频仪接入方式与注入点选择
模型建完后,最终验证靠扫频。扫频仪的基本原理是在环路中注入一个小幅正弦扰动,测量扰动前后的幅度比和相位差,得到环路增益的波特图。注入点通常选在反馈分压电阻和误差放大器之间,或者误差放大器输出和PWM比较器之间。注入点要选在阻抗较低的一侧,这样注入信号不会被轻易衰减。
注入幅度要控制好:太小了信噪比不够,测量噪声大;太大了变换器进入非线性区,测量结果失真。一般注入幅度取输出电压的百分之一到百分之五,具体看环路增益。如果穿越频率处增益是0dB,注入幅度可以稍大;如果增益很高,注入幅度要小。我通常从百分之一开始试,看测量曲线的相干性,如果相干性差就加大幅度,如果曲线畸变就减小。
4.2 测量结果与模型预测的对比方法
扫频得到波特图后,和模型预测的波特图叠在一起对比。重点看三个指标:穿越频率、相位裕度、低频增益。如果三者都对得上,模型基本可信。如果穿越频率对不上,可能是稳态点算错或者电感电容值有偏差;如果相位裕度对不上,可能是寄生参数没考虑,或者右半平面零点位置估错;如果低频增益对不上,可能是反馈分压比或者误差放大器增益设错。
对比时要注意:模型预测的是开环传递函数,扫频测的是闭环下的环路增益,两者在数值上应该一致,但测量时要注意注入点和测量点的选择是否和模型定义一致。我见过有人把注入点选在输出端,测的是输出阻抗而不是环路增益,结果怎么都对不上。
4.3 常见偏差来源:寄生参数与测量误差
实测和模型对不上,最常见的原因是寄生参数。电感的直流电阻DCR、电容的等效串联电阻ESR、MOS管的导通电阻和输出电容、二极管的结电容,这些在基础模型里通常忽略,但在实际电路中会影响中高频段的幅频和相频特性。尤其是电容的ESR,它会在传递函数里引入一个左半平面零点,提升相位,如果模型里没考虑,实测相位会比预测的高。
另一个常见偏差来源是测量误差。扫频仪的注入变压器有带宽限制,高频段注入效率下降;探头的地线环路会引入电感,影响高频测量;示波器的采样率和分辨率也会影响相位测量精度。我一般会在扫频前先用示波器看一下开关波形,确认电路工作在预期模式(CCM还是DCM),因为DCM下小信号模型完全不同,如果电路实际工作在DCM而模型按CCM建,那肯定对不上。
4.4 从扫频结果反推模型修正
如果实测和模型有偏差,不要急着改补偿网络,先反推模型哪里不对。比如实测穿越频率比预测低,可能是电感实际值比标称大,或者电容实际值比标称小。用LCR表测一下实际电感和电容,代回模型重新算,往往就对上了。如果实测相位裕度比预测低,可能是右半平面零点比预测的低,检查一下负载是否比预期重,或者电感是否偏大。
反推修正的过程其实就是模型迭代。我通常做两到三轮:第一轮用标称值建模型,扫频对比;第二轮用实测LCR值修正模型,再对比;第三轮加入ESR和导通电阻等寄生参数,再对比。三轮下来,模型和实测的偏差通常能控制在百分之十以内,这时候补偿网络的设计就有把握了。
5. 建模过程中的几个典型坑与应对
5.1 把平均模型当小信号模型直接用
最常见的坑是把状态空间平均方程直接拿来做环路分析。平均方程里含有d·Vin这样的乘积项,是非线性的,直接做拉普拉斯变换得到的"传递函数"没有物理意义。必须先在稳态点线性化,得到小信号方程,才能求传递函数。我见过有人在仿真软件里用平均模型跑AC分析,结果软件自动做了线性化,他以为平均模型本身就是线性的,换到另一个工作点就懵了。
区分方法很简单:平均模型是时域非线性方程,小信号模型是频域线性传递函数。平均模型用来做时域仿真(启动、负载阶跃),小信号模型用来做频域分析(波特图、极点零点)。两者不能混用。
5.2 忽略DCM模式导致模型完全失效
电感电流断续模式(DCM)下,变换器在一个开关周期内有三种状态:电感充电、电感放电、电感电流为零。平均方程的形式和CCM完全不同,小信号传递函数也完全不同。DCM下Buck的传递函数从二阶降为一阶,相位裕度特性好很多,但直流增益和穿越频率也变了。
判断CCM还是DCM的临界条件是电感电流纹波是否大于两倍平均电流。如果负载很轻,电感电流可能进入DCM。设计时如果按CCM建模型,但实际轻载下进入DCM,环路特性会突变,可能振荡。应对方法是:要么保证最小负载电流大于临界电流,要么在模型里同时考虑两种模式,或者用强制CCM的同步整流拓扑。
5.3 误差放大器饱和与占空比限幅的非线性
小信号模型假设系统工作在线性区,但实际电路中误差放大器输出有上下限,PWM比较器的占空比也有最大最小值限制。当负载突变很大时,误差放大器可能饱和,占空比达到限幅值,这时候小信号模型完全失效,必须用大信号模型分析。
启动过程中这个问题尤其突出。启动时输出电压为零,反馈电压远低于基准,误差放大器输出饱和到高限,占空比达到最大。这时候变换器以最大功率向输出电容充电,电感电流可能远超稳态值。如果电感饱和电流不够,就会炸管。大信号模型可以预测启动浪涌电流的峰值,帮助选电感。
5.4 采样效应与高频段的模型失真
状态空间平均法假设开关频率远高于扰动频率,但在穿越频率接近开关频率的十分之一时,采样效应开始显现。开关变换器本质上是一个采样系统,占空比在每个周期开始时被采样一次,这引入了一个等效的采样保持效应,表现为相位滞后。平均模型没有考虑这个效应,所以高频段相位预测偏乐观。
修正方法是在传递函数里加一个采样保持环节,或者用离散时间模型。工程上常用的近似是在环路里加一个极点,频率设在开关频率的一半处,模拟采样效应。如果穿越频率低于开关频率的十分之一,这个修正可以忽略;如果接近五分之一,就必须考虑。
6. 从模型到补偿网络设计的落地路径
6.1 根据小信号模型确定补偿类型
拿到小信号传递函数后,先看它的极零点分布。Buck的Gvd是二阶的,有两个共轭极点,低频段增益平坦,高频段以负四十分贝每十倍频下降。如果两个极点的Q值很高,在谐振频率处会有增益尖峰,相位急剧下降。补偿网络通常用Type III(三个极点两个零点),在谐振频率附近放两个零点提升相位,在开关频率一半处放一个极点衰减高频噪声。
Boost和Buck-Boost因为有右半平面零点,补偿更难。右半平面零点不能像左半平面零点那样用极点去抵消,因为它的相位是滞后的。只能把穿越频率压低到右半平面零点频率的五分之一以下,然后用Type II或Type III补偿。如果右半平面零点频率太低,可能需要降低电感量来提高它,或者改用其他拓扑。
6.2 穿越频率与相位裕度的工程取值
穿越频率的选取是个折中:取高了动态响应快,但相位裕度难保证,且容易受采样效应影响;取低了动态响应慢,负载阶跃时恢复时间长。工程上一般取开关频率的十分之一到二十分之一,同时要低于右半平面零点频率的五分之一(如果有的话),还要低于LC谐振频率的三到五倍。
相位裕度一般要求四十五度以上,最好六十度左右。四十五度对应约百分之十六的超调,六十度对应约百分之八的超调。如果相位裕度只有三十度,阶跃响应会有明显振荡,甚至不稳定。我通常把目标定在五十到六十度之间,留一些余量给寄生参数和温度变化。
6.3 仿真验证与实测迭代的闭环
补偿网络设计完后,先在仿真里验证。用平均模型跑闭环AC分析,看波特图是否满足穿越频率和相位裕度要求。然后用开关级电路跑负载阶跃,看时域响应是否和频域预测一致。仿真通过后,再上实测扫频。
实测扫频时,先测开环(断开反馈,固定占空比),验证功率级传递函数Gvd是否和模型一致。然后接上补偿网络,测闭环环路增益。如果开环对得上但闭环对不上,问题在补偿网络;如果开环就对不上,问题在功率级模型或稳态点。这个分步排查的思路能快速定位问题。
6.4 温度与器件容差对模型的影响
最后别忘了温度和器件容差。电感的磁芯材料随温度变化,电感量可能漂移百分之十到二十;电容的容值随温度和直流偏压变化,X5R或X7R电容在额定电压下容值可能下降一半;MOS管的导通电阻随温度上升而增大,影响稳态占空比。这些变化都会让实际工作点偏离模型预测。
工程上的应对是留设计余量:穿越频率不要贴着上限设,相位裕度不要贴着下限设,电感电容选温度系数好的型号,MOS管选导通电阻余量大的。如果产品工作温度范围宽,最好在高温和低温下各扫一次频,确认环路在全温度范围内都稳定。我做过一个工业级电源,常温下相位裕度五十五度,高温八十五度时降到四十度,刚好卡在边缘,后来把补偿网络的零点频率调低了一些才解决。
建模这件事,说到底是为了让补偿设计有据可依,而不是靠试凑。大信号模型保底,确保系统能启动、能扛住大负载突变;小信号模型调优,把环路带宽和相位裕度做到位。两者配合,再加上扫频验证的闭环迭代,基本就能把开关变换器的稳定性问题管住。我在实际项目里的体会是,花在建模上的时间,最后都会从调试返工里省回来。