3. 峰值电流模式控制Buck变换器
任务定义
设计并实现一个峰值电流模式控制的Buck变换器仿真模型。控制器需在输入电压Vin=12V、输出电压Vout=3.3V、开关频率fsw=100kHz条件下,通过峰值电流内环与电压外环实现稳压输出。负载电流在0.5A~3A范围内阶跃变化时,输出电压偏差应小于±2%,且系统稳定无振荡。
控制原理与参数设计
峰值电流模式控制包含两个环路:内环为电流环,当电感电流达到电压误差放大器输出的基准电平时,关断功率开关;外环为电压环,通过补偿网络调节电流基准。本案例采用平均模型进行仿真,电感L=33μH,输出电容C=220μF(含ESR=50mΩ),电流采样增益Rs=0.1Ω,斜坡补偿斜率Ma=25000A/s以抑制次谐波振荡。
仿真实现
import numpy as np
import matplotlib.pyplot as plt
# 参数定义
Vin, Vout, fsw = 12.0, 3.3, 100e3
L, C, ESR = 33e-6, 220e-6, 0.05
Rs, Ma = 0.1, 25000.0
Ts = 1/fsw
D = Vout/Vin # 稳态占空比
# 电压环补偿参数(PI控制器)
kp, ki = 0.8, 2000.0
# 仿真时间与步长
t_end, dt = 0.01, 1e-7
n_steps = int(t_end/dt)
t = np.linspace(0, t_end, n_steps)
# 状态变量初始化
il = np.zeros(n_steps) # 电感电流
vc = np.zeros(n_steps) # 电容电压
vref = 3.3 # 电压基准
ve = 0.0 # 电压误差积分
il_ref = 0.0 # 电流基准
duty = np.zeros(n_steps) # 占空比记录
# 负载电流定义:0.5A启动,0.005s阶跃至3A
def load_current(t_val):
return 0.5 if t_val < 0.005 else 3.0
# 主仿真循环(平均模型+峰值电流限制)
for i in range(1, n_steps):
i_load = load_current(t[i])
# 电压环PI计算电流基准
err_v = vref - vc[i-1]
ve += err_v * dt
il_ref = kp*err_v + ki*ve
il_ref = np.clip(il_ref, 0, 5.0) # 限幅
# 峰值电流模式:占空比由电流比较决定
# 平均模型近似:d = (il_ref - il)/ (Vin/L*Ts) 需加斜坡补偿
slope_on = (Vin - vc[i-1])/L
slope_off = -vc[i-1]/L
# 峰值电流比较(含斜坡补偿)
peak_cmp = il_ref - Ma*D*Ts
d_inst = (peak_cmp - il[i-1])/(slope_on*Ts)
d_inst = np.clip(d_inst, 0.0, 0.9)
duty[i] = d_inst
# 状态更新(平均状态方程)
v_l = Vin*d_inst - vc[i-1]
dil_dt = v_l/L
il[i] = il[i-1] + dil_dt*dt
# 输出电容动态(含ESR)
ic = il[i] - i_load
dv_c = ic/C
vc[i] = vc[i-1] + dv_c*dt
# 输出电压=电容电压+ESR压降
vout = vc[i] + ic*ESR
# 结果提取
t_ms = t*1000
vout_series = vc + (il - np.array([load_current(ti) for ti in t]))*ESR
# 绘制结果
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6), sharex=True)
ax1.plot(t_ms, vout_series, linewidth=0.8)
ax1.set_ylabel('输出电压 (V)')
ax1.axhline(3.3, color='r', linestyle='--', linewidth=0.5)
ax1.set_ylim(3.0, 3.6)
ax1.grid(True, alpha=0.3)
ax2.plot(t_ms, il, linewidth=0.8, color='orange')
ax2.set_ylabel('电感电流 (A)')
ax2.set_xlabel('时间 (ms)')
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('peak_current_buck.png', dpi=150)
print("仿真完成,结果已保存为 peak_current_buck.png")
运行与验证
运行上述Python脚本需安装NumPy和Matplotlib库。执行后生成输出电压与电感电流波形图。验证判定标准:
- 稳态时输出电压平均值在3.3V±1%以内(3.267V~3.333V);
- 负载阶跃(0.5A→3A)后,输出电压瞬态偏差不超过±2%(即3.234V~3.366V),且恢复时间小于1ms;
- 电感电流波形无次谐波振荡(相邻周期峰值偏差小于5%)。
预期输出
仿真脚本执行后,应生成包含两个子图的波形文件:上图显示输出电压在负载阶跃时出现短暂跌落(约50mV量级)后恢复至3.3V;下图显示电感电流从0.5A阶跃至3A,且电流纹波峰峰值约0.4A。若波形出现持续振荡或电压偏差超过±2%,应检查斜坡补偿参数Ma是否满足Ma > 0.5×(Vout/L)×(1-D)≈5000A/s的稳定性条件。