做电源仿真这一行,双向DC/DC变换器迟早会碰到。不管是电动汽车的电池充放电、储能系统的削峰填谷,还是直流微网的母线稳压,核心都是同一个问题:能量既要能从高压母线往低压电池侧流(Buck降压充电),也要能从电池侧往母线送(Boost升压放电)。前一阵我搭一个储能系统仿真项目,就是在MATLAB/Simulink里把这两种工作模式完整跑通,从拓扑搭建到双闭环控制,中间没少踩坑。这篇文章把我整理过的原理、建模步骤、参数整定和异常排查经验一次性讲清楚,适合刚接触双向变换器仿真的人照着做。
1. 双向DC/DC变换器:为什么储能系统绕不开它
1.1 能量要能进能出,单向拓扑做不到了
传统的Buck或者Boost变换器,功率方向是固定的。Buck只能把高压侧能量往低压侧送,Boost只能把低压侧能量往高压侧抬。电池场景就比较尴尬:电池充电时需要母线往电池灌能量,放电时需要电池往母线反哺能量。如果按老思路去拼,就得一台Buck加一台Boost背靠背,器件多一套、控制多一套、损耗也跟着翻倍。
双向DC/DC的思路是用两只带反并联二极管的开关管替代原来的开关管+整流二极管组合,在一个半桥结构上同时实现两种方向。正着用是Buck,反着用是Boost,功率路径天然可逆。这也是当前电动汽车OBC(车载充电机)、储能PCS、直流微网接口里最常见的一类变换器拓扑。
我在Simulink里搭这个模型时发现,很多人对"双向"的理解停留在"管子的方向",其实真正的难点是控制层面:电流参考方向得跟着模式变,占空比的物理含义在两种模式下也不同,示波器上看波形的视角还得反过来。如果只看拓扑不看控制,仿真很容易"看起来酷炫,跑起来翻车"。
1.2 先在Simulink里仿真,比直接上硬件划算在哪
我个人的体会是,双向变换器比单向变换器更容易在硬件调试时出事。方向切换的一瞬间,如果占空比给错,电感电流可能直接冲高,开关管说烧就烧。而Simulink里做仿真,你有几个实打实的优势:
- 不用承担器件烧毁成本,随便试参数,试错成本几乎为零。
- 可以轻松观察电感电流、开关管电压应力、二极管反向恢复这些硬件上很难测准的量。
- 模式切换逻辑可以先用Step信号模拟,反复折腾,等逻辑确认没毛病了再往硬件移植。
- 想做故障注入也很方便,比如电感短路、开关管开路、母线突加负载,在模型里只是改几个开关状态的事。
所以结论很直接:先仿真,后硬件。仿真阶段欠的账,硬件阶段都是要十倍还回去的。我自己踩过的坑加起来能写一篇更长的文章,这篇就先集中在仿真部分,把该避的坑提前告诉你。
1.3 这一篇你能得到什么
这篇主要面向两类人:一是正在学电力电子、想用Simulink把双向DC/DC跑起来的学生,二是刚接手储能或车载电源仿真任务、需要快速建立模型的工程师。前者的重点是把拓扑和控制逻辑看懂,后者的重点是参数整定和坑避雷。我会按"拓扑原理→模型搭建→调试整定→硬件移植前检查"的顺序来写,每一段都尽量给可直接抄作业的参数和步骤。
2. Buck与Boost双向拓扑拆解:两只开关管怎么唱一台戏
2.1 最小拓扑长什么样
先说电路结构。整个变换器以共地为前提,高压侧是直流母线,低压侧是电池,中间夹着由两只开关管构成的半桥,再串一个电感。用连接顺序来描述,会比画图更容易对照Simulink里的连线:
HV源正极 → 节点P 节点P ── C_H ── 节点GND 节点P ── S1(上管MOSFET)── 节点A 节点A ── S2(下管MOSFET)── 节点GND 节点A ── L(电感,含串联电阻R_L)── 节点B 节点B ── C_L ── 节点GND 低压侧电池:正极接节点B,负极接GND 高压侧母线:HV源并接在节点P与GND之间S1就是上管,连接高压正极到开关节点A;S2是下管,连接开关节点A到地。每只管都自带反并联二极管——这个二极管很重要,MOSFET的体二极管在Simulink里可以直接合并进MOSFET模型,不需要另外再放一个二极管。
两只开关管、一个电感、上下两排电容,这就是完整的功率级。注意,电感和电容的位置跟单向Buck/Boost有明显区别:电感在开关节点和低压侧之间,而不是在高压侧或低压侧单独一侧。这个位置决定了它既能当Buck电感用,也能当Boost电感用。
2.2 降压模式(Buck,高压→低压)的工作过程
降压模式用于母线向电池充电,能量从高压侧往低压侧流。此时S1作为主开关管,按PWM导通;S2作为同步整流管,在S1关断期间导通。S1开通时,高压母线通过S1给电感充磁,电流路径为:HV源正→S1→节点A→L→电池,电感电流上升,斜率为(V_H - V_L)/L。S1关断后,电感电流不能突变,由S2续流,路径为:电池正→L→...实际的环流方向是电感电流经S2从地回流,电感电压变成-V_L,电流线性下降。
稳态下,开关节点A的平均电压是D·V_H,电感一周期内伏秒平衡,所以有:
V_L = D × V_H
也就是说,占空比D = V_L / V_H。对400V母线、200V电池这个例子,稳态占空比就是0.5。电流纹波的计算公式:
ΔI_L = V_L × (1 - D) / (f_sw × L)
这个公式在选电感时直接决定L的取值,后面会算一个具体例子。
2.3 升压模式(Boost,低压→高压)的工作过程
升压模式用于电池向母线放电,能量从低压侧往高压侧流。此时S2变成主开关管,S1变成同步整流管。S2开通时,电池直接给电感充磁,路径为:电池正→L→节点A→S2→地,电感电流上升,斜率为V_L/L。S2关断时,电感电流经S1的体二极管(然后S1同步导通)送往高压母线,路径为:电池正→L→节点A→S1→HV源正,此时电感电压为V_L - V_H,因为V_H大于V_L,所以电流下降。
稳态伏秒平衡关系是:
V_H = V_L / (1 - D_S2)
其中D_S2是S2的占空比,化简得D_S2 = (V_H - V_L) / V_H。按400V/200V算,D_S2 = 0.5。
这里有个很有意思的细节:如果用互补PWM方案,S1的占空比始终等于S2的占空比的补。Buck模式下S1占空比是0.5,Boost模式下S1占空比仍然是1 - 0.5 = 0.5。也就是说,无论工作在哪个方向,稳态时S1的占空比都等于V_L / V_H。这不只是个巧合,它说明用一套互补PWM就能同时覆盖两种模式,能量方向完全靠电流参考来决定。这对后续控制设计是个极重要的简化。
2.4 电感电容参数设计:先用公式把底子打牢
参数设计的核心其实是两句话:电感决定电流纹波,电容决定电压纹波。在设计仿真模型时,我建议直接按真实工程的路数来算,后面调起来会省很多事。
电感值按Buck模式公式估算,取额定电流的20%作为纹波设计指标。设额定功率5kW,低压侧200V,那么额定电流I_L = 5000/200 = 25A,纹波取5A。开关频率选20kHz,稳态占空比0.5:
L = V_L × (1 - D) / (f_sw × ΔI_L) = 200 × 0.5 / (20000 × 5) = 0.001 H
取整就是1mH。Boost模式下用同一个L去验算纹波:ΔI_L = V_L × D_S2 / (f_sw × L) = 200 × 0.5 / (20000 × 0.001) = 5A,刚好对得上。
电容呢,先按纹波算下限。输出电容决定电压纹波,Buck侧输出是低压侧,纹波公式近似为ΔV_L ≈ ΔI_L / (8 × f_sw × C_L)。如果想控制在1V以内,C_L ≈ 5 / (8 × 20000 × 1) = 31.25µF,取33µF是OK的。但注意这只是纹波下限,实际系统里为了扛住负载突变,母线电容往往会加到100µF甚至更大。我在模型里取的是100µF,既照顾纹波,也给电压外环留出瞬态支撑的余量。
一共5kW/400V/200V/20kHz的系统,初始参数就可以定成下面这样:
| 参数 | 符号 | 数值 | 说明 |
|---|---|---|---|
| 高压侧电压 | V_H | 400 V | 直流母线 |
| 低压侧电压 | V_L | 200 V | 电池额定 |
| 额定功率 | P | 5 kW | 设计目标 |
| 开关频率 | f_sw | 20 kHz | 折中体积与损耗 |
| 电感 | L | 1 mH | 纹波约20% |
| 电感串联电阻 | R_L | 0.1 Ω | 模拟损耗与阻尼 |
| 高压侧电容 | C_H | 100 µF | 兼顾纹波和瞬态 |
| 低压侧电容 | C_L | 100 µF | 兼顾纹波和瞬态 |
| 稳态占空比 | D | 0.5 | V_L / V_H |
参数定完,接下来就是把这些数值真正落到Simulink模型里。
3. Simulink建模:从器件拖拽到双闭环控制
3.1 仿真环境与步长的选择逻辑
模型不是在普通Simulink环境里拖几个库就能跑的,双向DC/DC这种带开关器件的功率电路,要用Simscape Electrical里的Specialized Power Systems(SPS)模块库。新建模型后,第一步先放一个powergui模块,它决定了整个电路仿真采用哪种求解方式。我建议直接把powergui设成Discrete离散模式,采样步长取1e-6秒(1微秒)。
为什么用离散模式而不是连续模式?因为SPS里的开关器件(MOSFET、IGBT、二极管)在连续模式下会引起变步长求解器频繁触发事件检测,仿真速度会变得非常慢,还容易出数值振荡。离散模式用固定步长去采样和计算开关状态,仿真效率和稳定性都好很多。步长为什么取1微秒?20kHz的开关周期是50微秒,一个周期里至少有50个采样点,PWM波形和电流纹波都能被较好地还原。你要是觉得波形毛刺多,可以把powergui步长缩到5e-7,但仿真时间会明显变长,没必要一开始就上那么细。
在Configuration Parameters里,把求解器类型设成固定步长(fixed-step),具体求解器选discrete,步长和powergui保持一致,也就是1e-6。这个细节很多人会忽略,直接默认变步长跑,最后得到的结果要么慢得离谱,要么波形一团糟。
3.2 主功率电路搭出来的样子
打开Simulink库浏览器,在Simscape > Electrical > Specialized Power Systems > Fundamental Blocks下面找到需要的元件。按之前在2.1节列出的连接顺序,一步步搭:
- 放两个DC Voltage Source:一个高压侧400V,一个低压侧200V。低压侧也可以用SPS自带的Battery模块,我建议先用理想DC源把控制逻辑调通,再换成Battery去模拟SOC变化。
- 放两个MOSFET模块,位置在Power Electronics库里。每个MOSFET参数里勾选内部带二极管(Internal diode),导通电阻Ron设0.001欧姆左右,这样既接近实际器件,又不至于让导通损耗主导波形。
- 用一个Series RLC Branch当电感,R设0.1欧姆、L设1e-3亨、C设0。这里必须加那个0.1欧姆的串联电阻,后面坑点部分会专门说为什么。
- 放两个电容,参数按表格里的100µF设,分别接在高压侧和低压侧。
- 从Simulink->Sinks里放一个Scope,再接上Voltage Measurement和Current Measurement,分别测量母线电压V_H、电池侧电压V_L、电感电流i_L和电池电流i_B。测量模块在SPS的Measurements库。
- 别忘了加一个Ground模块到地线上。SPS电路没有绝对参考地,很多初学者因为少一个Ground直接报错,或者电压波形飘得没法看。
MOSFET的门极输入是Simulink信号,可以用普通信号线接PWM发生器,不用走物理电气线。这是SPS的一大特点:功率回路走物理线,控制信号走普通信号线,两套体系在开关管那里交汇。
3.3 PWM生成:互补门极信号和死区怎么给
控制侧的核心是产生一对互补PWM信号驱动S1和S2。SPS库里有专门的PWM Generator(DC-DC)模块,输入占空比指令,输出就是可直接接MOSFET门极的脉冲信号。如果你的Simulink版本里找不到这个模块,手动搭也很简单:
- 用Repeating Sequence模块生成一个0到1的锯齿波,周期设为1/20000,也就是50微秒,这就是载波。
- 载波和占空比指令输入到Relational Operator模块做比较,载波值小于占空比时输出1,大于时输出0,得到S1的PWM。
- 复制一套反向比较逻辑,或者用Logical Operator里的NOT取反,得到S2的PWM。
关键点是死区。S1和S2如果同时导通,等于高压母线直接短路,这在硬件上叫直通(shoot-through)。Simulink里如果直接用带二极管的理想MOSFET模型,即使不加死区,仿真往往也能跑,因为模型里没有开关延迟、没有真实的直通电流细节。但你要是仿真里不加死区,后面往硬件移植时十有八九要炸管子。正确做法是仿真阶段就养成加死区的习惯:给S1和S2的PWM信号各串一个On-Delay(开通延时)模块,延时设为1到2微秒。这样一路关断到另一路开通之间留出空档,模拟真实驱动器的死区逻辑。
死区也有代价:加了死区后,输出电压会略低于理想占空比对应的值,尤其在轻载和电流方向改变时,会引起波形畸变。先跑起来再说,把死区的影响留到第5章一起处理。
3.4 双闭环控制:电流内环和电压外环的分工
双向变换器和普通单向变换器的控制差别,主要表现在参考方向和多模式切换上。先定一个统一的电流正方向:规定电感电流i_L从节点A流向电池为正,也就是正电流对应充电/降压功率流。那么Buck模式的目标就是控制i_L等于正的充电电流参考值,Boost模式的目标就是控制i_L等于负的放电电流参考值。
我采用的架构是标准的电流内环+电压外环,但两种模式略有分工:
- Buck充电模式:直接给电流环一个充电电流参考I_chg,通常由BMS或上层策略给定。内环快速跟踪这个电流,不需要电压外环介入。
- Boost放电模式:电压外环采样高压母线电压V_H,与400V参考做比较,PI输出作为电流环的参考值;电流环再去控制电感电流,让母线电压稳定在400V。
电流内环用PI控制器,输入是电流参考和实际i_L的差,输出是占空比指令。占空比指令要加一个限幅,我一般限制在0.02到0.98之间,防止积分饱和造成的失控。在Simulink里可以直接用PI Controller模块,勾选Integrator saturation和Output saturation,相当于是内置了抗饱和功能。
电压外环也用PI控制器,输出接到电流内环的参考端。电压环带宽必须比电流环低很多,一般低5到10倍,否则两个环会互相激励,产生低频振荡。在Simulink里实现起来很简单:两个PI串起来,中间不要直接短路,电压环输出接一个限幅器再进电流环参考。
模式切换用Switch或Manual Switch模块做:模式信号为1时用充电电流参考,模式信号为0时切到电压环输出。仿真初期我建议用Manual Switch手动切换,等逻辑验证没问题了再换成Step信号或状态机自动切换。
3.5 一套能直接跑的初始参数
把下面这段MATLAB脚本放到模型的InitFcn回调里,或者直接在命令行跑一遍,就能把仿真参数全部初始化:
% 双向DC/DC仿真参数初始化脚本 V_H = 400; % 高压侧母线电压 V V_L = 200; % 低压侧电池电压 V P_rated = 5000; % 额定功率 W f_sw = 20000; % 开关频率 Hz Ts_power = 1e-6; % 功率级仿真步长 s L = 1e-3; % 电感 H R_L = 0.1; % 电感串联电阻 ohm C_H = 100e-6; % 高压侧电容 F C_L = 100e-6; % 低压侧电容 F % 电流环PI初始参数(带宽约2kHz) fc_i = 2000; Kp_i = 2*pi*fc_i*L; % ≈12.6 Ki_i = Kp_i*2*pi*fc_i/10; % ≈15800 % 电压环PI初始参数(带宽约200Hz) fc_v = 200; Kp_v = 2*pi*fc_v*C_H; % ≈0.13 Ki_v = Kp_v*2*pi*fc_v/10; % ≈16Kp和Ki的取值是有依据的:电流环的植物模型近似是1/(sL),PI控制器的高频增益就是Kp,那么电流环交叉频率约等于Kp/L,所以Kp = 2π×f_c×L。电压环植物模型在中频段近似是电容1/(sC),同理Kp_v = 2π×f_cv×C_H。这些只是起始值,实际还要按第4章的步骤微调。
电路搭好、控制接上、参数初始化之后,先别急着跑大电流。把充电电流参考设成10A,仿真时间设到0.1秒,先看模型能不能稳定。能稳定,再一步步加条件。
4. 仿真调试实录:波形怎么看、PI怎么调、坑怎么找
4.1 稳态波形先看一眼对不对
跑完一个0.1秒的仿真,第一件事是看稳态波形。Buck模式10A充电电流下,你期望看到的波形是:
- 电感电流i_L:平均值10A,上下波动约2.5A(按20%纹波设计,10A对应2A左右),波形呈三角波,频率20kHz。
- 低压侧电压V_L:稳定在200V附近,纹波应该在0.5V量级。
- 开关节点A的电压:在0V和400V之间跳变,占空比约0.5的方波。
- 高压侧电流:平均值按功率守恒应接近5A(10A×200V/400V)。
如果这些都对得上,说明主电路和PWM工作正常,可以进入PI整定环节。如果V_L偏了,先检查占空比是不是被限幅卡住了;如果电感电流波形不是清晰的三角波,大概率是仿真步长太大或者载波频率和powergui步长不匹配。
Boost模式同理:把模式切到放电,给定一个负电流参考,例如让电感电流平均值等于-25A(5kW放电),此时V_H应该稳定在400V,电感电流纹波也在5A左右,高压侧输出电流平均值约12.5A。
4.2 PI参数整定的实操顺序
我调PI的固定顺序是:先只开电流环,把电压外环断开;给一个阶跃电流参考,比如从5A跳到15A,观察i_L的阶跃响应。这时候你只调Kp_i和Ki_i两个参数。目标很简单:上升时间大约在0.1到0.5毫秒(也就是2kHz带宽对应的量级),超调不要超过5%,稳态没有静差。
实际操作时,先把Ki_i设成0,只给Kp_i。Kp_i太小,电流响应慢半拍;Kp_i太大,电流会振铃甚至发散。我把电流环的Kp_i从5开始往上加,一边加一边看阶跃响应,直到出现第一次明显超调,然后回调到超调消失的位置。接着恢复Ki_i,Ki_i的作用是消除稳态静差,它会让响应稍微变慢,所以每加一档Ki_i,可能都要往回减一点Kp_i。最终电流环稳定后,再把电压环接上。电压环的调法一样,只是目标变成V_H的阶跃响应,而且电压环的动作必须明显比电流环慢,否则一加负载,两个环就开始"打架"。
这套方法看着土,但确实靠谱。仿真里最大的好处就是你可以随便放大观察窗口,不用像硬件那样担心烧管子。
4.3 模式切换瞬间最容易暴露问题
模式切换是双向变换器仿真里最有价值、也最容易出问题的环节。我用一个Step模块把电流参考从+20A(充电)直接阶跃到-20A(放电),观察切换瞬间的波形。
第一次跑的时候,我的预期是电流平滑地穿过零点反转,但实际看到的是电感电流在零点附近抖了好几个周期,母线电压也跟着上下浮动。问题出在占空比指令在切换瞬间出现饱和:充电模式下占空比被拉到0.5上方,切换瞬间积分器里还存着上一模式的累积量,导致放电方向的响应滞后。
解决方法是给PI控制器加上输出限幅的同时,把积分器的初始状态在切换时清零。在Simulink里可以用一个脉冲信号给PI模块的reset端子,模式切换时发一个reset脉冲。另外一个实用技巧是让电流参考经过一个斜坡发生器,而不是直接阶跃切换。斜坡时间取5到10毫秒就足够模拟实际BMS的功率爬坡指令。这样切换瞬间的母线电压跌落能控制在几个伏以内,电流也不会出现明显震荡。
4.4 常见异常波形和对应根因
仿真跑得多了,你会看到一些规律性的异常波形。我整理成了一张排查表,方便你对症下药:
| 异常现象 | 可能的根因 | 排查方向 |
|---|---|---|
| 电感电流出现高频振铃 | 仿真步长过大,PWM边沿采样不足 | 缩小powergui步长到5e-7 |
| 输出电压缓慢爬升后发散 | 电压环PI过大,相位裕度不足 | 降低Kp_v,保证电压环带宽远低于电流环 |
| 启动瞬间电流尖峰巨大 | 电容初始电压为0,充电冲击 | 给电容设初始电压,或用斜坡参考软启动 |
| 模式切换时电流反复跨越零点 | 参考切换过硬,积分饱和 | reset积分器,斜坡化参考 |
| 输出电压带明显的低频波动 | 电压环和电流环带宽太接近 | 拉开两个环的带宽差距 |
| 波形整体向右"错位" | 控制采样周期和PWM载波不同步 | 统一采样时间为载波周期整数倍 |
| 轻载和空载时电流断续 | 电感电流进入DCM,控制器模型不匹配 | 加最低电流限幅,或用同步控制维持CCM |
这张表不是万能的,但覆盖了我在实际项目里碰到过的八成问题。剩下两成,基本都离不开第5章那五个坑。
5. 从仿真走向硬件前必排的五个坑
5.1 死区时间:仿真里看不见,硬件上很致命
前面说过,Simulink的理想MOSFET模型不加死区也能跑,问题在于这个"能跑"给了你一种虚假的安全感。真实世界里,MOSFET的开通和关断都有延迟,两个管子如果同时给出导通信号,哪怕只有几百纳秒的重叠,母线短路电流也足以在微秒级时间炸毁功率管。所以我的建议很明确:从第一天建模开始就加入死区,哪怕后续只在硬件上实现,模型里也必须留出死区参数接口。在Simulink里加死区的方法前面已经讲过,用On-Delay模块,延时1到2微秒。加完之后你会立刻发现,输出电压和理想占空比之间存在一个微小偏差,这就是死区效应。知道这个偏差存在,比装作看不见要安全得多。
5.2 控制周期和PWM载波必须对齐
控制侧的采样时间如果和PWM载波不同步,会造成一个很隐蔽的问题:每个开关周期内,占空比指令更新的时刻是随机漂移的,表现在波形上就是电流纹波的幅值忽大忽小,甚至出现低频拍频。这个坑在纯仿真里不容易发现,因为仿真波形"看起来还行",但一旦把控制器烧进DSP,实际电流就会出现次谐波振荡。
解决方法是把控制器的采样时间设置成载波周期的整数倍。我这里是20kHz载波、50微秒周期,那么电流环PI的采样时间就设50微秒,电压环可以设5倍,也就是250微秒。Simulink里给PI参数的Sample Time设定好,再在模型里用Rate Transition模块统一数据流频率,就能保证控制更新和PWM边沿严格对齐。
5.3 理想元件是最大的失真源
仿真里最容易让人误入歧途的就是"理想电感、理想电容"。我一开始用纯电感(R_L=0)跑的时候,模型确实能跑,但波形里总带着一种奇怪的谐振尾巴——那是理想的LC组合在无阻尼状态下和PWM相互作用产生的数值振荡。加上0.1欧姆的串联电阻之后,一切恢复正常。电容也一样,实际电解电容有等效串联电阻(ESR),在模型里给电容串联一个小电阻(比如0.01欧姆),仿真结果会更接近硬件实测。
还有一个容易忽略的点是电感在低电流下的感值下降。Simulink里固定电感不会模拟饱和,但如果你在硬件上用了铁硅铝磁环,大电流下感值会掉得很快。真到硬件调试时,这个差异会让你调好的PI参数全部失效。仿真阶段至少要知道:模型里的L是理想常数,硬件不是。
5.4 初始状态要先想好
第二个容易爆雷的时刻是启动。现实中母线电容和电池侧电容在上电之前可能已经有电压,也可能处于完全放电状态。Simulink里电容默认初始电压是0,如果你直接给电流参考一个20A的阶跃,启动瞬间电容等于短路,电流尖峰能冲到几百安,控制器直接饱和。
解决办法有两个:一是给电容模块设置初始电压,比如低压侧电容初始电压设200V,模拟电池已经挂在上面的真实情况;二是用斜坡参考做软启动,让电流参考从0慢慢爬到目标值,斜坡时间设20毫秒到50毫秒。我建议两个都做:初始电压保证模型状态接近真实,软启动保证控制器不会在启动瞬间被积分饱和搞死。
5.5 参数脚本化,别让模型变成"一次性玩具"
最后一个坑跟技术无关,但直接影响你的项目效率。Simulink模型如果到处硬编码参数,今天改个电感值要在三个模块里找,明天改个开关频率又要翻PWM模块,过两个星期你自己都记不清哪些地方没改。我从一开始就把所有参数放在init脚本里,模型里的参数全部用变量名引用。模型仿真前先跑一遍init脚本,所有参数自动更新。这样调参、对比、写技术报告都非常方便。更进一步,可以把Buck和Boost两种模式的参数分成两个结构体,切换模式时只改结构体引用,模型本身完全不用动。
最后再说两句
前前后后把这套双向DC/DC模型跑下来,我最大的体会是:仿真不是目的,它是让你在烧毁昂贵的功率器件之前,先把逻辑和参数错误犯一遍的手段。Buck模式和Boost模式在拓扑上是一回事,真正难的是对同一个拓扑用一套控制逻辑去驾驭两个方向的能量流动。我习惯在模型里保留一个"最坏情况测试档",把电流参考直接做正负极的阶跃反转,专门用来检验模式切换是否留了余量。你在复现的时候,也可以照着这个方法,把每个模式、每个瞬态都跑熟了再想着上硬件。到时你会发现,仿真阶段多花的时间,硬件调试阶段全都省回来了。