ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Boost电路双闭环控制Simulink仿真完整指南:从参数计算到发散排查

Boost电路双闭环控制Simulink仿真完整指南:从参数计算到发散排查 做电力电子仿真的朋友十有八九都经历过这种时刻模型搭好了参数也填了点下 RunScope 里的波形要么直接飞到十万八千里要么干脆报错“仿真发散”让你对着屏幕怀疑人生。Boost 电路的双闭环控制更是重灾区电流环、电压环、PI 参数、PWM 调制任何一个环节配合不好结果就是一团乱麻。这篇东西就是把我自己从搭模型到调通、再到处理各种发散问题的完整过程捋一遍给你一份能直接抄作业的参考。本文基于一个 12V 输入、24V 输出、100W 的 Boost 变换器在 MATLAB/Simulink 里搭建电压外环加电流内环的双闭环控制模型包括主电路参数计算、Simulink 建模步骤、PI 整定顺序以及仿真发散时完整的排查链路。适合正在做电力电子课程设计、毕业设计或者刚接触开关电源数字控制的工程师参考。1. Boost电路在做什么从能量搬运到双闭环的必要性1.1 两种开关状态下的能量流动Boost 电路本质上是一个“升压斩波器”它靠电感储存能量、再释放能量来实现电压抬升。先看最基本的拓扑直流电源、一个电感、一个开关管MOSFET、一个二极管、一个输出电容和负载电阻。当开关管导通时输入电源直接给电感充电电感电流线性上升能量以磁场形式储存在电感里。此时二极管反向截止输出电容单独给负载供电。当开关管关断时电感电流不能突变它通过二极管继续流动电感的感应电动势与输入电压串联叠加一起给输出电容和负载供电。这个“串联叠加”就是 Boost 能升压的根本原因。占空比 D 与输入输出电压的关系是[ V_{out} \frac{V_{in}}{1-D} ]所以 12V 升到 24V理论占空比就是 0.5。这个公式只在连续导电模式CCM下严格成立断续模式DCM下关系会变这也是后面仿真里要留意的地方。1.2 为什么Boost比Buck更需要双闭环很多人上来就想用单电压环控制 Boost用输出电压反馈直接调占空比。低压小功率场景下这么玩也能出波形但在 CCM 模式下Boost 有一个让人头疼的动态特性——右半平面零点RHPZ。这个东西听起来玄乎理解起来其实不难。你想想看负载突然加重输出电压掉了一点电压环要让占空比增大来补能量。但占空比增大的那一刻开关管导通时间变长电感充电时间变长二极管续流时间变短传递给输出端的能量反而暂时减少了。也就是说控制量占空比增大了被控量输出电压在短期内反而先降一点然后才升上去。这种“反直觉”的响应就是右半平面零点造成的。右半平面零点会让单电压环的带宽受到很大限制带宽稍微拉高一点系统就容易不稳定。解决办法就是加一个电流内环。电流内环直接控制电感电流响应速度快得多它把 Boost 的功率级变成了一个“电流跟随器”电压外环面对的是一个好得多的被控对象不再直接面对那个讨厌的 RHPZ。这就是双闭环在 Boost 上不是“锦上添花”而是“刚需”的原因。1.3 CCM与DCM对控制策略的影响仿真里电感值取小了或者负载变轻电流可能会跌到零进入 DCM。DCM 下 Boost 的传递函数变了占空比到输出的关系也和 CCM 不一样如果你按 CCM 整定的 PI 参数在 DCM 下运行很可能出现动态性能恶化甚至发散。所以做仿真时先确认自己的工况处于 CCM。判定条件是电感电流最小值大于零[ I_{L,min} \frac{V_{in} \cdot D}{2 \cdot L \cdot f_{sw}} 0 ]实际里我们一般让电感纹波电流峰峰值控制在平均电感电流的 20%~40% 范围内既保证 CCM又不至于让纹波太大影响电流采样。2. 主电路参数计算每个数值都不是拍脑袋2.1 设计指标与初始计算仿真不是随便填几个数就能跑的参数算不准后面调 PI 怎么调都别扭。我用的设计指标是这样的输入电压 ( V_{in} 12V )输出电压 ( V_{out} 24V )输出功率 ( P_{out} 100W )开关频率 ( f_{sw} 50kHz )输出电压纹波 1%先算基础电气量[ D 1 - \frac{V_{in}}{V_{out}} 1 - \frac{12}{24} 0.5 ][ I_{out} \frac{P_{out}}{V_{out}} \frac{100}{24} \approx 4.17A ][ I_{in} \frac{P_{out}}{V_{in}} \frac{100}{12} \approx 8.33A ]电感平均电流就是输入电流 8.33ACCM 下电感电流等于输入电流纹波电流峰峰值取 20%也就是约 1.67A取整按 2A 算。2.2 电感值计算电感纹波电流公式[ \Delta I_L \frac{V_{in} \cdot D}{L \cdot f_{sw}} ]反推电感[ L \frac{V_{in} \cdot D}{\Delta I_L \cdot f_{sw}} \frac{12 \times 0.5}{2 \times 50000} 60\mu H ]实际仿真里我取了 100μH。为什么比算出来的大因为 60μH 算出来的纹波电流有 2A相对 8.33A 的平均电流来说纹波占比已经 24% 了这在电流采样时会给内环带来不少高频干扰。把电感取大一点纹波电流降到 1.2A 左右电流内环会好调很多。代价是动态响应会稍微慢一点但对学习双闭环控制来说稳比快重要。2.3 电容值计算输出电容主要用来抑制输出电压纹波。Boost 的输出纹波主要取决于电容的 ESR 和充放电电荷量忽略 ESR 时用电荷增量近似[ \Delta V_{out} \approx \frac{I_{out} \cdot D}{C \cdot f_{sw}} ]要求纹波小于 1%也就是 0.24V[ C \frac{I_{out} \cdot D}{\Delta V_{out} \cdot f_{sw}} \frac{4.17 \times 0.5}{0.24 \times 50000} \approx 174\mu F ]仿真里我用的 220μF/50V留了裕量。这里提醒一句如果电容 ESR 取太大仿真里的电压纹波会出现明显的尖峰这和实际中 electrolytic cap 的高 ESR 表现一致。做仿真时要么用带 ESR 的电容模型要么干脆先设 ESR 为零先把控制调通再加寄生参数否则容易把纹波问题和控制问题混在一起调试起来很崩溃。2.4 负载电阻纯电阻负载直接算[ R_{load} \frac{V_{out}}{I_{out}} \frac{24}{4.17} \approx 5.76\Omega ]做负载突变仿真时我会用两个电阻并联再通过断路器切换模拟 50% 到 100% 的负载跳变。这个后面讲波形分析时会用到。3. Simulink模型搭建一步一步的完整记录3.1 模型整体结构我用的模型可以分成四块主功率电路、采样调理、PI控制器和PWM生成。四块之间信号流向清晰方便排查问题。功率电路用 Simscape Electrical早年的 SimPowerSystems里的元件搭建DC Source、MOSFET、Diode、Inductor、Capacitor、Series RLC Load 或直接 R 加测量。控制器部分用 Simulink 标准库的 PI Controller 模块、采样保持、比较器/三角波生成 PWM。这种“半模拟半数字”的模型最适合学习双闭环逻辑。有一种更简洁的做法是搭“平均模型”用受控电压源和受控电流源替代开关网络模型里没有开关频率的纹波跑起来特别快适合验证控制参数。但它看不到 PWM 调制细节也无法观察电流纹波。我在调 PI 时先用平均模型最后换上开关模型验证两个模型配合效率最高。3.2 主电路的具体接线顺序从 Simscape 库里拖元件时连接顺序是DC Source 正极 - 电感 - 节点A节点A接 MOSFET 漏极同时接二极管阳极MOSFET 源极接回电源负极二极管阴极接输出电容正极同时接负载电阻上端负载下端和电容下端接回电源负极。电气连接最容易出错的就是既用了 Simscape 电气线物理建模又用了 Simulink 信号线普通信号两者之间必须通过 Simulink-PS Converter 和 PS-Simulink Converter 转换。我一开始没接好转换器功率电路根本跑不起来报错的提示也很晦涩所以这里一定不要嫌麻烦Physical Signal 和普通 Simulink 信号要分清楚。MOSFET 的 Gate 端需要脉冲信号脉冲来自 PWM 生成环节。Diode 用仿真库里的 Power Diode正向压降设 0.3V 左右更接近真实器件。把开关管的内阻 Rds(on) 设置为 0.01Ω 左右别设成理想开关否则电流波形会过于“完美”调试失真。电感元件我用的是带串联电阻的模型等效 DCR 设为 0.05Ω这样贴近实际能避免电流积分无限增长的问题。纯理想电感在长时间仿真里偶尔会出现数值警告就是因为没有阻尼。3.3 采样电路与信号调理电流采样用 Current Sensor 串联在电感支路上再经过 PS-Simulink Converter 转成 Simulink 信号。转换器里要设置输出滤波时间常数我一般设成 1e-6 秒太高会把电流纹波滤掉太低会产生高频噪声影响 PI。电压采样Voltage Sensor 并联在输出电容两端同样转成 Simulink 信号。电压信号一般要用一个低通滤波器截止频率设在几 kHz把开关噪声滤掉。但滤波器会带来相位延迟带宽不能设太低否则电压环的动态性能会变差。我试过 100Hz 的滤波截止频率阶跃响应明显迟钝后来改到 2kHz 效果比较平衡。3.4 PWM生成与死区处理PWM 生成我用了两种方式都跑通过。一种是直接用 Simulink 的 PWM Generator 模块它内部集成了载波和比较逻辑输入占空比信号输出脉冲另一种是手搭三角波发生器 比较器 逻辑取反。手搭的好处是你能看到 PWM 调制的细节加深理解。占空比信号在进入比较器前必须做限幅。PI 输出可能出现超调占空比一下子超过 0.9如果大于 1 在仿真里会报错或产生异常波形。我加了一个 Saturation 模块下限设 0.05上限设 0.9。下限不设成 0 也有讲究占空比完全变成 0电感电流会断续甚至中断仿真容易出现数值突变。载波频率与开关频率必须一致都是 50kHz。用定步长求解器时步长要和载波频率匹配这个细节等讲到发散排查时会重点展开。3.5 求解器设置连续模型推荐用 ode23tb 或 ode15s它们是刚性求解器对带开关的功率电路更友好。如果你用定步长模式步长至少是开关周期的 1/100也就是 2e-7 秒步长太大 PWM 波形的边沿捕捉不准仿真结果会“失真”或者发散。我做最后的验证仿真用的是定步长 ode4步长 1e-6 秒50kHz 开关频率下每个周期 20 个点波形够看了仿真速度也能接受。4. PI参数整定从内环到外环的严格顺序4.1 电流内环先行的原因双闭环的整定原则只有一个先内环后外环。原因是外环的输出是内环的给定内环性能不稳定外环怎么调都没戏。就好比你先得有一个听话的“执行者”上面的“决策者”才有意义。电流内环的对象是电感电流被控对象在 Boost 的小信号模型里近似为一阶惯性加积分特性。电流环带宽可以做到开关频率的 1/10 到 1/5即 5k~10kHz。带宽越高电流跟踪越快但带宽受限于开关频率因为 PWM 调制本身有 1~2 个开关周期的延迟。调电流环时把电压环断开给电流给定一个固定值比如 5A观察电感电流能不能快速无静差地跟踪。我用的是 PI Controller 模块Kp 从 0.1 开始试Ki 从 10 开始试Kp 决定响应速度Ki 负责消除静差。4.2 电流环整定的实操过程我的经验是Kp 太小时电流跟踪慢波形像蜗牛爬Kp 太大时电流出现明显过冲甚至振荡。记录一下我试过的几组参数对比KpKi电流阶跃响应表现0.110上升慢约 2ms 达到稳态无过冲0.550上升约 0.5ms约 5% 过冲2200上升约 0.2ms明显振荡发散趋势0.520上升约 0.8ms无过冲稳定最终电流环我选了 Kp0.5、Ki20 这组。响应速度足够没有过冲电流在几个开关周期内就稳定下来。从 Scope 上看电感电流的均值准确跟踪了给定值纹波在 1.2A 左右形状清晰没有毛刺。电流环带宽可以用示波器上的延迟估算电流从阶跃到稳定的时间约 0.8ms对应带宽大约 1kHz 多。这个值偏保守但对电压环来说足够了。4.3 电压外环的整定逻辑电压环的被控对象是——电流内环闭合后的“电压-功率级”近似为一个电流控制的电流源给电容充电。电压环带宽必须比电流环低 5~10 倍否则两个环会互相打架。我校准的信号是电压给定设 24V从 0 开始启动观察电压爬升曲线。电压环整定仍然从 Kp0.1、Ki5 开始。这里遇到一个典型现象如果电压环 Kp 过大比如超过 1输出电压会出现低频振荡频率几百赫兹而不是高频发散。这就是内环响应快、外环响应慢的典型表现两个环的带宽拉不开间距就会这样。最终电压环的参数我定为 Kp0.2、Ki10。启动时电压爬升平滑约 20ms 达到 24V没有明显过冲。这个 20ms 是电压环带宽的体现带宽大约 50Hz 左右留足了和电流环的距离。4.4 限幅与抗积分饱和PI 控制器输出的占空比限幅到 0.05~0.9这会导致一个问题启动时输出电容电压很低电压误差很大PI 积分项会一直累积到很大的值输出卡在 0.9 的限幅上。等输出电压接近给定误差减小但积分项还“记忆”着之前的大误差输出不会立刻降下来就会产生很大的超调甚至振荡。这就是积分饱和Windup。解决方法是给 PI 控制器开抗积分饱和功能。Simulink 自带的 PI Controller 模块就有这个选项在参数里选择“Limit output”并打开“Anti-windup mode”再设置与系统匹配的输出上下限。我第一次没开抗积分饱和启动超调直接到 40V 以上波形吓人开了之后启动超调不到 1V。5. 仿真发散排查完整链路复盘5.1 发散的表象与报错类型仿真发散在一开始可能只表现为波形异常电压冲到几千伏、电流变成 NaN 或者干脆 Scope 上一条直线。再严重一点Simulink 会弹窗报错最常见的是“Solver encountered an error while simulating...”或者“NaN or Inf value encountered”有时候还有“Algebraic loop”警告。面对这些信息不用慌大部分发散原因就那几类。我自己排查发散的顺序是这样的先看模型结构再看求解器设置最后查 PI 参数。5.2 排查链路第一步模型结构与代数环代数环是一个特别坑的问题。Simulink 里如果一个模块的输入同时依赖于同一个模块的输出就形成代数环。在 Boost 双闭环模型里典型场景是PI 输出占空比 - PWM - MOSFET - 输出电压 - 电压采样 - PI 输入。理论上这就是个反馈回路Simulink 可以用迭代求解但迭代不收敛时就会报“Cannot solve the algebraic loop”或者仿真卡死。解决代数环的办法有三个在反馈通道里加一个 Memory 模块或 Unit Delay打破直接代数依赖关系。在采样信号链路上加一个 ZOH零阶保持器模拟数字采样器的行为顺便打破代数环。用 Simscape Electrical 的物理建模方式连接功率电路物理域求解器和 Simulink 信号域通过 Converter 连接天然避免代数环。我实际用的是第二种方法电压和电流采样后各加一个 ZOH采样频率设成 100kHz两倍开关频率。既模拟了真实数字控制器的离散采样也把代数环问题解决了。5.3 排查链路第二步求解器与步长我第一次搭 Boost 模型时用默认的变步长 ode45 跑结果波形在开关切换时刻出现大量毛刺偶尔直接发散。ode45 是显式龙格库塔算法对付带刚性开关的电路并不擅长。后来换成 ode23tb问题明显减少。如果你用 Simscape Electrical 搭建功率电路Simulink 会建议你选 ode23t 或 ode23tb跟踪这个建议能少走很多弯路。定步长模式下最常见的问题就是步长太大。50kHz 的开关频率一个周期 20μs如果步长设 1e-5 秒10μs一个周期才 2 个点PWM 边沿根本捕捉不到仿出来的波形没有任何参考意义。步长至少要小于开关周期的 1/50我推荐 1e-6 秒以下。5.4 排查链路第三步PI参数与初始条件PI 参数过大是发散的另一个高发原因。特别是电流内环的 Ki 如果取得特别大积分项会快速饱和电流波形呈现锯齿状发散。排查方式是先把 Kp 调小甚至先只用比例控制确认主电路和保护逻辑正常后再逐步加 Ki。初始条件也容易坑人。输出电容的初始电压如果为 0启动瞬间电流会非常大仿真器可能直接拒绝计算。给电容设置一个初始电压比如 20V接近目标 24V启动过程会更温和也不容易触发数值发散。这个做法在物理世界里相当于“预充电”实际电源设备里也有类似软启动机制。5.5 一次实际发散案例的完整排查过程有一次仿真发散现象是电感电流在某次开关切换后直接变成 1e30 的量级然后所有波形全飘了。我按顺序排查先看报错信息提示“NaN or Inf”没有代数环警告。关掉 PI 控制器给一个固定 0.5 占空比主电路开环跑了 0.01 秒波形正常说明功率电路没问题。重新接上 PI但把电流环的 Ki 从 200 降到 20现象依旧。检查采样链路发现电流传感器输出到 PI 之间忘记加 ZOH电流信号里的高频开关纹波直接进入了 PI导致 PWM 占空比在高频抖动数值发散。在电流反馈通路和电压反馈通路上各加 ZOH并限制 PI 输出在 0.05~0.9仿真恢复正常。这个案例特别典型主电路没问题、PI 参数也不是极端值问题出在信号调理环节。很多“仿真发散”并不是真的算法发散而是模型结构和信号路径的细节没处理好。所以我养成了一个习惯每次搭模型都先把采样调理做规范再去调参数。6. 波形解读启动、稳态、负载跳变三个关键画面6.1 启动过程软启动与过冲控制设置好参数后运行仿真最先观察的就是启动波形。输出电压从初始的 20V 爬升到 24V用了大概 20ms没有超调电感电流启动阶段的最大值控制在 10A 左右没有出现危险的电流尖峰。如果启动时电感电流冲到 20A 甚至更高多半是占空比满偏时间太长。这时候可以考虑把给定电压改为斜坡信号模拟软启动。Simulink 里用 Ramp 或 Step 加 Rate Limiter 就能实现斜坡时间设 20ms 到 50ms 都比较合理。6.2 稳态波形纹波与开关噪声进入稳态后三个波形要重点看输出电压纹波控制在 0.24V 以内Scope 上看起来是一条稳定的直线放大后才能看到锯齿状纹波。电感电流纹波约 1.2A 峰峰值呈三角波斜率和理论计算吻合。如果用开关模型观察电流纹波的上升斜率应该是 (V_{in}/L)下降斜率是 ((V_{in}-V_{out})/L)这个细节能帮你确认模型建得对不对。PWM 波形频率稳定在 50kHz占空比小幅波动维持输出电压稳定。稳态波形如果出现“额外的低频振荡”或者“脉冲丢失”先检查是不是 ZOH 采样频率太低。采样频率至少要两倍开关频率否则 PWM 调制会混叠出低频分量表现就是输出电压出现莫名其妙的正弦波动。6.3 负载突变动态响应负载跳变测试我在模型的输出端并联了另一路负载电阻通过 Step 切换让输出电流在 4A 和 2A 之间跳变。观察到的现象是输出电流突变瞬间输出电压下跌约 0.3V然后在 5~10ms 内恢复振荡次数只有 1~2 次没有持续振荡。这个波形很能说明问题低压跌落越小、恢复越快、振荡越少控制性能越好。如果你调完参数发现电压跌了 2V 而且振荡个不停说明电压环带宽太低了或者相位裕度不够。可以适当提高电压环 Kp但要随时留意有没有触发振荡。要定量评估动态性能我常用的方法是在负载跳变电阻上串联一个小电阻测量电流在输出端用示波器模块记录电压和电流的同步波形然后把数据导到 MATLAB 工作区用均值、峰值和恢复时间三个指标量化对比不同 PI 参数的表现。通过这种方式选参数比纯靠眼睛看波形要靠谱得多。7. 几个容易忽略的工程细节7.1 控制器离散化带来的影响如果你最终要在 DSP 或单片机里实现这套控制仿真里可以用离散 PI 控制器加零阶保持器来模拟数字控制器。离散 PI 的采样频率一般取 10kHz 到 20kHz开关频率的 1/5 到 1/2采样频率越高控制效果越接近连续域但实际芯片的 ADC 转换时间和 PWM 更新周期会限制这个频率。在 Simulink 里把 PI Controller 的 Time domain 改成 Discrete然后设置采样时间。一个容易被忽略的点是离散 PI 的输出更新延迟会降低系统相位裕度数字控制实现后的动态响应通常会比连续仿真的结果略差。所以做数字控制仿真时应该从一开始就把离散环节搭建进去。7.2 平均模型与开关模型的适用场景平均模型适合离线调参、批量验证参数组合开关模型适合最终验证波形和时序细节。我的习惯是先用平均模型调出基本满意的 PI 参数再切换到开关模型微调。需要提醒的是平均模型和开关模型之间的参数并不是完全通用的。因为平均模型没有 PWM 调制延迟电流环带宽可以设得更高到了开关模型里那个延迟就会变成限制因素。所以你会遇到“平均模型里表现很好”的参数在开关模型里发散的情况这不奇怪把电流环带宽降一档再试就行。7.3 引入寄生参数的影响基础仿真跑通后可以逐步给模型加上寄生参数电感的 DCR、电容的 ESR、MOSFET 的导通电阻、二极管的导通压降。这些参数会带来两个直接影响一是效率下降输出达不到理想电压需要 PI 积分项去补足静差二是纹波变大特别是电容 ESR 对电压纹波影响显著。开关频率选择也是个工程权衡。50kHz 在仿真里跑得快但实际硬件里开关损耗会随频率上升而增加频率低到 20kHz 又会进入音频范围电感容易发出啸叫。仿真阶段可以试不同频率电感参数按 (L V_{in}D/(\Delta I_L f_{sw})) 同步调整。7.4 从仿真到硬件的距离最后说点实在的仿真跑通不等于硬件能跑通。硬件上的驱动延迟、传感器延迟、采样噪声、地线干扰都会让你的 PI 参数显得“太激进”。我见过很多人在仿真里用很宽的带宽调出一个动态响应极好的参数上板之后直接炸管。所以做仿真时建议有意识地把参数整定得保守一些电流环带宽留到开关频率的 1/10 以下电压环带宽留到电流环的 1/5 以下启动过程加软启动输出限幅留 10% 的余量。这些保守的设计在仿真里看起来“没那么快”但它们才是真正能落地的参数。仿真能帮你理解控制逻辑、验证拓扑原理而“能用”和“好用”之间的差距恰恰就藏在这些看似不起眼的细节里。
返回列表