开关电源环路稳定性仿真:Cadence PSS+PSTB实战指南
2026/9/21 2:39:34 网站建设 项目流程

先说个很多人踩过的场景。你在Cadence Virtuoso里搭好了一个Buck变换器的完整电路,参考电压、误差放大器、PWM比较器、功率级、LC滤波、反馈分压全都有,想看看环路稳不稳,下意识调出AC分析,从1kHz扫到10MHz,出来的幅频特性却完全没法看——相位曲线莫名其妙地高高低低,低频增益也对不上手算的-20dB/dec。问题不在你的电路,而在工具选型:开关电源的工作点本身就是周期性变化的,传统AC分析从根上就不适用。这篇我只聊一件事——用Cadence环境下的PSS配合PSTB/PAC分析,把开关电源的环路稳定性仿真做对、做准,并且把我在实际项目中踩过的收敛、谐波、探针设置的坑一并交代清楚。

1. 先别急着跑AC:开关电源不是线性时不变系统

1.1 两种隐含假设,直接在电源环路里同时失效

教科书上AC分析(或者叫小信号AC)的原理是:先把电路在某个直流工作点上做直流工作点分析,然后在该点线性化,再扫频求出小信号传递函数。这背后藏着两个假设。

第一,电路有个明确且唯一的直流工作点;第二,从该工作点附近的小扰动出发,系统的响应是线性的、时不变的。线性线性,说的就是响应与激励幅度成正比;时不变,就是无论你在哪个时刻看它,系统特性都一样。

这两个条件放到纯模拟电路里基本都成立。比如一个LDO,输出恒定在1.8V,功率管工作在某个固定的饱和区偏置点,你在这个点两边加几毫伏扰动,响应完全可以用一个线性时不变模型描述。但开关电源不同,它靠PWM斩波工作,开关管在一个开关周期内导通、关断、再导通,功率级的拓扑在两种状态之间来回切换,整个电路的工作状态本身就是时间周期函数。

这带来了一个直接后果:你在某个瞬时“冻结”出的直流工作点,根本不代表电路的真实状态。你在频率域看到的增益和相位,其实是多个状态叠加的结果。用LDO那套线性时不变方法去分析开关电源的环路,结论自然不可信。

1.2 一个最小Buck模型的AC仿真失败过程

我早期刚转做电源,也不信这个邪,搭了个最简电压模Buck想用AC硬跑。电路很简单:误差放大器(OTA+RC补偿)、斜坡发生器、PWM比较器,再带一个同步Buck功率级和LC输出滤波器,反馈分压电阻进FB。

AC分析配置:在参考电压源上叠加1V的AC小信号,扫描范围100Hz到10MHz。跑完看到幅频响应从低频开始就不是平坦的,中间有几段莫名其妙的尖峰,相位曲线更是乱跳。更离谱的是,把AC幅度从0.5V改成1V,Bode图都会发生变化——这对真正的线性时不变系统是不可能出现的事情,正好说明系统本质是非线性的。

那次失败让我彻底记住了:电源的正弦扫频,正确的做法是先求电路的周期稳态解,再做“周期时变”小信号分析。Cadence的PSS就是干第一件事的,PSTB和PAC负责第二件事。

2. PSS、PSTB、PAC三兄弟,各管哪一段

2.1 PSS:周期稳态解是后面一切分析的地基

PSS全称是Periodic Steady-State,周期稳态分析。它解决的是“这个开关电源稳定工作一段时间后,在一个开关周期内,电路每一时刻的波形是什么”。注意这个波形不是正弦波,而是一个完整的、包含纹波和开关噪声的周期波形,频率等于开关频率或者你指定的基频。

求这个周期解有两种主流方法,Cadence Spectre里常用的是shooting method(打靶法),思路大体上是:给定电路在周期开始时的一组初始状态,然后在一个周期内做瞬态积分,看看周期末的状态和初始状态差多少,如果差得超出精度,就修正初始状态,不断迭代,直到“一个周期末的波形”与“下一个周期开始的波形”完全一致。收敛之后,你就得到了一个真正的周期稳态解。

得到了这个周期稳态解,后面的PSTB和PAC才能开始工作。因为这两类分析本质上是在这个“周期性工作点”上做线性化——不是线性化到单一静态点,而是线性化到一条随时间周期变化的轨迹上。这正好对应了开关电源的真实物理状态:开关管一会儿通一会儿断,不同时刻对应不同的小信号响应,环路增益是这些响应的周期时变组合。

