做电源的同行应该都有这种体会:明明是闭环控制,占空比却在某个工作点突然开始高频抖动,电感电流波形出现一高一低的“大小波”,开关管和电感还跟着发出吱吱声。这个问题十有八九和峰值电流模式控制中的次谐波振荡有关,而把它压下去的关键,就是斜坡补偿。传统的做法是直接加一个固定斜率补偿,稳定是稳定了,但代价往往是被掩盖的动态响应变慢和效率损失。这几年我越来越倾向于用自适应斜坡补偿,它能在保证环路稳定的前提下,把补偿量压到“刚够用”的水平,让峰值电流模式控制同时兼顾稳定、动态响应和效率。这篇文章就把我在实际项目中踩过的坑、算过的参数、调过的波形都整理出来,给准备上这个方案的朋友做个参考。
1. 为什么峰值电流模式需要斜坡补偿
1.1 峰值电流模式控制的先天优势
峰值电流模式控制是开关电源里用得最多的控制方式之一,Buck、Boost、Flyback 里都很常见。它的基本思路是:外环电压误差信号作为电流基准,内环检测功率管电流,当电流上升到这个基准时关断功率管。由于电流内环直接参与脉宽调制,它天然带了限流保护,不用额外加过流检测;同时在输入电压变化时,电流环能很快响应,不需要等电压外环慢慢去调,所以输入瞬态响应比电压模式好不少。
我在项目里选峰值电流模式,主要是看中两点。第一,单极点系统比较好补偿。峰值电流模式下功率级传递函数里那个由电感和输出电容构成的二阶极点会被电流内环“推走”一个,外环补偿只需要按单极点来处理,环路稳定裕度容易做高。第二,并联均流特别方便,多个电源模块直接共用一个电压误差信号,电流环会自动均匀分配电流,这在电源模块并机场景里非常实用。
但这套方案有个绕不开的坎:在占空比大于 50% 的时候,如果不加斜坡补偿,电流内环会变得不稳定,产生次谐波振荡。这是峰值电流模式控制与生俱来的问题,不是环路参数没调好,而是离散采样结构决定的。
1.2 次谐波振荡是怎么来的
要理解次谐波振荡,得从电感电流的扰动传播说起。以 Buck 变换器为例,在恒定频率峰值电流模式下,每个开关周期开始,功率管开通,电感电流以斜率 m1 上升;当电流到达基准值,功率管关断,电感电流以斜率 m2 下降,直到下一个时钟周期到来。
现在假设某个周期里电感电流因为噪声多了一个很小的扰动 Δi。这个扰动会让关断点稍微提前或者延后,导致这个周期结束时,扰动被传递到下一个周期的起始点。经过一个开关周期后,扰动变成了多少?推导下来可以用一个系数 α 来衡量:
α = (m2 - mc) / (m1 + mc)
其中 mc 是外加斜坡补偿的斜率。如果 |α| 小于 1,扰动会一个周期比一个周期小,最终收敛;如果 |α| 大于 1,扰动会被逐周期放大,电感电流就会出现交替的大小波,这就是次谐波振荡。它的频率是开关频率的一半,听起来像“一半频率的噪声”,所以经常被误判成 EMI 问题。
问题就出在占空比上。稳态时 Buck 变换器有伏秒平衡关系:m1 × D = m2 × (1 - D)。也就是说 m2 / m1 = D / (1 - D)。当 D 小于 0.5 时,m2 小于 m1,不外加补偿,α = m2 / m1 小于 1,扰动自己就会衰减;但当 D 大于 0.5 时,m2 大于 m1,α 大于 1,扰动就会逐周期放大。这就是“占空比大于 50% 必须加斜坡补偿”这句话的由来。
1.3 斜坡补偿的本质:把一阶动态响应拉到收敛区间
如果你还记得电路课程里的一阶动态电路响应,会更容易理解这件事。扰动幅值在相邻开关周期之间的传递关系本质上就是一阶差分方程,收敛还是发散取决于特征根。这和一阶 RC 电路里电压按指数趋向稳态是同一个数学结构。差别只在于:一阶 RC 的极点由 R 和 C 决定,这里的“极点”由 m1、m2 和 mc 决定。
加入斜坡补偿 mc 之后,α 的绝对值被压低,扰动收敛速度加快。收敛的时间常数对应到控制环路上,就是电流内环的动态特性。理论上,只要满足:
mc > (m2 - m1) / 2
就能保证 |α| 小于 1,次谐波振荡被抑制。这个条件在 D 大于 0.5 时尤其重要,因为此时 m2 大于 m1,必须有正值的补偿斜率。
但这里有个容易被忽略的点:这个条件是“稳定”的门槛,不是“最优”的门槛。斜坡补偿加得越多,α 绝对值越小,稳定裕度越高,但同时电流内环增益也越低。补偿不是越多越好,它是一个稳定性和动态性能之间的权衡。理解了这一点,才能明白自适应斜坡补偿的动机。
2. 固定斜坡补偿省事,但代价不小
2.1 固定补偿的设计逻辑
很多传统方案用的是固定斜坡补偿,也就是不管输入电压、负载电流怎么变,补偿斜率始终是一个常数。设计方法是把最恶劣工况算出来,取一个足够大的 mc,保证在所有占空比下都满足稳定条件。
举个例子,一个 Buck 变换器,输入电压范围 4.5V 到 16V,输出电压 3.3V,电感 2.2uH,开关频率 500kHz。电感电流下降斜率:
m2 = Vo / L = 3.3V / 2.2uH = 1.5 A/us
电感电流上升斜率:
m1 = (Vin - Vo) / L
在最低输入 4.5V 时,m1 = (4.5 - 3.3) / 2.2 = 0.545 A/us,此时占空比 D = 3.3 / 4.5 = 0.733,大于 0.5,是次谐波振荡风险最高的工况。按稳定条件:
mc > (m2 - m1) / 2 = (1.5 - 0.545) / 2 = 0.478 A/us
留一点裕量,固定补偿斜率取 0.6 A/us 甚至 1.0 A/us。这样设计在最低输入电压满载时确实没问题,但问题在于,在输入电压升高的工况下,这个 0.6 到 1.0 A/us 的补偿斜率相对于当时的电感电流上升斜率会变得非常大。
比如输入电压 6V 时,m1 = (6 - 3.3) / 2.2 = 1.23 A/us,固定补偿取 0.6 A/us 就已经是 m1 的一半;如果当初取的是 1.0 A/us,补偿斜率都快赶上 m1 了。此时环路能稳定,但动态响应已经被严重拖累。这正是固定补偿的尴尬:按最恶劣工况留的裕量,在多数稳态工况下都属于“过补偿”。
2.2 过补偿如何拖慢动态响应
过补偿对动态响应的影响,要从峰值电流模式的电流内环增益说起。峰值电流模式控制中,从电压误差信号到电感平均电流的等效跨导大概是 1 / [(m1 + mc) × Ts],Ts 是开关周期。mc 越大,这个跨导就越小,意味着同样大小的电压误差信号变化,能引起的电感电流变化幅度越小。
宏观上表现出来就是:电流内环增益下降,整个环路的穿越频率跟着降低。补偿斜率一旦过大,环路带宽可能只剩下设计值的一半甚至更低。负载突变时,电压外环需要更长时间才能把电感电流推到新负载所需的值,输出电压过冲和恢复时间都会变差。
我实测过一个 12V 输入的 Buck,固定补偿从 0.3 A/us 调到 1.2 A/us,负载阶跃 10A 时的输出电压跌落从 90mV 恶化到 160mV,恢复时间从 40us 变成了 80us。稳定裕度是保住了,但动态性能几乎腰斩。对于需要快速响应用电器的场合,这个代价很难接受。
2.3 过补偿对效率的隐性损耗
效率这块,过补偿的影响更隐蔽,但长期运行下来很可观。峰值电流模式比较器在电感电流到达基准值时关断,斜坡补偿如果叠加上去,等效于让比较器的电流基准阈值“缩水”。也就是说,在同样的电压误差指令下,实际能达到的平均电感电流会比无补偿时小。
为了维持同样的输出功率,电压外环会自行把电流基准抬高。结果就是稳态时电感峰值电流变大,电流有效值也变大,开关管的导通损耗、电感的铜损和磁芯损耗都会上升。在重载时尤其明显,因为导通损耗是跟电流平方成正比的。
更麻烦的是,过补偿会让峰值限流点变得不准确。原本设计在 20A 过流保护的电源,可能 18A 就把电流环推到限流点,过早进入恒流模式,带载能力莫名其妙下降。这些问题都不是“不工作”级别的故障,而是性能打折式的慢性损失,很容易被忽略。
3. 自适应斜坡补偿的实现思路
3.1 核心思想:只补偿“刚够”的量
自适应斜坡补偿的思路其实不复杂:既然稳定需要的补偿斜率是工作点的函数,那就实时测量工作点,动态调整补偿斜率,让它始终保持在稳定所需的临界值附近。补偿多了,就适当降下来,把电流内环增益和动态性能还给系统;补偿不够了,马上加上去,防止次谐波振荡冒头。
回到前面的公式,min 需要的补偿斜率可以写成:
mc_min = max((m2 - m1) / 2, 0)
对于 Buck 变换器,m1 = (Vin - Vo) / L,m2 = Vo / L,代入之后:
mc_min = max((2Vo - Vin) / (2L), 0)
这个式子很关键。它说明在 Buck 拓扑里,最小补偿斜率只跟输入电压、输出电压和电感量有关,跟负载电流没有直接关系。输出电压通常是固定的,电感量是已知的,那么唯一需要实时跟踪的变量就是输入电压。
当然这是理论最小值,实际应用中不会卡得那么死,一般会留 1.2 到 1.5 倍的裕量,同时叠加一个很小的底值,用来抑制轻载时可能的抖动和噪声误触发。但总体原则是:补偿量跟着工作点走,而不是一个常数打天下。
3.2 模拟实现方案
模拟域的实用做法是采用输入电压前馈型斜坡发生器。设计思路是:用电阻分压网络采样输入电压 Vin,再用一个运放或者跨导放大器计算出 (2Vo - Vin) 这个量,因为 Vo 固定,所以 2Vo 是一个常量基准,减法电路很容易做。当 Vin 小于 2Vo 时输出为正,对应的补偿斜率按比例叠加到 PWM 比较器;当 Vin 大于 2Vo 时输出为零,只保留一个很低的底值。
具体到斜坡发生器的电路,常见结构是用一个电容和恒流源构成线性斜坡。恒流源的电流由上述运算电路的输出电压控制,这样斜坡斜率就正比于 (2Vo - Vin)。每个开关周期开始时,斜坡电压从零开始线性上升,在 PWM 比较器输入端与电感电流采样信号相加。
这个方案的优点是响应快,几乎不需要数字运算,模拟电路天然就是连续的。缺点是精度受元件离散性和温度影响比较大,电阻比例、电容容值、跨导放大器的增益都要校准。不过对于模拟控制的电源来说,这已经是很成熟的工程方案,很多专用电源控制芯片内部集成了类似的自适应补偿电路,外部只需要配几个电阻设定系数。
3.3 数字实现方案
在数字电源里,自适应斜坡补偿做起来更直接。芯片每个开关周期都要采样输入电压和输出电压,占空比等信息本来就有,计算工作点几乎是零成本。实现流程通常是:每个周期根据上次采样的 Vin 和 Vo 计算 D = Vo / Vin,再按 mc_min 的函数关系计算需要的补偿斜率,最后换算成数字比较器里的补偿量。
数字实现的一个额外好处是可以加入温度和老化校准。模拟电路的电阻、电容随温度漂移会导致补偿实际值和设计值偏离,数字方案里可以用温度传感器数据修正系数,长期运行一致性更好。另一个优势是补偿量可以做成可实时观测的寄存器,调试时直接读出来看当前补偿斜率是多少,很容易确认自适应算法是否按预期工作。
数字实现的坑也有,最典型的是更新时序。补偿量一定要在 PWM 周期起始点更新,不能在周期中间跳变,否则会在占空比波形上产生毛刺。另外 ADC 采样延迟会带来相位滞后,如果输入电压快速变化,补偿量更新会有几个周期的延迟,需要增加一点带宽和裕量来覆盖这个延迟。
3.4 一个宽输入 Buck 的设计计算例子
拿前面那个宽输入 Buck 来算一下自适应补偿的具体数值。Vin 范围 4.5V 到 16V,Vo = 3.3V,L = 2.2uH,Fsw = 500kHz,Ts = 2us。
关键工作点的计算如下:
| 输入电压 | 占空比 D | m1 (A/us) | m2 (A/us) | 理论最小补偿 mc (A/us) |
|---|---|---|---|---|
| 4.5V | 0.733 | 0.545 | 1.5 | 0.478 |
| 6V | 0.55 | 1.23 | 1.5 | 0.135 |
| 8V | 0.413 | 2.14 | 1.5 | 0 |
| 12V | 0.275 | 3.95 | 1.5 | 0 |
| 16V | 0.206 | 5.77 | 1.5 | 0 |
可以看到,只在输入电压低于 6.6V 时才需要正的斜坡补偿,输入电压越接近 4.5V,需要的补偿斜率越大。如果采用固定补偿,按最恶劣 0.478 A/us 再加裕量取 0.7 A/us,那么在 16V 输入时,补偿斜率是实际需要的十几倍。自适应方案下,16V 时补偿量只有底值 0.05 到 0.1 A/us,电流内环增益几乎不受影响,动态响应自然好得多。
实际标定时我会按理论值乘以 1.5 的安全系数,同时确保底值不小于 0.05 A/us。然后在最低输入电压满载下实测电感电流波形,如果没有出现大小波,再把裕量慢慢往下压,找到既能稳定又不明显拖垮动态响应的甜点区。这个过程就是“自适应”调校的核心。
4. 设计与验证:从仿真到实测
4.1 参数计算与补偿斜率标定
设计的第一步是确定基础参数。电感量、开关频率、输出电压这些在前面已经用了,但实际项目里还会考虑电感电流纹波。补偿斜率的设计其实会反过来影响电感的选择:过大的固定补偿会迫使系统把电流基准抬得更高,相当于变相要求更大的电感纹波能力,否则限流点太早触发。自适应补偿因为把补偿斜率压低,对电感的额外应力也小。
选定模拟方案或数字方案后,要先把补偿回路里的增益系数标定好。模拟电路里通常先确定斜坡电容 Cramp 和充电电流源的比例,然后用电阻网络调节 (2Vo - Vin) 到电流源的转换系数。数字方案里则是把 mc_min 公式中的乘除运算做成定点数,注意 L 的数值要按实际电感量写入,不能直接套理论值,因为电感饱和后实际电感量会下降,补偿斜率会偏小。
标定顺序建议:先在空载下看稳态波形,确认没有音频噪声;然后满载下看次谐波振荡迹象;最后做负载阶跃测试,记录输出电压动态响应。每一步都在固定补偿和自适应补偿之间做对比,数据表格化,方便后续复盘。
4.2 仿真验证要点
仿真阶段我习惯分成两步。第一步用理想的电流模式控制器模型验证控制逻辑,重点看补偿斜率随工作点变化的规律是否正确。第二步加入 MOS 管、电感 DCR、采样电阻等非理想因素,看补偿斜率在实测条件下是否仍然满足稳定裕度。
常用的仿真软件是 LTspice 或 SIMPLIS。峰值电流模式仿真里,PWM 逻辑通常用 RS 触发器搭:时钟信号置位,比较器复位,时钟频率就是开关频率。斜坡补偿信号加在比较器的反向输入端,和电感电流采样信号叠加。注意比较器需要设置合理的传输延迟,延迟太大会让仿真结果偏乐观,实测时次谐波振荡更早出现。
我在仿真里会用参数扫描功能,把输入电压从最低扫到最高,每一点都看电感电流波形。重点不是在仿真里“能稳定”,而是观察补偿斜率变化是否平滑。如果自适应算法在某个输入电压点出现补偿量跳变,说明公式实现里有边界问题,要提前修掉。
4.3 实测波形判读:如何发现次谐波振荡
实测时最容易忽略的是次谐波振荡的波形特征。它不像普通振荡那样明显,而是表现为电感电流峰值交替变化,占空比也一高一低地交替。由于频率是开关频率的一半,很多人会把它当成测量噪声或者示波器混叠,结果调了半天环路参数也没找到根因。
判断方法很简单:把示波器时基放到比几个开关周期稍宽的范围,触发在 PWM 上升沿。如果看到电感电流峰值点形成一条明显的“双线”,说明两个相邻周期的电流峰值不重合,次谐波振荡存在。更严格的做法是把波形做数学运算,取电流峰值的包络,如果包络有周期性的高低起伏,那就是次谐波振荡。
还有一个快速定位手段:改变负载电流,观察振荡幅度是否随电流增大而增大。次谐波振荡在 D 大于 0.5 的工况下会随电流增大加剧,而普通噪声没有这种相关性。这样可以很快判断问题是不是补偿不足引起的。
5. 常见问题与排查技巧实录
5.1 轻载啸叫与音频噪声
轻载啸叫在峰值电流模式电源里很常见,尤其在进入轻载后系统从 CCM 切到 DCM 或者突发模式时。固定斜坡补偿太大时,电流内环增益被压得过低,突发模式的窗口阈值不准,加上次谐波振荡的残余包络可能落在音频范围内,电感就会发出吱吱声。
自适应补偿在这种情况下有明显优势:轻载时占空比往往不大,需要的最小补偿斜率也很小,系统自动把补偿量降下来,电流内环增益恢复到较高水平,突发模式切换的抖动明显减小。如果仍然有轻微啸叫,优先检查底值补偿是否设置过大。我用过的最小底值是 0.03 A/us,再往下就压不住比较器噪声了。
5.2 瞬态恢复变慢的调试
如果自适应方案做完了,负载阶跃测试反而比固定补偿前更慢,大概率是自适应算法里的补偿斜率计算偏差导致的。常见的锅是输入电压采样有延迟或者有高频噪声,导致补偿量在真实工作点附近乱跳,环路平均增益反而降低。
排查时先在轻载和满载分别读出当前的补偿斜率寄存器值,看数值是否和理论计算一致。如果数值波动很大,给输入电压采样加一级数字低通滤波,截止频率别太高,刚好滤掉开关噪声就行。另外从固定补偿切换到自适应补偿时,不要一次性把裕量砍太多,分步验证,每次只降 20%,观察动态响应是否有劣化趋势。
5.3 数字实现中的抖动与量化毛刺
数字斜坡补偿最容易踩的坑是量化毛刺。补偿量在每个开关周期刷新,如果相邻两个周期的补偿量变化太大,PWM 比较器的翻转点会被“拉扯”,占空比波形出现抖动脉宽。这在电感电流波形上看起来像随机噪声,但实际上是确定性的量化效应。
解决办法有三个方向。第一,提高补偿量的有效位数,用定点数或者多级累加器来平滑变化。第二,补偿量更新时刻对齐到 PWM 周期起点,不要在比较器翻转前瞬时更新。第三,如果芯片支持 PWM 抖动功能,开启抖动可以消除周期性毛刺的幅值。这个毛刺问题在模拟电路里不明显,但在数字电源里几乎是必踩的坑。
5.4 排查工具与测量心得
我自己调试峰值电流模式电源,必用的工具组合是:电流探头、差分电压探头、网络分析仪。电流探头用于看电感电流波形,判断次谐波振荡;差分电压探头用于测量输出纹波和负载阶跃响应;网络分析仪用于测量控制环路的穿越频率和相位裕度。
网络分析仪在自适应补偿调试里特别有用。在固定补偿和自适应补偿两种模式下分别测环路增益,对比穿越频率,可以很客观地量化自适应补偿带来的动态性能提升。我见过不少团队只看时域波形,觉得差不多,但频域数据一出来,穿越频率差了 1.5 倍,才意识到固定补偿原来“偷”了这么多带宽。
测量时还要注意探头的接地方式。高频环路测量对探头地线非常敏感,地线夹一长,高频段全是噪声毛刺,相位裕度测出来虚低。我一般用接地弹簧,探针和地线尽可能短,测量结果才有参考价值。
6. 调试中我印象最深的几件事
做自适应斜坡补偿这一年多,最深的体会是:斜坡补偿不是“为了稳定而牺牲一切”的手段,它本质上是一个优化问题。稳定只是下限,动态响应和效率才是真正要追求的上限。刚开始我也习惯沿用固定补偿,毕竟设计简单,验证一次就能量产。但连续两次遇到宽输入范围电源的负载动态不合格后,我下定决心把自适应方案工程化,效果确实超出预期。
有一次在 4.5V 到 16V 输入的 Buck 上做对比测试,固定补偿下负载阶跃恢复时间是 75us,切换到自适应补偿后降到 38us,输出电压跌落也从 140mV 改善到 85mV。效率在中重载区提升了 0.8 到 1.2 个百分点。这个差距不是纸面上的,是实实在在的系统性能提升。
最后分享一个调试技巧:在数字方案里加一个补偿斜率的遥测寄存器,把实时补偿值记录下来,配合输入电压曲线一起看。很多模糊的问题,比如某个输入电压范围内效率突然变差、动态响应突然变慢,对着补偿斜率曲线一看就明白了——多半是补偿量在那个区间被算法顶到了不该有的高位。数据永远比直觉可靠,这也是我越来越倾向数字实现的原因。