ARTICLE DETAIL

资讯详情

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

Simulink中Buck变换器双闭环控制仿真与PID整定全流程

Simulink中Buck变换器双闭环控制仿真与PID整定全流程 这几年带过不少学弟学妹做电力电子课设也看过太多人一到 Simulink 仿真就卡壳——Buck 电路仿真模型要么跑不起来要么飞车发散要么波形抖得像心电图。更别说双闭环了很多人把电压环和电流环一顿连结果调参调到怀疑人生。实际上用 Simulink 做 Buck 变换器双闭环控制这件事逻辑捋顺了、参数有方法了就是一堂能“抄作业”的实操课。这篇博文我就把从主电路搭建、双环结构设计到 PID 整定的完整过程拆开讲既给能直接复现的仿真步骤也讲清楚每一步为什么要这么干——适合正在做课设、准备电赛或者刚接触开关电源仿真控制但被各种报错卡住的朋友。1. 课设前先想清楚Buck 双闭环到底在干什么1.1 Buck 变换器原理与器件的“第一性”计算很多同学习惯打开 Simulink 就开始拖模块结果拖了半天也不知道自己搭了个啥。我建议动手前先把 Buck 的核心公式理一遍这样后面设置参数、判断波形才有据可依。Buck 电路本质是一个降压开关变换器通过控制开关管通常用 MOSFET的导通占空比 D把输入电压 (V_{in}) 降到 (V_o D \times V_{in})。这里有个隐含前提——电路工作在连续导通模式CCM下也就是电感电流在整个开关周期内不降到零。绝大多数课设和工业 Buck 应用都设计在 CCM 模式咱们在仿真里搭的也是这个模式。接下来是电感计算。CCM 模式下的电感电流纹波公式是[ \Delta I_L \frac{V_o \times (1 - D)}{f_{sw} \times L} ]一般来说电感电流纹波取满载电流的 20%~40%也就是 (\Delta I_L 0.2\sim0.4 \times I_o)。反过来整理就能得到最小电感[ L \frac{V_o \times (1 - D)}{f_{sw} \times \Delta I_L} ]举个例子输入 (V_{in}20V)输出 (V_o10V)开关频率 (f_{sw}100kHz)额定负载电流 (I_o5A)纹波电流取 1A。占空比 (D V_o/V_{in} 0.5)那么[ L \frac{10 \times (1 - 0.5)}{100000 \times 1} 50\mu H ]这个 50 微亨就是最小电感值。实际仿真时建议取 1.2~1.5 倍裕量也就是 60~75 微亨太小的电感会让电流纹波偏大电流内环采样到的信号噪声也大。输出电容的选择依据是输出电压纹波。忽略 ESR 的情况下[ \Delta V_o \frac{\Delta I_L}{8 \times f_{sw} \times C} ]如果要求电压纹波小于 50mV代入 (\Delta I_L1A, f_{sw}100kHz)[ C \frac{1}{8 \times 100000 \times 0.05} 25\mu F ]实际可以取 47 微法或 100 微法留出足够的裕量。这两个公式看起来简单但很多人仿真发散的根源就在这——电感电容取值太随意导致实际工作模式、纹波特性和理论假设完全对不上。1.2 为什么非要做双闭环单电压环不香吗课设要求做双闭环很多同学的第一个疑问就是单电压环就够了为什么非要加电流内环这里我把道理说透。单电压环结构很简单采样输出电压和参考电压比较误差送进 PID/PI 调节器输出直接作为占空比。这种方案在负载变化不大、动态性能要求不高的场合确实能用比如一些简易电源。但它的弱点是明显的——电感电流没有任何约束负载突变时电压外环要等输出电压跌下来才开始反应响应速度慢而且过流风险高。双闭环则把控制拆成两个嵌套的回路电压外环 电流内环。电压外环先稳住输出电压它的输出不直接决定占空比而是作为电流内环的“电流参考值”电流内环再去控制电感电流跟踪这个参考值最终由电流内环的输出决定占空比。这种结构有三个实打实的好处响应速度快。电压变化最终是由电流变化引起的电流内环直接管住电流负载突变时电流内环第一时间动作远在输出电压大幅跌落之前就完成调节。天然具备限流能力。只要给电流内环的参考指令加上限幅就相当于给整个系统加了峰值电流限制这在电源保护里非常重要。控制对象线性度更好。电流内环把原本对电压的非线性控制问题变成了对电流的快速跟踪问题外环面对的只是一个被电流内环“校正过”的近似线性系统调参难度直线下降。一句话理解单电压环是隔着墙调电压双闭环是直接管住电流这个“流量”再让流量去稳定电压这个“水位”。1.3 系统框图信号怎么流才算对双闭环的信号流很多人第一次搭必乱我画个文字版本的信号链路理一遍输出电压 → 电压采样 → 与参考电压 (V_{ref}) 比较 → 电压环 PI 调节 → 电流参考 (i_{ref}) → 限幅 → 与电感电流采样比较 → 电流环 PI 调节 → 与三角载波比较生成 PWM → 驱动 MOSFET → 影响输出电压整个回路是“电压外环、电流内环”的串级巢状结构。外环慢内环快这是设计的基本盘。内环带宽通常设计为外环的 5~10 倍这样才能保证内外环不会互相耦合打架——这个倍数关系后面调参会再次用到。有的教材里或论文中还会提到“前馈补偿”或者“峰值电流模式控制”课设阶段先别碰那些花活把最标准的电压外环平均电流内环做扎实拿分完全够。等以后做更复杂的双向 Buck-Boost、并网逆变器时这套双环思想是直接复用的底层架构。2. Simulink 建模第一步把 Buck 主电路搭得漂亮2.1 用哪套模块库Simscape Electrical 还是基础 Simulink 模块我在 Model-Based Design 的课设指导里最常见的一个问题就是学生分不清 Simscape Electrical原来的 SimPowerSystems/SimElectronics和基础 Simulink 模块的区别。如果是纯控制系统仿真直接用传递函数、增益、积分器这些基础模块就足够适合验证控制算法但看不到开关过程也测不了纹波和开关应力。而做电力电子课设要看管子的开关波形、电感电流纹波、电容电压波动就必须用 Simscape Electrical 里的电气元件库它才是按实际电路物理关系建模的。我的建议非常明确只要课设要求里有“分析输出纹波”“波形仿真”这类字眼就老老实实选 Simscape Electrical 元件库。你要是想省事用纯 Simulink 搭状态方程虽然也跑得动但答辩时老师说一句“你这怎么体现开关过程”你就很被动。搭建前检查一下你装的 MATLAB 版本是否带了 Simscape Electrical 工具箱。命令行输入ver(SimscapeElectrical)能返回版本信息就说明可用。MATLAB 2020 之后的版本基本都集成在 Simscape 这个大工具箱下了路径一般是Simscape Electrical Specialized Power Systems老版本里叫 “SimPowerSystems”。2.2 主电路搭建的分步操作我以 MATLAB R2022b 为例讲一下主电路的完整搭建过程。打开 Simulink 空白模型按 CtrlShiftL 打开库浏览器然后依次做以下操作。第一步放电源和开关管。从Simscape Electrical Specialized Power Systems Fundamental Blocks Electrical Sources拖入一个DC Voltage Source电压设为 20V再打开Power Electronics拖入一个MOSFET和Power Diode。很多老教程用 IGBT 也可以但课设里用 MOSFET 更常见开关频率高一些模型也直观。第二步放无源元件和负载电阻。从Elements库里依次拖入Series RLC Branch两套。选中一个把 Branch type 改成 Inductor电感值填 60e-660 微亨另一个改成 Capacitor电容值填 47e-647 微法。负载电阻直接单独用一个Series RLC Branch改成 Resistance阻值先给 2Ω这样满载电流刚好 5A10V/2Ω。如果你想要负载阶跃功能可以再加一个并联的电阻支路配 Breaker但那是后话。第三步连主电路。连接顺序为电源正极 → MOSFET 漏极MOSFET 源极 → 电感 → 电容正极 → 负载电阻 → 回到电源负极二极管阴极接 MOSFET 源极电感电流续流路径阳极接电源负极。连完以后在 MOSFET 的 g 极端子留出一个输入口这是后续接 PWM 驱动信号的位置。第四步放测量模块。从Measurements库拖入Current Sensor串在电感支路上用来测电感电流再拖一个Voltage Sensor并联在电容负载两端测输出电压。测量模块输出的是 Simulink 信号蓝色线方便直接接控制器和示波器。第五步放示波器和电源模块。在模型里再加一个Scope接电压和电流信号。最后也是最重要的一步——从Specialized Power Systems库拖入Powergui块。很多新手会漏掉它导致仿真报错或者根本没有正确的电气解算器。Powergui 块要双击选择仿真类型课设直接选Continuous连续仿真。完成后的主电路逻辑拓扑大概是这样用文字示意DC --- MOSFET --- 电流传感器 --- 电感 L --- 节点A | 电容 C --- 负载 R | DC- --- 二极管阳极 --- 接MOSFET源极 --- 地实操提醒二极管的方向千万别接反它是在 MOSFET 关断时给电感电流提供续流路径的反了会直接短路仿真瞬间报错。2.3 求解器设置与仿真步长别让仿真死在第一步主电路搭完很多人直接按绿色三角开始仿真然后看到一堆红色报错心态当场爆炸。90% 的报错原因不在模块参数而在求解器设置。点开Configuration ParametersCtrlE重点设置三处求解器类型选变步长Variable-step求解器算法选ode23tb。电力电子仿真里开关动作非常快有大量刚性区域ode23tb 对这种带强开关特性的系统特友好。有人习惯用ode45但在脉冲开关模型里往往计算速度极慢甚至不收敛。最大步长设为1e-6等于开关周期的十分之一100kHz 对应周期 10 微秒。最大步长是保证仿真不绕过开关事件的底线。相对容差默认 1e-3 一般够用如果波形明显异常且怀疑是精度问题调到 1e-4。再提一个很隐蔽的点Simscape Electrical 里的开关管模型内部自带阻尼电阻和缓冲电路Snubber默认是开启的。如果仿真出现数值震荡先把 MOSFET 和 Diode 的 Snubber 电阻值改大一点比如 1e5 欧姆或者直接关掉。但要注意关掉 Snubber 后如果电路拓扑里出现纯电感回路可能会形成代数环这就需要在控制回路里小心处理后面会专门讲。3. 双闭环控制环路信号流、反馈比例与 PWM 生成3.1 采样与反馈系数最容易踩坑的隐藏细节控制环路里有一个非常容易漏掉但对仿真结果影响巨大的问题反馈系数和实际物理量的比例关系。在真实硬件系统里电压霍尔或电阻分压网络输出的是一个低电压信号比如 0~5V代表实际电压但在纯仿真模型里电压传感器输出的是真实的伏特数比如 10V 就是一个 10 的信号。很多课设模型里的 PID 参数是从论文上照抄的结果放大环节直接对不上波形要么超调要么发散。所以我的建议是在仿真里干脆统一用单位增益反馈即反馈系数等于 1。也就是说参考电压 (V_{ref}) 直接设 10电压环的反馈量就是 10V 实测信号电流环同理参考电流单位就是安培。这样调出来的 PID 参数是“物理单位制”下的更好理解答辩时也讲得清楚。如果你非要模拟真实的分压比那就必须在反馈回路里加一个 Gain 模块把电压传感器的值除以一个比例系数后再接入比较器并且参考信号也要改成对应的反馈电压值。后续 PID 参数就和物理电压除以比例后的数值挂钩调起来要多转换好几层非常容易乱。课设不推荐这么干。3.2 双环控制结构搭建外环给目标内环干活在 Simulink 模型里新建一个子系统Subsystem命名为Double_Loop_Controller里面分三块搭。第一块电压外环。电压传感器输出的电压信号 (V_o) 和来自外部的参考电压 (V_{ref})用 Constant 模块给 10做差误差进一个PID Controller模块。这里注意PID Controller 的Integrator需要设置初始值 0Limits里的输出上限和下限要设好比如[5, 0]——因为实际控制中电流参考值不能是负的Buck 只能降压不能反灌。第二块电流内环 限幅。电压环输出的“电流指令”i_ref先过一个Saturation模块限幅上限设成额定电流的 1.2 倍比如 6A下限设 0。然后与电流传感器测到的电感电流做差再进第二个PID Controller。这个 PID 的输出就是占空比信号范围 0~1所以也要加 Saturation 限幅。第三块PWM 生成。占空比信号和三角载波比较。三角载波可以用Repeating Sequence模块生成Time values 设[0, 5e-6, 10e-6]Output values 设[0, 1, 0]这样就是一个 100kHz 的三角波周期 10 微秒幅值 0~1。两个信号比较用Relational Operator大于号输出 0/1 信号再接一个Data Type Conversion转成 double就可以直接送给 MOSFET 的 g 极端。设计内环带宽比外环高 5~10 倍的原因从信号流上就看得出来——外环改变的是内环的指令值内环要快速跟上指令如果内环动作慢外环调了半天电流却跟不上整个系统就会“超调-回调-超调”地振荡。3.3 连续域还是离散域课设怎么选这是另外一个让人纠结的问题。Simulink 里的 PID Controller 有两种实现选择连续时间Time domain: Continuous-time和离散时间Discrete-time。课设阶段我的建议选连续时间。离散化虽然更接近 DSP 实现但多出采样周期、ZOH零阶保持器、离散 PID 系数换算这些环节每一步都是出错点。连续域仿真能快速验证控制结构和参数合理性等以后做嵌入式代码生成再走离散化也不迟。不过如果你已经决定要用Powergui的Discrete模式比如仿真大系统时为了加速那控制侧的 PID 也选离散采样时间最好和 PWM 周期对齐比如 1e-5。混用连续域控制器和离散电力电子模型在 Simscape Electrical 里一般也能跑但偶尔会出现数值不稳建议尽量避免。另外如果后面要导出 FMU、生成 C 代码或者接 STM32 硬件在环那离散化就是必选项。但那是进阶玩法课设先把连续域跑通、把控制思路搞清楚比什么都强。4. PID 调参顺序与实战技巧全篇重点4.1 调参总原则从内到外先稳态后动态我可以很直白地说80% 的双闭环调参失败都是因为顺序乱了。双闭环是两个环嵌套在一起如果一起调、乱调你根本分不清波形异常到底是内环的问题还是外环的问题。正确顺序只有一条铁律先电流内环再电压外环先把每个环单独调到稳态不振荡再联调动态过程。具体操作手法是“开环高压环”先把电压环的输出断开也就是把电压环 PID 的误差输入置 0或者直接把电压环输出接到一个 Constant 上手动给一个固定电流指令比如 2A 或 3A。此时系统相当于只有电流环在跑观察电感电流能否稳定在设定值。调好电流环后再接上电压环手动参考电压设为 10V调电压环参数。这套“先内后外、先稳后快”的顺序本质上是把一个双输入双输出的耦合系统拆成两个单输入单输出系统逐一攻破。每一步出问题都能定位到具体某个环排查效率极高。4.2 电流内环的 P 与 I 整定实战电流内环的控制对象是电感电流对 Buck 而言这个对象本身是“一阶惯性 延迟”特性非常适合 PI 控制。第一步只加 P不加 I。把电流环 PID 的积分系数设为 0微分系数也为 0P 先从很小的值开始试比如 0.05。给固定电流指令 2A观察电感电流的阶跃响应。你会发现P 太小电流根本爬不到目标稳态误差很大P 逐渐加大0.1、0.2、0.5跟踪速度变快稳态误差减小但 P 继续加大到一定程度电流波形开始出现高频抖动甚至振荡。找到那个“刚好不振荡但响应速度还不错”的 P 值记下来。这里有个经验电流环的 P 值可以从系统的开环增益估算——开环传递函数近似为 (P/(sL))如果想要穿越频率 (f_c f_{sw}/10)10kHz那么 (P \approx 2\pi f_c L)代入 (L60\mu H, f_c10kHz)得 (P\approx 3.77)。当然这只是起点做参考足够。第二步加入 I 消除稳态误差。光有 P 的电流环是有静差的把 I 从 0 开始逐步增加100、500、1000观察电流能否精确跟随指令。积分系数太大电流会出现低频振荡此时要减小 I。一个常用的初值经验是取 P 的 1/10 到 1/20 作为 I 的角频率基数比如 P3.77那 (K_i) 可以先给 200 左右再细调。第三步验证限幅效果。把电流指令从 2A 直接给 10A超出额定观察电流是否被限幅模块卡在 6A 附近。这是电流内环“限流能力”的直观验证也是答辩时老师喜欢问的点。这一轮调完电流环应该能做到给定电流指令后电感电流在几百微秒内跟上且无明显振荡。4.3 电压外环的 P 与 I 整定实战电流环调好了接上电压环。第一步电压环初始 P 给一个很保守的值比如 0.1I 先设 0。给参考电压 10V看输出电压从 0 爬升的曲线。如果 P 太小电压爬到一半就停了稳态误差非常大逐步增大 P0.5、1、2电压的稳态精度逐步改善同时注意不要产生明显超调。第二步加 I 消静差。电压环的 I 同样是用来消除稳态误差的。逐步增加 I比如 50、100、200直到输出电压稳定在 10V±0.05V 以内看波形理论上电压纹波应该在 50mV 上下。I 太大会出现电压环和电流环之间的耦合振荡——表现为输出电压按几百赫兹或几千赫兹的频率周期性波动这时候果断降低 I。这里有个和电流环不一样的地方需要特别注意电压环的带宽必须明显低于电流环否则两个环的相位裕度会互相抵消系统直接振荡。实际操作中电压环 P 和 I 不要贪大给一个“够用”的参数就好——比如电流环阶跃响应在 0.2ms 内跟上电压环踢踏到目标值的时间在 2~5ms 内就非常健康。第三步动态验证。在 0.1 秒时让负载电阻从 2Ω 阶跃到 1Ω满载电流从 5A 跳到 10A观察输出电压的动态跌落和恢复过程。一个调好的电压环输出电压会先有一个很小的跌落几百毫伏级别然后在几毫秒内恢复到 10V。如果跌落过大或恢复过慢说明电压环响应不够快适当加大 P如果恢复过程中有振荡说明 I 偏大或者电压环带宽离电流环太近。4.4 一组能跑的初始参数与性能评估为了让大家有个直观的起点我给出一个用上述方法在我自己的课设模型里实测能稳定跑的参数组合对应 20V 输入、10V 输出、100kHz、2Ω 负载电阻环节PID备注电流内环3.03000限幅设为 [0, 6A]电压外环0.5500输出限幅设为 [0, 5A]这套参数跑出来的典型性能启动过程约 5ms 达到稳态无超调负载阶跃时电压跌落约 0.3V恢复时间约 3ms稳态电压纹波约 20mV 左右。参数只是一个起点不同电感电容值、不同负载、不同开关频率下肯定要重新调。真正要掌握的是上面那套“先 P 后 I、先内后外”的方法。调完后用Scope把输出电压、电感电流、PWM 波一起显示截图放到课设报告里就能很直观地展示双闭环的工作过程。如果想让波形更“专业”可以加上powergui的 FFT 分析工具看输出电压谐波谱这也是答辩加分项。5. 仿真现场常见的五个坑与排查实录5.1 仿真器报错、模型根本跑不动现象点击运行Simulink 报 “Error in …” 或者 “Algebraic loop detected” 之类的错误模型一步都跑不动。排查顺序先看有没有放Powergui块。没有 Powergui 的 Simscape Electrical 模型几乎必然报错。再看 MOSFET 驱动信号类型。PWM 比较出来的信号是 boolean如果直接接到 MOSFET 的 g 端某些版本会报“cannot propagate”错误加一个Data Type Conversion转成 double 就能解决。代数环问题如果电流传感器后面直接接了一个增益再回受给占空比特别是纯电阻回路没有储能元件缓冲时Simulink 可能算出代数环。解决办法是在反馈路径加一个Memory或Transfer Fcn例如 (1/(1e-6s1))做解耦。我在做演示模型时就遇到过——电流环输出直接接到 PWM 比较器中间没有加任何延迟结果报代数环。加了一个 1e-6 秒的“小惯性”之后仿真立刻顺了。5.2 输出电压直接飞上天或者冲到电源电压现象仿真一开始输出电压直奔 20V或者上下剧烈震荡然后发散到无穷。排查方向反馈极性反了。PI 控制器默认“误差 给定 - 反馈”。如果接线时参考电压和反馈电压接反了PI 输出就会反向饱和占空比一直往 1 冲输出电压当然飞到输入电压。检查 Sum 模块的正负号必须是正端接参考、负端接反馈。电感电流反馈丢失。如果电流内环没接上电流采样信号内环等于开环电压环输出再大也控制不住电流整个系统失去内环阻尼电压外环容易失控。检查电流传感器是否串在电感支路上信号是否真的进到了 PID 的反馈端。5.3 波形高频振荡电感电流像锯齿现象输出电压大体稳定但电感电流波形全是高频毛刺甚至在某些时刻出现剧烈尖峰。排查方向电流环 P 过大。把 P 往回压直到电流波形变成平滑的三角波CCM 模式典型的电感电流波形。开关管并联的 Snubber 参数不合适。如果开关管关断瞬间产生很大的电压尖峰往往是 Snubber 电阻过小或电容过大。把 MOSFET 的 Snubber 电阻改到 1e4~1e6 数量级尖峰会显著改善。求解器最大步长太大。如果你把最大步长设成 1e-5等于开关周期仿真很可能“跳过”开关动作的瞬间导致波形失真。把Max step size降到 1e-6 或更小再看。5.4 稳态误差一直降不下来现象输出电压稳定在 9.7V 左右无论怎么调 P 都到不了 10V或者电流环指令和实际电流总有偏差。排查方向积分项没起作用。检查 PID 模块的 I 是不是被误设成 0或者积分限幅太小把积分器“钳死”了。参考信号和反馈信号不在一个单位制。比如参考电压给的是 10V 对应的反馈电压 2V而你给成参考 10反馈实际 10 但经过了一个 Gain 衰减到 2那误差永远存在。统一反馈系数就是最省事的解法。占空比限幅不合适。如果 PWM 调制比最大只能到 0.8而系统需要 0.85 才能维持目标输出那输出必然会跌落到一个平衡点下方。把 Saturation 上限放开到 0.95或者重新核算输入电压是否足够。5.5 负载阶跃时系统恢复太慢或直接振荡现象负载电阻从 2Ω 跳到 1Ω输出电压跌了快一半然后蠕动了半天还没回来或者回来过程中超调好几个波峰。这两个现象对应两个方向恢复太慢 → 电压环 P 太小或者带宽太低。适当提高电压环 P 和 I让电压外环“管得更宽”。恢复过程振荡 → 电压环带宽太接近电流环或电流环本身相位裕度就不够。把电流环 P 稍微降低一些、确保电流环的响应速度明显快于电压环再重新调电压环。顺便提一个独家技巧给电压环的输出即电流指令做“斜坡限速”处理也就是在 Saturation 之前再串一个Rate Limiter变化速率限制器。这能在一定程度上平抑启动冲击也能减少负载突变时的电压超调在很多实战电源设计里都有应用。课设上如果波形恢复不好看这招会有奇效。以上这些坑基本就是我见过的高频雷区。做课设时最忌讳心态浮躁一个一个按顺序排查大部分问题都能在半小时内解决。我个人在实际操作中的体会是双闭环 Buck 仿真的真正难点从来不是 Simulink 操作而是对“先内后外”的整定顺序和反馈信号链路的清醒把握——脑子里把信号流理顺了比记一百个模块位置都管用。如果你也是刚开始接触这块建议先把我给的那组基准参数跑进课设模型里再用示波器观察每个节点的波形当你亲手把一个发散模型调稳、把纹波压下去的时候这套技术就真正长在你身上了。
返回列表