资讯动态

双向Buck/Boost变换器原理与Simulink仿真建模全解析

发布时间:2026/10/19 15:02:30 来源:尧图企业网站定制
先交代一下背景这次要聊的项目标题是“matlab/simulinkbuck型降压双向dc/dc变换器和boost型升压双向dc/dc变换器”。很多朋友第一眼看到这个名字会误以为要搭两台独立变换器——一台只能降压、一台只能升压。实际上绝大多数这类课题的本质是用同一套半桥式双向变换器拓扑在两种工作模式之间切换能量从高压侧往低压侧走时它是Buck降压变换器能量从低压侧往高压侧走时它是Boost升压变换器。这个项目要解决的是储能系统中电能“双向流动”的问题比如电池充电时电流从母线流向电池放电时又从电池流回母线而不是单向变换器那样只能“一条道走到黑”。这类仿真的应用场景非常集中锂电池充放电管理、超级电容储能、直流微电网母线稳压、电动汽车双向变换电源、光伏储能系统。无论你做硬件电源还是只做算法验证都会绕不开这套拓扑。适合的人群也明确正在做本科毕业设计或者研究生课题的电力电子方向学生想快速理解双向变换器控制逻辑的入门工程师以及需要搭建一个可复用的仿真平台来验证PI参数和能量管理策略的研究者。下面我按自己的实操经验从电路原理、参数计算、控制策略、Simulink建模到调试排坑把整个项目的完整链路讲一遍。1. 先把概念揉碎双向Buck/Boost和单向电路差在哪1.1 拓扑复用半桥结构本质上就是“双向开关”先回忆一下两个基础变换器Buck降压电路开关管在高侧二极管续流电感串联在输出回路能量只能从输入流到输出。Boost升压电路电感在输入侧开关管对地二极管负责输出导通能量同样只能正向传递。如果一个系统既需要降压充电又需要升压放电按传统思路就是两组独立的单向变换器并联中间还要加切换开关体积、成本和控制的复杂度都上去了。双向变换器的做法则完全不同把Buck高侧的“开关管二极管”和Boost高侧的“二极管开关管”合并成一对上下串联的开关管中间点引出电感就构成了一个半桥结构如图中常见的那样。这组上下管每个都由可控开关MOSFET或IGBT和反并联二极管组成。两个开关管都允许双向导通开关管打开时正向流过电流二极管负责反向续流和反向导电。这就相当于一个双向开关平时是断开的需要时可以从左向右通也能从右向左通。工程上最常用的载体是MOSFET自身的体二极管配合互补PWM驱动。省掉外置续流二极管的前提下开关管本身既能当作有源开关又能利用体二极管完成续流。整个拓扑从视觉上就是一个简单的半桥但它的工作状态远比单向电路丰富。打个比方单向Buck/Boost像单车道收费站只允许一个方向的车流双向变换器是同一个收费站的两个方向车道共用了中间那段路什么方向放行完全由两个收费闸口的开合顺序决定闸口就是那两个开关管的PWM驱动信号。1.2 工作模式取决于能量流方向不只看电压高低判断当前工作在Buck模式还是Boost模式不能只盯着两侧电压因为无论Buck还是Boost两侧电压关系都是“高压侧VH 低压侧VL”。最本质的判据是电感电流的方向和能量流动方向能量从VH流向VL高压侧往低压侧传送→ 等效Buck降压工作电感电流平均值从高压侧流向低压侧。能量从VL流向VH低压侧往高压侧传送→ 等效Boost升压工作电感电流平均值从低压侧流向高压侧。具体到开关动作Buck方向上管S1以占空比D做高频斩波下管S2作为同步整流管在S1关断期间导通续流。稳态时 VL D × VH。Boost方向下管S2以占空比D′做高频斩波上管S1作为同步整流管在S2关断期间导通把电感储能释放到高压侧。稳态时 VH VL / (1 − D′)。由于D和D′是互补关系控制上可以很简单同一套PWM占空比信号根据模式选择把它送到S1还是S2。这在Simulink里通常用一个“Mode”逻辑信号配合选择器实现。1.3 同步整流为什么必不可少很多第一次做双向变换器的人会问能不能像单向Buck那样用二极管续流只用一个管子答案是不行。原因有两点第一二极管只能单向导通。如果非要靠着二极管续流能量反向流动时这个二极管会把电路“堵死”双向的能量流就断了。第二即使抛开反向能量流用二极管续流损耗太大。低压大电流应用里二极管正向压降0.7V相对24V系统就是约3%的损耗不管是做实物还是做效率仿真结果都很难看。所以双向变换器必须采用同步整流策略两个开关管由互补PWM驱动主开关管导通时同步整流管关断主开关管关断时同步整流管导通。这样电感电流始终有低阻抗通路能量正反向都能平滑流动。但同步整流也引入了一个关键的附加问题——死区。两个管子上下串联在母线之间如果PWM切换瞬间S1还没完全关断S2就导通了母线会直接短路这个状态叫“直通”轻则烧毁开关管重则仿真直接发散。所以互补PWM之间必须插入一个很小的延迟窗口叫死区时间让两个管子都处于关断状态一小会儿通常取0.5~2μs。2. 主电路参数设计与器件选型2.1 先定设计指标别上来就拖模块搭建Simulink模型之前最好先把参数算明白。我见过不少同学直接拖几个模块连起来随便给个电感电容值就跑结果波形要么纹波大得离谱要么谐振振荡根本看不出系统特性。参数设计其实是一个非常机械的流程只要指标明确几步就算完。这里用一套典型参数做案例高压侧母线 VH 100V低压侧电池 VL 24V额定功率 500W开关频率 fsw 20kHz电感电流纹波设计为额定电流的20%输出电压纹波设计为1%。额定电流按低压侧功率算因为Buck和Boost模式下低压侧电流都是较大的那一侧I_L P / VL 500 / 24 ≈ 20.8A纹波电流取额定的20%ΔI_L 20.8 × 0.2 ≈ 4.2A这些数字在后面计算电感和电容时直接用。2.2 电感电容计算过程与MATLAB脚本电感量的计算依据是伏秒平衡。以Buck连续导电模式为例当S1导通时电感两端电压为 VH − VL导通时间为 D × Tsw电感纹波电流由电感电压乘以导通时间再除以电感量决定L VL × (VH − VL) / (ΔI_L × fsw × VH)代入计算L 24 × (100 − 24) / (4.2 × 20000 × 100) ≈ 217μH注意同一个电感在Boost方向工作时的纹波电流也是同一套公式导出的结果算出来基本相同因为Buck和Boost本质上是同一个半桥拓扑的互逆过程最大纹波电流条件一致。所以一组参数能同时满足两个方向的要求这正是双向对称拓扑的一个优势。输出电容按Buck模式低压侧电压纹波来算。输出电容在开关管导通期间向负载供电导致电压跌落近似关系C I_out × D / (ΔV × fsw)低压侧输出电容的电压纹波设为24V的1%即0.24V占空比D VL/VH 24/100 0.24C 20.8 × 0.24 / (0.24 × 20000) ≈ 1040μF高压侧母线电容主要吸收断续电流和抑制母线电压波动我这里取470~1000μF范围具体看母线上还有没有其他电源来稳压如果有选小一点就行。我把计算过程写成了一个几十行的MATLAB脚本方便反复改指标算完直接用到Simulink模型里%% 双向Buck/Boost变换器主电路参数计算 % 设计指标 VH 100; % 高压侧母线电压 V VL 24; % 低压侧电池电压 V P 500; % 额定功率 W fsw 20000; % 开关频率 Hz % 计算基础量 I_L P / VL; % 低压侧额定电流 A dI_L 0.2 * I_L; % 电感电流纹波 A D VL / VH; % Buck方向占空比 % 电感计算 L VL * (VH - VL) / (dI_L * fsw * VH); fprintf(电感量 L %.1f uF\n, L*1e6); % 注意这里打印单位 % 电容计算低压侧 dV 0.01 * VL; % 电压纹波 1% C_low I_L * D / (dV * fsw); fprintf(低压侧电容 C_low %.1f uF\n, C_low*1e6); % 高压侧电容经验值 C_high 470e-6; fprintf(高压侧电容 C_high 取 %.0f uF\n, C_high*1e6); % 电压电流应力 V_stress VH; % 开关管承受的最大电压 I_peak I_L dI_L/2; % 电感电流峰值 fprintf(开关管电压应力 %.1f V, 电流峰值 %.1f A\n, V_stress, I_peak);脚本运行后直接得到如下表所需的全部参数参数符号计算值工程取值电感量L217μH220μH低压侧电容C_low1040μF1000μF高压侧电容C_high—470μF开关管电压应力V_stress100V耐压≥200V开关管电流应力I_peak23A额定电流≥30A2.3 器件选型仿真里也别太“理想化”Simulink的电力电子库里有理想开关模型也有带导通电阻、导通压降甚至热特性的开关模型。做控制策略验证时我强烈建议至少保留开关管的导通电阻Rds(on)和二极管通态压降因为这两个参数会直接影响闭环控制的稳态误差和占空比大小。以MOSFET选型为例电压应力最大等于母线电压VH100V实际工程留2倍裕量至少要200V耐压电流应力按峰值电流I_peak≈23A留裕量至少30~40A连续电流。仿真里这些裕量其实不影响结果但养成“按实际工程标准选器件”的习惯对以后做硬件移植非常有帮助。在Simulink里推荐用“Universal Bridge”模块并设为1个桥臂器件类型选MOSFET/Diode这样上下管和反并联二极管都自动生成不需要手动搭两个带体二极管的开关模型。桥臂的导通电阻、缓冲电阻、反向恢复等参数都是在模块参数面板里配置的优先级比自己组合两个MOSFET模块更简洁、更接近真实驱动逻辑。还有一点要注意电感在仿真里默认是理想元件如果要考虑磁饱和模型需要使用Simscape Electrical里的非线性电感或者从自定义磁性元件库选。不过做控制策略仿真线性电感完全够用只要别把电感值设置得离谱就行。我把电感设为220μH电容1000μF主电路部分的模型就已经可以支撑后续所有的控制逻辑验证了。3. 控制策略拆解从单闭环到双闭环再到模式切换3.1 开环控制为什么不能直接用先别急着写闭环直接开环给固定占空比跑一版能最快检验主电路参数是否正确。开环仿真时Buck方向给D0.24Boost方向给D′0.76看稳态输出电压是否分别在24V和100V左右。但开环工作有明显的短板母线电压波动时固定占空比的输出电压会跟着波动比如VH从100V跌到90VBuck输出就变成约21.6V电池充电电压就漂了带负载突变时系统没有快速调节能力输出会跌得很深。更关键的是双向变换器在模式切换瞬间需要限流否则电感电流冲击可能让开关管过流这个在开环下完全无法保护。因此实用的控制方案一定是闭环。最常见的结构就是电压外环电感电流内环的双闭环PI控制。3.2 电压电流双闭环的结构与整定思路以Buck充电方向为例系统目标是让低压侧电压VL稳定在24V或者按电池恒压充电的期望电压。控制结构如下采样低压侧电压VL和参考电压VL_ref比较得到电压误差送给电压环PI控制器。电压环PI的输出作为电感电流的参考值I_ref。采样电感电流IL和I_ref比较得到电流误差送给电流环PI控制器。电流环PI输出限幅到0~1之间的占空比指令d送入PWM比较器生成驱动信号。Boost放电方向的结构完全对称只是控制目标变成高压侧母线电压VH采样VH和VH_ref比较电流环同样采样电感电流占空比指令d送往S2而不是S1。为什么要套两层环因为电流内环能快速响应负载变化限制电流尖峰让电压外环可以安心地“慢调”。如果只用一个电压环直接输出占空比系统的动态响应会慢半拍而且电流没有直接约束一个负载突变就可能推高电感电流到危险值。电流内环等于给系统加了一个“后座力吸收器”外环负责稳电压内环负责扛冲击。PI参数整定我是用“从内到外、先比例后积分”的试凑法步骤如下电流内环先单独开环验证断开外环输出直接给一个固定的电流参考阶跃观察电感电流跟踪响应。若响应太慢加大Kp_ci若出现明显振荡减小Kp_ci必要时减小Ki_ci。电流内环调到快速且略有过冲再闭合电压外环。电压环的响应带宽应远低于电流环一般取电流环带宽的1/5~1/10所以电压环的Kp_cv和Ki_cv先给很小的初值再逐步加大。一张典型的PI参数初值参考表控制器Kp初值范围Ki初值范围调试说明电流内环0.01~0.050.1~1输出对应占空比0~1输入是安培级电流误差电压外环0.05~0.51~10输入是伏特级电压误差输出是安培级电流参考这里的参数范围是按我这个500W/24V案例给出的你换功率等级后需要按比例缩放别直接照抄。判断内环调好的标志是带限幅的PI输出稳定后能锁定在理论占空比附近比如Buck方向±0.02以内。3.3 模式切换逻辑最容易翻车的地方项目标题之所以同时提到Buck和Boost就是因为它要求一台变换器既能降压充电又能升压放电。这种系统在仿真里最难的环节反而不是单个模式的控制而是两种模式之间的切换。直接硬切往往会看到电流波形瞬间冲到几十安培然后整个仿真发散。工程上常用的模式切换策略有三种按鲁棒性从低到高排列直接切换法收到外部模式指令后把PWM信号从S1换到S2或者从S2换到S1。最危险切换瞬间两个PI控制器输出可能一个饱和一个归零占空比跳变电感电流失去控制回路产生浪涌。切换PI重置法切换动作发生后把不工作的那个PI控制器积分清零并强制工作的PI控制器输出从当前占空比开始继续调节。比直接切换好但如果没有限幅和斜坡瞬态冲击依然存在。切换斜坡参考法这也是我现在最推荐的做法。模式切换信号到来后先保持一个短暂的过渡期比如2~5ms在这段时间里电压参考或电流参考以斜坡从当前值渐变到目标值同时PI控制器的输出占空比保持在上一个工作占空比附近等参考过渡完成后再恢复正常的闭环调节。这种方式类似软启动电感电流不会出现跳变尖峰。Simulink里做斜坡参考非常方便直接用Signal Builder或者Rate Limiter模块就能实现。我给模式切换逻辑设计了一个三层的保护切换前先检测电感电流方向若当前能量流方向和目标模式相反先延时几个开关周期让电流自然回到零附近再切换。切换瞬间把两个PI的积分项都重置到当前占空比对应的稳态值避免积分饱和。切换后电流参考用Rate Limiter限制上升速度通常限制在额定电流的每毫秒变化量以内。这套逻辑在仿真里跑下来非常稳模式切换时的电流过冲能控制在额定电流的20%以内。4. Simulink建模实操从零搭一个能跑的双向变换器4.1 工具箱选型与模块清单建模前先选对工具箱。推荐使用Simscape Electrical的Specialized Power Systems类库老版本里叫SimPowerSystems这是专门做电力电子电路仿真的库能处理开关非线性和电力电子器件模型。如果你用的是新版Simulink直接在库浏览器搜“Simscape Electrical”即可。下面是我搭建这个模型时用到的核心模块清单模块名库位置用途DC Voltage SourceSimscape Electrical / Electrical Sources高压侧母线电压源DC Voltage Source ResistorElectrical Sources Elements低压侧电池等效内阻电动势Universal BridgePower Electronics半桥双臂生成双向开关结构InductorElements主电感CapacitorElements低压侧/高压侧滤波电容Current Measurement / Voltage MeasurementMeasurements采样电感电流和侧电压PWM Generator (Duty Cycle)Power Electronics / Extras生成20kHz PWM波形PID ControllerSimulink / Continuous电压环和电流环PIRepeating Sequence StaircaseSources生成三角载波配合比较器Relational OperatorLogic and Bit OperationsPWM占空比与三角波比较On/Off DelayDiscrete插入死区时间Mode Selector Rate LimiterLogic and Bit Operations / Discontinuities模式切换与限幅斜坡4.2 主电路搭建步骤详解第一步拖一个Universal Bridge到模型窗口双击设置Number of bridge arms选1就是半桥Power Electronic device选MOSFET/DiodeRon设为0.01Ω左右Snubber resistance建议设成1e6Ω接近开路或干脆设inf避免仿真里不必要的缓冲损耗。桥臂的两个输出端就是半桥中点。第二步把高压侧正极接到桥臂上管的高压端高压侧负极接到桥臂下管的低压端同时在正负极间接高压侧电容C_high。这里要注意电压源和电容极性别接反。第三步半桥中点引出导线接串联电感L电感另一端接低压侧节点。低压侧节点再接低压侧电容C_low电容另一端回到高压侧负极这样就构成了完整的Buck/Boost主回路高压源→上管→电感→低压电容→下管→高压源负极。第四步低压侧用一个DC Voltage Source串联一个0.01Ω电阻来等效电池内阻。之所以串联这个小电阻是因为纯电压源直接并联到电感网络上会造成回路无阻尼仿真容易数值振荡。用带内阻电压源后充电/放电方向都有明确的电压参考和电流通路。第五步把所有测量的地方接上传感器量电感电流用Current Measurement量低压侧电压用Voltage Measurement。传感器输出是物理信号直接转成Simulink普通信号线即可。搭建好后先做一次开环验证给S1一个占空比D0.24的固定PWMS2给互补信号跑0.1秒观察低压侧电压稳定在24V附近。这一步能快速排除主电路连接错误。4.3 控制回路搭建细节PWM、死区、PI封装开环验证OK以后再搭闭环。从低压侧电压测量点引出信号进电压环PID Controller电压环输出接电流参考再进电流环PID Controller电流环输出限幅到0.05~0.95作为占空比指令d。产生PWM信号的做法有两种第一种使用PWM GeneratorDuty Cycle模块输入占空比输出开关信号内部自带载波和死区设置最省事。缺点是它输出的开关逻辑不一定能直接兼容半桥互补驱动需要额外处理。第二种自己做比较器生成一个0~1、20kHz的三角波Repeating Sequence Staircase用Relational Operator比较“三角波 占空比指令”输出就是主开关管S1的驱动脉冲。再用逻辑取反或On/Off Delay生成互补信号给S2并在互补路径上插一个1~2μs的死区延迟。这种方法直观、可控、调试方便我自己一直用这种方式。死区的实现细节在S2的驱动信号路径上放一个On/Off Delay模块On delay和Off delay分别设为1.2μs。由于Simulink里数字信号是对应开关命令延迟一定能保证两者导通窗口不相交。PI控制器我一般不直接用官方的PID Controller整定自动调参因为电力电子开关系统的强非线性容易让自动调参选出的参数特别保守。我更习惯手动给一个初值范围按3.2节的步骤快速迭代。4.4 求解器与仿真参数设置双向变换器是强非线性开关系统求解器设置不当会直接发散或者慢得让人怀疑人生。我的经验配置如下求解器类型用变步长算法选ode23tb适合刚性系统比默认的ode45更稳、更快。Max step size设为1e-6秒。这个值千万不能省尤其电流环采样周期在几十微秒时最大步长太大开关瞬间的数值过渡根本算不准。仿真时间设0.2~0.5秒足够看启动瞬态和模式切换。如果要做稳态波形可以设置相对误差1e-3足够工程使用。另外给电容设置初始电压可以有效避免启动浪涌。低压侧电容初始电压设置24V高压侧电容初始电压设置100V这样仿真开始后电感电流不会突然从零跳到额定值波形看起来会平缓很多。5. 常见问题与排查心得5.1 仿真发散或波形严重振荡仿真一开始就发散9成原因是模型里出现了代数环或求解步长不合理。无论是全状态反馈还是物理模型代数环的解决办法是在反馈测量信号支路上插入一个Memory模块或者通过离散化控制把采样周期整成开关周期的整数倍、错开一个求解步骤等效于添加了一个采样延迟。如果代数环是PID控制器本身造成的把它换成离散PID采样时间设为50μs20kHz对应一个开关周期能彻底避开代数环。波形振荡则优先检查死区时间是否冲突以及PWM比较器逻辑是否让两个开关“同开”了。我们公司有个同事当初做这个项目时振荡三天找不到原因后来发现是三角波的相位和PI输出之间有个采样延迟造成PWM逻辑上产生额外占空比偏差一旦把PI采样率跟PWM载波同步振荡自然消失。5.2 启动瞬间电流尖峰过大启动尖峰主要来源于电容初始电压为0和PI积分饱和两个叠加因素。除了前面说的设置电容初始电压、使用Rate Limiter限制参考上升速率外还要检查电流内环的限幅值是否设得太高。正常启动电流不应超过额定电流的1.5倍如果你的电流尖峰远超这个值把电流内环的输出限幅从0.95临时降为0.6让启动过程缓慢等稳态后再放开限幅。5.3 模式切换瞬间电流来回冲这是双向项目特有的大坑。切换的瞬间如果交换了主控管相当于瞬间改变控制对象但电感电流有惯性不会立刻反向于是两个PI控制器争抢电流就会出现来回冲击。对策总的来说就是把切换当成“软过渡”处理检测到模式切换指令后先在几个开关周期内把占空比锁在当前值不切PWM等电感电流减小到接近0再切模式信号切换后电流参考用斜坡从0逐步加大。这套逻辑在模型里可以封装成一个Function块内部处理好状态机。5.4 PI参数调不快、调不准很多人在模型搭好后卡在PI参数这儿。这里说一个快速有效的调试流程断开电压外环直接把电流环接到固定占空比上给电流参考一个阶跃记录电感电流跟踪波形。调内环小步加大Kp_ci直到电流跟踪快且无振荡再加Ki_ci消除稳态误差注意加大Ki后要适当回退Kp。闭合电压外环电压环从很小的Kp_cv和Ki_cv开始逐步加大观察输出电压恢复速度。如果电压环几乎不受内环影响就调节不动说明内环带宽太低了先提高内环响应速度再做外环。按这个顺序来大部分PI参数可以在1小时内整定完。切忌同时调内外环参数那样出了问题根本不知道是哪个环引起的。5.5 常见现象速查表现象直接原因优先检查项仿真卡在某一步不前进代数环反馈支路加Memory母线电流瞬间巨大死区不足导致直通互补PWM之间死区至少1μs输出电压有周期性尖峰载波与采样不同步PI采样周期与开关周期对齐模式切换后失控PI积分饱和切换瞬间重置积分项全桥电流有直流偏置电感电流未采样到平均分量检查电流传感器极性低压侧电压一直偏低占空比被限幅检查限幅最大值是否留足余量Boost模式能跑但效率低上管寄生二极管导通压降过大换用低导通压降的器件模型6. 仿真搭建之外的一些经验感悟这类双向Buck/Boost仿真项目最值得投入精力的地方不在搭模型而在理解“同一个拓扑在控制方向改变后能实现两种功能”这件事。很多同学做完项目后问我后续还能怎么扩展。我自己的看法是可以往数字控制代码生成方向走把PI控制逻辑转成C代码直接烧进DSP控制器也可以加状态观测器做无电流传感器的电感电流估计还可以把单路变换器扩展成三相交错并联降低电感纹波和开关管电流应力。最后提一个我一直很依赖的小技巧在Simulink模型里把控制部分的子系统和主电路部分分开控制回路用普通Simulink信号线主电路用Simscape物理连接线两者之间通过Measurement模块和PWM驱动模块衔接。这样模型结构清晰排查故障时也不会在主电路里翻来翻去找逻辑错误。按这个思路建起来哪怕隔一个月再打开模型也能一眼看懂当时的设计意图对后续做实验、写论文、改方案都有大帮助。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