1. Buck变换器开环仿真与稳态分析
任务说明
构建一个Buck变换器的开环仿真模型,输入电压48V,目标输出电压12V,开关频率100kHz,负载电阻4Ω。通过仿真获取稳态波形,验证电感电流连续模式(CCM)下的输出电压纹波与电感电流纹波是否符合理论计算值。
电路参数与理论计算
根据Buck变换器稳态原理,占空比D=Vout/Vin=12/48=0.25。设定电感L=150μH,输出电容C=470μF,ESR=0.05Ω。理论纹波计算如下:
- 电感电流纹波:ΔIL=(Vin-Vout)·D·Ts/L = (48-12)×0.25×10μs/150μH = 0.6A
- 输出电压纹波(忽略ESR):ΔVout≈ΔIL/(8·fs·C) = 0.6/(8×100k×470μ) ≈ 1.6mV
- 负载电流:Iout=Vout/R=12/4=3A
仿真模型实现
采用Python编写Buck变换器时域仿真,使用显式欧拉法以10ns步长仿真5ms(500个开关周期),确保达到稳态。开关管使用理想模型,二极管使用理想二极管(导通压降0V),电感与电容均含寄生参数。
import numpy as np
import matplotlib.pyplot as plt
# 电路参数
V_in = 48.0 # 输入电压(V)
V_out_target = 12.0 # 目标输出电压(V)
L = 150e-6 # 电感(H)
C = 470e-6 # 电容(F)
R = 4.0 # 负载(Ω)
ESR = 0.05 # 电容等效串联电阻(Ω)
f_sw = 100e3 # 开关频率(Hz)
D = V_out_target / V_in # 占空比 0.25
T_sw = 1 / f_sw # 开关周期(s)
# 仿真参数
dt = 10e-9 # 仿真步长(s)
t_end = 5e-3 # 仿真时长(s)
n_steps = int(t_end / dt)
t = np.linspace(0, t_end, n_steps)
# 状态变量初始化
i_L = 0.0 # 电感电流(A)
v_C = 0.0 # 电容电压(V)
i_R = 0.0 # 负载电流(A)
# 存储波形(每100步采样一次以节省内存)
sample_interval = 100
t_sample = []
v_out_sample = []
i_L_sample = []
i_R_sample = []
# 主仿真循环
for step in range(n_steps):
# 开关状态(理想开关:导通时压降为0)
if (step * dt) % T_sw < D * T_sw:
v_sw = V_in # 开关导通,节点电压为输入电压
else:
v_sw = 0.0 # 开关关断,二极管续流(理想二极管压降0V)
# 电感电压
v_L = v_sw - v_C - i_L * 0.01 # 电感DCR=10mΩ
# 更新电感电流(显式欧拉)
di_L = v_L / L * dt
i_L_new = i_L + di_L
# 电容电流(节点电流法:i_C = i_L - i_R)
v_out = v_C + i_L * ESR # 输出端电压(含ESR压降)
i_R = v_out / R
i_C = i_L - i_R
# 更新电容电压
dv_C = i_C / C * dt
v_C_new = v_C + dv_C
# 更新状态
i_L = i_L_new
v_C = v_C_new
# 采样
if step % sample_interval == 0:
t_sample.append(t[step])
v_out_sample.append(v_C + i_L * ESR)
i_L_sample.append(i_L)
i_R_sample.append(i_R)
# 转换为numpy数组
t_sample = np.array(t_sample)
v_out_sample = np.array(v_out_sample)
i_L_sample = np.array(i_L_sample)
i_R_sample = np.array(i_R_sample)
# 稳态分析(取最后2ms数据)
steady_mask = t_sample > 3e-3
v_out_steady = v_out_sample[steady_mask]
i_L_steady = i_L_sample[steady_mask]
v_out_avg = np.mean(v_out_steady)
v_out_ripple = np.max(v_out_steady) - np.min(v_out_steady)
i_L_avg = np.mean(i_L_steady)
i_L_ripple = np.max(i_L_steady) - np.min(i_L_steady)
print(f"稳态平均输出电压: {v_out_avg:.3f} V")
print(f"输出电压纹波: {v_out_ripple*1e3:.2f} mV")
print(f"稳态平均电感电流: {i_L_avg:.3f} A")
print(f"电感电流纹波: {i_L_ripple:.3f} A")
# 绘制波形
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6), sharex=True)
# 输出电压波形(显示最后1ms)
mask = t_sample > 4e-3
ax1.plot(t_sample[mask]*1e3, v_out_sample[mask], 'b-', linewidth=0.8)
ax1.set_ylabel('输出电压 (V)')
ax1.set_title('Buck变换器开环仿真稳态波形')
ax1.grid(True)
ax1.axhline(y=v_out_avg, color='r', linestyle='--', label=f'平均值={v_out_avg:.3f}V')
ax1.legend()
# 电感电流波形
ax2.plot(t_sample[mask]*1e3, i_L_sample[mask], 'g-', linewidth=0.8)
ax2.set_ylabel('电感电流 (A)')
ax2.set_xlabel('时间 (ms)')
ax2.grid(True)
ax2.axhline(y=i_L_avg, color='r', linestyle='--', label=f'平均值={i_L_avg:.3f}A')
plt.tight_layout()
plt.savefig('buck_openloop_steady.png', dpi=150)
plt.show()
仿真结果分析
运行上述仿真代码,程序输出稳态参数并绘制波形图。将仿真得到的纹波值与理论计算对比:
- 电感电流纹波仿真值应接近0.6A(理论值),偏差主要来自ESR与电感DCR的损耗
- 输出电压纹波仿真值应接近1.6mV(理论值),实际会因ESR效应略高
- 稳态平均输出电压应接近12V,偏差由占空比固定与寄生参数引起
验证方法
执行仿真代码后,观察终端输出与波形图,判定标准如下:
- 稳态平均输出电压在11.5V~12.5V范围内(±4%偏差)
- 电感电流纹波在0.5A~0.7A范围内(理论值0.6A±15%)
- 输出电压纹波小于10mV(考虑ESR后的合理范围)
- 波形图中输出电压与电感电流呈现周期性稳态,无发散或振荡
满足以上条件即可判定仿真模型正确,Buck变换器开环稳态特性符合理论预期。