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)

我的配置步骤是这样的:

  1. 先确定零点位置:零点放在 LC 双极点附近,大约 5kHz
  2. 再定高频极点:放在 100kHz 左右,抑制开关噪声
  3. 最后算增益:根据带宽要求调整 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 补偿,那玩意儿更灵活,但参数也更多,到时候再细说。