1. 为什么要在PLECS里啃下DAB峰值电流前馈这块硬骨头
双有源桥(Dual Active Bridge,DAB)变换器在储能、车载充电、直流微网这些场景里出镜率极高,原因不复杂:它天生具备双向能量流动能力、宽电压比适应性和电气隔离,拓扑本身也够简洁。但真正把DAB跑起来的人都知道,稳态效率好看不难,难的是动态过程——负载突变、输入电压跳变、端口电压扰动时,电感电流会冲出一个远超稳态值的尖峰,轻则触发保护、重则炸管。峰值电流前馈控制策略就是冲着这个痛点去的:在电流环给定上叠加一个与扰动直接相关的前馈项,让控制器在扰动被反馈环"感知"到之前就提前动作,把峰值电流压下去。
我这次做的事情,是在PLECS里完整复现一套基于峰值电流前馈的DAB控制方案,思路来源是一篇该领域顶刊论文的控制框架。选择PLECS而不是Simulink,理由很实在:PLECS的开关器件模型和热模型耦合更自然,变步长求解器处理高频开关瞬态时步长控制更稳,跑长时间工况扫描不容易因为零交叉检测丢步。而且PLECS的C-Script模块写自定义控制逻辑非常顺手,前馈项里那些分段判断、查表补偿,用C-Script实现比搭框图清爽得多。
这篇内容适合谁看?如果你已经搭过基础的DAB开环或单移相闭环模型,想进一步搞清楚前馈控制到底怎么加、加在哪里、参数怎么整定,那这篇就是给你准备的。如果你还在纠结DAB的基本工作原理,建议先把单移相调制和电感电流波形吃透再回来,不然前馈部分会看得云里雾里。全文会围绕"为什么这么设计—关键细节怎么抠—实操怎么落地—坑怎么填"这条线展开,所有参数和步骤都来自我实际跑模型的过程,可以直接抄。
2. 整体方案设计与思路拆解
2.1 从"反馈救火"到"前馈预判"的控制逻辑转变
传统DAB电流环是纯反馈结构:采样电感电流或输出电流,与给定值比较,误差送进PI调节器,输出移相角。这套逻辑的问题在于,反馈天生滞后——扰动发生到误差显现,再到调节器输出修正,中间隔着采样延迟、计算延迟和开关周期。对于DAB这种电感电流斜率大、能量缓冲小的拓扑,等反馈环反应过来,电流尖峰早就冲上去了。
前馈的思路完全不同:扰动量(比如输入电压、输出电压、负载电流)本身是可测的,那就直接把扰动量通过一个已知的传递关系折算成控制量的修正值,叠加到反馈输出上。打个比方,反馈控制像开车时看到前车刹车灯亮了才踩刹车,前馈控制像提前知道前面有个下坡,脚先放到刹车上备着。两者不冲突,前馈负责"粗调预判",反馈负责"精调兜底"。
具体到DAB,峰值电流前馈的核心是把电感电流峰值与移相角、端口电压之间的解析关系反解出来,构造一个前馈通道。论文里的做法通常是对单移相调制下的电感电流峰值表达式做线性化处理,提取出对输入电压和输出电压的敏感项,作为前馈增益的设计依据。我在复现时保留了这套解析框架,但在实现上做了简化——把前馈项拆成"电压比补偿"和"负载电流补偿"两部分,分别整定,调试起来更直观。
2.2 为什么选PLECS而不是其他仿真平台
这个选择值得单独说清楚,因为工具选错会让后续调试事倍功半。PLECS的核心优势在于它把电气回路和控制系统分成两个求解域:电路部分用变步长求解器处理开关瞬态,控制部分用固定步长离散求解。这种分离式架构对DAB特别友好,因为DAB的开关频率通常在几十到上百kHz,如果整个模型都用固定小步长跑,仿真速度会慢到让人失去耐心;如果都用变步长,控制器的离散特性又不好精确表达。
PLECS的另一个好处是理想开关和非理想开关可以一键切换。前期调控制逻辑时用理想开关,仿真飞快,先把前馈通道的符号、增益方向、限幅逻辑调对;后期验证峰值电流实际抑制效果时切到带导通电阻和结电容的开关模型,看真实的电流尖峰和振荡。这个"先理想后非理想"的流程,比一上来就搭精细模型效率高太多。
还有一点是PLECS的探针和示波器配置很灵活,可以在任意支路插入电流探针、在任意节点插入电压探针,而且支持把多个工况的波形叠加对比。我做前馈参数扫描时,就是靠这个功能把不同前馈增益下的峰值电流曲线叠在一张图上看趋势,省了大量重复截图的时间。
2.3 前馈通道的插入位置与结构选型
前馈项加在哪里,直接决定策略的有效性。常见的有三种插入位置:加在电流环给定上、加在移相角输出上、加在电压环输出上。我复现的方案选择加在电流环给定上,原因是这样前馈项与反馈项在同一量纲下叠加,限幅和抗饱和逻辑可以共用一套,实现上最干净。
结构上,前馈通道采用"扰动测量—增益折算—限幅叠加"三段式。扰动测量取输入电压和输出电流,这两个量在DAB里都是必须采样的,不增加额外传感器成本。增益折算用解析式算出的系数矩阵,输入电压扰动对应一个增益,输出电流扰动对应另一个增益。限幅叠加是为了防止前馈项在大扰动下过冲,把前馈输出限制在反馈输出的合理比例范围内,一般取反馈输出的百分之三十到五十作为前馈限幅上限。
注意:前馈增益的符号必须与反馈环极性一致,否则会变成正反馈,一上电就发散。我第一次搭的时候就因为输入电压前馈项符号搞反,模型跑了两毫秒直接报错,排查了半天才发现是解析式推导时电压比定义方向弄拧了。
3. 核心细节解析与实操要点
3.1 电感电流峰值解析式的推导与简化
前馈增益不是拍脑袋试出来的,得从电感电流峰值的解析表达式出发。单移相调制下,DAB的电感电流在一个开关周期内分四段线性变化,峰值出现在移相角对应的时刻。设输入电压为V1,输出电压折算到原边为V2,移相角为φ,开关频率为fs,电感为L,则峰值电流表达式可以写成与(V1+V2)、φ、以及电压比相关的分段函数。
论文里的处理方式是对这个分段函数在稳态工作点附近做小信号线性化,提取出峰值电流对V1和负载电流的偏导,作为前馈增益的理论值。我在复现时发现,直接套用论文的线性化系数在宽电压比范围内误差偏大,原因是线性化只在工作点附近成立,而实际工况电压比变化范围很宽。我的处理是把电压比范围分成三段,每段单独算一组前馈增益,用查表方式切换。这个改动让峰值电流抑制效果在全程范围内都稳定在可接受水平,代价是控制逻辑多了一个分段判断,C-Script里几行代码的事。
具体增益计算过程是这样的:先确定额定工作点,V1取四百伏,V2折算后取三百五十伏,L取六十微亨,fs取五十千赫兹,额定功率三千瓦。在这个点上算出峰值电流对输入电压的偏导约为零点零二安每伏,对负载电流的偏导约为一点三安每安。这两个数就是前馈增益的基准值,实际整定时在此基础上上下浮动百分之二十做微调。
3.2 采样时序与计算延迟的补偿处理
前馈控制最怕的就是"前馈量算出来了,但扰动已经过去了"。数字控制里,采样、计算、PWM更新之间存在固有延迟,如果前馈通道不补偿这个延迟,效果会打折扣。我的做法是在前馈通道里加一个超前补偿环节,用当前采样周期的扰动变化率外推一个周期的扰动量,相当于提前半步动作。
具体实现上,在C-Script里维护一个扰动量的历史缓冲区,存最近两个采样点的值,用差分算变化率,乘以一个补偿系数后叠加到当前前馈量上。补偿系数取零点五到零点八之间,太大容易引入噪声放大,太小补偿效果不明显。我实测下来零点六左右比较平衡,输入电压阶跃时峰值电流能再压下去百分之十左右。
提示:超前补偿对采样噪声很敏感,如果电流采样没有做足够的滤波,补偿系数要往小调,否则前馈输出会抖。我的电流采样用了二阶低通滤波,截止频率设在开关频率的十分之一,这个配置下补偿系数取零点六没有出现明显抖动。
3.3 前馈与反馈的权重分配原则
前馈和反馈不是简单相加就完事,两者权重分配有讲究。前馈负责快速响应,反馈负责稳态精度,如果前馈权重过大,稳态时前馈项会与反馈项"打架",造成移相角小幅振荡;如果前馈权重过小,动态时前馈起不到作用,等于白加。
我的整定顺序是:先把反馈环单独调好,确认稳态无静差、动态超调在可接受范围;然后逐步加大前馈权重,观察峰值电流和稳态纹波的变化。前馈权重从零开始,每次加零点一,加到峰值电流不再明显下降、但稳态纹波开始上升的那个点,往回退一档作为最终值。这套流程走下来,最终前馈权重定在零点七,峰值电流比纯反馈时压低了约百分之三十五,稳态纹波增加不到百分之五,这个折中我认为是划算的。
3.4 限幅与抗饱和逻辑的细节设计
前馈项必须限幅,这一点没有商量余地。大扰动下前馈输出可能远超合理范围,如果不限幅,移相角会被推到极限,反而引发更大的电流冲击。我的限幅策略是动态限幅:前馈输出上限取当前反馈输出的绝对值乘以一个系数,系数取零点五。这样前馈项永远不超过反馈项的一半,保证反馈环始终有调节余量。
抗饱和逻辑跟前馈限幅是联动的。当移相角接近极限值时,前馈通道要冻结积分、停止累加,防止前馈项在饱和期间越积越大,等扰动过去后突然释放造成二次冲击。PLECS里实现这个逻辑,可以在C-Script里判断移相角是否触及上下限,触及则把前馈通道的使能信号拉低,同时把前馈输出保持在上一次的有效值。
4. 实操过程与核心环节实现
4.1 PLECS模型搭建的完整步骤
模型搭建从电路主回路开始。直流电源接原边全桥,四个开关器件用MOSFET模型,桥臂中点接电感,电感另一端接副边全桥的桥臂中点,副边全桥直流侧接输出电容和负载电阻。变压器用理想变压器加漏感的方式表达,漏感值直接并入外接电感,简化模型结构。这一步的关键是开关器件的驱动信号要留出死区,死区时间取两百纳秒,太短会有直通风险,太长会畸变电流波形。
控制部分用C-Script模块实现,输入端口接采样得到的输入电压、输出电压、输出电流、电感电流,输出端口接八个开关的驱动信号。C-Script内部按固定步长运行,步长取一微秒,与PWM载波周期对齐。移相角生成用计数器加比较的方式,计数器从零计到载波周期值,比较值由反馈输出加前馈输出再折算成计数值。
前馈通道在C-Script里单独写一个函数块,输入是V1和Iout,输出是前馈移相角修正量。函数内部先做分段查表确定增益,再算前馈量,再做超前补偿,最后限幅输出。整个C-Script代码量不大,核心逻辑不到一百行,但每个变量的量纲和定标要反复核对,我在这上面花的时间比写代码本身还多。
4.2 关键参数的计算与整定记录
参数整定我按"先静态后动态、先单环后双环"的顺序来。静态先确认额定工作点下移相角对应的输出功率对不对,用功率公式反算理论移相角,跟模型里实际跑出来的移相角对比,误差在百分之二以内算通过。这一步能验证主回路参数和变压器变比有没有填错。
动态整定先调反馈环。电流环PI参数用极点配置法给初值,比例增益按电感电流响应时间取开关周期的五到十倍来估,积分增益取比例增益的十分之一左右。然后跑负载阶跃,看电流超调和恢复时间,微调比例增益直到超调在百分之十以内。电压环在外环,带宽取电流环的五分之一,同样用阶跃响应整定。
前馈参数整定在反馈环调好之后进行。先固定前馈权重为零,跑一遍负载阶跃和输入电压阶跃,记录峰值电流作为基准。然后按3.3节的流程逐步加权重,每加一档跑一次阶跃,记录峰值电流和稳态纹波。我做了五组对比,数据整理成下表:
| 前馈权重 | 负载阶跃峰值电流(A) | 输入电压阶跃峰值电流(A) | 稳态电流纹波(A) |
|---|---|---|---|
| 0.0 | 18.6 | 21.3 | 0.42 |
| 0.3 | 15.2 | 17.8 | 0.44 |
| 0.5 | 13.4 | 15.6 | 0.46 |
| 0.7 | 12.1 | 14.2 | 0.49 |
| 0.9 | 11.8 | 13.9 | 0.58 |
从表里能清楚看到拐点:权重从零点七加到零点九,峰值电流只降了不到百分之三,但稳态纹波涨了近百分之二十。所以最终定在零点七,这个点性价比最高。
4.3 典型工况的仿真验证与波形解读
验证工况我选了三个:负载从半载跳到满载、输入电压从四百伏跳到三百六十伏、输出电压给定从三百五十伏跳到三百三十伏。每个工况都跑纯反馈和前馈投入两组,波形叠在一起对比。
负载阶跃工况下,纯反馈时电感电流峰值冲到十八点六安,前馈投入后压到十二点一安,恢复时间从一点二毫秒缩到零点七毫秒。波形上能明显看到前馈投入后电流上升沿变"钝"了,尖峰被削平,后续振荡也小。输入电压阶跃工况的改善更明显,峰值电流从二十一点三安降到十四点二安,因为输入电压扰动是前馈通道最直接的补偿对象。输出电压给定阶跃的改善相对小一些,峰值电流降了约百分之二十五,这是因为输出电压给定变化经过电压环才影响到电流环,前馈通道对它的响应链路更长。
波形解读时要注意一点:前馈投入后电流波形在扰动瞬间会出现一个小台阶,这是前馈项突加造成的,台阶幅度跟前馈权重和限幅系数有关。这个台阶本身无害,但如果台阶过大导致电流变化率超过电感饱和阈值,就要回头调小前馈权重或加一个前馈量斜率限制。我的模型里台阶幅度控制在额定电流的百分之五以内,实测没有引发任何异常。
4.4 从仿真到实际硬件的移植考量
仿真跑通不等于硬件能跑。移植到实际控制器时,有几个地方必须改。第一是采样延迟,仿真里采样是理想的,实际ADC采样有转换时间,而且采样时刻与PWM更新时刻之间有固定偏移,前馈通道的超前补偿系数要按实际延迟重新标定。第二是参数离散化,仿真里C-Script用浮点运算,实际控制器如果定点运算,前馈增益的定标要重新算,防止溢出或精度损失。第三是保护逻辑,仿真里可以随便跑极限工况,硬件上必须在前馈通道里加输出钳位,防止前馈量异常时把移相角推到危险区域。
我在移植时还遇到一个仿真里没暴露的问题:实际电感的饱和特性。仿真电感是线性的,实际电感在大电流下感值会下降,导致同样移相角下电流峰值比仿真高。解决办法是在前馈增益里加一个电流相关的修正项,电流越大增益适当调小,相当于给前馈通道加了一个软饱和。这个修正项在仿真里看不出效果,但硬件上实测能把大电流工况的峰值再压百分之十左右。
5. 常见问题与排查技巧实录
5.1 前馈投入后系统反而振荡的排查路径
这是最常见的问题,我前后遇到三次,原因各不相同。第一次是前馈增益符号搞反,表现是前馈一投入电流立刻发散,波形上能看到指数增长的振荡。排查方法很简单:把前馈权重设成很小的值比如零点零五,看电流是收敛还是发散,发散就是符号问题,回头检查解析式推导时电压比的定义方向。
第二次是前馈通道和反馈通道的采样不同步,前馈用的输入电压采样比反馈用的电流采样晚一个周期,导致前馈动作总是"慢半拍",与反馈形成相位差,引发低频振荡。解决办法是把所有采样放在同一个中断里触发,保证时序对齐。
第三次是超前补偿系数给太大,把采样噪声放大了,前馈输出高频抖动,通过移相角传导到电流上形成高频振荡。把补偿系数从零点八降到零点五,振荡消失。这三次排查下来,我总结了一个顺序:先查符号,再查时序,最后查补偿系数,按这个顺序走基本能覆盖大部分振荡问题。
5.2 峰值电流抑制效果不达预期的原因分析
有时候前馈投入了,峰值电流也降了,但降幅远小于预期。我遇到过两种情况。一种是前馈限幅设得太保守,前馈项还没发挥作用就被限幅卡住了。检查方法是把限幅系数临时放大到一,看峰值电流是否明显下降,如果是,说明限幅是瓶颈,适当放宽限幅系数,但要注意放宽后稳态纹波会上升,需要重新找平衡点。
另一种是扰动测量点选错了。我最初把输出电流采样点放在输出电容之后,测到的是负载电流而不是电感电流,两者在动态过程中差异很大,导致前馈量算错。把采样点移到电感支路上,问题解决。这个坑很隐蔽,因为稳态时两个电流几乎一样,只有动态时才能看出差别。
5.3 不同电压比工况下前馈效果差异大的处理
DAB的电压比变化范围宽,前馈效果在不同电压比下差异明显,这是解析式线性化的固有局限。我的处理是分段查表,前面3.1节提过。分段点怎么选?我的经验是按电压比等于一、大于一、小于一分成三段,每段内再按电压比偏离程度细分两档,总共六组增益。分段越多效果越好,但切换时的跳变也越明显,需要在切换点加一个平滑过渡,用线性插值把两组增益混起来,过渡区间取电压比的百分之五。
注意:分段切换时如果前馈量跳变过大,会在电流上产生一个台阶,这个台阶可能触发过流保护。平滑过渡是必须的,不能省。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 处理措施 |
|---|---|---|---|
| 前馈投入即发散 | 前馈增益符号反 | 小权重试投,看收敛性 | 检查解析式电压比方向 |
| 低频振荡 | 前馈与反馈采样不同步 | 查采样中断时序 | 统一采样触发时刻 |
| 高频抖动 | 超前补偿系数过大 | 减小补偿系数观察 | 降到零点五左右 |
| 峰值抑制不足 | 前馈限幅过保守 | 临时放大限幅看效果 | 放宽限幅并重调权重 |
| 动态时前馈量算错 | 扰动采样点位置不对 | 对比稳态与动态采样值 | 采样点移到电感支路 |
| 电压比变化时效果差 | 线性化增益不适配 | 分工况记录峰值电流 | 分段查表加平滑过渡 |
| 切换工况时电流台阶大 | 分段增益跳变 | 观察切换点波形 | 加线性插值过渡 |
5.5 几个仿真设置上的实操心得
PLECS的求解器设置对DAB仿真结果影响很大,这里分享几个我踩过坑才调对的参数。最大步长不要设太大,我一开始图快设了十微秒,结果开关瞬态被跨过去,电流峰值明显偏低,跟理论对不上。后来改成最大步长一微秒,峰值电流才准。相对容差设千分之一,绝对容差设一微安,这个组合下仿真速度和精度比较平衡。
还有示波器的采样设置,默认是跟求解器步长走的,变步长下波形点疏密不均,看峰值的时候容易漏掉真正的尖峰。把示波器改成固定采样率,采样率取开关频率的五十倍以上,峰值就能抓准。这个细节不起眼,但做峰值电流相关的研究,波形采样不准等于白做。
最后是C-Script的调试技巧。C-Script里不能直接打断点,我的办法是在关键变量上挂探针,把前馈量、反馈量、限幅标志这些中间变量引到示波器上,跑一遍看波形判断逻辑对不对。比盲猜高效得多。
6. 写在跑完这一轮模型之后
这套前馈策略从搭模型到参数整定再到工况验证,前后花了我将近三周,其中大半时间耗在排查振荡和调分段增益上。回头看,最值钱的经验其实就两条:一是前馈通道的符号和时序必须在投入前反复核对,这两样错了后面全白搭;二是前馈权重不要贪大,零点七左右是个甜点区,再往上加收益递减而代价递增。
后续如果还要往下挖,我打算做两件事:一是把分段查表换成在线参数辨识,让前馈增益随工况自适应调整,省掉手工分段的麻烦;二是把前馈通道扩展到三重移相调制下,那个场景的电流峰值表达式更复杂,但前馈的收益可能也更大。这两块等模型跑出结果再找机会聊。