资讯动态

DAB双移相控制与扫频Bode图PI整定流程详解

发布时间:2026/10/20 19:01:24 来源:尧图企业网站定制
做DAB双有源桥变换器控制最让人头疼的往往不是主电路和变压器设计而是闭环那一环。DAB本身是非线性对象单移相SPS控制简单但动态性能一般双移相控制虽然能优化效率、扩展软开关范围代价是控制变量增多、参数相互耦合光靠经验试凑调PI反复烧仿真浪费时间还不一定收敛。这套资料最核心的价值是把“扫频辨识→开环/闭环仿真→Bode图补偿→PI参数整定”这条链路完整串起来用数据说话把控制器一次算清楚。标题里的ESP我按扩展移相Extended Phase Shift也常简写成EPS/ESP来理解和双移相DPS策略放在一起对比研究正好覆盖了DAB控制的常见难点。无论你在做储能变流器、双向DCDC还是数字电源控制只要具备最基本的DAB拓扑概念这套流程都可以直接照着复现少走很多弯路。1. 项目整体思路与方案拆解1.1 这套流程到底解决了什么问题很多同学做DAB仿真主电路搭得很快一到控制环就卡住。原因有两个第一DAB的传输功率和移相角之间不是线性关系是一个时变、强耦合的非线性对象第二数字控制里还叠加了采样保持、 PWM调制延迟、计算延迟这些因素在传统解析建模中很难精确考虑。于是常见做法就是在一个固定的工作点附近手算一个简化传递函数然后凭经验给一组PI参数结果往往低频稳了高频震荡或者空载没问题满载就炸。这套项目换了一个思路先不急着建模直接在开关级仿真里对闭环对象做扫频把系统真实的频率特性测出来然后基于Bode图数据来设计补偿器和整定PI。这样做的好处是扫频结果天然包含了开关效应、数字延迟、调制器特性等所有实际因素不需要去推导复杂的解析模型工程量小且结果可靠。项目最终交付的是一套从开环扫频到闭环验证的完整作业链而不是孤立的某个程序脚本。1.2 双移相控制的工作点与小信号特性DAB基本的单移相控制是靠原边全桥和副边全桥输出方波之间的相位差来传输功率稳态功率公式可以写成P (n V_in V_out) / (2 f_s L) × D × (1 - D)其中D是移相占空比即移相角归一化到π的结果。这个公式是后面所有计算的基石。扩展移相和双移相的区别在于除了原副边之间的外移相角还在原边或者副边桥臂内部增加内移相角让桥臂输出三电平波形从而降低回流功率、扩大软开关范围。代价是控制量从一个变成两个甚至三个不同移相组合下的增益特性差异很大再想靠手推公式去精确描述小信号模型工作量直接翻倍。所以在这个项目里我选择固定一组典型工作点做处理。比如输入400V、输出48V、变压器变比8:1、开关频率100kHz、原边电感120μH、输出电容1000μF、满载功率约1kW。在这个工作点下移相占空比约为0.21小信号增益大约是89输出电压对移相占空比的直流增益输出极点约69Hz。这个工作点数据是后面扫频和整定程序的输入基准也方便对比不同参数设置对结果的影响。1.3 完整设计链路从建模到整定整个项目的执行链路可以分成五步。第一步是搭建带双移相调制功能的DAB开关模型确定工作点第二步是在该工作点下注入小信号正弦扰动完成扫频得到开环Bode图第三步搭建闭环控制模型先做开环仿真确认模型行为再切入闭环对比动态性能第四步根据Bode图读出的穿越频率和相位裕度对不同补偿器做设计对比第五步把整定算法写成独立计算程序输入扫频数据直接输出Kp、Ki最后回到闭环模型里做阶跃和负载突变验证。这五步每一步的输出都是下一步的输入资料包里的程序、仿真文件、说明文档也都按照这个顺序组织用起来不会乱。2. 扫频法设计与开环Bode提取2.1 扫频的物理原理与信号注入方式扫频的本质是小信号辨识。在某个稳定工作点附近给移相角叠加一个幅值很小的正弦扰动然后观察输出电压对扰动信号的跟随情况不同扰动频率下输出与输入的幅值比就是该频点的增益相位差就是该频点的相角。把频点从低频扫到高频就得到了系统的频域特性。关键在“小信号”这三个字。DAB的开关模型本质是非线性的扰动太大系统响应里会出现明显的高次谐波和畸变扫出来的“增益”就不再是线性化的小信号增益了。我在项目里建议扰动幅值取工作点移相角的5%左右比如工作点移相占空比是0.21扰动就取±0.01。这个幅度下输出电压扰动大约有几伏既足够被检测又不会引发明显的非线性失真。如果后续发现扫频曲线毛刺大可以进一步把扰动降到2%~3%效果通常立竿见影。扫频信号本身有两种实现方式。一种是逐个频点注入正弦小信号每个频点等系统进入稳态后再记录数据适合开关级模型准确度高但仿真时间长另一种是叠加多正弦合成信号一次仿真同时激励多个频点速度快但各频点相互干扰数据清洗麻烦。这个项目用的是第一种虽然慢一点但结果干净作为校核基准更让人放心。2.2 扫频仿真的参数设置与频点规划扫频频段的选择直接决定整定结果可用不可用。我的推荐是下限10Hz上限取开关频率的一半即50kHz按对数均匀分布每十倍频程约12个点。上限再高没有意义因为开关纹波和采样混叠早就淹没小信号响应了下限太低则仿真时间过长10Hz一个周期就是0.1秒开关步长下要跑很久。每个频点的仿真时长也需要单独规划。我通常在每个频点先让电路稳定一段时间约2ms再在这个基础上记录至少20个扰动周期的输出波形最后取稳态部分做FFT分析。如果频点频率很低比如10Hz20个周期需要2秒仿真时间确实很慢但为了保证低频段数据的可信度这一段只能耐心跑。中高频段可以缩短记录周期数比如高频段只要10个周期就够能在整体上节省不少时间。仿真步长的设置也很关键。开关模型里如果仿真步长和开关周期同一数量级高频段的扫频结果一定是一团糟。一般建议固定步长不超过开关周期的百分之一100kHz开关频率对应1μs周期那步长就应设在10ns量级。变步长算法虽然能跑但不同频点下步长变化会影响数据一致性还是固定步长更稳。2.3 从扫频结果提取Bode图的数据处理记录完每个频点的时域波形后提取增益和相位有两种常用办法。一种是在仿真平台里直接搭幅值相位检测模块另一种是把波形数据导出来用脚本做FFT分析。我推荐用脚本处理自由度更高也能顺便做多周期平均去毛刺。数据处理有几个细节容易踩坑。第一FFT分析最好整周期截断也就是说取的波形长度正好是扰动周期的整数倍否则存在频谱泄漏相位读数会偏第二读取增益时不要取FFT峰值那个谱线而是取基波频率对应谱线加邻近两线平均抗噪能力更好第三相位测量要注意反相基波相位差落在-180°到180°之间如果读出的相位是-100°说明实际系统在该频点的相位已经比较危险了说明书写结果时一定要标注清楚。Bode图出来之后第一件事不是急着整定PI而是先看曲线形状正不正常。DAB电压环在单极点特性下低频段增益应该近似水平过了极点之后以-20dB/dec斜率滚降相位从0°向-90°过渡。如果曲线在高频段突然出现谐振峰或者相位骤降多半是扫频设置有问题先回头检查扰动幅值和步长再继续下一步。3. 开环与闭环仿真搭建对比3.1 DAB主电路与双移相调制模型搭建搭建开关级DAB模型时我习惯把主电路和控制部分分开布局。主电路部分原边直流源400V接全桥副边全桥输出经过电感接到48V负载中间是高频变压器变比8:1加上漏感/外加电感120μH输出滤波电容1000μF。开关管用理想开关模型配RC缓冲即可重点是看控制行为不必纠结开关管内部细节。调制部分是最容易出错的地方。双移相控制需要生成两组或者三组带相位关系的脉冲信号不同移相角分别对应外移相和内移相。一个稳妥的搭法是“载波比较延迟”三步先做统一三角载波用比较器生成基础方波再按移相角折算成时间延迟量将延迟后的脉冲和原脉冲叠加得到三电平波形。务必先在开环下检查波形原边桥臂输出是否三电平副边输出是否与设计一致两路方波之间的移相角是否准确。我见过不少项目卡在这一步原因是仿真平台里三角载波和比较器存在离散求解误差导致脉冲宽度在个别开关周期内跳变。解决办法是给调制信号加一个很小的滞回或者把比较器输出经过一个单位延时节拍对齐能有效减少调制信号和开关脉冲之间的采样竞争问题。3.2 开环仿真固定移相角看基本行为开环仿真做两件事验证调制正确性以及记录工作点。在主电路和控制模型完成后把移相占空比D固定为0.21启动仿真到稳态测量输出电压。如果实测输出不在48V附近说明主电路参数或者调制关系算错了先别急着做闭环把这一步校正好再说。开环下还可以做一组简单的扫描实验把D从0.1逐步切到0.3记录稳态输出电压看输出功率随移相角的变化趋势是否和理论公式一致。这个实验不需要多精确主要是建立信心——如果开环趋势都对后面扫频和闭环才有意义。实测中我一般会用4个点校核D取0.15、0.2、0.25、0.3对比计算功率和仿真功率误差在5%以内就认为模型可用。3.3 闭环仿真PI切入之后的动态表现闭环模型需要在开环基础上增加采样、误差计算、PI控制器和限幅模块。输出电压采样要注意滤波采样时刻尽量避开开关管开关瞬间的尖峰否则PI输入里会叠加大幅纹波。一个实用的做法是使用中值采样或者滞后一拍采样即在一个开关周期中间时刻采样能避开大部分开关噪声。PI输出对应移相占空比必须做限幅。双移相控制的外移相角合理范围是0到0.5即移相角0到π/2超过这个范围功率传输公式不再单调系统可能进入不稳定区域。所以我一般限制PI输出在0.02到0.45之间并加上抗积分饱和逻辑当输出达到限幅值时停止积分累加。这一步不做启动时积分饱和导致的超调会很难看。闭环做两组动态实验第一组是输出电流阶跃从半载切满载观察输出电压跌落和恢复时间第二组是给定值阶跃比如给定从48V跳到50V观察超调量和调节时间。后面整定完PI参数后还是要回到这两组实验来验收。3.4 开环与闭环性能对比实录用一个具体表格来整理开环和闭环的对比结果更有说服力。以我验证过的一组数据为例指标开环固定D0.21闭环PI控制稳态输出电压满载附近漂移严格锁定48V半载切满载电压跌落跌落约2.5V跌落约0.6V恢复时间不恢复稳态偏差约15个开关周期给定值阶跃超调无给定概念约5%负载突变稳态误差有静差无静差从表格能直观看出闭环控制的收益集中体现在动态响应和负载调整率上。开环下系统是稳定的但本质上一个移相角对应一个负载功率点负载一变输出就跑偏闭环通过PI实时修正移相角把输出电压拉回目标值。这也是为什么后面所有扫频、补偿、整定工作最终都要服务闭环的原因。4. Bode图与补偿器设计对比4.1 穿越频率与相位裕度怎么看拿到开环Bode图后重点关注两个频点。第一个是穿越频率就是增益曲线穿越0dB的那个频率点它大致决定了闭环带宽也就是系统响应速度第二个是穿越频率处的相位裕度它决定了闭环稳定性。工程上一般要求相位裕度不低于45°数字电源里由于存在一拍或多拍延迟我习惯按50°以上来设计留足余量。DAB电压环的相位特性理想情况下从0°缓慢降到-90°穿越频率越高相位裕度越容易变小。如果还叠加数字控制延迟高频相位会额外滞后所以穿越频率不是越高越好。开关频率100kHz时穿越频率我一般取1kHz到3kHz之间再往上虽然理论上响应更快但相位裕度会被延迟迅速消耗实际做出来很容易临界震荡。对比补偿方案时要始终围绕这两个参数来评价补偿后穿越频率是不是落在设计目标附近穿越频率处相位裕度是否达到50°以上同时低频增益是否足够高以保证稳态精度。只盯着超调或者响应速度去调参数容易顾此失彼。4.2 三种补偿器特性对比针对DAB电压环这种一阶惯性加延迟的对象常规补偿方案有三种它们的传递函数和适用场景各不一样补偿器传递函数形式对相位的贡献适合场景需要注意的问题比例积分PIKp Ki/s只引入滞后最大-90°一阶对象、对相位裕度要求不高低频提升明显但高频无相位补偿能力超前滞后补偿Kp × (1s/ωz) / (1s/ωp)在频段内可提升相位穿越频率附近相位裕度不足零点极点位置需要仔细设计Type II/III补偿多零极点组合Type III最多提升约180°LC双极点、高Q值被控对象参数多数字离散化容易出错在这个项目里DAB电压环本来就是一阶主导理论上一个PI就能满足稳定要求。但如果你把穿越频率定得偏高或者采样延迟大PI在穿越频率附近引入的相位滞后会吃掉原本就不多的相位裕度这时候超前滞后甚至Type II补偿的优势就体现出来了。项目里的“Bode图补偿对比”部分其实就是把三种方案放在同一张图上比较看谁能在满足相位裕度的情况下把闭环带宽做高。4.3 补偿前后Bode图对比与设计核对设计补偿器之后一定要做闭环的Bode图验证而不是只看开环补偿后的曲线。开环补偿后Bode图中穿越频率处的增益简直和相位裕度是名义值实际闭环还要考虑采样器、PWM调制器的离散效应所以仿真里测出来的闭环Bode图和设计值会有偏差这是正常的偏差在5%以内就可以接受。我一般会拿补偿前后放在同一张图里看补偿前穿越频率偏低比如只有300Hz相位裕度虽然很大但带宽不够负载突变恢复慢补偿后穿越频率被推到1kHz以上相位裕度落在50°附近低频增益抬高稳态误差消失。需要警惕的是高频段补偿器不能放大高频噪声通常会在Type II方案里加一个高频极点把增益压住否则闭环模型里会看到输出电压上叠加明显的高频毛刺。5. PI参数整定计算程序实现5.1 整定原理与公式推导PI参数整定的核心依据就是扫频Bode图。设计目标给定后整定算法要做两件事第一确定PI零点频率fz让补偿后系统在期望穿越频率处的相位满足目标相位裕度第二确定比例系数Kp让补偿后系统在穿越频率处的总增益正好为0dB。公式推导过程如下。先看相位。PI补偿器在穿越频率fc处的相位滞后为θ_pi -arctan(fz / fc)其中fz Ki / (2πKp)。开环被控对象在fc处的相位是θ_g那么补偿后总相位要满足θ_g θ_pi -180° PM代入整理得到fz fc × tan(θ_g 180° - PM)再看增益。被控对象在fc处的增益是G_lin线性值PI补偿器在fc处的幅值为|C(jfc)| Kp × sqrt(1 (fz / fc)^2)要求总增益为1即Kp × sqrt(1 (fz / fc)^2) × G_lin 1所以Kp 1 / (G_lin × sqrt(1 (fz / fc)^2))最后Ki Kp × 2π × fz。这套公式只适用于PI补偿核心前提是开环在fc处没有大的相角跳变DAB一阶对象完全满足。如果遇到相位亏损严重的情况公式算出来fz为负程序应该直接报错提示改用超前补偿而不是硬输出一组无法使用的参数。5.2 整定程序的实现与代码下面是整定程序的核心部分可以直接从扫频数据文件读取Bode数据计算Kp、Ki。这里用的数据是从开关级模型扫频得到的实际测量值不是解析模型的理想值。import numpy as np # 从扫频结果中读取的数据频点(Hz)、增益(dB)、相角(deg) f_scan np.array([10, 30, 100, 300, 1000, 3000, 10000, 30000]) gain_db np.array([39.0, 38.8, 38.2, 36.5, 28.5, 19.0, 7.0, -2.0]) phase_deg np.array([-2.0, -6.0, -20.0, -55.0, -83.0, -88.5, -92.0, -96.0]) # 设计目标 fc 1000.0 # 期望穿越频率单位Hz PM 50.0 # 期望相位裕度单位deg # 在对数坐标上做线性插值读取fc处的增益和相位 log_f np.log10(f_scan) g_db np.interp(np.log10(fc), log_f, gain_db) g_deg np.interp(np.log10(fc), log_f, phase_deg) g_lin 10 ** (g_db / 20.0) # 相位条件theta_g theta_pi -180 PM # theta_pi -arctan(fz / fc) angle_need g_deg 180.0 - PM if angle_need 0: raise ValueError(该频点相位亏损过大PI无法满足目标裕度请降低fc或改用超前补偿) fz fc * np.tan(np.radians(angle_need)) # 增益条件Kp * sqrt(1 (fz/fc)^2) * g_lin 1 Kp 1.0 / (g_lin * np.sqrt(1.0 (fz / fc) ** 2)) Ki Kp * 2.0 * np.pi * fz print(f目标穿越频率 fc {fc:.0f} Hz) print(f开环在fc处增益 {g_db:.1f} dB) print(f开环在fc处相角 {g_deg:.1f} deg) print(fPI零点频率 fz {fz:.1f} Hz) print(f整定结果 Kp {Kp:.4f}) print(f整定结果 Ki {Ki:.2f})运行这组示例数据输出的Kp大约在0.026、Ki大约在180附近。代码只有二十几行但包含了插值、相位条件判断、增益匹配三个关键环节正常修改一下fc和扫频数据文件就能用到自己的模型上。更完整版本的程序还把Bode数据文件读取、结果回写、批量对比多组fc的功能都加上了方便一次性评估不同带宽设计。5.3 整定结果的验证流程程序输出Kp、Ki之后不要直接当成最终参数先做闭环仿真验证。把两个参数填入闭环模型的PI模块跑两组实验一组是给定阶跃看超调量和调节时间是否落在预期范围内另一组是负载突变看输出跌落和恢复时间。我习惯再用一次扫频验证闭环Bode看实际穿越频率和相位裕度跟设计值差多少。如果穿越频率比设计值高出很多说明仿真模型里的延迟比预期小Kp可以再压低一点如果实际相位裕度明显低于设计值多半是采样或PWM延迟没有在扫频中体现完整这时优先降低穿越频率目标而不是硬扛。从实际经验看第一次整定的参数往往偏激进。原因是扫频得到的开环模型已经包含了延迟但闭环仿真中如果把采样滤波、调制器输出限幅、抗饱和这些非线性环节加进去实际动态会比线性设计结果温和许多。遇到这种情况不用怀疑算法把PM目标从50°提高到60°重新整定一般就能拿出更稳健的参数。6. 常见问题与排查技巧实录6.1 扫频曲线毛刺多、相位抖动这是做扫频时最容易遇到的现象。毛刺多先检查扰动幅值是否太小输出响应淹没在开关纹波里FFT读出来的幅值自然不准再检查仿真步长是否过大步长粗会引入额外的高频噪声最后检查记录波形是否整周期截断如果记录长度不是扰动周期的整数倍FFT泄漏会让相位读数随机跳动。我个人的排查顺序是先把扰动幅值提高到工作点移相角的8%看看曲线是否变平滑如果平滑了说明原来的扰动太弱如果反而更乱说明已经进入非线性区把扰动降回3%以下。然后固定步长改细一档对比高频段结果。这套经验适用于大多数平台基本两三轮就能定位问题。6.2 闭环仿真震荡或发散闭环模型跑起来直接发散第一反应不是怀疑PI参数而是先看限幅有没有生效。PI输出一旦超限移相角进入非单调区功率传输可能反向或骤降系统一定会发散。我遇到过不止一次控制器本身没问题纯粹是限幅没加或者限幅范围写错。如果限幅正常但仍有持续振荡就在穿越频率附近的Bode图上找原因。把你的实际闭环模型扫一次频测出相位裕度若低于20°基本可以断定是采样延迟或PWM调制延迟在设计中没被充分估计。解决办法是降低期望穿越频率或者用超前滞后补偿把穿越频率处的相位抬起来。盲目调Kp的符号或者加减滤波很难从根本上解决问题。6.3 PI离散化与数字实现的坑很多人把连续域的Kp、Ki直接填进数字控制器程序发现实际效果和仿真差很远。原因在于连续域PI的积分项Ki/s离散化后有多种写法最常见的前向欧拉离散PI为u(k) u(k-1) Kp × [e(k) - e(k-1)] Ki × Ts × e(k)注意这里的积分系数是Ki乘以采样周期Ts而不是直接写Ki。如果采样周期是10μs、Ki是180则积分累加系数其实是0.0018很多人错写成180导致积分项瞬间饱和系统必然发散。另外一个坑是抗积分饱和。数字实现里一定要判断PI输出是否到达限幅如果到限幅就冻结积分器否则积分项一路累加等误差反转时系统要花很长时间才能“解饱和”表现就是启动超调巨大且响应迟钝。这些细节在仿真里不明显一旦上实际硬件就会暴露建议在写控制程序时就把抗饱和逻辑写进去。6.4 资料使用与二次开发建议这套资料的实用价值在于“流程可复用”。换一个DAB规格、换一组工作点只需要改主电路参数、重新扫频然后运行整定程序即可控制设计流程完全不用变。有二次开发需求的话可以从两个方向扩展一是把扫频范围分成低频和高频两段分别扫描提高低频分辨率二是把PI程序扩展成带零点极点的通用补偿器设计程序覆盖超前滞后和Type II场景这样遇到相位亏损严重的工作点也能处理。结尾这套“扫频→开环闭环仿真→Bode补偿→PI整定”的流程我做完最大感受是DAB控制并没有想象中那么玄难的是把频域设计工具和开关级仿真模型真正打通。只要扫频数据可靠PI参数是有确定解的不需要碰运气去试。最后再分享一个小技巧在正式整定前先用一个很小的Kp比如0.001跑一次闭环确认系统能稳定再换上整定程序输出的参数做对比这样即使整定结果有偏差也能快速判断问题出在流程哪一环。希望你用这套方法少烧几次仿真一次把控制器调明白。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