最近在调一个2kW左右的双向DC-DC样机,核心任务是做扩展移相EPS调制,用来优化双有源桥DAB变换器的电流应力,同时在整个负载范围内保住ZVS。一开始我也图省事,直接用单移相SPS把系统跑起来,结果只要输入输出电压不匹配,变压器原边电流峰值就比额定工况高出百分之五六十,关断损耗和变压器铜损同时上来,效率直接掉到91%以下。后来花了两周把EPS的内移相角、外移相角、电感电流分段求解和ZVS边界从头推了一遍,从仿真到实测才把波形做干净。这篇文章就把这个过程完整写出来,包括推导思路、优化代码、仿真模型和示波器波形判读方法,适合正在做DAB效率优化、或者被电流应力和ZVS问题折磨的同学参考。
1. 项目背景与技术路线:为什么选EPS而不是别的调制
1.1 DAB拓扑和它的应用盘面
双有源桥(DAB)变换器在双向隔离DC-DC领域基本是默认选择。结构上就是两个全桥通过一个高频变压器连起来,中间再串一个电感,这个电感可以是变压器漏感,也可以外置。它的好处是原边副边完全对称,能量可以自然双向流动,移相角一正一反就能切换功率方向,而且全桥里的开关管都有机会做成软开关。
这几年DAB出现在车载充电机、储能变流器、光伏优化器、固态变压器里的频率越来越高。我这次做的样机就是给一个储能接口用的:输入侧接400V直流母线,输出侧接150V到250V变化的电池电压,需要支持双向功率流动。这个电压范围直接决定了调制的难度,因为输出电压不是恒定值,变压器变比按额定点设计之后,实际工作点必然会偏离耦合比M=1。
这里先解释一下M的定义:M = nVout/Vin,n是变压器变比,Vout和Vin分别折算到原边。M=1意味着原边全桥输出电压幅值经过变比后和副边折算电压幅值完全相等,这是DAB最舒服的工作点。M偏离1越多,调制难度越大,这也直接引出后面EPS调制的必要性。
1.2 单移相SPS的痛点在哪
单移相SPS只有一个控制变量D,含义是原边方波和副边方波之间的移相角。它的功率表达式很经典:P = nVinVoutD(1-D)/(2fsLs),D在0到1之间时功率先增后减,D=0.5时达到最大。这个式子对任何一个做过DAB的人都不陌生,但也正因为太简洁,它隐含了一个前提:两个全桥输出电压都是理想的两电平方波。
两电平方波的好处是控制实现简单,坏处是没有中间状态来缓冲电压失配。当M不等于1时,电感两端电压在换流前后出现明显的“过冲”,电感电流在几个开关状态里急剧升降,峰值电流和有效值电流一起来,同时部分区间功率从负载回流到输入侧。这部分回流功率不干实事,只增加损耗,在轻载时尤其明显。
具体到我这个样机,额定点400V输入、200V输出、变压器变比n=2时M=1,SPS在2kW额定功率下表现还行。但电池电压跌到150V时M=0.75,问题就暴露了:变压器原边电流峰值从额定工况的十几安涨到接近二十几安,满载效率掉了3个百分点还不止。这不是器件选型的问题,是调制方式本身的天花板。
1.3 技术路线与优化目标拆解
EPS扩展移相就是在SPS的基础上,往其中一个全桥内部再加入一个内移相角D1,使该桥输出电压从两电平变成三电平。再加上原来的外移相角D2,控制自由度从1个变成2个。多出来的这个自由度,本质上是在方波中间插入了一段零电平,让电感两端电压在部分区间降下来,电流变化不再那么剧烈。
有了两个移相角,优化问题就成立了:在给定传输功率和输入输出电压的条件下,找到一组(D1, D2)使原边电感电流的峰值最小,同时满足所有开关管的ZVS条件。这里电流应力定义为变压器原边电感电流的峰值,因为选器件、算损耗、看变压器饱和都看这个值。ZVS条件放在约束里,是因为只优化电流应力而不管ZVS的话,很容易出现“电流峰值小了但轻载软开关丢了”的局面,整体效率反而更差。
所以这次项目的完整技术路线是:拓扑选DAB,调制选EPS,目标函数是电流应力最小,约束条件是功率达标加全范围ZVS,验证手段是先仿真后实测。接下来几节就把这条路线上的关键环节逐个展开。
2. EPS调制原理与电流应力优化推导
2.1 两个移相角的物理含义
EPS调制里有两个移相量,为了叙述一致,我这里统一按半个开关周期Ths做归一化说明。原边全桥输出电压vp在一个半周期内先是+Vin持续D1·Ths,然后掉到零电平持续(1-D1)·Ths,负半周期对称;副边全桥输出电压折算到原边仍然是正负幅值±Vout'的两电平方波,相对原边三电平波形的起点滞后D2·Ths。
D1就是内移相角,对应原边桥两个桥臂之间的相位差,它把原来的两电平波形“挖”出了一段零电平。D2是外移相角,决定副边桥相对原边桥的相位,对应实际传输功率的方向和大小。SPS可以看成D1=0的特例,此时没有内移相,原边就是两电平方波,控制变量只剩D2。
功率方向由D2的正负决定,D2>0是正向传输,D2<0是反向传输。D1和D2的取值范围都是0到1,但严格来说,为了保持ZVS和功率单调性,很多时候最优解只在D1和D2的一个子域里。这一点等讲到ZVS约束还要再强调。
2.2 电感电流的分段求解方法
EPS下电感电流是分段的线性波形。因为每个开关状态里vp和vs'都是常量,所以电感两端电压固定,电流就是直线。核心思路是把半周期的开关状态按时间轴切开,逐段求出电流斜率,再用半个周期对称条件确定初始电流。
以D1<D2这种常见模式为例,一个半周期分成三段:0到D1·Ths,vp=+Vin而vs'=-Vout',电感电压是两者叠加;D1·Ths到D2·Ths,vp=0而vs'=-Vout',电感电压只剩副边;D2·Ths到Ths,vp=0而vs'=+Vout',电感电压反向。每一段的斜率就是电感电压除以Ls。最后利用半周期对称条件i(Ths)=-i(0),解出初始电流,整条电流波形就全出来了。
这个分段过程在D1>D2时稍有不同,需要在代码里按实际时序切分。不同模式下峰值电流出现在不同的换流时刻:可能在初始时刻,也可能在D1·Ths或D2·Ths这些切换点。工程上不用手推每个模式的闭式解,用一个通用扫描程序把0到1的(D1, D2)网格全部算一遍,同时记录功率、峰值电流和ZVS标志,比手推公式快得多,也不容易出错。
2.3 最优移相角的数值求解流程
我这次用的就是网格扫描加后处理。先把D1和D2按0.001到0.002的步长扫一遍,对每一组算传输功率、峰值电流、ZVS标志,然后筛掉不满足功率约束和ZVS约束的点,在剩下的点里找峰值电流最小的那一组。扫描精度0.001对应100kHz开关频率下10ns的时间分辨率,对工程查表来说足够。
下面是一段简化版的核心代码,MATLAB风格,可以照搬到Octave或者Python里:
% EPS扫描优化骨架(MATLAB) Vin=400; Vout=150; n=2; fs=100e3; Ls=100e-6; Ths=1/(2*fs); Vp=Vin; Vs=n*Vout; Ptarget=1000; res=[]; for D1=0:0.002:1 for D2=0.002:0.002:1 % 按D1与D2大小切分半周期状态 % 每段斜率s = (vp - vsign)/Ls % 依次计算各段终点电流 i1, i2, i3 % 利用 i3 = -i0 解出初始电流 i0 % 积分计算平均功率 P % 计算峰值电流 ipeak % 计算各换流点电流,判断ZVS方向与幅值 if abs(P-Ptarget)<2 && zvsoK res=[res; D1 D2 ipeak P]; end end end [~,idx]=min(res(:,3)); D1opt=res(idx,1); D2opt=res(idx,2);扫描之后得到的最优结果是一条“功率-移相角”曲线。实际控制器不能在线扫描,我会把离线算好的结果做成二维查表,在DSP里用线性插值取(D1, D2),实测效果和在线优化几乎一致。查表开销比在线迭代小两个数量级,这也是工程上落地EPS优化的常用做法。
3. ZVS实现条件与全域约束分析
3.1 从死区到体二极管:ZVS的物理过程
ZVS(零电压开关)说的是开关管在开通瞬间漏源电压为零,这样开通损耗几乎为零。它怎么发生的呢?开关管开通前有死区时间,死区里开关管还没通,但电感电流会继续流。如果电流方向刚好是把待开通管的寄生电容放电,同时把对臂的寄生电容充电,那么管子的漏源电压就会在死区里被钳到零,体二极管先导通。等到驱动信号真正到来时,管子是在零电压下开通的。
这件事成立需要两个条件。第一,换流时刻的电感电流方向正确,也就是电流要流进待开通管的源极、从体二极管走;第二,电流幅值要足够大,能在死区时间内把寄生电容的电荷搬完。第二个条件是很多人忽略的,死区太短、电容太大、电流太小,ZVS就会静悄悄丢掉。
最小电流可以用iZVS = 2CossVin/tdead粗略估算。比如SiC MOSFET的Coss在400V下取几十到一百皮法,死区取200ns,算出来的最小电流大概在零点几安到一两安。这个值看着不大,但在轻载和EPS的零电平区间里,电感电流恰恰可能很小,所以ZVS不是白来的,必须当成约束处理。
3.2 EPS调制下四个开关管的ZVS条件
EPS调制下原边和副边八个开关管,ZVS条件不是一致的。原边桥四个管里,两个桥臂管在方波沿处换流,电流大时容易做ZVS;但三电平零电平区间的切换边沿,电感电流可能已经衰减到很小的值,对应的管就难做ZVS。副边桥同样要看换流时刻的电流方向。
工程上我会把每个管的ZVS判断写成统一的规则:对每一个开关瞬间,取出该时刻的电感电流值,判断方向是否与该管的体二极管导通方向一致,同时比较幅值是否大于iZVS阈值。方向不对和幅值不够都判为ZVS失败。这段判断放在扫描程序里跟电流计算一起做,不需要额外建模。
我实际跑下来的经验是:EPS的最优电流应力点往往倾向于把D1取得偏大,而D1偏大会让原边零电平区间变宽,正好把某些管的换流电流压低,导致ZVS丢失。所以不带ZVS约束的优化结果,轻载时大概率是坏的,这个坑我一开始也踩过。
3.3 电流应力优化和ZVS约束怎么平衡
既然最优电流应力点可能牺牲ZVS,那就不能“先优化后检查”,而要把ZVS条件嵌进优化过程。具体做法是在扫描筛选阶段就加上ZVS标志,只有所有管子都满足ZVS的(D1, D2)组合才进入候选集。这样一来,最优解从无约束最优变成约束最优,电流应力会比无约束结果略高一点,但换来的是全负载范围效率稳定。
实际结果在我这个样机上是:M=0.75、1kW工况下,无约束EPS的峰值电流能压到最低,但有两个管在轻载时ZVS丢失;加上ZVS约束之后,峰值电流比无约束解高大约8%,但全负载范围八个管全部ZVS,满载效率反而比无约束解高出1个百分点以上。这就是权衡,目标函数和约束条件必须一起定义。
另外要留意一个点,ZVS约束不仅跟移相角有关,还跟死区时间和寄生电容有关。死区设计得越合理,最小电流阈值越低,能选的(D1, D2)域就越大。死区不是越小越好,太小了充放电时间不够,太大了又侵占有效占空比,这个值要跟移相角优化一起迭代。
4. 仿真验证与实验实现
4.1 样机参数与设计实例
为了把方法说具体,我把样机参数列一下:输入电压Vin=400V,输出电压范围150V到250V,额定200V,变压器变比n=2,开关频率fs=100kHz,功率电感Ls=100μH,额定功率2kW。
Ls的选取可以按单移相约D=0.5时刚好能出额定功率来算,Pmax=nVinVout/(8fsLs),代入2kW和额定点400V/200V,算出来Ls约100μH。这个电感值保证额定功率有余量,同时电流纹波不至于太大。实际中用变压器漏感充当一部分,外置电感补齐,漏感从变压器副边折算到原边要算准。
M=0.75的工况对应Vout=150V,这个工况最能体现EPS价值,也是我优化和实测的重点。在这个工况下,额定2kW时SPS已经明显吃力,半载1kW时电流应力问题更突出,所以后面的对比数据都以1kW为主,效率对比则看2kW满载点。
4.2 仿真建模要点和对比结果
仿真我分两步走:先建一个理想开关模型做快速sweep验证理论曲线,再换成功率器件模型做损耗分析。理想模型里要点有三个:第一,开关管用理想开关加输出电容Coss,不设死区的话ZVS判断没有意义,所以必须设置死区;第二,电感不能漏掉寄生电阻,否则仿真电流在轻载时会衰减到离谱;第三,变压器的激磁电感要加,虽然它对功率传输影响小,但不加的话副边波形会和实际差很多。
对比结果是M=0.75、1kW工况下的数据,列成表更直观:
| 调制策略 | 原边峰值电流(1kW) | 满载效率(2kW) | 全负载ZVS |
|---|---|---|---|
| 单移相SPS | 约22A | 约91.0% | 部分点丢失 |
| EPS无约束优化 | 约13.5A | 约93.5% | 轻载丢失 |
| EPS带ZVS约束优化 | 约14.6A | 约94.5% | 全部保持 |
结论很清楚:EPS相比SPS把电流应力压低了接近40%,加ZVS约束之后稍涨一点但依然远好于SPS。损耗分析里还有一个有意思的现象:无约束EPS虽然峰值电流最小,但关断电流在某些管上反而比有约束EPS更大,关断损耗抵消了一部分导通损耗收益。所以看效率不能只看峰值电流,要综合看整个开关周期的电流分布。
4.3 实测波形判读方法与结果
实测平台搭好之后,判读波形是重点。判断电流应力优化是否生效,直接看变压器原边电流探头:对比SPS和EPS两种调制下同一功率点的峰值电流和波形形状,EPS应该明显“塌”下去一块,峰值位置也会从方波沿移到零电平沿附近。
判断ZVS要用差分探头同时看Vgs和Vds,重点看开通前的Vds波形。如果Vds在死区里已经降到零并出现平台,说明ZVS成立;如果Vds在开通瞬间还有明显的电压平台甚至振荡,说明硬开关了。实测时探头的接地线要短,最好用弹簧地线,否则开关边沿的高dV/dt会耦出噪声,误判成硬开关。
我实测下来EPS加ZVS约束的波形和仿真几乎一致,峰值电流14A到15A,八个管全部ZVS。和SPS对比,满载效率从91%左右提升到94.5%,半载效率的提升更明显。这个结果验证了前面的推导,也说明这套“先扫描优化再查表实现”的流程可以直接复用。
5. 常见问题与避坑实录
5.1 优化解在样机上不生效
第一次把查表里的(D1, D2)写进样机,效率提升没有仿真那么多,检查发现是死区补偿的问题。控制器输出的移相角是逻辑信号之间的相位,但实际功率传输的起点是死区结束之后的真正换流点。死区如果不补偿,实际D1和D2会比设定值偏大或偏小,误差在死区时间级别,对100kHz、100ns级死区来说,等效移相角误差可达5%到10%,足以把最优解推偏。
解决办法是在查表前加死区补偿,把驱动信号的移相角换算成实际换流点的移相角。补偿量跟电流方向还有关系,因为死区里电流方向决定了哪个沿提前还是滞后,这部分要在实测里逐个工况校准。我后来做了一个小的校正表,效果立竿见影。
另一个常见原因是查表步长太粗。扫描步长0.01时查表结果在相邻点之间跳变,功率闭环一抖就把移相角拉偏。把表做密到0.002,再用插值输出,抖动就基本消失了。
5.2 ZVS丢失的排查思路和工具
如果某个负载点效率突然掉一截,先别急着怀疑磁芯和PCB走线,大概率是ZVS丢了。判断方法很简单:用差分探头看该管开通前的Vds,如果是硬开关,Vds会在Vgs上升之前还有很高的平台甚至还在振荡。定位到具体哪一个管丢了ZVS之后,再看对应换流时刻的电流方向。
排查方向一般分三类。第一类是电流幅值不够,轻载时或者D1太大把电流压得太低,ZVS阈值没过,这时要么调死区增大可用窗口,要么在优化约束里把对应管的电流下限抬高。第二类是电流方向反了,这通常是外移相角定义和软硬件相位极性对不上,查一下D2符号和副边驱动时序。第三类是死区时间设置不对,太长或太短都会让ZVS窗口失效。
我还会把一个功率点实测的电流应力和ZVS分布图画出来,跟仿真扫描图对比。两张图出现大的偏差,基本可以断定建模时漏了寄生参数,优先检查变压器绕组电容和PCB寄生电感,这两个在高频开关下影响非常大。
5.3 参考文献调研方向和工具选型建议
标题里带了“有参考文献”,我就把文献调研思路也说一下。电力电子领域的几个主流期刊上关于DAB调制优化的论文非常多,检索关键词建议用“DAB phase shift modulation”“EPS current stress”“ZVS range DAB”“triple phase shift dual active bridge”这几个方向。
做这个项目前,我建议先把SPS、EPS、TPS(三移相)、DPS(双重移相)这几类调制的经典论文各找两三篇精读。核心是把各种调制下的功率表达式和电流波形定义搞统一,因为不同文献对移相角的归一化方式不一样,直接抄公式很容易在量纲上翻车。
工具方面,理论验证用MATLAB或者Python都行,胜在灵活;开关细节和损耗分析用PLECS这类电路仿真更合适,它对死区和非线性电容的处理比理想模型准确。数据记录和效率曲线用常规的功率分析仪加示波器足够。如果后续要做数字控制,查表实现用DSP或者FPGA都行,关键是D1和D2的更新跟PWM周期同步,避免两个移相角在不同周期生效导致电流波形畸变。
最后再分享一个小技巧:做ZVS实测时,把死区时间临时调大一倍看波形变化,往往能更快定位到是哪个管在哪个换流点出了问题。这个操作不用改代码,在控制器调试界面里就能做,排查效率非常高。