BUCK降压电路Matlab仿真模型双闭环和开环 Matlab仿真可写报告 双闭环控制的Buck变换器系统如图5所示,它主要由功率级与控制级两个部分组成。 其中,功率级电路为Buck变换器,由开关管S、二极管D、滤波电感L与滤波电容C组成。 控制级包括电压PI控制器Gv(s)、电流PI控制器Gi(s)与PWM调制器,通过生成占空比d来实现对功率级的控制。
直接抄起Matlab开撸Buck电路仿真,先整个开环系统练手。打开Simulink,从电力电子库里拖出MOSFET、二极管、电感和电容搭出经典拓扑。记得在输出端接个可变电阻当负载,方便后面测试动态性能。

参数设置别犯低级错误,输入电压设48V,目标输出24V。电感和电容参数用公式先算个大概:
matlab
Vin = 48;
Vout = 24;
fs = 50e3; % 开关频率50kHz
D = Vout/Vin; % 占空比0.5
L_min = (Vin - Vout)*D/(0.2*Iout*fs); % 纹波电流按20%计算
C_min = (Iout*D)/(fs*Vripple); % 纹波电压设个0.5V
这参数计算看着简单,实际仿真时电感值要留30%余量,否则电流纹波大会触发保护。
开环模型跑起来后,直接在PWM发生器里输入固定占空比。运行仿真时突然发现输出电压总比理论值低------二极管压降没补偿!赶紧在占空比里加个修正项:
matlab
D_actual = (Vout + Vd)/Vin; % Vd取0.7V
波形稳定后,突然给负载来个阶跃变化,输出电压立马崩了。这时候就该双闭环出场了。

切到闭环模型,电压环和电流环的PI参数别直接抄教科书。先在MATLAB命令行用pidtune快速整定:
matlab
plant = tf([1],[L*C L/R 1]); % 小信号模型
C_v = pidtune(plant, 'pid');
调出来的参数先打个八折用,实际仿真时看着波形微调。电流环响应要比电压环快5-10倍,这个时间配合不好会引发振荡。
关键代码段藏在PWM生成模块里,注意把PI输出限幅到0-1:
matlab
function duty = pwm_control(V_ref, V_out, I_L)
persistent integrator_v integrator_i;
% 电压环PI
err_v = V_ref - V_out;
integrator_v = integrator_v + Kp_v*err_v;
I_ref = Ki_v*integrator_v;
% 电流环PI
err_i = I_ref - I_L;
integrator_i = integrator_i + Kp_i*err_i;
duty = Ki_i*integrator_i;
duty = max(0, min(1, duty)); % 硬限幅
end
调试时突然发现启动瞬间有超调,得在积分器初始化时给个初始值。或者在软启动电路里让参考电压缓慢上升,这个在仿真里加个斜坡函数就搞定。

对比开环和闭环的仿真波形,负载突变时双闭环系统能在2ms内恢复稳定,而开环直接躺平。不过要注意电感电流不能超过器件额定值,在电流环里设个限幅保护更真实。
最后来个骚操作:在仿真里故意把电容ESR设大,观察PI控制是否依然坚挺。这时候可能需要在前馈路径上加个电容电流补偿,但那就是高阶玩法了。