4. Type II 补偿网络:电路结构、传递函数、零极点配置
好,咱们接着聊。前面讲了环路补偿的基本概念,今天我来重点说说 Type II 补偿网络。这东西在 Buck 变换器里用得特别多,尤其是输出电容有 ESR 的场合。我个人觉得,搞懂 Type II,基本上就能应付 80% 的电源补偿设计了。
4.1 电路结构长什么样?
Type II 补偿网络,说白了就是一个运放加上几个阻容元件。我刚开始学的时候,总觉得电路图看着复杂,其实拆开来看就三部分:
- 一个运算放大器:作为核心放大元件
- 一个反馈支路:从输出到反相输入端
- 一个输入电阻:R1,接在输入信号和反相输入端之间
反馈支路里,并联着 R2 和 C2,然后还串了一个 C1。嗯,这里要注意,C1 的位置很关键,它决定了低频增益的走势。
典型电路参数范围(我常用的):
- R1:1kΩ ~ 100kΩ
- R2:10kΩ ~ 1MΩ
- C1:1nF ~ 100nF
- C2:10pF ~ 1000pF
你想想看,为什么叫 Type II?因为它能提供两个极点和一个零点。相比 Type I 只有一个积分极点,Type II 多了一个零点,这就给了我们更多调整空间。
4.2 传递函数推导
传递函数这东西,很多工程师一听就头大。其实不用怕,咱们一步步来。
先写出反馈阻抗 Zf:
Zf = (R2 + 1/(s*C2)) || (1/(s*C1))
= (R2 + 1/(s*C2)) * (1/(s*C1)) / (R2 + 1/(s*C2) + 1/(s*C1))
= (R2*s*C1 + C1/C2) / (s*C1*(R2*s*C2 + 1 + C1/C2))
输入阻抗 Zi 就简单了:
Zi = R1
所以传递函数:
G(s) = -Zf / Zi = - (R2*s*C1 + C1/C2) / (R1 * s * C1 * (R2*s*C2 + 1 + C1/C2))
看着有点乱是吧?别急,我习惯把它整理成标准形式:
G(s) = - (1 + s*R2*C1) / (s*R1*(C1+C2)*(1 + s*R2*C1*C2/(C1+C2)))
嗯,这里要注意,实际中 C1 通常远大于 C2(10倍以上),所以可以简化:
G(s) ≈ - (1 + s*R2*C1) / (s*R1*C1*(1 + s*R2*C2))
我的小技巧: 做仿真验证时,先用简化公式快速估算,再用完整公式做精确验证。我在项目中吃过亏,有一次简化过头了,结果实际电路和仿真差了 3dB,后来查了半天才发现是 C1/C2 比值不够大。
4.3 零极点位置分析
从简化后的传递函数,我们可以直接读出零极点:
| 类型 | 位置 | 物理意义 |
|---|---|---|
| 原点极点 | f = 0 | 积分作用,提供高低频增益 |
| 零点 | fz = 1/(2π*R2*C1) | 补偿输出滤波器的双极点 |
| 高频极点 | fp = 1/(2π*R2*C2) | 抑制高频噪声,降低开关频率增益 |
为什么会这样配置?你想想看,Buck 变换器的 LC 滤波器会产生一个双极点,导致相位急剧下降 180°。Type II 的零点正好可以拉回 90° 的相位,再加上原点极点的 -90°,整体相位裕量就能控制在 45° 左右。
避坑指南: 我曾经在一个 2MHz 开关频率的项目里,把高频极点设在了 200kHz,结果环路带宽怎么也上不去。后来才发现,高频极点太低了,把中频增益压得太狠。记住,高频极点一般要放在开关频率的 1/5 到 1/10 处。
4.4 零极点配置实战
好了,理论说完了,咱们来点实际的。假设你有一个 Buck 变换器,参数如下:
- 开关频率:500kHz
- 输出电感:10μH
- 输出电容:100μF,ESR = 10mΩ
- 目标带宽:50kHz(开关频率的 1/10)
我的配置步骤是这样的:
- 先确定零点位置:零点放在 LC 双极点附近,大约 5kHz
- 再定高频极点:放在 100kHz 左右,抑制开关噪声
- 最后算增益:根据带宽要求调整 R1 和 R2
具体计算:
已知:fz = 5kHz, fp = 100kHz
由 fz = 1/(2π*R2*C1),取 C1 = 10nF
得 R2 = 1/(2π*5kHz*10nF) ≈ 3.18kΩ
由 fp = 1/(2π*R2*C2)
得 C2 = 1/(2π*3.18kΩ*100kHz) ≈ 500pF
R1 根据增益需求确定,假设需要 20dB 中频增益:
R1 = R2 / 10^(20/20) = 3.18kΩ / 10 = 318Ω
实际选型建议:
- R1 = 330Ω(标称值)
- R2 = 3.3kΩ
- C1 = 10nF
- C2 = 470pF
这样实际零极点位置会略有偏移,但仿真验证后通常能满足要求。
4.5 仿真验证
纸上谈兵没意思,咱们用 Python 快速验证一下:
import numpy as np
import matplotlib.pyplot as plt
# 元件参数
R1 = 330
R2 = 3.3e3
C1 = 10e-9
C2 = 470e-12
# 频率范围
f = np.logspace(1, 6, 1000)
s = 2j * np.pi * f
# 传递函数(简化版)
G = -(1 + s*R2*C1) / (s*R1*C1 * (1 + s*R2*C2))
# 画波特图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.semilogx(f, 20*np.log10(np.abs(G)))
plt.grid(True)
plt.ylabel('增益 (dB)')
plt.title('Type II 补偿网络波特图')
plt.subplot(2, 1, 2)
plt.semilogx(f, np.angle(G, deg=True))
plt.grid(True)
plt.ylabel('相位 (°)')
plt.xlabel('频率 (Hz)')
plt.tight_layout()
plt.show()
跑完这段代码,你会看到在 5kHz 附近增益曲线开始变平缓(零点作用),到了 100kHz 又开始下降(高频极点作用)。相位曲线在零点处上升,在高频极点处下降,整体呈现一个「山峰」形状。
我的经验: 仿真时一定要看相位曲线。如果相位裕量小于 30°,说明零点位置太靠后了,需要把零点往前移。我一般要求相位裕量在 45° 以上,这样即使元件有 ±20% 的误差,系统也能稳定工作。
好了,Type II 补偿网络就讲到这里。说白了,它就是用一个零点和两个极点,在保证稳定性的前提下,尽可能提高环路带宽。下一章咱们聊聊 Type III 补偿,那玩意儿更灵活,但参数也更多,到时候再细说。