1. 环路补偿到底在补什么:从Buck的传递函数说起
搞电源的人都有一个共识:Buck功率级本身是个“不听话”的家伙。你给它一个占空比指令,它不会老老实实立刻输出对应电压,而是先振荡几下、延迟一会儿,才慢慢稳定下来。环路补偿要干的事,就是给这个“不听话”的功率级配一个“管教方案”,让整个闭环系统在动态响应和稳定性之间找到平衡点。
1.1 为什么Buck功率级必须做补偿
先看Buck在CCM模式下的功率级传递函数。以电压模式控制为例,从控制到输出的传递函数大致是这样的形式:
Gvd(s) = Vin * (1 + s/(ω_esr)) / (1 + s/(Q*ω_0) + (s/ω_0)^2)这里面藏着两个关键信息。第一,LC滤波器构成了一个双极点,在频率ω_0 = 1/√(LC)处产生-40dB/dec的增益滚降,同时相位急剧下降180度。第二,输出电容的ESR带来一个左半平面零点,在ω_esr = 1/(R_esr*C)处把相位往回拉一点。
问题就出在那个双极点上。当频率超过ω_0之后,增益以-40dB/dec的速度往下掉,相位已经接近-180度。如果这时候环路增益还没降到0dB以下,系统必然振荡。更要命的是,PWM调制器和采样保持还会引入额外的延迟,进一步恶化相位。
所以补偿网络的核心任务就两个:在穿越频率附近把相位抬起来,保证足够的相位裕度;把低频增益做高,保证直流精度和负载调整率。这两件事听起来简单,做起来就是另一回事了。
1.2 补偿网络的三种基本形态
实际工程中,补偿网络基本逃不出三种形态:
- Type I补偿:就是一个积分器,纯电容反馈。低频增益无穷大,但相位永远-90度,只适合电流模式控制或者有足够相位余量的场合。
- Type II补偿:一个极点、一个零点、一个原点极点。这是Buck最常用的补偿形式,零点用来抵消LC双极点中的一个,原点极点提供高直流增益。
- Type III补偿:两个极点、两个零点、一个原点极点。适合电压模式控制中LC双极点都需要补偿的场合,相位可以抬到-90度以上。
Type II和Type III的区别,本质上就是你需要补多少相位。电流模式控制下,电感电流内环把LC双极点拆成了一个单极点,所以Type II就够了。电压模式控制下,双极点还在,就得用Type III。
注意:很多新手一上来就抄Type III,觉得“补得多肯定更稳”。实际上补偿过头会导致高频段增益太高,开关噪声和ESR零点反而会引发高频振荡。补偿要的是“刚刚好”,不是“越多越好”。
1.3 穿越频率怎么定:一个被低估的关键决策
穿越频率(也叫交越频率)是整个补偿设计的锚点。它决定了系统的响应速度,也决定了你能拿到多少相位裕度。
经验法则大家都听过:穿越频率取开关频率的1/10到1/5。但这个范围其实很宽,具体取多少要看几个因素:
- 开关频率:500kHz的Buck,穿越频率可以做到50k到100kHz;100kHz的Buck,穿越频率可能只有10k到20kHz。
- 输出电容的ESR零点:如果ESR零点很低,穿越频率不能超过它太多,否则相位会掉。
- 右半平面零点:Boost和Buck-Boost有RHPZ,Buck在CCM下没有,但如果是同步Buck工作在强制PWM模式,轻载时可能进入DCM,传递函数会变。
- 采样延迟:PWM比较器和采样保持引入的延迟大约是一个开关周期,这个延迟在穿越频率处贡献的相位损失是360*fc/fsw度。如果fc=fsw/10,损失36度;如果fc=fsw/5,损失72度。这就是为什么穿越频率不能取太高的根本原因。
我个人的习惯是:先用fsw/10做初步设计,算完相位裕度再看能不能往上推。如果相位裕度有60度以上,可以试着把fc提到fsw/8甚至fsw/6;如果相位裕度只有45度左右,就老老实实待在fsw/10。
2. 普通运放做补偿:电压型误差放大器的实战细节
普通运放(电压反馈型运放)做补偿,是教科书上最经典的方案。它的工作原理很简单:运放的同相端接参考电压,反相端接反馈分压,输出经过RC网络反馈到反相端,形成Type II或Type III补偿。
2.1 电压型补偿网络的传递函数推导
以Type II补偿为例,电路结构是:运放反相端通过R1接输出电压分压点,反馈网络是R2和C1串联后再并联C2。
传递函数推导过程如下:
Z_in = R1 Z_fb = (R2 + 1/(s*C1)) || (1/(s*C2)) = (1 + s*R2*C1) / (s*(C1+C2) + s^2*R2*C1*C2) Gc(s) = -Z_fb/Z_in = -(1 + s*R2*C1) / (s*R1*(C1+C2) + s^2*R1*R2*C1*C2)整理成标准形式:
Gc(s) = - (1 + s/ω_z) / (s/ω_p0 * (1 + s/ω_p1))其中:
- 原点极点:ω_p0 = 1/(R1*(C1+C2))
- 零点:ω_z = 1/(R2*C1)
- 高频极点:ω_p1 = (C1+C2)/(R2C1C2)
这个网络在低频段以-20dB/dec滚降,在ω_z处转为平坦,在ω_p1处再次以-20dB/dec滚降。相位在ω_z和ω_p1之间抬升,最大相位提升大约70度左右。
2.2 参数计算:从目标相位裕度反推RC值
假设一个实际案例:Vin=12V,Vout=3.3V,Iout=5A,fsw=500kHz,L=2.2μH,Cout=47μF(ESR=5mΩ)。
第一步,算LC双极点:
ω_0 = 1/√(2.2e-6 * 47e-6) = 1/√(1.034e-10) = 98.3k rad/s f_0 = 15.6kHz第二步,算ESR零点:
f_esr = 1/(2π*5e-3*47e-6) = 677kHz第三步,定穿越频率。取fsw/10=50kHz。在50kHz处,LC双极点已经贡献了-40dB/dec的滚降,功率级增益大约:
|Gvd(50kHz)| ≈ Vin / (ω_0^2 * L * C) * (ω_0/ω_c)^2这个公式展开比较麻烦,实际用仿真或者Excel算更快。假设算出来功率级在50kHz处增益是-20dB,那么补偿网络需要在50kHz处提供+20dB增益。
第四步,配置Type II补偿。零点放在LC双极点附近,取f_z=15kHz;高频极点放在ESR零点附近,取f_p1=500kHz。
计算RC值:
- 取R1=10kΩ(反馈分压上电阻,兼顾功耗和噪声)
- 由f_z=1/(2πR2C1)=15kHz,且f_p1=(C1+C2)/(2πR2C1*C2)=500kHz
- 先取C1>>C2,则f_p1≈1/(2πR2C2)
- 联立解得:R2≈1/(2π15kC1),C2≈1/(2π500kR2)
实际取值需要迭代几次,因为C1和C2的比值会影响零点和极点的精确位置。我一般用Excel做个表格,输入目标f_z和f_p1,自动算出R2、C1、C2,然后取标准值再验算。
2.3 普通运放的选型要点
不是随便拿个运放就能做补偿。电压型补偿对运放的要求主要有几条:
- GBW(增益带宽积):至少是穿越频率的10倍以上。如果fc=50kHz,GBW至少500kHz,实际建议1MHz以上。GBW不够会导致高频段相位额外下降。
- 压摆率SR:在负载瞬变时,运放输出要快速摆动。SR不够会导致恢复时间变长,甚至出现大信号振荡。一般要求SR > 2πfcVout。
- 输入失调电压Vos:直接影响输出直流精度。Vos=1mV,在3.3V输出上就是0.03%的误差,一般够用。如果要高精度,选Vos<100μV的。
- 输入偏置电流Ib:如果R1取得大,Ib会在R1上产生额外压降。Ib=10nA,R1=10kΩ,误差只有0.1mV,可以忽略。但如果R1=1MΩ,误差就是10mV,不能忽略。
实操心得:我见过不少人用LM358做补偿,结果负载瞬变时输出掉一大截。LM358的GBW只有1MHz,SR只有0.3V/μs,在50kHz穿越频率下勉强能用,但动态响应很差。换成TLV9062或者OPA2376这种GBW=10MHz、SR=5V/μs以上的,效果立竿见影。
2.4 电压型补偿的PCB布局要点
电压型补偿网络对噪声很敏感,因为高阻抗节点(运放反相端)容易耦合噪声。PCB布局要注意:
- 补偿网络的RC尽量靠近运放反相端,走线越短越好。
- 反相端的走线要远离开关节点(SW节点),最好用地平面隔离。
- 反馈分压电阻靠近运放,分压点走线不要经过功率级下方。
- 运放供电引脚要加去耦电容,100nF+1μF组合,尽量靠近引脚。
3. 跨导运放做补偿:电流型误差放大器的不同玩法
跨导运放(OTA,Operational Transconductance Amplifier)和普通运放的本质区别在于:普通运放是电压输入电压输出,跨导运放是电压输入电流输出。它的输出电流与差分输入电压成正比,比例系数就是跨导gm。
3.1 跨导运放的工作原理与补偿网络结构
跨导运放的符号和普通运放很像,但输出端是一个电流源。它的传递函数是:
I_out = gm * (V+ - V-)做补偿时,跨导运放的输出电流直接灌入补偿网络(通常是RC串联到地),在补偿网络上产生电压,这个电压再去和PWM比较器的斜坡比较。
补偿网络的结构很简单:一个电阻Rc和一个电容Cc串联,再并联一个电容Cp。传递函数是:
Z_comp(s) = (1 + s*Rc*Cc) / (s*(Cc+Cp) + s^2*Rc*Cc*Cp)整体环路增益是:
T(s) = gm * Z_comp(s) * Gvd(s) * (1/Vramp)其中Vramp是PWM斜坡幅度。
3.2 跨导运放补偿的参数计算
还是用上面的案例:Vin=12V,Vout=3.3V,fsw=500kHz,L=2.2μH,Cout=47μF。
跨导运放的gm通常是固定值,比如100μS到1mS。假设gm=200μS,Vramp=1V。
补偿网络的设计思路和电压型类似,但计算方式不同。因为跨导运放的输出是电流,补偿网络的阻抗直接决定了增益。
在穿越频率fc=50kHz处,需要的环路增益为1(0dB)。功率级在50kHz处的增益假设是-20dB(0.1倍)。那么:
gm * |Z_comp(50kHz)| * 0.1 / 1 = 1 |Z_comp(50kHz)| = 1 / (0.2m * 0.1) = 50kΩ所以补偿网络在50kHz处的阻抗模值要是50kΩ。然后根据零点和极点的位置分配Rc、Cc、Cp。
零点放在15kHz,极点放在500kHz:
- 在15kHz以下,Z_comp≈1/(s*Cc),阻抗随频率下降
- 在15kHz处,零点起作用,阻抗变平
- 在500kHz处,极点起作用,阻抗再次下降
计算:
Rc = 50kΩ(在平坦区的阻抗) Cc = 1/(2π*15k*50k) = 212pF Cp = 1/(2π*500k*50k) = 6.4pF实际取值:Rc=51kΩ,Cc=220pF,Cp=6.8pF。
3.3 跨导运放的优势与适用场景
跨导运放做补偿有几个天然优势:
- 补偿网络简单:不需要反馈电阻,RC直接到地,布局更紧凑。
- 带宽要求低:跨导运放的带宽通常不需要很高,因为它的输出是电流,补偿网络的阻抗在低频段很高,增益自然就上去了。
- 适合集成:很多电源IC内部集成的误差放大器就是跨导型,外部只需要接RC。
- 抗噪声能力强:补偿网络是低阻抗节点(相对于电压型的高阻抗反相端),噪声耦合更少。
但跨导运放也有缺点:
- gm随温度变化:跨导值会随温度漂移,导致环路增益变化。一般gm的温度系数在-0.3%/°C左右,工业级温度范围内变化可能超过20%。
- 输出摆幅受限:跨导运放的输出电流有限,补偿网络阻抗不能太大,否则输出会饱和。
- 直流精度依赖gm:低频增益是gm*Rc,gm不准会导致直流增益不准。
注意:跨导运放的gm通常有较大的初始误差(±30%甚至更多),设计时要留足余量。如果对直流精度要求高,建议用电压型运放。
3.4 跨导运放补偿的PCB布局要点
跨导运放的补偿网络布局相对简单,但有几个坑要注意:
- 补偿网络的RC要靠近跨导运放输出引脚,走线尽量短。
- 如果Cp很小(几pF),要注意PCB寄生电容的影响。走线长度每增加1mm,寄生电容大约0.1pF,如果Cp只有6.8pF,走线长了会影响极点位置。
- 跨导运放的输出是高阻抗节点,要远离开关节点和电感。
- 如果补偿网络的地线要单独走,不要和功率地混在一起。
4. 两种方案的正面对比:什么时候用哪个
普通运放和跨导运放做补偿,没有绝对的优劣,关键看应用场景和设计约束。
4.1 关键参数对比
| 对比项 | 普通运放(电压型) | 跨导运放(电流型) |
|---|---|---|
| 补偿网络结构 | 反馈式,RC接在反相端和输出之间 | 对地式,RC接在输出和地之间 |
| 传递函数 | 由Z_fb/Z_in决定 | 由gm*Z_comp决定 |
| 低频增益 | 由R2/R1决定,可以很精确 | 由gm*Rc决定,gm误差大 |
| 带宽要求 | GBW>10*fc | 带宽要求低 |
| 噪声敏感度 | 高(高阻抗节点) | 低(低阻抗节点) |
| 温度稳定性 | 好 | gm温漂影响增益 |
| 布局复杂度 | 较高 | 较低 |
| 适合场景 | 高精度、高动态响应 | 集成化、低成本、低噪声 |
4.2 选型决策树
我一般按这个逻辑来选:
- 如果电源IC内部已经集成了误差放大器:看它是电压型还是跨导型。如果是跨导型,外部只能接RC到地,没得选。如果是电压型,外部可以接反馈网络。
- 如果自己搭分立补偿电路:优先考虑电压型运放,因为增益精度高、温度稳定性好。除非对布局空间有极端要求,或者噪声环境特别恶劣。
- 如果穿越频率要求很高(>fsw/6):电压型运放更合适,因为跨导运放的gm带宽可能不够。
- 如果对成本极度敏感:跨导运放通常更便宜,而且外部元件少。
- 如果对直流精度要求高(<1%):电压型运放,因为gm的初始误差和温漂会直接影响输出精度。
4.3 混合方案的可行性
有人问能不能用普通运放搭成跨导型?理论上可以,在运放输出串一个大电阻,输出电流约等于Vout/R,等效gm=1/R。但这样做的缺点是:
- 等效gm由电阻决定,精度高但温漂取决于电阻
- 输出电流能力受运放输出摆幅限制
- 需要额外的电阻,增加成本和布局面积
实际工程中,这种混合方案很少用,因为专门的跨导运放更简单、更便宜。
5. 实操中踩过的坑与排查技巧
补偿电路设计完了,不代表就能稳定工作。实际调试中遇到的问题,往往比理论计算复杂得多。
5.1 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方法 |
|---|---|---|---|
| 输出低频振荡(几百Hz) | 相位裕度不足,穿越频率太低 | 测环路增益,看相位裕度 | 增大Rc或减小Cc,提高零点频率 |
| 输出高频振荡(几十kHz) | 高频极点太远,开关噪声耦合 | 示波器看SW节点和输出 | 减小Cp或增大Rc,拉近高频极点 |
| 负载瞬变恢复慢 | 穿越频率太低 | 测负载阶跃响应 | 提高穿越频率,减小Cc |
| 负载瞬变过冲大 | 相位裕度不足 | 测阶跃响应过冲量 | 调整零点位置,增加相位裕度 |
| 输出直流误差大 | 运放Vos大或gm误差大 | 测直流输出电压 | 换低Vos运放或校准gm |
| 温度变化后不稳定 | gm温漂或电容温漂 | 高低温测试 | 选温度系数好的元件,留余量 |
| 轻载时振荡 | 进入DCM模式,传递函数变化 | 轻载下测环路 | 增加假负载或调整补偿 |
5.2 环路测试的实操方法
测环路增益最常用的方法是注入法:在反馈分压点和补偿网络之间注入一个小信号,测注入点两端的电压比。
具体操作:
- 在反馈分压电阻和运放反相端之间串一个10Ω电阻(注入电阻)。
- 用频率响应分析仪(或者带扫频功能的示波器)在注入电阻两端加扫频信号。
- 测注入电阻两端的电压V_inj和运放输出电压V_out。
- 环路增益T = V_out/V_inj(注意方向)。
如果没有专业设备,可以用信号发生器和示波器手动扫频,但效率很低。我一般用Bode 100或者OMICRON Lab的Bode Analyzer,配合注入变压器,测起来很快。
实操心得:注入电阻不能太大,否则会影响直流工作点;也不能太小,否则注入信号太弱。10Ω到50Ω是比较合适的范围。注入信号幅度也要控制,一般10mV到50mV,太大会导致运放非线性。
5.3 相位裕度的快速估算
没有频响分析仪的时候,可以用阶跃响应来估算相位裕度:
- 过冲量<5%:相位裕度>65度
- 过冲量5%-10%:相位裕度55-65度
- 过冲量10%-20%:相位裕度45-55度
- 过冲量>20%:相位裕度<45度,需要重新补偿
这个方法虽然不精确,但能快速判断系统是否稳定。我一般在调试初期用这个方法快速迭代,最后再用频响分析仪确认。
5.4 PCB布局的避坑清单
- 补偿网络的地线:一定要单独走,回到运放的地引脚,不要和功率地混在一起。功率地上的开关噪声会通过地线耦合到补偿网络。
- 反馈分压的走线:远离电感和SW节点,最好用地平面包起来。分压点的走线越长,耦合的噪声越多。
- 运放供电去耦:100nF和1μF并联,尽量靠近运放引脚。如果运放离电源IC远,还要加10μF。
- 补偿电容的选型:C0G/NP0电容温度系数好,但容量小;X7R容量大但温度系数差。补偿网络里尽量用C0G,如果容量不够可以并联。
- 电阻的选型:薄膜电阻比厚膜电阻温度系数好,精度高。补偿网络里的电阻建议用1%精度的薄膜电阻。
6. 从仿真到实测:一个完整的补偿设计流程
理论算完了,仿真跑通了,不代表实测就能过。我一般按这个流程走:
6.1 第一步:用SIMPLIS或LTspice做环路仿真
SIMPLIS做开关电源仿真速度快,适合跑环路。LTspice免费,但跑开关电源环路仿真比较慢。
仿真时要注意:
- 用平均模型而不是开关模型,速度快很多
- 注入信号用AC扫描,不要用瞬态
- 仿真结果和实测会有差异,主要是寄生参数和延迟
6.2 第二步:搭板实测
第一版板子回来之后,先不急着焊补偿网络,先测功率级开环传递函数。具体做法:
- 断开补偿网络,给一个固定的占空比
- 在占空比上叠加一个小信号,测输出电压
- 扫频得到功率级传递函数
然后根据实测的功率级传递函数,重新计算补偿网络参数。这一步很关键,因为仿真模型和实际电路总有差异。
6.3 第三步:闭环调试
焊上补偿网络,测环路增益和相位裕度。如果相位裕度不够,按这个顺序调:
- 先调零点位置:零点往低频移,相位提升更早,但低频增益会下降
- 再调高频极点:极点往低频移,高频噪声抑制更好,但相位裕度会下降
- 最后调穿越频率:如果相位裕度够,可以适当提高穿越频率改善动态响应
6.4 第四步:全工况验证
补偿网络调好之后,要验证各种工况:
- 满载、半载、轻载
- 输入电压最低、典型、最高
- 高低温
- 负载阶跃(10%-90%、90%-10%)
- 输入阶跃
每个工况都要测相位裕度和动态响应,确保没有异常。
实操心得:我见过很多设计在常温满载下很稳,一到低温轻载就振荡。原因是低温下电容容量下降、ESR上升,零点频率变了;轻载下进入DCM,传递函数也变了。所以全工况验证不能省。
7. 几个容易被忽略的细节
7.1 运放输出摆幅的限制
补偿网络的输出不能超过运放的输出摆幅。如果运放供电是3.3V,输出摆幅可能只有0.1V到3.2V。在负载瞬变时,运放输出要快速摆动,如果摆幅不够,恢复时间会变长。
选运放时要看输出摆幅指标,最好是Rail-to-Rail输出。如果做不到,至少保证在最大负载变化时,运放输出不会饱和。
7.2 补偿网络的初始条件
上电瞬间,输出电容还没充电,反馈电压为0,运放输出会饱和到最高。这时候补偿网络的电容会被充电到某个电压,影响软启动过程。
解决方法:
- 加软启动电路,让参考电压慢慢上升
- 在补偿电容上并联一个二极管,限制初始电压
- 用带软启动功能的电源IC
7.3 跨导运放的输出阻抗
跨导运放的输出阻抗通常很高(几十kΩ到几百kΩ),这个阻抗和补偿网络并联,会影响传递函数。如果输出阻抗不够高,低频增益会下降。
选跨导运放时要看输出阻抗指标,一般要求>100kΩ。如果不够,可以在输出加一个缓冲器,但会增加成本。
7.4 电容的直流偏压效应
X7R和X5R电容在直流偏压下容量会大幅下降。比如一个47μF的X7R电容,在3.3V偏压下可能只有20μF。这会导致LC双极点频率上移,补偿网络的零点位置就不对了。
解决方法:
- 用C0G电容,但容量小、成本高
- 用聚合物电容,偏压效应小
- 降额使用,选大一号的电容
- 在仿真和计算时考虑偏压后的实际容量
这个坑我踩过好几次,尤其是输出电容用X7R的时候。后来养成习惯,选电容先看偏压曲线,再算实际容量。
8. 写在最后
Buck环路补偿这件事,理论很重要,但经验更重要。书本上的公式能帮你算出初始值,但实际调试中的问题,往往要靠经验来判断。
普通运放和跨导运放的选择,没有标准答案。我个人的习惯是:如果电源IC内部集成了跨导运放,就用跨导型,外部RC调起来方便;如果自己搭分立电路,优先用电压型运放,增益精度和温度稳定性更好。
补偿网络调完之后,一定要做全工况验证。常温满载稳不代表低温轻载也稳,仿真通过不代表实测通过。多测几个工况,多留一点余量,比什么都重要。
最后分享一个小技巧:如果调试时发现相位裕度总是差一点,可以试着把补偿网络的电阻换成电位器,边调边测,找到最佳值再换成固定电阻。这个方法虽然土,但很有效。