2.2 PSTB和PAC的本质差别:自动算环路增益 vs 先求周期传递函数

PSTB,全称是Periodic Stability Analysis(有的文档里也叫Periodic Transfer Function的探针扩展),它做的事情非常明确:像传统STB分析一样,在环路里某个位置放置探针,自动计算出环路增益、相位裕度、增益裕度,只不过工作点换成PSS求出的周期稳态解。它是把STB分析和周期稳态分析结合的产物,输出直接就是T(s)的Bode图。

PAC,全称是Periodic AC Analysis,周期AC分析。它的输出是一个从某个激励源到某个响应节点的周期时变传递函数。它不像PSTB那样包含“断开环路+自动测环路增益”这一步。用PAC测环路增益,你需要自己搭“注入—返回”结构,在环路断开处注入一个小信号扰动,再测量返回信号,最后自己按环路增益的定义算。

我做一个不太严谨但好记的类比:PSTB是“一条龙”的环路稳定性测试仪,把探针往环路里一插,相位裕度直接读出来;PAC则更像一个通用的频率响应测试平台,你得自己设计测试方法,它只负责输出从激励到响应的曲线。前者专注于环路稳定性问题,后者可以用来测电源的输出阻抗、音频敏感度、控制到输出的传递函数等更多东西。

2.3 我什么时候用PSTB,什么时候临时凑PAC

在Cadence里,我做开关电源的稳定性分析,90%的情况首选PSTB。原因是省事、直观、不容易出错:探针放对位置,跑完直接看相位裕度和增益裕度,结果可读性好,也方便做多corner、多条件的扫描对比。

PAC则用在两类场景。一类是我要的不是环路增益,而是某个特定路径的频率响应,比如误差放大器输出对输入电压的抑制比(Audio Susceptibility,音频敏感度),或者输出阻抗曲线。这些用PSTB测不了,因为它的输出默认是环路增益。另一类是当PSTB因为模型问题(比如某些行为级模型探针不兼容)跑不出来的时候,我会退而求其次,用PAC手动搭注入/返回来算,虽然步骤繁琐一点,但至少能把环路特性看个大概。

3. 从原理图到Bode图:PSS+PSTB的实操链路

3.1 环路断开点这么选,结果才可信

PSTB分析的第一步不是设置PSS参数,而是决定探针放在哪儿。探针位置直接决定了你测到的环路增益代表的到底是哪条信号路径。

我的经验是,环路断开点应当满足三个条件:

第一,信号流向清晰,断开后“前向路径”和“反馈路径”不会互相串扰。第二,断开点两侧都是低阻抗或高阻抗的明显分界,探针插入不会改变原电路直流工作点。第三,你希望研究的补偿与反馈特性,都在这个断开点所围成的环路内。

在电压模Buck里,我最常用的断开点是误差放大器输出到PWM比较器正输入之间。这里信号是从误差放大器输出过来的电压信号,断开后左侧是放大器的输出电阻(通常较高),右侧是比较器的输入电容(通常很小),插入一个理想电流探针几乎不影响直流偏置。更重要的是,这个断开点把整个环路分成了两半:前半段包括误差放大器、反馈分压和补偿网络,包含了你最想优化的Type II/Type III补偿网络;后半段包括PWM比较器、功率级、LC滤波和反馈网络,包含了功率级的特性。两者的乘积就是完整的环路增益。

如果我关心的是电流模控制(峰值电流模),我会把探针放在PWM比较器的另一个输入端之前,因为电流采样信号也是环路的一部分。但这时要注意,电流采样路径里的电流检测增益也要涵盖在环路范围内。

Cadence里STB分析用的探针是analogLib里的iprobe,它是一个零电压源、理想电流表,流经它的电流被原样检测,并在分析中被用来形成环路增益。它放在原理图上就是串联在信号线中间。PSTB分析时,需要指定这个iprobe的实例名。

3.2 PSS四个关键参数背后的工程考虑

在Cadence Spectre里,PSS分析需要设置的参数看起来很多,但真正决定成败的核心是这四个。

第一个是振荡周期或者说基频(Fundamental Frequency或者Beat Period)。对开关电源来说,这是确定的,就是开关周期。比如500kHz开关频率,周期就是2微秒。如果你是同步整流Buck,死区时间对周期的影响可以忽略,直接用开关周期即可。

