1. Buck变换器开环仿真与稳态分析

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,偏差由占空比固定与寄生参数引起

验证方法

执行仿真代码后,观察终端输出与波形图,判定标准如下:

  1. 稳态平均输出电压在11.5V~12.5V范围内(±4%偏差)
  2. 电感电流纹波在0.5A~0.7A范围内(理论值0.6A±15%)
  3. 输出电压纹波小于10mV(考虑ESR后的合理范围)
  4. 波形图中输出电压与电感电流呈现周期性稳态,无发散或振荡

满足以上条件即可判定仿真模型正确,Buck变换器开环稳态特性符合理论预期。

Buck变换器开环仿真电路拓扑 V_in=48V + − S PWM D L=150μH V_out C=470μF ESR=0.05Ω R 4Ω D=0.25 稳态关键波形 V_sw (开关节点) 0V 48V T_sw=10μs i_L (电感电流) 2.7A 3.3A ΔI_L≈0.6A V_out (输出电压) 11.99V 12.01V ΔV≈1.6mV 开关频率100kHz | 占空比0.25 | CCM模式