
1. 这套程序包的完整画像从标题说起它到底解决了什么先说个真实场景。某次我在调试一台采用双有源桥拓扑的变换器样机负载从半载切到满载时输出电压直接砸下去4V多波形上还能看到明显的低频振荡。当时的第一反应是PI参数没调好于是按老经验先加大Ki、再调整Kp来回试了两个晚上波形好一点就开始发烫调好了满载又超调最后只能靠示波器一遍遍看阶跃响应慢慢磨。调试结束后我就想这种靠手感凑参数的做法本质上是绕过了系统本身的频域特性效率低而且不可复用。后来我把这套“扫频建模—开环/闭环仿真—Bode补偿对比—PI参数整定计算”的程序包整理出来就是为了让DAB这类带移相控制的变换器不再靠蒙参数工作。先说清楚这套程序包能干什么。DAB-ESP这个标题里包含五个关键词双移相全桥、扫频、开环闭环仿真、Bode图补偿对比、PI参数整定。把它们串起来看其实就是一条完整的小信号建模与控制设计链路。第一步通过扫频得到被控对象的频域特性第二步在仿真环境里验证开环模型的准确性第三步搭闭环看反馈回路是否稳定第四步用Bode图对比不同补偿网络的裕度表现第五步把补偿网络的参数换算成实际可烧录的数字PI系数。整个过程覆盖了从电路建模到控制代码落地的每一个环节正是一个电源工程师在设计数字控制DAB时最需要走完的路径。这套资料适合谁用如果你正在做DAB变换器的数字控制或者虽然做其他移相变换器但一直搞不懂频域分析怎么落地又或者你手上有一台能跑的样机但控制环总是不稳定那么这套东西能给你一个可以照搬的框架。哪怕你只是刚接触电力电子仿真还没动手写过控制代码也可以按这个流程把模型跑通至少能把单移相和双移相的差异、扫频和PI整定的逻辑看清楚。需要提醒的是这套程序方案本身并不复杂复杂的是很多人跳过了中间环节。常见做法是直接从时域波形调PI跳过了Bode分析结果就是工作点一变参数就失效。程序包的逻辑恰好相反先把被控对象的频率特性测准补偿设计就有依据PI参数只是补偿器的一个具体实现每一步都有迹可循。我在整理这个资料包的时候把仿真脚本、参数计算表格和说明文档按“建模—仿真—补偿—整定”四个阶段分目录存放。刚开始你可能觉得文件多、步骤繁琐但跑完一遍再回头看你会觉得这其实是给DAB控制设计画了一条最直接的路。2. 双移相与单移相的本质差异为什么控制量要重新定义很多人第一次接触DAB时最先看到的是单移相控制两个全桥之间的方波相位差决定传输功率公式简洁、实现也简单。但单移相的局限很快就暴露了——当输入输出电压不匹配时电感电流回流增加效率明显下降而且移相比接近0.5时增益曲线变缓控制灵敏度下降。双移相在单移相的基础上加入了内移相即原边全桥和副边全桥各自内部的上下桥臂之间也引入相位差这样在端口电压之间叠加了更多可控自由度可以在输出同样功率的情况下降低回流功率、扩大软开关范围。但自由度增加是有代价的代价就是控制量不再是一维的。双移相模式下传输功率表达式里同时包含原边内移相D1和副边外移相D2两者相互耦合。这一点是整套仿真和参数整定的基石你不能像单移相那样简单地把移相比当成一个线性控制对象。为了把双移相抽象成可用的控制模型程序包里采用了等效控制量C的映射方式。这里直接给出结论在双移相下传输功率可以整理为P (nV1V2)/(2fsLs) * [D1*(1-D1) 0.5D2^2 - D1D2 0.5*D2]其中n为变压器匝比V1为原边电压V2为副边电压fs为开关频率Ls为等效漏感D1为原边内移相比D2为副边相对于原边的外移相比。单移相是D10的特例此时公式退化为P正比于D2*(1-D2)。双移相的好处在于当D1取得合适时同样功率下电感电流波形的有效值更低同时减少了副边功率回流的区间。但真正对控制设计最重要的是这个括号里的表达式。程序包里定义了一个组合量C D1*(1-D1) 0.5D2^2 - D1D2 0.5*D2功率传输与C之间是线性关系。这意味着在建立小信号模型时C才是真正的控制输入。对C求偏导可以得到两个重要的小信号系数对D1求偏导得到1-2*D1-D2对D2求偏导得到D2-D11。这两个系数不是常数而是随工作点变化。也就是说同一个PI控制器在不同D1、D2工作点下实际上面对的开环增益是不同的。这就是为什么固定参数在某些负载点表现良好、换个工作点就震荡的根本原因。这也是程序包从一开始就做扫频而不是直接用解析模型的原因。解析模型能告诉你趋势但实际工况下死区效应、寄生参数、数字控制延迟都会改变增益和相位。扫频得到的Bode图把这些因素全部包含进去控制设计才有把握。3. 扫频到底怎么扫从时域波形到频域Bode图的完整链路程序包里的扫频功能是整个设计流程的第一步也是最容易做错的一步。很多人以为扫频就是把正弦扰动加到移相比上然后看输出功率的波形这个理解方向没错但细节决定成败。先明确扫频的目的。我们要获取的是从控制量到输出功率或者输出电压的小信号传递函数。具体做法是在一个稳定的工作点上给控制量叠加一个小幅正弦扰动记录系统的输出响应然后通过相关分析或FFT提取出该频率下的幅值和相位。依次扫过一组频率点就能拼出Bode图。程序包里的扫频脚本是这样组织的第一步设定稳态工作点。比如设定D10.2、D20.1对应某一负载功率。先让系统在开环状态下运行到稳态记录此时的输出电压、电流和功率值。第二步定义扫频序列。频率范围通常从1Hz到十分之一开关频率以对数间隔分布。对于100kHz开关频率扫到10kHz就够了再高已经没有控制意义。第三步在每个频点注入正弦扰动。扰动加在哪里是关键程序里加在计算好的等效控制量C上然后反解出D1和D2的增量而不是直接同时扰动两个移相比。这是因为扰动C时功率与C的关系近似线性扫出来的频率响应更干净。第四步等待瞬态过渡。注入正弦后不要立刻取数据要等2到3个扰动周期让系统进入稳态正弦响应状态。这个过程程序里是自动实现的但理解为什么需要等待很重要小信号扰动下系统会有暂态过程混入暂态会污染FFT结果。第五步用相关分析法提取幅值和相位。相关分析比直接FFT更抗噪原理是把输出信号分别与同频正弦和余弦相乘再积分从而锁定该频点下的响应分量。程序包里用的是这个方案比FFT在低频段稳定得多。扫频完成后把各频点的增益和相位画出来就是你在这个工作点下得到的实测Bode图。拿它和第二章里解析模型算出的传递函数对比如果趋势一致、某些频点幅值偏差在2dB以内说明模型可信如果差异很大优先检查死区设置和变压器漏感参数是否准确。扫频结果还能揭示一个重要现象双移相工作点的增益随D1、D2剧烈变化。同一个电感电流有效值档位下D1从0.1调到0.3增益可能变化30%以上。这个现象在实际调参中非常容易被忽略也是程序包把扫频放在最前面的原因——没有频域测试数据后面的补偿对比和PI整定都只是纸上谈兵。这里给一个实操建议扫频扰动幅度不要一刀切。低频段可以稍微大一点高频段要小一点因为控制对象在高频处增益衰减很快如果幅度太大容易进入非线性区导致谐波混叠Bode图会出现假峰。程序包里默认按幅值反比于频率的规律设置扰动实测效果比较稳。如果你自己写扫频脚本建议沿这个思路做。4. 开环验证与闭环仿真模型可信度决定后续一切扫频得到了被控对象的频率特性下一步是在仿真环境里先后搭开环、再搭闭环。这一步看起来简单却是考验模型精度的关键环节。开环仿真要解决的核心问题是扫频得到的传递函数是否能够复现时域行为。程序包里的开环仿真模型包含完整的DAB主电路包括输入电压源、全桥开关管、变压器、漏感和输出滤波电容。控制部分只给固定的移相比驱动信号不引入反馈。在这个模型上我建议你做一个简单的验证实验给控制量C加一个阶跃扰动记录输出电压的瞬态响应然后用扫频得到的传递函数在Simulink里用线性模型重建同样的阶跃响应对比两者的上升时间和超调量。如果一致性好就说明之前扫频建模这一步没有白做。这里有一个很容易陷入的误区开环仿真不只是为了看波形而是为了标定模型参数。比如输出滤波电容的ESR、变压器漏感的精确值、开关管的导通压降这些参数在仿真中会直接影响开环增益的直流增益值和极点位置。程序包里专门加了一个参数标定环节用实测或参考设计的Bode图去反推等效ESR而不是直接采用数据手册上的标称值。这一步做完模型的频域响应才会有参考价值。闭环仿真的搭建则要引入反馈回路。输出电压经采样后与参考值比较误差进入PI调节器PI输出经过限幅后映射为D1和D2的移相比再生成驱动波形。需要特别注意的是数字控制带来的延迟采样延迟和控制计算延迟合计通常有一到两个开关周期程序包里在反馈通路里显式建模了一拍延迟这是一个很容易被忽略但实际影响很大的环节。一拍延迟在10kHz附近会造成约36度的相位滞后如果你把穿越频率设计在接近这个位置相位裕度会被吃掉一大截。闭环仿真做完之后一定要做两个测试一个是负载阶跃响应一个是参考值阶跃响应。负载阶跃测试能看到PI参数在受到扰动时的恢复速度和超调量参考值阶跃能反映系统的跟踪能力。程序包里预设了这两组测试用例并把仿真结果自动保存方便和后面的Bode补偿分析对照。我在实际跑闭环仿真时最大的体会是不要指望一次就能调出一组满意的PI参数而是要通过多次仿真建立“参数变化—响应变化”的直觉。比如增大Kp会让穿越频率升高、响应变快但超调也会变大增大Ki有助于消除稳态误差但会把低频相位压得更低容易在负载突变时产生振荡。程序包里的闭环仿真脚本支持批量修改PI参数后自动运行并输出对比曲线这个功能省了我大量手动点名的时间。5. Bode图补偿对比为什么PI补偿不一定够用到了这一步我们手里有被控对象的Bode图也清楚闭环希望达到的穿越频率和相位裕度接下来就是设计补偿网络。程序包里做了两种补偿方案的对比传统PI补偿和带高频极点的II型补偿。先看指标如何设定。对于DAB这类电压源型变换器穿越频率一般取开关频率的1/20到1/10。以100kHz开关频率为例穿越频率放在5kHz到10kHz比较合适。相位裕度至少45度工程上我习惯做到60度左右兼顾动态响应和稳定性。PI补偿的基本思想是零极点对消。假设扫频得到的被控对象近似为一阶惯性加纯延迟Gp(s) K / (1 s/ωp) * e^(-sTd)PI控制器为 Kp*(1 1/(s*Ti))如果将零点放在ωp处即令Ti 1/ωp那么被控对象的极点被抵消系统近似变成积分器加延迟开环传函在穿越频率附近以-20dB/dec穿过0dB线理论上可以获得较充裕的相位裕度。但这里有一个必须警惕的问题实际DAB被控对象的幅频特性并不总是一阶惯性那么干净尤其是存在输出滤波电容的低频极点和漏感引起的右半平面效应时相位曲线在穿越频率附近往往远低于-90度。这时候PI补偿的相位提升能力有限因为它的最大相位提升只由零点相对位置决定而且在高频处还会引入-20dB/dec的衰减补偿效果可能不够。II型补偿则不同。它的传递函数通常为CII(s) Kc * (1 s/ωz) / (s * (1 s/ωp2))其中零点用来抵消被控对象在穿越频率附近的低频极点高频极点用来抑制开关纹波和噪声。和PI相比II型补偿在穿越频率附近的相位提升可以做得更高因为它在中频段有更大的相位裕度空间同时通过高频极点把噪声抑制能力补回来。代价是参数多一个整定复杂度上升而且在某些参数组合下会产生谐振峰。程序包里做了一个非常实用的对比在同一个被控对象Bode图上分别叠加PI补偿后的开环传函幅相曲线和II型补偿后的曲线直接比较穿越频率、相位裕度和增益裕度三个指标。从我跑过的几个工作点来看当双移相工作点选得比较偏、D1较大时PI补偿往往只能做到35到40度的相位裕度而II型补偿可以轻松做到55度以上。这个对比结果直接决定了最终采用哪种补偿器。本质上Bode补偿对比不是在做数学游戏而是在回答一个工程问题这个工作点下的被控对象到底需要多少相位提升才能稳定。程序包把这个问题可视化以后调参就变成看曲线选参数而不是盲调。6. 从Bode图到PI参数整定计算的推导与验证补偿器的连续域形式确定以后最后一步是换算成数字控制器里实际使用的Kp、Ki系数并在闭环仿真里做最终验证。这个环节看着简单但换算过程中有几个细节最容易出错。连续域PI控制器的形式是C(s) Kp Ki / s由上一节零极点对消的推导在Ti 1/ωp、Kp ωc / (K*ωp)的条件下系统在穿越频率ωc处的开环增益正好为1。这个公式是我每回整定都会先算一遍的基准点。但实际应用中因为数字控制一拍延迟的存在算出的Kp要适当下调10%到20%否则实测的相位裕度会低于设计值。离散化这一步程序包里默认采用Tustin变换双线性变换这是工业控制器里最常用也最稳妥的方式。用Tustin变换得到的离散PI递推式如下u[k] u[k-1] Kp * (e[k] - e[k-1]) Ki * Ts / 2 * (e[k] e[k-1])其中Ts为控制周期。如果你用的是位置式PID而不是增量式注意积分项不要重复累加。我这里出现过一次很低级的错误把Ki*Ts直接当成离散积分系数用结果实际积分增益偏大导致低频段出现谐振输出小幅振荡。后来统一改用增量式递推问题消失。参数整定计算合理了还不能直接上机程序包里提供了一套验证脚本把算出来的Kp、Ki写回闭环仿真模型跑一次满载阶跃再跑一次负载扰动记录超调量和恢复时间。如果超调超过预期优先减小Kp而不是调Ki因为Kp决定了穿越频率穿越频率越高相位裕度越低。此外程序包里还做了一个很有用的延伸功能在工作点扫描的基础上自动计算一组不同功率等级下的PI参数并生成一个参数表。这份表格的用途是让你直观看到参数随功率变化的趋势比如轻载到满载Kp可能需要调整20%以上。理解了这一点你就能明白为什么很多工业设备在宽负载范围下要用增益调度而不是一组参数打天下。我整理一个简单的算例供参考。设某DAB样机参数fs100kHzV1400VV248V匝比n4Ls10μH输出滤波电容Co470μF额定功率960W。扫频得到工作点D10.3、D20.1下的等效增益K约为0.28等效极点频率ωp约为2π1.2kHz。取穿越频率ωc2π6kHz延迟Td10μs带入零极点对消公式可得Ti1/(2π1.2kHz)132μsKpωc/(Kωp)≈22.4。考虑一拍延迟下调15%Kp取19左右。离散化后如果Ts10μsKiKp*Ts/Ti≈1.44。把这个参数放入闭环仿真相位裕度约53度满载阶跃恢复时间约1.2ms超调约6%整体可用。这个算例基本就是我预期中程序包能给出的结果。7. 实操中翻过的车与排查记录7.1 扫频扰动幅度不一致导致高频假峰有一次我给一个工作点扫频发现在8kHz附近出现了一个莫名其妙的增益抬高看起来像是有谐振极点。我先是怀疑电路参数不对反复检查漏感和电容值都没发现问题后来把扰动幅度从2%降到0.5%假峰直接消失。原因是幅度太大时电感电流进入了断续或准谐振模式非线性产生了谐波被相关分析误读为基频响应。扫频幅度问题容易被忽视但它直接决定Bode图可信度。7.2 一拍延迟没建模实测裕度比仿真低15度在某个版本的仿真模型里我没有显式建模数字控制延迟闭环仿真显示相位裕度62度看起来非常安全。但硬件实测时负载阶跃后出现了轻微振荡反复查控制代码都找不到问题。后来在反馈通路里加上一拍延迟模型再仿真相位裕度掉到47度振荡特征和实测一致。这个案例给我的教训是相位裕度余量不足10度以上就不要贸然上硬件数字延迟会把最后一点裕度吃掉。7.3 双移相切换点附近增益不连续程序包在参数整定计算阶段支持连续工作点扫描我发现D2从0附近变化时等效控制量C对D2的偏导系数D2-D11会发生跳变导致开环增益突变。如果此时PI参数不做切换处理系统会在切换点附近出现抖动。解决方法是把D2保持在偏置区间以上或者增设滞回切换逻辑。这个问题的根源不是PI参数而是控制量映射本身的不连续容易排查但不容易想到。7.4 积分饱和导致满载启动超调启动时输出误差大PI积分快速累加到限幅值实际输出已经达到限幅但积分还在继续增加。等输出电压接近目标值时积分退饱和缓慢导致较长超调。程序包里加了抗积分饱和逻辑当PI输出触达限幅时冻结积分累加。光加这一条满载启动超调就从15%降到了7%以内属于性价比极高的改动。实际跑完整个流程之后我最大的感受是DAB这类带复杂移相控制的变换器最怕的不是某个参数调不好而是对整个系统缺乏定量认知。扫频把被控对象摸清楚Bode对比把补偿器选明白PI整定只是最后顺理成章的输出。如果你手头正在做类似项目建议按这套流程完整走一遍哪怕之前已经跑通过闭环也会看到不少之前没注意到的细节。