第二个是tstab(skip initial transient time,跳过初始瞬态的时间)。PSS是从某个起始状态开始求解的,如果起始状态距离真正的稳态解太远,直接开始PSS收敛会很困难,甚至根本收敛不了。tstab的作用是先把电路“跑”一段时间,让它接近稳态,再开始PSS迭代。我的经验是,tstab至少要覆盖输出电压从0爬升到目标值并稳定下来的时间。对于LC品质因数较高的电源,启动阶段输出可能有振荡,要等振荡衰减完再启动PSS。一个比较稳的初值是设成500到1000个开关周期,再去看瞬态波形确认确实稳了。

第三个是谐波数(Number of Harmonics)。谐波数决定PSS在频域上保留多少倍频成分。调节谐波数需要考虑两个方面:一方面是希望保留足够多的开关噪声谐波,使得后续PSTB在高频段不会因为谐波截断而失真;另一方面,谐波数越多,仿真矩阵越大,耗时成倍增长。对Buck这类硬开关电源,我一般设10到20;对谐振类拓扑(LLC),因为波形里面正弦占比高、谐波相对干净,可以适当少一些;对反激这种电流尖峰明显的拓扑,可能需要30以上。

第四个是errpreset(误差预设),可选liberal、moderate、conservative三档。它控制PSS求解精度与速度的平衡。我一般用moderate。如果发现PSTB结果在某个频率附近有异常毛刺,再考虑把精度提到conservative重跑PSS。看似小改动,但有时能消除结果中一些不明来源的振荡。

3.3 PSTB探针的接法与谐波数设置

PSS跑通之后,PSTB就顺理成章了。在Spectre的analysis setup里,添加PSTB分析,关键的设置项是:

  • probe:指定iprobe的实例名,例如iprobe_ea_out
  • startstop:扫频范围。开关电源的环路带宽(交叉频率)通常在开关频率的1/10左右,所以扫频下限可以从1kHz或更低开始,上限到开关频率的1到2倍。比如500kHz开关频率,上限扫到500kHz基本能看到交叉点之后的高频行为。不过我也会顺手扫到1MHz,多看一段相位在高频的表现。
  • sweep type:默认是auto,实际用对数扫描(Logarithmic),点数按需设置,我一般给50到100个点。点数太少,相位裕度的读数不够精确;点数太多,跑起来慢。

还有一类参数是PSTB自身的谐波数设置,这个一般和PSS保持一致,或者略微降低。因为PSTB是在PSS结果的线性周期时变模型上做传递函数求解,谐波数直接关系到高频段的计算精度。我实际测试下来,PSS谐波数设20,PSTB的谐波数保持默认20,测得的交叉频率和相位裕度已足够稳定;强行把谐波数拉到50,结果几乎不动,只是白白多跑几倍时间。

3.4 跑通后的输出与读数

跑完之后,Spectre会输出环路增益T(s)的幅频和相频曲线。相位裕度在幅频曲线穿越0dB处读取:把交叉频率(单位增益频率)对应的相位减去-180°,得到的差值就是相位裕度。增益裕度则在相位曲线穿越-180°处读取:该频率对应的增益绝对值(dB)就是增益裕度。

在Cadence里,PSTB分析结束后,结果会被组织在Direct Plot下面,可以直接选“PSTB”,再选“Loop Gain”,Cadence会在图上自动标记出交叉频率、相位裕度和增益裕度。这个自动标记功能很方便,但我的建议是,标记出来之后还是自己用光标在曲线上核对一遍,因为某些模型下自动标记容易把谐波毛刺当成真正的交叉点。

4. 不止看相位裕度:稳定性判断与补偿验证的工程细节

4.1 相位裕度、增益裕度之外的三个检查项

很多初学者拿到PSTB结果,看到相位裕度大于45°就觉得稳了。实际工程中,只看相位裕度远远不够,我一般还会额外检查三个东西。

第一,交叉频率与开关频率的关系。交叉频率太高,说明环路带宽逼近甚至超过开关频率的1/5,此时环路延迟和采样效应会被激发,相位裕度的实际值会显著低于仿真值。我在项目里一般要求交叉频率在开关频率的1/10到1/5之间,再高就会开始怀疑补偿方案的可靠性。

第二,相位曲线的“平坦度”。正常的Type III补偿环路,相位曲线在中频段应该是平滑的,一个峰一个谷,不会剧烈抖动。如果相位曲线在高频段出现明显的“多峰”或者毛刺,那大概率不是真实的环路特性,而是谐波截断或者仿真精度问题。我会回头调PSS谐波数或errpreset,直到曲线变干净。

