我在做某个储能样机的双向电源时,第一版硬件直接烧了两组管子,原因很简单——移相角度给反了,副边桥的时序没有严格跟着原边走。后来我养成了一个习惯:任何新的隔离型DC-DC拓扑,先花两天在Simulink里把闭环跑顺,再考虑上电。今天要拆的就是这个双有源桥(DAB)高频隔离DC-DC变换器的Simulink闭环仿真过程,包括电路怎么搭、参数怎么算、控制器怎么调,以及我实际踩过的坑。这篇适合正在做DAB仿真验证的电源工程师和研究生,也适合刚接触双向变换器、想理解“移相控制到底在控制什么”的人。你能看到一套从零开始搭出来的可复现模型,以及比文档更实际的经验细节。
1. 先把DAB的传能原理讲透
1.1 一个电感在中间传递能量
DAB拓扑一句话概括:原边一个全桥,副边一个全桥,中间是高频变压器和一只传能电感。原边全桥把直流母线电压逆变成高频方波,副边全桥把方波整流后输出到负载侧。两个全桥的开关频率完全一样,但副边桥的驱动方波相对原边桥滞后一个移相角φ,功率的大小和方向就全由这个角度控制。
关键点:变压器在这里不起储能作用,它只负责电气隔离和电压匹配。真正用来“搬运能量”的是那只串联在桥口之间的电感,通常直接用变压器漏感,但实际产品里因为漏感分散且不好控制,往往会额外串联一只电感。这直接决定后面建模时怎么做——变压器可以近似成理想模型,传能电感单独拿出来。
单移相控制下,功率传输表达式是:
P = Uin × (k × Uo) × D×(1-D) / (2×fs×L)
这里k是变压器原副边匝比,Uin是原边侧电压,Uo是副边输出电压折算前的实际值,fs是开关频率,D = φ/π是移相占空比。注意D的取值范围是0到1,当D在0到0.25附近时功率接近线性增长,D=0.5时功率最大,超过0.5功率反而下降,而且环流损耗明显增大。所以闭环控制中一般让D工作在小于0.5的区间。
为什么需要一只电感来传递能量?你可以把系统理解成两交流源通过感性阻抗互联。原边桥输出的方波电压V1,副边桥输出方波反射到原边为kV2,两个方波之间有相位差,电感两端电压差驱动电流流动,从而形成有功传输。相位差为零时电压差等于零,电流只在开关切换瞬间有小扰动,功率近似为零;相位差拉大,电压差增大,电流和功率增大。这就是“移相控制”最朴素的物理解释。
1.2 为什么选DAB而不是LLC或者反激
做高频隔离DC-DC变换,常见的拓扑有反激、LLC、移相全桥、DAB。我自己选型时会先问三个问题:是否需要能量双向流动?输入输出电压变化范围宽不宽?目标功率是小功率还是中大功率?
反激拓扑结构简单、成本低,但只能单向传输,而且开关管应力大,适合几十瓦级别。LLC谐振变换器在软开关方面确实出色,但它本质接近单向结构,要改成双向需要额外增加有源开关和对应控制策略,电压增益范围也偏窄,不太适合储能这种要求宽电压双向往返的场景。移相全桥是经典的单向大功率方案,滞后桥臂轻载ZVS范围窄,而且只有一个方向传能。
DAB的优势恰好是两点:第一,结构完全对称,原边和副边都做成全桥,能量可以毫无障碍地反向流动,非常适合储能、V2G、直流微电网这类双向需求明确的应用;第二,在适当的移相范围下,所有开关管都有机会实现ZVS,开关频率可以做到100kHz以上,变压器和磁性元件的体积能缩得很小。这也是它成为中大功率双向隔离DC-DC事实标准的原因。
1.3 单移相方案的软肋
单移相控制是DAB家族里最简单的一种,整个控制系统只需要调节一个参数D,逻辑清晰,调试容易。但它的代价是回流功率偏大。所谓回流功率,是指在一个开关周期的一部分时间里,电感电流与端口电压方向相反,能量从副边或原边桥倒流回输入侧。这个回流功率不参与有效输出,却造成额外的导通损耗和铜损,轻载时尤其明显。
进阶方案有双移相、扩展移相、三重移相,本质就是增加占空比自由度,让原副边方波不再是固定的50%,从而抑制回流功率并拓宽ZVS范围。我的建议是:如果你第一次接触DAB,别一上来就冲三重移相,先把单移相的闭环跑通、理解PI输出到底怎么转成移相角,后面扩展自然容易。这篇博文就以单移相闭环为主,兼顾一些参数裕量的考虑,保证你能逐步复现。
2. 仿真前先把参数算明白
2.1 一组可复现的设计参数
我习惯在打开Simulink之前先手算一遍关键参数,不然建模时连电感和变比都填不对。这里用一组典型参数做例子:
- 原边输入电压:Uin=400V
- 副边输出电压:Uo=48V
- 额定功率:P=1kW
- 开关频率:fs=100kHz
- 目标效率:90%以上(暂不在这里深究损耗)
变压器变比k应该选多少?理想情况下希望反射到原边的副边电压接近Uin,这样在D=0时无功电流基本为零,传输功率对称性也最好。取k=400/48≈8.33,也就是原边匝数8.33倍于副边。具体仿真里变压器原副边绕组匝比可以设成8.33:1,如果必须取整,取8:1或者17:2也可以,但计算L时用实际值。
再看传能电感的取值。单移相最大传输功率为:
Pmax = Uin×(k×Uo) / (8×fs×L)
我们不希望额定功率点贴着Pmax跑,否则电压扰动一点控制就饱和了,所以让额定点工作在D=0.3左右,留出0.5之前的调整空间。把上面参数代进功率公式:
P = 400×400×D×(1-D) / (2×100000×L)
这里k×Uo=8.33×48≈400。取D=0.3,P=1000W,可以反推:
L = 400×400×0.3×0.7 / (2×100000×1000)
= 160000×0.21 / 200000000
= 0.000168 H ≈ 168uH
实际设计时我更愿意取大一些,比如200uH,这样如果负载瞬态太大,控制器有足够的移相余量;感值偏小会导致电流斜率过大、轻载环流明显。取200uH的话,额定传输1000W对应的D大约在0.27附近,控制器稳态工作在0.25~0.3之间,这在我接受范围内。
输出电容主要影响纹波和动态响应。DAB的输出电流含有大量开关频率谐波,第一版仿真可以先取470uF,后面根据阶跃响应再调整。负载电阻按额定工况取:
R = Uo / (P/Uo) = 48 / (1000/48) ≈ 2.3Ω
2.2 开关频率、死区与采样时间的选择
开关频率100kHz意味着开关周期T=10us,半个周期是5us。DAB的一个完整工作周期内,每个桥臂只需要50%占空比的方波驱动,关键参量是副边相对原边的延迟时间δ。延迟时间和移相比的关系是:
δ = D × T / 2 = D × 5us
这里D是归一化移相比,范围0~1。如果D=0.3,那么副边桥相对原边桥延迟1.5us。这个换算关系必须刻在脑子里,因为后面闭环PID的输出就是D,而PWM模块需要的是延迟时间或者相位角度。换算错了,控制器调得再漂亮波形也是错的。
死区时间要单独说。实际硬件中上下桥臂不能同时导通,否则母线直通短路。100kHz频率下,典型死区取100ns到300ns。但在第一版Simulink仿真里,我建议先不加死区,用理想开关和理想驱动,先把闭环控制逻辑调通。原因很简单:死区会引入非线性,电流过零附近波形异常会干扰你对PI参数判断;等控制策略稳定了,再在驱动信号上加死区模块验证实际波形,那是另一个层面的工作。
关于仿真步长,开关级模型建议使用定步长离散求解器,步长设置成开关周期的1/200到1/100,也就是50ns到100ns。步长太大,开关切换瞬间电流会失真;步长太小,仿真时间无限拉长。我常用的起步值是100ns,如果电流尖峰附近不收敛再降到50ns。
2.3 第一版模型用理想开关还是全MOSFET模型
这是个很容易反复纠结的问题。Simulink里自带的MOSFET模型考虑了导通电阻、结电容、内部反并联二极管,参数齐全时波形非常接近实际,但模型复杂、仿真速度慢,而且常因为结电容和外围电感的谐振导致数值不收敛,仿真一跑就报“singular”或者直接发散。
所以我把建模分成两个阶段。第一阶段做控制策略验证,用理想开关或者简化MOSFET模型(只保留导通电阻几毫欧、不加复杂结电容),重点看输出电压闭环是否稳定、移相比变化是否符合预期。第二阶段做波形细化,把MOSFET的寄生参数加进去,观察开关尖峰、ZVS实现情况、死区影响。这篇里讲的主电路搭建以第一阶段为主,这样既能快速复现,又能抓住DAB最核心的移相传递特性。
3. 在Simulink中一步步实现DAB闭环
3.1 主电路搭建:从直流源到全桥到变压器
打开Simulink,建议使用Simscape Electrical(或SimPowerSystems)元件库。先建立一个电压源,电压设400V,用“Voltage Measurement”把母线电压采样出来备用。
原边全桥用4个MOSFET按H桥连接。我这里说的连接顺序是:Q1和Q3构成左桥臂,Q2和Q4构成右桥臂,Q1上管、Q2下管、Q3上管、Q4下管。实际上为了看逻辑清晰,我喜欢把桥画成左臂由Q1(上)和Q2(下)组成,右臂由Q3(上)和Q4(下)组成。对角开关Q1和Q4同时导通,Q2和Q3同时导通,两者交替切换,得到正负交替的高频方波。
变压器我建议用“Linear Transformer”元件,把绕组1匝数设为8.33,绕组2匝数设为1,变比即8.33:1。磁化电感设为较大值例如1e6H,这样励磁电流小,基本接近理想变压器。同时一定要留意:Linear Transformer内部有漏感参数,但我们需要的传能电感是明确的200uH,而且最好独立可控。所以变压器内部漏感设为0,将200uH电感和一个小电阻串联在原边桥口与变压器之间。这个小电阻取值0.05Ω到0.1Ω,用于模拟线路损耗和阻尼,能显著改善仿真的数值稳定性。
副边全桥结构和原边完全一样,也是四个开关管。副边桥的输出侧接滤波电容470uF和负载电阻2.3Ω。注意副边桥本身就可以作为整流器工作,但如果要能量双向流动,副边桥必须也用MOSFET而不是二极管,否则反向传能时就没有可控通路。电压采样放在电容两端,用“Voltage Measurement”接到示波器以及闭环反馈通路。
3.2 PWM驱动和移相角度的生成
DAB的驱动逻辑并不复杂,但很容易接反。我先说原边:Q1和Q4共用一路PWM,Q2和Q3共用另一路反相PWM。想要占空比50%的方波,可以用两个“Pulse Generator”模块:
- PWM1:周期10us,占空比50%,初始相位0,输出给Q1和Q4
- PWM2:周期10us,占空比50%,初始相位5us,输出给Q2和Q3
这两个信号相位差180°,合起来就是一个完整H桥输出。
副边桥的关键是整个桥相对原边桥滞后一个角度。先把闭环控制器输出的移相比D换算成延迟时间δ,公式是:
delay = D × 5e-6
在Simulink里可以用一个“Gain”模块乘上5e-6,得到以秒为单位的移相延迟。副边PWM模块这样设置:
- PWM3:周期10us,占空比50%,初始相位=delay,输出给副边桥的Q1s和Q4s
- PWM4:周期10us,占空比50%,初始相位=delay+5us,输出给副边桥的Q2s和Q3s
这样做的好处是直观:D增大,delay变大,副边滞后增加,功率增大。如果你用的是带“Phase”输入的可变脉冲发生器,也可以直接把delay接到phase引脚。但要注意单位一致性,Simulink的Pulse Generator相位既能用秒也能用周期比例,看清楚设置界面里的单位再填。
实际工程中更常见的是用比较器生成PWM:三角载波和0比较得到原边方波,三角载波和移相调制波比较得到副边方波。Simulink里也能做,但Pulse Generator方案更简单,这里就不展开。
3.3 闭环控制器:输出的是D不是占空比
DAB闭环控制在单移相策略下的任务非常单一:实时采样输出电压Vout,与目标电压48V求差,PI控制器输出移相比D,经限幅和增益换算后送给副边PWM作为移相延迟。整个环路的被控对象不是“占空比”,而是“移相延迟”,这一点和普通Buck/PFC有本质区别。
PID Controller使用连续时间乘积分即可,D对应移相比,初值给0。限幅很关键,我通常把D限制在0到0.5之间。为什么要限制在0.5?因为超过0.5后单移相功率反而下降,闭环会出现正反馈区域,控制器容易失控。下限设0是因为单移相下D为负会反向传能,我们的第一版模型先不研究反向功能。
PI参数怎么整定?我用一个简化计算加经验修正的方法。先估算被控对象增益:在额定点附近,D增加ΔD会导致输出电流增大。利用前面功率公式,在D=0.27附近:
dP/dD = Uin×k×Uo×(1-2D) / (2×fs×L)
= 160000×(1-0.54) / (2×200000×200e-6)
= 73600 / 80
约等于920W。
也就是说D每变化0.1,功率增加约92W,折算到48V输出电流变化约1.9A。反馈环节的电流增益K约等于19A/D。输出电容470uF,则电容上的电压变化可以近似成1/C对电流积分,开环传递函数近似是:
G(s) = Kp × K / (C×s)
将环路带宽定在开关频率的1/20,也就是5kHz左右:
Kp = C×2π×5000 / K = 470e-6×31400 / 19 ≈ 0.78
实际使用我会先取Kp=0.3,然后慢慢往上试到0.5~0.8之间,看阶跃响应的超调量。积分项Ki先给一个试探值,比如500,然后看稳态误差和响应速度。如果你不想手算,也可以先用Simulink的Control Design工具箱做频率响应自动整定,但至少要知道大致范围,否则自动整定给的参数可能在非线性限幅下失效。
一个要特别提醒的点:PI控制器输出的是D,它后面接的PWM模块是一个非线性环节,D过大会让副边方波滞后接近半个周期,功率峰值过后反而下降。所以输出限幅0.5既是保护也是性能边界。另外启动时输出电压为零,误差很大,积分器会在很短时间内把输出推到上限,导致启动瞬间电流极大。我通常给参考电压做软启动斜坡,例如0到48V用2ms斜坡,让PI输出随着参考上升逐渐增大,而不是一上来就顶到最大。这个细节对保护仿真电流非常有用。
3.4 仿真配置与波形观察点
整套模型搭好后,我用“Powergui”模块中的“Continuous”仿真模式,求解器使用定步长ode23tb或者ode15s,步长设100ns。仿真时间可以先跑5ms,覆盖50个开关周期,先看开环波形;确认正常后再切换闭环并延长到20ms以上观察动态过程。
需要观察的波形至少包括:原边桥输出电压Vab、副边桥输出电压Vcd、电感电流iL、输出电压Vout、PI输出D。这五个信号放一个示波器里,用多个坐标系显示。前三个确认移相逻辑是否正确,后两个确认闭环动态。经常有人只盯着Vout看,结果清零或稳态时才发现原边副边相位关系根本没接对,这个习惯很不好。
4. 调试图谱与波形解读
4.1 闭环振荡,问题往往出在控制方向或PI速度
我第一次把闭环跑起来的时候,Vout在48V附近来回震荡,振幅几十伏,拨动示波器一看,PI输出D在0和0.5之间高速摆动。第一次排查看PWM接线没问题,波形正负交替也正常,问题出在PI增益太大:Kp=10,Ki=5000这种参数在电源环路里完全是失控节奏。后来我把Kp降到0.5,Ki降到200,振荡立刻缓和。
还有一种隐藏问题:方向反了。如果副边桥接成了超前原边而不是滞后,误差为负时PI输出D增大,反而是功率方向朝反方向跑,输出电压越控越远,最终D被限幅打满。这类问题表现不是振荡,而是电压完全无法稳定。判断方法很简单:把PI断开,手动固定D=0.2,如果输出电压比没有移相时高,说明方向正确;如果输出电压反而低或者功率反向,就是副边相位接反了。
4.2 启动瞬间的冲击电流怎么压下去
闭环启动那一刻,如果D直接从0跳到0.3,电感电流会出现一个非常大的暂态峰值,仿真里可能看到几百安培甚至上千安培的尖峰。原因不复杂:电感电流稳态值需要时间建立,而移相比突变相当于给电感突然加了一个大步电压,电流斜率瞬间按U/L爬升。
解决手段有两个,在实际项目里我两个都用。第一是给PI输出增加限幅速率,限制D的变化率,不让D每一控制周期跳变超过比如0.01。第二是输出参考电压软启动,让目标值从0平滑爬到48V,PI自然会把D慢慢推上去。这两个措施能显著改善启动电流,也更接近真实控制器的处理方式。仿真里如果还嫌麻烦,可以把软启动时间加到5ms,基本就能看到温和的启动波形。
4.3 输出电容和负载影响电压稳定
负载从2.3Ω突然变身成0.5Ω重载时,输出电压会先跌落再恢复。这个跌落幅度和恢复速度由电感和电容共同决定。本系统的功率回路响应相对快,但输出电容470uF在高频段阻抗还不够低,动态跌落的幅度可能超过1V。这时候可以考虑增大电容到1000uF甚至2200uF,代价是动态响应带宽变窄。这里有一个权衡:输出电容太大,PI整定的等效控制对象变化,可能导致原参数下产生相位裕度不足。
我常用的一种做法是同时看“负载电流阶跃输出电压波形”和“输出电压参考阶跃波形”。前者调电容,后者调PI带宽。两者都调到满意,基本就算闭环合格。仿真里负载可以用“Breaker”模块或直接改R参数做阶跃,分析起来很方便。
4.4 高频振铃和数值振荡
使用理想开关模型时,电感电流和电压波形通常是干净的方波和三角波。一旦加入开关管寄生电容,开关切换瞬间就会出现LC谐振尖峰,频率往往是MHz级别。这时候如果仿真步长还是100ns,波形会混叠,甚至会推出数值振荡。我的经验是先查看振铃频率是否合理:振铃频率约等于1/(2π√(L×Cds)),如果算出几百kHz,步长至少要10ns才能分辨,仿真时间会急剧膨胀。
在仿真层面有两个变通:其一,不要在理想控制验证阶段追求完美尖峰叠加,那是硬件细节问题;其二,实在要研究尖峰,可以在电感两端并联一组RCD钳位支路,观察峰值是否被限制到目标值,还可以顺手验证吸收电路的合理性。总之,别让数值振荡干扰你对闭环稳定性的判断。
5. 常见问题速查表
下面这张表是我这段时间调试DAB仿真模型的浓缩记忆,照着排查能省不少时间:
| 现象 | 可能原因 | 解决方向 |
|---|---|---|
| 输出电压完全不可控 | 副边桥移相方向接反 | 手动固定D=0.2,观察功率方向是否为正 |
| 输出电压高频振荡 | PI增益过大 | 降低Kp,将Ki调小,必要时加反馈滤波 |
| 启动电流尖峰巨大 | PI启动积分冲顶 | 参考电压软启动、D变化率限幅 |
| 开环波形正常,闭环稳态有误差 | 积分作用不足或采样延迟 | 增大Ki,检查电压反馈采样位置是否在电容两端 |
| 开关切换瞬间电压尖峰过高 | 寄生电容和电感谐振 | 加RCD吸收或降低仿真步长验证 |
| 仿真报“singular”不收敛 | 电感电流回路断路或建模错误 | 检查桥臂连接,确保电感和变压器形成完整电流回路 |
除了表格里这些,还有一个容易忽略的坑:副边全桥的“同一桥臂上下管”如果没有互锁,即使仿真里是理想开关也有可能导致逻辑竞争。比如PWM3和PWM4之间相位差是180°,但若你在延迟模块里不小心给两个驱动都加了延时,上下管短暂同时导通就会出现母线直通,输出电压瞬间拉垮。仿真中每换一次PWM设置,先把驱动信号单独拉出来看一遍,再往主电路里接,这个习惯能保证你不被莫名其妙的“短路”问题耗掉半天。
6. 从单移相到扩展移相:我的后续方向
把单移相DAB闭环跑通后,我习惯趁热打铁做两件事。第一件事是把模型改成平均化模型,把开关阶段等效成受控源,仿真速度能提升几十倍,适合批量扫描PI参数和负载阶跃工况。第二件事是切换到双移相控制,在原副边方波中额外加入占空比自由度,让D在更宽负载范围内保持高效率和ZVS。切换的时候只需改PWM生成逻辑和控制输出,主电路一模一样,这就是前期建模模块化带来的红利。
如果你也是做电源仿真的,我个人建议不要把单移相仿真停留在“能出波形”的层面。试着手动改几个参数,比如把传能电感从200uH改成100uH,观察移相比、电流峰值和动态响应如何变化;再把负载跳到轻载,看单移相的回流功率让效率恶化到什么程度。这些实验做一遍,你才能体会为什么实际产品要上扩展移相、为什么控制器要各种限幅和保护策略。
我在调试这套模型时最大的体会是:DAB的公式不多,闭环也不复杂,难点全在脑子里把“电压—PI输出D—移相延迟—副边方波—原副边电压差—电感电流—输出功率”这一整条因果链立起来。一旦这条链立住了,Simulink模型只是一层壳,真正值钱的是你拿到示波器波形后能立刻判断问题出在控制、参数还是接线。这也是这篇记录最希望帮你达到的状态。