简介:这是一份面向开关电源研发工程师的环路设计专题资料,聚焦BUCK电路从环路计算、补偿参数设计到仿真验证的完整流程。资料从自动控制理论中的乃奎斯特稳定性判据切入,讲解穿越频率、相位裕量、增益裕量、静态增益与动态响应等关键概念,并结合以负一倍斜率穿越零分贝线的设计思路,说明如何兼顾环路稳定性与动态速度,避免盲目依赖实验室调试参数。整包为单个PDF文档,大小982KB,图文结合,包含BUCK主电路小信号传递函数推导结论及Saber仿真验证思路,适合想要系统掌握电源环路补偿方法的中高级电源工程师阅读。目前已有580人学习,对后续开展高低温、负载跳变等工况下的电源稳定性设计有直接参考价值。
1. 环路补偿不是玄学:BUCK 电路稳定性的科学设计方法
很多做开关电源的工程师,提起环路补偿第一反应就是“玄学”。产品出了问题,先在实验室里调电阻电容,调到一个看似稳定的组合就收工。但这种靠调试凑出来的参数,往往经不起推敲——高低温一变、负载一跳,环路就可能进入振荡甚至发散。BUCK 电路的环路计算、补偿和仿真,恰恰是把这个黑匣子打开的过程:通过传递函数算出穿越频率和相位裕量,再通过 Saber 的 tdsa 环路扫描仪做开环仿真验证。这套方法不需要你精通自动控制理论,但需要你按步骤把主电路传递函数、补偿网络参数、仿真参数逐一算清、测准。本文从最简单的 CCM Buck 入手,完整走一遍“计算主电路 → 设计补偿 → Saber 仿真验证 → 负载动态测试”的流程,适合正在做 DC-DC 电源设计、想摆脱盲调补偿参数现状的工程师。
2. 先把判据立住:穿越频率、相位裕量与增益斜率的关系
2.1 为什么相移 180° 环路就一定不稳定
负反馈系统的闭环传递函数可以写成 G(S)/(1+G(S)*H(S)),其中 G(S) 是主电路传递函数,H(S) 是反馈和补偿网络的传递函数。如果 1+G(S)*H(S)=0,闭环输出就会趋于无穷大,系统自然不收敛。把 S=jω 代入,当 G(jω)*H(jω)=-1 时,增益为 1,相位为 180°。
这里有个容易绕晕的点:负反馈本身已经带了 180° 相移,所以扰动信号经过 G(S) 和 H(S) 之后,如果相位“再”改变 180°,叠加起来就是 360°,相当于相位没变,增益还等于 1,这就会形成正反馈自激振荡。奈奎斯特判据说的就是这个事:穿越频率点上,只要相位裕量足够,系统就稳定。
2.2 相位裕量取 45°,斜率穿越 0dB 是关键
理论上只要穿越频率点相移不是 180° 系统就稳定,但模拟器件存在离散性——电阻电容的容差、温度漂移都会让参数漂移。如果相位裕量只有十几度,环路处于条件稳定状态,随时可能翻车。工程上通常把相位裕量取在 45° 左右,对应的开环传递函数相移要小于 135°。
相位裕量不是拍脑袋定的:太大,动态响应变慢,出现过阻尼;太小,环路容易振荡。45° 是稳定性和动态响应之间的折中值。要保证相位裕量充足,开环传递函数的增益曲线最好以 -1 斜率穿越 0dB 线。如果以 -2 斜率穿越,说明在穿越频率附近有两个极点主导相位,相移接近 180°,相位裕量必然不足。
2.3 斜率背后是极点和零点在起作用
每产生一个极点,增益曲线斜率在该极点转折频率处增加 -1;每产生一个零点,斜率增加 +1。这就是为什么 LC 滤波器会形成 -2 斜率下降——电感电容各贡献一个极点,双极点处斜率从 0 变成 -2。电解电容的 ESR 会引入一个零点,把斜率从 -2 拉回 -1,相位也从 -180° 往回收。
另外还有个容易被忽略的点:静态增益决定了输出与给定值之间的静态误差。穿越频率相同的情况下,以 -2 斜率下降的开环增益在低频段明显更高。举例来说,给定 10V 希望输出 10V,静态增益 20dB 时误差是 1V,40dB 时误差只有 0.1V。所以设计时要在低频段保持高增益压低静态误差,但穿越频率附近的斜率又要回到 -1 保证相位裕量,这就是补偿网络设计的核心矛盾。
3. 算主电路传递函数:从双极点到 ESR 零点的 Mathcad 建模
3.1 Buck 主电路小信号模型的参数设定与计算
以 CCM 模式电压控制 Buck 为例,先设定基本参数:输入 Vg=20V,占空比 0.5,输出 Vo=10V,负载电阻 1Ω。主电路是典型的 LC 低通滤波器结构,电感、电容、电容 ESR 都会直接影响传递函数的形状。
主电路的传递函数不需要自己推导,张兴柱博士团队已经把常用拓扑的小信号传递函数整理好了,直接拿来用即可。关键是要把元件参数代入,算出极点和零点的位置。这个电路里 LC 双极点频率约 1.16kHz,电解电容 ESR 产生的零点频率约 4.5kHz。双极点让增益以 -2 斜率衰减,ESR 零点又把斜率拉回 -1。
在 Mathcad 里把传递函数表达式写出来后,直接扫频就能得到 Bode 图。这里给一个计算主电路传递函数的参考写法,Mathcad 是符号化计算,实际输入类似下面的逻辑:
// Mathcad 风格计算式(非可直接运行代码,示意逻辑) Vg := 20 // 输入电压 D := 0.5 // 占空比 R := 1 // 负载电阻 L := 470uH // 电感量(按双极点1.16kHz反推) C := 470uF // 电容量 ESR := 0.075 // 电解电容等效串联电阻 // LC双极点频率 f_LC := 1 / (2*pi*sqrt(L*C)) // 约1.16kHz // ESR零点频率 f_ESR := 1 / (2*pi*ESR*C) // 约4.5kHz // 主电路传递函数(CCM电压控制,标准形式) G(S) := (1 + S/ (2*pi*f_ESR)) / (1 + S/(2*pi*f_LC) + S^2/(2*pi*f_LC)^2) * (Vg/D 的量级)这里的核心是确认双极点和 ESR 零点的相对位置。算完之后看 Bode 图,主电路 G(S) 的穿越频率约 7.2kHz,相位裕量约 62.4°——看起来不需要补偿就能稳定,但静态增益只有 26dB,输出误差偏大,必须通过补偿提升低频增益。
3.2 增益斜率对动态响应的影响路径
开环传递函数的斜率不仅影响相位裕量,还直接影响负载跳变时的动态响应。以 -2 斜率穿越 0dB 的环路,负载突变时输出电压会呈现明显的欠阻尼振荡——快速冲到下一个稳态值后过冲,再阻尼振荡多次。以 -1 斜率穿越的环路则表现为过阻尼,从一个稳态缓慢爬向另一个稳态。
好的设计思路是把两种情况结合:在 1/2 穿越频率处让斜率从 -2 变成 -1。这样低频段保持高增益,静态误差小;穿越频率附近以 -1 斜率穿越,相位裕量充足;动态响应速度也够快。具体到 Bode 图上,就是在低频段让补偿网络提供一个极点抬高低频增益,在中频段安排一个零点抵消部分 LC 极点的相移。
3.3 主电路穿越频率与静态增益的取舍
主电路 G(S) 的穿越频率 7.2kHz、相位裕量 62.4°,看起来参数不错,但静态增益太低。补偿网络 H(S) 的作用就是压低低频段增益的衰减趋势,把开环传递函数的低频增益提上去。设计目标是把开环穿越频率推到 10kHz——这个值远小于开关频率的 1/6,同时保证穿越频率点以 -1 斜率穿越,相位裕量大于 45°。
要注意的是,考核相位裕量只需看穿越频率点附近的相位,穿越频率之前的相位裕量不必严格满足要求。很多新手盯着整个频段看相位,其实没必要,关键就两个位置:穿越频率点的相位裕量,以及低频段的静态增益。
4. 单零单极补偿设计:R2、C1 取值与开环 Bode 图验证
4.1 为什么选单零单极补偿拓扑
补偿拓扑有很多种:单极点、单零点、单零单极、双零单极、单零双极、双零双极。选择的原则是满足两个需求:低频段要有高增益压低静态误差,中频段要能把相位拉回来保证裕量。单极点补偿只能在原点加一个极点抬高低频增益,但会进一步恶化相位;单零点补偿能改善相位但低频增益不足。单零单极是性价比最高的方案——一个极点在原点抬高低频增益,一个零点在中频段抵消部分 LC 双极点的相移。
补偿网络 H(S) 实际由两部分组成:运放补偿电路 K(S) 和 PWM 调制比 Fm。Fm=1/VP,VP 是锯齿波幅值。在小信号分析时,运放正极接地,由于虚短特性,负极等效接地,反馈分压电阻 Rf2 被短接,Rf1 就是补偿网络的输入电阻 R1。
4.2 R2、C1 的计算流程与参数逻辑
目标是让开环传递函数 G(S)*K(S)*Fm 的穿越频率到 10kHz。已知主电路 G(S) 在 10kHz 处的增益为 -3.573dB,所以 K(S)Fm 在这个频点需要提供 +3.573dB 的增益。公式是 20log(R2Fm/R1)=3.573。
设定 VP=5V,则 Fm=1/5=0.2。反馈分压电阻取 Rf1=3kΩ、Rf2=1kΩ,所以 R1=3kΩ。代入公式求 R2:
// 计算逻辑 VP := 5 // 锯齿波幅值 Fm := 1/VP // PWM调制比 = 1/5 R1 := 3k // 补偿网络输入电阻 Gain_10k := 3.573 // 需要的补偿增益 dB // 20log(R2*Fm/R1) = 3.573 // R2 = R1 * 10^(3.573/20) / Fm R2 := R1 * 10^(3.573/20) / Fm // 约22.6kΩ零点频率取 1/2 穿越频率,即 5kHz。C1 由零点公式 fz=1/(2πR2C1) 求出,计算值是 4.425nF,取标准值 4.7nF,对应零点频率略低于 5kHz,影响不大。
fz := 5kHz // 零点频率 = 1/2 fc C1 := 1 / (2*pi*R2*fz) // 约4.425nF,取标称4.7nF补偿后重新计算开环传递函数 G(S)*K(S)*Fm,穿越频率 10.08kHz,相位裕量 60.6°,完全满足设计要求。
4.3 补偿前后的 Bode 图对比与设计目标核对
补偿前主电路 G(S) 穿越频率 7.2kHz,相位裕量 62.4°,静态增益只有 26dB。补偿后穿越频率推到 10.08kHz,相位裕量降到 60.6°仍在安全范围,低频增益显著提升。关键看三个指标:穿越频率是否达到目标,相位裕量是否大于 45°,低频段增益曲线是否以 -1 或 -2 斜率下降。这三个指标都达标,补偿设计就算完成。
这里有个常见疑问:为什么不把穿越频率推得更高?穿越频率越高动态响应越快,但必须远低于开关频率,否则开关纹波会干扰控制环路。一般要求 fc 小于开关频率的 1/6,工程上通常取 1/10。本案例的开关频率没明确给出,但从穿越频率 10kHz 的量级看,开关频率至少 100kHz 才合理。如果开关频率低,穿越频率目标也要相应下调。
5. 环路仿真避坑指南:tdsa 参数设置与开环测量实操
5.1 tdsa 环路扫描仪的连接方式与原理
Saber 里做频域仿真要用到 tdsa 环路扫描仪,它本质是个注入扰动的信号源加一个测量回馈信号的接收机。tdsa 有 5 个引脚:ON/OFF 使能端、Input 正负端、Output 正负端。使能端接一个 logic clock,延时 10ms 再启动,目的是避开仿真开始时的暂态振荡。Input 端接需要测量的回馈信号(输出电压),Output 端接注入点(给定电压处)。
tdsa 扫描的原理是:在注入点叠加幅值固定、频率按预设方式变化的正弦波,同时测量回馈点的幅值和相位,与注入信号对比得到 Bode 图。因为实际注入的是离散频点信号,频点数量越多,扫出来的曲线越平滑,但仿真时间也越长。
5.2 先拆开环路再仿真的关键操作
要仿真开环传递函数,但 Saber 做不了真正的闭环开环仿真,所以要把环路在某点断开。本案例的做法是把补偿网络 K(S) 的输出和 Fm 断开:PWM 比较器正端不再接补偿网络的输出,而是直接给定 2.5V 电压获得 50% 占空比。tdsa 的输出通过 voltage summer 叠加在这个 2.5V 给定电压上,tdsa 的输入接输出电容电压。
断开位置的选择很讲究。理论上开环传递函数是 G(S)*K(S)Fm,但一次仿真全部验证比较困难,所以拆成两步:先仿真 FmG(S),再仿真 K(S)。两步的结果分别和 Mathcad 计算值对比,如果都能对上,级联起来的开环传递函数就必然正确。
仿真 Fm*G(S) 时,注入点选在 PWM 比较器正端,测量点选输出电容电压,扫出来就是从注入点到输出的频域响应。仿真 K(S) 时则简单得多,去掉主电路,在反馈分压电阻输入端给 10V 电压上叠加注入信号,输出接补偿网络输出端即可。
5.3 参数设置的血泪经验:误设置导致仿真白跑
tdsa 参数必须逐个理解,否则很容易跑出无效数据甚至仿真直接发散。以下是我踩过的几个坑:
现象 1:仿真跑了几个小时还在低频段打转。原因是起始频率设置太低。tdsa 扫一个频点要多个周期才能稳定,100Hz 信号一个周期 10ms,扫 10 个周期就是 100ms,仿真计算这个时间段的内部步进可能要几分钟。所以起始频率别低于 500Hz,但要确保低于预估的穿越频率,否则扫不到穿越点,测出来相位裕量没意义。
现象 2:高频段扫描结果抖动明显。原因是 min_tspp 设置太小,每个扫描周期的分段数不够,正弦波不够光滑。设 100 以上能明显改善相位测量精度。另外 max_err 控制稳定判定,默认值太严格会导致同一频点反复扫描跳不过去,我一般会结合 max_nper 一起调。
现象 3:tdsa 一直扫不完,end time 到了还没结束。原因是 end time 设置太短。tdsa 扫完所有频点自动结束仿真,但如果 end time 不够,仿真会截断在 end time 时刻。我一般先预估,比如一次完整扫描需要 1 秒,就输入 1.2 留余量。设置完观察进度条,如果 90% 左右自动结束,说明所有频点都扫完了。
现象 4:补偿网络仿真时运放输出饱和。原因是注入信号幅值太大。补偿电路是信号放大环节,注入 0.1V 信号经过放大可能超过运放供电轨。仿真 K(S) 时 ampl 要降到 0.01,避免运放输出越界。
| tdsa 参数 | 本案例取值 | 作用说明 |
|---|---|---|
| fbegin | 500Hz | 起始频率,需低于穿越频率 |
| fend | 20kHz | 截止频率,覆盖穿越频率附近 |
| ampl | 0.1(补偿网络 0.01) | 注入正弦波幅值 |
| npoints | 400 | 扫描频点总数,越多越平滑 |
| mode | logswp | 对数间隔扫描,低频点密高频点疏 |
| max_err | 默认 | 稳定判定误差阈值 |
| min_nper | 大于 3 | 每频点最少扫描周期数 |
| max_nper | 默认 | 每频点最大扫描周期数,超时跳过 |
| min_tspp | 100 量级 | 每周期最小步进数,影响波形光滑度 |
5.4 仿真结果与计算结果的对账方法
仿真跑完,打开 cosmoscope,选中 _tdsa 后缀的结果文件,双击 AC_result 就能看到增益和相位曲线。用光标测量穿越频率和相位:本案例实测 Fm*G(S) 穿越频率约 2.68kHz,相移约 133.4°。Mathcad 计算值是穿越频率 2.733kHz,相移 135.1°。误差在 2% 以内,说明仿真模型和参数设置是对的。
K(S) 的仿真结果:10kHz 频点增益 17.5dB,相移 170.9°,与 Mathcad 计算结果一致。两组数据都对上了,级联后的开环传递函数就没有悬念。这种“分段验证”的思路值得借鉴——不要试图一次仿真验证整个环路,拆开后逐个环节对账,出问题也好定位。
6. 负载动态仿真:PWL 电阻模拟跳变与最终验收
开环仿真验证通过后,最后一步是闭环负载动态仿真。这里要用到 PWL 电阻模拟负载突变:0~5ms 内阻值 1Ω(输出电流 10A),5ms~5.01ms 内阻值从 1Ω 变到 10Ω(输出电流降到 1A),对应 10us 内负载从 100% 跳变到 10%,变化率约 0.9A/us。
运行 transient 仿真,end time 设置为 10ms。tdsa 已经删除,运放输出直接作为 PWM 比较器正向输入,系统处于闭环状态。看输出电压波形:负载突变后,输出电压从稳态值跳变,过冲幅度约 0.3V,大约 0.6ms 后回到下一个稳态工作点,期间有轻微振荡但很快收敛。
这个动态响应说明补偿参数是合理的:过冲控制在 3% 以内,恢复时间在亚毫秒级,没有反复振荡。如果补偿参数不当,通常会看到两种情况:一种是欠阻尼,输出电压过冲大、围绕稳态值振荡多个周期才收敛;另一种是过阻尼,输出电压慢吞吞爬向稳态值,恢复时间拉长。0.6ms 的恢复时间和 0.3V 的过冲,在 10V 输出的 Buck 里是比较理想的平衡点。
这里其实还可以再验证一步:把负载跳变方向反过来,从 10% 跳到 100%,看电压跌落的情况。跌落幅值通常比过冲更值得关注,因为负载重载跳变时电感储能释放需要时间。我一般会同时记录上升沿和下降沿的动态响应,或者用不同变化率的 PWL 电阻多测几组,确认环路在最恶劣的负载变化速率下依然收敛。
从那以后,我每次做电源环路设计都强制走一遍这个流程:先算主电路传递函数确认极点和零点位置,再按目标穿越频率和相位裕量计算补偿参数,然后拆开环路分别仿真验证 G(S)*Fm 和 K(S),最后做闭环负载动态仿真确认过冲和恢复时间。整个过程看起来复杂,但每一步都是确定性的计算,不需要靠运气调参数。希望这套方法对你也有帮助。
本文还有配套的精品资源,点击获取