第三,负载阶跃的时域响应。PSTB毕竟是线性化小信号分析,开关电源在大信号阶跃下,补偿器可能进入非线性区,小信号相位裕度好不一定代表大信号瞬态就漂亮。所以我的习惯是:PSS+PSTB跑完判断“理论稳定”,之后一定还要做一次负载阶跃瞬态仿真,观察输出电压的振铃次数和恢复时间。两者结论一致,我才会把电路投出去。

4.2 负载、输入电压变化的环路扫描

开关电源的环路增益不是固定的。负载电流重、轻不同,功率级的低频增益完全不同;输入电压不同,PWM调制器的小信号增益也不同。一个在任何条件下都稳定的环路,才是合格的设计。

Cadence里的做法很直接:用参数化扫描包住PSS+PSTB分析。我一般把输入电压作为第一个扫描变量,从最低工作电压扫到最高工作电压,比如12V到48V;负载电流作为第二个扫描变量,从空载1mA扫到满载15A。

每次扫描都会自动完成一次PSS和PSTB。跑完以后,把不同条件下的相位裕度整理在一张表格里,关注最恶劣的情况。多数情况下,重载、低输入电压的组合会让交叉频率最高、相位裕度最低,这就是最需要关心的点。

这里有一个容易被忽视的地方:PSS的收敛速度和扫描条件有关。在极端轻载(比如空载CCM/DCM临界)时,电感电流不连续,电路的非线性更强,PSS收敛更难。我建议在扫描前先单独跑一个极轻载条件的瞬态仿真,确认电路稳定、电流波形清晰,再挂到扫描里。否则扫描到一半PSS不收敛,整轮结果都浪费了。

4.3 补偿网络参数如何借助仿真快速收敛

PSTB最大的价值,不只是判断“这个设计稳不稳”,而是帮助你快速定位“该改哪里”。我做Type III补偿调整时有个固定的步骤:先在Cadence里搭好初始补偿值(我会先把零点、极点位置按经验设定),跑一次PSS+PSTB,观察交叉频率和相位裕度,确定需要提升还是压低频段增益,然后再修改RC值重跑。

不要盲目试参数,一边看曲线一边调更高效。举例来说,如果交叉频率偏低(假设在5kHz,而目标在30kHz),我会先减小误差放大器增益电阻R1,把中频段增益整体抬高约10dB,再看交叉频率是否接近30kHz。如果相位裕度不足,再调整补偿零点位置(增大零点对应的RC乘积),把相位提升区域往交叉频率附近搬。

每轮仿真只需要几步:改参数、跑PSS、跑PSTB、看两条曲线。熟练之后,一轮完整的“参数修改+仿真验证”在5到10分钟就能完成。这种方式比在纸上反复演算效率高得多,也比盲调参数心里有底得多。

5. 仿真不收敛、结果毛刺:我踩过的坑和排查顺序

5.1 PSS不收敛的排查链路

PSS不收敛,是做电源仿真遇到最多的报错,没有之一。Spectre的报错信息通常以“PSS analysis failed to converge”之类的话出现,但真实原因五花八门,我按出现频率排个顺序,供大家逐项排查。

第一,tstab太短。电路还没有结束启动瞬态,就强行开始求周期稳态解,必然不收敛。这个最好判断,先跑一个足够长的瞬态(比如1ms),看输出电压和电感电流是否已经稳定。稳定的时间点就是tstab的下限。

第二,初始条件不合适。PSS对电路的初始状态很敏感,我在某些半桥/全桥设计中遇到过,直接开始PSS不收敛,但把电感电流的初始值设成接近稳态值(比如利用上一步瞬态仿真的终值作为初值)之后,PSS很快收敛。Cadence里可以通过修改PSS的初始条件选项,把初始工作点设置为前面瞬态分析的最后一个时间点。

第三,模型的问题。行为级模型中的理想开关、理想二极管,在PSS的Newton迭代中很容易产生数值突变,导致不收敛。这类问题在真正的晶体管开关电源中反而不常见,因为晶体管的导电特性是平滑的。如果确实用了理想开关模型,可以考虑并联一个很小的电导或者电容,把开关瞬间的突变削平一些。

第四,误差预设太严格。有些设计里,我把errpreset从moderate改成conservative,仿真反而从收敛变成不收敛。这时我会把tstab稍微加长一点,或者把PSS的采样点数增加,帮助迭代过程稳定。说白了,精度的提升也要建立在数值条件更优的基础上,不能盲目堆精度。

