基于MATLAB的Buck-Boost升压-降压式变换器系统设计
本设计包括设计报告,仿真程序。
设计要求
输入侧是一个20V的直流电压,设计一个DC-DC变换器,使其输出电压为10~40V,要求纹波电压为0.2%,电感电流连续,开关管选用MOSFET,开关频率为20kHz,负载为10Ω。基于 MATLAB/Simulink 的 Buck-Boost 升压-降压式 DC-DC 变换器系统设计,满足你的设计要求:
✅ 设计指标回顾
项目 参数
输入电压 $ V_{in} $ 20 V(DC)
输出电压 $ V_{out} $ 可调范围:10 ~ 40 V
负载电阻 $ R_L $ 10 Ω
开关频率 $ f_s $ 20 kHz → 周期 $ T_s = 50\ \mu s $
纹波电压要求 ≤ 0.2% of $ V_{out} $ → 最大纹波 $ \Delta V_{out} \leq 0.08\ \text{V} $(按 40V 计)
工作模式 电感电流连续(CCM)
开关器件 MOSFET(理想开关模型)
🔧 一、Buck-Boost 原理与参数设计
- 电压转换关系(CCM 模式):
Vout=−Vin⋅D1−D V_{out} = -V_{in} \cdot \frac{D}{1 - D}Vout=−Vin⋅1−DD
注意:Buck-Boost 输出为负极性。若需正输出,可加反相器或使用非隔离型 SEPIC/Cuk,但题目明确要求 Buck-Boost,故保留负输出,或在 Simulink 中取绝对值用于显示。
为简化,我们设计 输出幅值 为 10~40V,极性忽略(仿真中关注幅值)。
令 $ V_{out} = V_{in} \cdot \frac{D}{1 - D} $
解得占空比:
D=VoutVin+Vout D = \frac{ V_{out} }{V_{in} + V_{out} }D=Vin+VoutVout
$ V_{out} $ 所需 $ D $
10 V $ 10/(20+10) = 0.333 $
40 V $ 40/(20+40) = 0.667 $
→ D 范围:0.33 ~ 0.67
- 电感设计(保证 CCM)
临界电感公式:
Lmin=(1−D)2RL2fs L_{\min} = \frac{(1 - D)^2 R_L}{2 f_s}Lmin=2fs(1−D)2RL
取最恶劣情况(D 最大 = 0.67,对应 $ V_{out}=40V,,,R_L=10\Omega $):
Lmin=(1−0.667)2⋅102⋅20 000≈(0.333)2⋅1040 000≈1.1140 000≈27.8 μH L_{\min} = \frac{(1 - 0.667)^2 \cdot 10}{2 \cdot 20\,000} \approx \frac{(0.333)^2 \cdot 10}{40\,000} \approx \frac{1.11}{40\,000} \approx 27.8\ \mu HLmin=2⋅20000(1−0.667)2⋅10≈40000(0.333)2⋅10≈400001.11≈27.8μH
取 L = 100 μH(留足裕量,确保全范围 CCM)
- 输出电容设计(满足纹波要求)
输出电压纹波(电容充放电引起):
ΔVout=D⋅Vinfs⋅RL⋅C \Delta V_{out} = \frac{D \cdot V_{in}}{f_s \cdot R_L \cdot C}ΔVout=fs⋅RL⋅CD⋅Vin
推导自:$ \Delta V = \frac{\Delta Q}{C} = \frac{I_{out} \cdot D T_s}{C} = \frac{(V_{out}/R_L) \cdot D}{f_s C} $,但更常用近似:
对于 Buck-Boost,常用:
ΔVout≈D⋅Vinfs⋅RL⋅C \Delta V_{out} \approx \frac{D \cdot V_{in}}{f_s \cdot R_L \cdot C}ΔVout≈fs⋅RL⋅CD⋅Vin
取最坏情况:D = 0.67, $ V_{in}=20V $, $ R_L=10\Omega $, $ f_s=20,kHz $, $ \Delta V_{out} = 0.08\ V $
解得:
C≥D⋅Vinfs⋅RL⋅ΔVout=0.67⋅2020 000⋅10⋅0.08=13.416 000≈837.5 μF C \geq \frac{D \cdot V_{in}}{f_s \cdot R_L \cdot \Delta V_{out}} = \frac{0.67 \cdot 20}{20\,000 \cdot 10 \cdot 0.08} = \frac{13.4}{16\,000} \approx 837.5\ \mu FC≥fs⋅RL⋅ΔVoutD⋅Vin=20000⋅10⋅0.080.67⋅20=1600013.4≈837.5μF
取 C = 1000 μF(标准值),ESR 忽略(理想电容)
🧪 二、MATLAB/Simulink 仿真程序
由于纯 .m 脚本难以实现开关行为,推荐使用 Simulink。以下是 完整 Simulink 模型搭建说明 + 控制脚本。
若你必须用 .m 文件,可用 ode45 求解分段微分方程,但复杂。这里提供 Simulink + MATLAB 脚本联合方案。
✅ 方法:使用 Simscape Electrical(推荐)
步骤 1:创建 Simulink 模型(buck_boost.slx)
matlab
% 创建新模型
modelName = ‘buck_boost’;
new_system(modelName);
open_system(modelName);
% 添加模块
add_block(‘simulink/Sources/Constant’, [modelName ‘/Vin’], ‘Value’, ‘20’);
add_block(‘simulink/Discontinuities/Signum’, [modelName ‘/Inverter’]); % 用于反转极性(可选)
add_block(‘simulink/Commonly Used Blocks/Subsystem’, [modelName ‘/BuckBoost’], ‘Position’, [150 50 250 150]);
% 构建子系统内部
open_system([modelName ‘/BuckBoost’]);
add_block(‘simulink/Ports & Subsystems/In1’, [modelName ‘/BuckBoost/In1’]);
add_block(‘simulink/Ports & Subsystems/Out1’, [modelName ‘/BuckBoost/Out1’]);
add_block(‘simulink/Ports & Subsystems/Out2’, [modelName ‘/BuckBoost/Out2’]); % 电感电流
% 使用 Ideal Switch(Simscape)
add_block(‘simulink/Continuous/Integrator’, [modelName ‘/BuckBoost/Integrator1’]);
% 更简单:直接用 Simscape 搭建
close_system([modelName ‘/BuckBoost’]);
% 改用 Simscape 搭建主电路
delete_line(modelName, [modelName ‘/Vin’], [modelName ‘/BuckBoost’]);
delete_block([modelName ‘/BuckBoost’]);
% 使用 Simscape Electrical 元件
add_block(‘simulink/Sources/Controlled PWM Voltage’, [modelName ‘/PWM_Source’], …
‘Position’, [50 100 100 150]);
add_block(‘simulink/Continuous/Transfer Fcn’, [modelName ‘/Plant’], …
‘Numerator’, ‘[1]’, ‘Denominator’, ‘[1 0]’, ‘Position’, [150 100 200 150]); % 仅示意
% 实际建议:手动搭建如下(见下方代码生成方式)
⚠️ 自动搭建复杂,更推荐手动绘制 Simulink 模型。
✅ 推荐:手动生成 Simulink 模型(你可复制结构)
Simulink 模型结构(文字描述):
- 输入:DC Voltage Source = 20 V
- 开关:MOSFET(用 Ideal Switch 或 MOSFET (Enhancement Mode) from Simscape > Electrical > Semiconductors)
- 二极管:Diode(Simscape)
- 电感 L = 100e-6 H
- 电容 C = 1000e-6 F
- 负载 R = 10 Ω
- PWM 信号:由 Pulse Generator 产生,频率 20 kHz,占空比 D 可调(0.33~0.67)
- 测量:Voltage Sensor(测输出),Current Sensor(测电感电流)
✅ MATLAB 脚本:参数计算 + 启动仿真
matlab
%% Buck-Boost DC-DC Converter Design
clear; clc; close all;
% 设计参数
Vin = 20; % 输入电压 (V)
RL = 10; % 负载电阻 (Ω)
fs = 20e3; % 开关频率 (Hz)
Ts = 1/fs; % 开关周期
Vout_target = 40; % 目标输出电压幅值(可改为10~40)
ripple_pct = 0.002; % 0.2%
% 计算占空比
D = Vout_target / (Vin + Vout_target); % 因 Vout = Vin D/(1-D)
fprintf(‘所需占空比 D = %.3f\n’, D);
% 电感设计(CCM)
L_min = (1 - D)^2 RL / (2 fs);
L = 100e-6; % 100 μH
fprintf(‘最小电感 L_min = %.2f μH, 选用 L = %.0f μH\n’, L_min1e6, L1e6);
% 电容设计(纹波)
deltaV_max = ripple_pct Vout_target;
C_min = D Vin / (fs RL deltaV_max);
C = 1000e-6; % 1000 μF
fprintf(‘最小电容 C_min = %.2f μF, 选用 C = %.0f μF\n’, C_min1e6, C1e6);
% 验证纹波
deltaV_actual = D Vin / (fs RL C);
fprintf(‘实际纹波 = %.4f V (%.3f%%)\n’, deltaV_actual, deltaV_actual/Vout_target100);
% 启动 Simulink 仿真(假设模型名为 buck_boost.slx)
% set_param(‘buck_boost/Pulse Generator’, ‘DutyCycle’, num2str(D));
% simOut = sim(‘buck_boost’, ‘StopTime’, ‘0.01’); % 仿真10ms
disp(‘请在 Simulink 中搭建电路,并设置 Pulse Generator 占空比为上述 D 值。’);
disp(‘推荐输出观测:输出电压、电感电流(应连续)。’);
✅ Simulink 模型关键设置(手动搭建指南)
- 新建模型 → buck_boost.slx
- 添加元件(从 Simscape Electrical):
DC Voltage Source: 20 V
MOSFET (or Ideal Switch)
Diode
Inductor: 100e-6 H
Capacitor: 1000e-6 F
Resistor: 10 Ω - 驱动信号:
使用 Pulse Generator(Simulink Sources)
Period = 50e-6 (20 kHz)
Pulse Width (%) = D 100 - 连接方式(Buck-Boost 标准拓扑):
Vin+ —±–[MOSFET]— GND
[L]
±–[Diode]—> Vout+ —[C]—[R]— GND
GND
注意:输出为负!若要正电压,可在输出端加反相运放,或接受负输出。
- 传感器:
在电感支路加 Current Sensor
在输出端加 Voltage Sensor - 示波器:观察 Vout 和 IL
📊 三、预期仿真结果
输出电压:≈ -40 V(幅值 40V)
纹波:< 0.08 V(满足 0.2%)
电感电流:连续、三角波,无断续
效率:理想器件下接近 100%
📝 四、设计报告建议内容
- 引言:Buck-Boost 应用背景
- 工作原理:CCM 模式分析、电压增益推导
- 参数设计:L、C、D 计算过程
- 仿真模型:Simulink 电路图 + 参数表
- 结果分析:波形截图(Vout, IL)、纹波测量、CCM 验证
关于 Buck-Boost 变换器 的设计报告引言和设计思路。以下是基于该文档描述的完整 MATLAB/Simulink 仿真代码与建模方案
✅ 设计目标回顾
参数 值
输入电压 $ V_{in} $ 20 V(DC)
输出电压 $ V_{out} $ 10 ~ 40 V(可调)
负载电阻 $ R_L $ 10 Ω
开关频率 $ f_s $ 20 kHz
纹波电压 ≤ 0.2% → 最大纹波 $ \Delta V_{out} \leq 0.08\ \text{V} $(按 40V 计)
工作模式 电感电流连续(CCM)
控制方式 PWM 占空比调节
🧩 一、Buck-Boost 拓扑原理
电压增益公式(CCM):
Vout=−Vin⋅D1−D⇒Vout=Vin⋅D1−D V_{out} = -V_{in} \cdot \frac{D}{1 - D} \Rightarrow V_{out} = V_{in} \cdot \frac{D}{1 - D}Vout=−Vin⋅1−DD⇒Vout=Vin⋅1−DD
解得占空比:
D=VoutVin+Vout D = \frac{ V_{out} }{V_{in} + V_{out} }D=Vin+VoutVout
$ V_{out} $ 所需 $ D $
10 V $ 10/(20+10) = 0.333 $
40 V $ 40/(20+40) = 0.667 $
→ D ∈ [0.33, 0.67]
🔧 二、关键参数计算(MATLAB 代码)
matlab
%% Buck-Boost DC-DC Converter Design Parameters
clear; clc;
% 输入参数
Vin = 20; % 输入电压 (V)
RL = 10; % 负载电阻 (Ω)
fs = 20e3; % 开关频率 (Hz)
Ts = 1/fs; % 开关周期
Vout_max = 40; % 最大输出电压幅值
ripple_pct = 0.002; % 0.2%
% 1. 计算最大占空比
D_max = Vout_max / (Vin + Vout_max); % ≈ 0.667
fprintf(‘最大占空比 D_max = %.3f\n’, D_max);
% 2. 电感设计(保证 CCM)
% 使用临界电感公式:L_min = (1-D)^2 RL / (2f_s)
L_min = (1 - D_max)^2 RL / (2 fs);
L = 100e-6; % 选用 100 μH
fprintf(‘最小电感 L_min = %.2f μH, 选用 L = %.0f μH\n’, L_min1e6, L1e6);
% 3. 电容设计(满足纹波要求)
deltaV_max = ripple_pct Vout_max; % 最大允许纹波
C_min = D_max Vin / (fs RL deltaV_max);
C = 1000e-6; % 选用 1000 μF
fprintf(‘最小电容 C_min = %.2f μF, 选用 C = %.0f μF\n’, C_min1e6, C1e6);
% 4. 验证实际纹波
deltaV_actual = D_max Vin / (fs RL C);
fprintf(‘实际纹波 = %.4f V (%.3f%%)\n’, deltaV_actual, deltaV_actual/Vout_max100);
% 5. 输出电压极性说明
fprintf(‘注意:Buck-Boost 输出为负电压,若需正压需加反相电路。\n’);
🚀 三、Simulink 仿真模型搭建(文字版)
⚠️ 由于无法直接发送 .slx 文件,以下为 手动搭建指南 + MATLAB 启动脚本
🔗 模型结构(Simscape Electrical)
- 打开 Simulink
- 新建模型:buck_boost.slx
- 添加模块(从 Simscape > Electrical):
模块 参数
DC Voltage Source Voltage = 20 V
Ideal Switch 或 MOSFET 控制端接 PWM
Diode 默认
Inductor L = 100e-6 H
Capacitor C = 1000e-6 F
Resistor R = 10 Ω
Pulse Generator Period = 50e-6 s, Pulse Width (%) = 66.7%(对应 40V)
Current Sensor 测电感电流
Voltage Sensor 测输出电压
Scope 观察波形
🔌 连接方式(拓扑图)
Vin+ —[Switch]— GND
[L]
±–[Diode]—> Vout+ —[C]—[R]— GND
GND
注意:开关导通时,电感充电;关断时,电感通过二极管放电到负载。
🧪 四、MATLAB 启动仿真脚本(自动设置参数)
matlab
%% 自动配置 Simulink 模型并运行仿真
clear; clc;
% 设置占空比(例如目标输出 40V)
D = 0.667;
set_param(‘buck_boost/Pulse Generator’, ‘PulseWidth’, num2str(D*100));
% 设置仿真时间
set_param(‘buck_boost’, ‘StopTime’, ‘0.01’); % 10ms
% 启动仿真
simOut = sim(‘buck_boost’);
% 提取数据(假设输出名为 Vout 和 IL)
Vout = simOut.get(‘Vout’);
IL = simOut.get(‘IL’);
% 绘图
figure;
subplot(2,1,1);
plot(Vout.Time, Vout.Data);
title(‘输出电压 Vout’);
xlabel(‘时间 (s)’);
ylabel(‘电压 (V)’);
grid on;
subplot(2,1,2);
plot(IL.Time, IL.Data);
title(‘电感电流 IL’);
xlabel(‘时间 (s)’);
ylabel(‘电流 (A)’);
grid on;
📊 五、预期仿真结果
输出电压:≈ -40 V(幅值 40V)
纹波:< 0.08 V(满足 0.2%)
电感电流:连续三角波,无断续
稳态响应:快速建立,无振荡
📝 六、设计报告建议内容
- 引言:Buck-Boost 应用背景(升降压)
- 工作原理:电压增益推导、CCM 条件
- 参数设计:
L、C、D 计算过程
纹波分析 - 仿真模型:Simulink 图 + 参数表
- 结果分析:波形截图、纹波测量、CCM 验证
- 结论:系统满足设计要求