5.2 tstab、beat period和harmonic之间玩平衡

PSS三个核心参数——tstab、beat period、harmonic——之间有明显的相互制约关系,实际设置时需要在物理正确与仿真成本之间找平衡。

beat period是物理确定的,一般不能随便改。但有一种特殊情况:如果你仿真的是多相Buck(比如4相交错并联),PSS的基频应该是交错的等效开关频率(比如单相500kHz、4相交错等效2MHz),而不是单相的500kHz。如果把基频误设成单相频率,PSS也能跑,但PSTB的结果会混入周期误差,环路增益的相位出现异常。这个细节我见过不止一次有人踩坑。

tstab的设置不要盲目追求长。tstab太长,前期瞬态仿真占用的时间会被白白拉长;太短,PSS不收敛。我现在的做法是:先用瞬态仿真跑一个几百微秒的波形,直观判断输出电压稳定在哪个时间点,然后把tstab设置成这个时间点再乘以1.2到1.5,留一点余量。

harmonic的设置同样有技巧。对于Buck这种电感电流基本线性的电路,开关节点波形近似方波,谐波含量很高,但PSTB关心的频率范围其实只在开关频率附近,所以harmonic数不用过多。对于LLC这类谐振电路,波形本身正弦度很好,harmonic设置要求也不高。真正需要小心的是反激类拓扑,变压器漏感和二极管寄生振荡会产生很高的谐波成分,harmonic数不足会导致PSTB高频段结果失真。

5.3 波形毛刺、负相位跳变最容易被忽视的原因

PSTB跑完之后,偶尔会出现两类看起来很吓人的结果:一类是低频段相位曲线出现莫名其妙的毛刺,另一类是相位在高频段突然朝着-360°方向跳变。

第一类毛刺,我遇到过的情况绝大部分是PSS谐波数不足引起的。环路增益的相位在低频段理论上是很平缓的,如果出现一个个尖峰,多半是某次谐波成分在计算的频率点附近被截断了。解决方法是把PSS和PSTB的harmonic数同步增加,再观察毛刺是否消失。

第二类高频负相位跳变,需要多留个心眼。开关电源的PWM比较器本身有采样效应,即使在理想的平均模型下,环路在高频段的相位也会比连续系统低得多。这里的“低”是真实物理现象,不是仿真误差。但有些电路模型(尤其是没有考虑比较器传输延迟的理想模型)会把采样效应低估,导致功率级在高频显示出来的相移过小。因此,在仿真中看到的“相位裕度充足”只是一个必要条件,真正做产品还要考虑实际芯片的传输延迟等寄生参数。

还有一类极度容易忽略的原因:参考电压源和反馈网络里的寄生电阻没有加。某些Cadence库里参考电压源默认带一个很小的串联电阻,它和反馈分压电阻并联后会改变低频增益。低频增益不对,交叉频率和相位裕度自然全错。排查时可以先量一下反馈分压点的直流电压是否精确等于参考电压,如果偏了,往往就是这类“不起眼”的寄生参数在捣乱。

5.4 一个实用心得:用“扫描-对比-微调”的闭环方式,减少返工

最后分享一个我长期使用的习惯。拿到一个新的开关电源拓扑时,我不会只跑一个工作点的PSTB就结束,而是把设计条件里的关键参数整理成一张表,比如输入电压范围、负载电流范围、温度范围,每个变量取3到5个点,然后用Cadence的参数扫描一次性跑完,把结果汇总成一张相位裕度、增益裕度的二维表。

这样的好处是,在很多问题还没被流片验证之前,就能提前看到“哪个工作点最危险”。我在做某款宽输入电压Buck的时候,就是通过这种扫描方式发现在最低输入电压+最大负载的一个组合下,交叉频率超过了开关频率的五分之一,相位裕度只剩下30°。如果只跑一个典型条件,这个问题很可能被掩盖,投片后大概率会出现负载阶跃振铃超标的现象。

另外,参数扫描前,我会把补偿网络里的可调元件(比如运放的反馈电阻、补偿电容)也设置成设计变量。在第一轮扫描结果的基础上,用“哪一段频率增益不足调哪一段”的原则微调RC值,两三轮之后通常就能得到一组在所有条件下都满足相位裕度要求的参数。这个“先全条件摸底、再定向微调”的方法,比一边改参数一边单点验证的效率高得多,强烈推荐给做电源仿真的同行。

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

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

立即咨询