尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于模型预测控制的三相PWM整流器MATLAB/Simulink仿真设计

基于模型预测控制的三相PWM整流器MATLAB/Simulink仿真设计 最近在做一个三相电压型PWM整流器的项目控制方案选的是模型预测控制MPC仿真平台用MATLAB/Simulink完成。做完之后有不少朋友问我要模型和思路干脆写一篇总结把从控制原理到仿真搭建的完整过程都整理出来。这不仅是给自己留个存档也希望给正在做相关课题的同学或工程师一个可以直接参考的路线。这篇文章会覆盖方案选型逻辑、MPC算法推导、Simulink建模细节、仿真结果分析还有我在调试过程中踩过的坑内容比较长建议按目录分段阅读。1. 整体设计与控制思路1.1 三相整流器为什么要选模型预测控制三相PWM整流器在工业电源、电动汽车充电、新能源并网这些场合用得非常多典型的控制目标是让直流侧输出电压稳定在给定值同时让交流侧电流接近正弦单位功率因数运行。传统的双闭环PI控制在这个场景下已经很成熟电压外环加电流内环配合SVPWM调制性能也不错。那我为什么还要用模型预测主要原因是MPC的响应速度和灵活性。PI控制器的参数整定是个麻烦事尤其当系统工作点变化较大或者电感参数有偏差时PI参数需要重新调整否则动态响应和稳态精度会变差。模型预测控制就不一样它基于系统的离散数学模型在每个采样周期内枚举所有可能的开关状态通过代价函数选出最优的开关组合直接作用于变换器不需要额外的调制模块。这种策略的瞬态响应很快而且处理多目标约束非常自然比如同时控制电流、限制开关频率、平衡中点电位这些在传统PI框架下实现起来会比较绕。还有一个实际原因DSP、FPGA的算力越来越强MPC在每个采样周期做几十次预测计算计算量对现代控制器来说已经不是什么负担。所以从趋势上看模型预测在电力电子变换器领域的应用越来越普遍做整流器仿真验证MPC算法也是比较扎实的第一步。1.2 主电路拓扑与核心参数选型三相整流器可选的主电路拓扑不少我选择的是三相两电平电压型PWM整流器VSR这是最经典、也最适合验证MPC算法的基础拓扑。六个开关管IGBT反并联二极管组成三相桥臂交流侧通过三相对称电感L接三相电网直流侧接滤波电容C和负载电阻R。为什么不选三电平拓扑因为三电平的输出状态更多MPC的枚举空间会从8种变成27种算法复杂度和调试难度都上了一个台阶。先用两电平把算法跑通再把结论迁移到更高电平拓扑这个路径更稳妥。仿真参数我按一个典型的10kW级别整流器规模来设定参数数值说明三相电网相电压幅值311V对应220V相电压有效值电网频率50Hz工频交流侧电感L5mH滤波兼升压电感电感等效电阻R0.1Ω线路及电感寄生电阻直流侧电容C2200μF母线支撑电容直流侧参考电压Vdc_ref600V升压后的直流母线电压负载电阻R_load36Ω满载约10kW采样频率fs20kHzMPC控制周期50μs电感值直接影响电流纹波和动态响应电感越大电流纹波越小但系统的响应速度会变慢而且体积成本都增加。电容值主要决定直流电压的抗扰动能力电容大电压波动小但充电时间变长系统动态响应也会受影响。我这组参数是按常规工程经验取的后面分析波形时会看到效果。2. 模型预测控制的核心原理2.1 预测模型从电压方程到电流预测MPC之所以叫“模型预测”核心就在于需要把系统的物理方程改写成可以从“当前状态”推算“未来状态”的离散预测模型。对三相两电平整流器首先写出交流侧的电压方程L · di/dt e - R·i - v_inv其中e是电网电压i是交流侧电流v_inv是整流器桥臂输出的电压矢量。这个方程的本质就是电感上的电压平衡关系物理上很直观。整流器通过控制桥臂输出电压间接控制电流电流再通过功率平衡影响直流电压。要用于数字化控制需要把连续的微分方程离散化。最常见的是一阶前向欧拉离散公式如下i(k1) (1 - R·Ts/L) · i(k) (Ts/L) · [e(k) - v_inv(k)]其中Ts是采样周期。这个公式的意思很直白知道了当前时刻的电流i(k)、电网电压e(k)和桥臂输出电压v_inv(k)就能预测下一个采样时刻的电流i(k1)。这里有个容易误用的点欧拉离散法在Ts远小于系统时间常数时精度足够但如果采样频率偏低预测误差会变大。我在仿真中取Ts50μs电感时间常数L/R50msTs相比时间常数小了三个数量级离散误差可以忽略。如果推高功率等级或使用较大的电感建议用更高阶的离散方法甚至直接使用零阶保持离散化代价是公式会复杂一些。2.2 代价函数设计如何平衡多个控制目标模型预测控制的每一步优化都要靠代价函数来评估“哪个开关状态更好”。代价函数是把控制目标写成可计算的数学表达式的关键环节直接决定系统的控制效果。对于三相整流器最基本的控制目标是让实际电流跟踪参考电流。代价函数可以写成g |iα_ref(k1) - iα(k1)| |iβ_ref(k1) - iβ(k1)|这里用了αβ静止坐标系下的分量形式避免处理三相之间耦合带来的复杂度。预测电流i(k1)由预测模型计算得出参考电流iα_ref和iβ_ref则由电压外环生成或者由功率指令换算而来。当系统有多个控制目标时代价函数就是各目标项的加权求和。比如要控制中点电位平衡就加上一项电容电压差的绝对值要限制开关频率就加一项开关动作次数的计数项。加权系数的大小决定了软件优化时的优先级。这个设计非常灵活是MPC的一大优势但也带来了参数整定的问题后续会专门说。2.3 滚动优化遍历所有开关状态的寻优逻辑模型预测控制另一个区别于传统控制的核心特征是“滚动优化”——在每个采样周期都做一次优化然后只执行第一步的结果下一个周期重新计算。这和人类做决策的方式有点类似每到岔路口就看一眼全局规划但只迈出当前这一步。对三相两电平整流器三相桥臂每相只有上下两个开关状态用1表示上管导通下管关断0表示下管导通上管关断那么整个变换器的开关组合共有2³8种。其中两种是零矢量全1或全0输出为零电压其余六种是非零矢量对应六个扇区的电压矢量。MPC在每个采样周期的寻优流程如下采样当前时刻三相电流i(k)、电网电压e(k)和直流电压Vdc(k)遍历8种开关状态计算出每种状态对应的桥臂输出电压矢量v_inv用预测模型预测每种开关状态下的下一时刻电流i(k1)把8组预测电流分别代入代价函数g计算各自的g值选出g值最小的那组开关状态在下一个开关周期直接输出给IGBT驱动。整个流程看似循环计算量很大实际在一个20kHz的采样周期内8次预测计算对MATLAB Function模块或嵌入式代码来说都很容易完成。仿真模型的核心就是把这个寻优逻辑用代码准确实现后面我会具体展示。3. MATLAB/Simulink仿真模型搭建3.1 仿真环境与版本选择MATLAB版本的选择对Simulink的元件库有直接影响因为不同版本提供的电力电子器件库、示波器工具和求解器选项有差异。我使用的是MATLAB R2023bSimscape Electrical原SimPowerSystems库在这个版本里已经非常成熟整流器、IGBT、二极管、电感和三相电源都能直接拖拽使用。如果你的版本比较老比如R2018b或者R2020a基本建模思路完全一致只是部分模块的名称和位置稍有差异。遇到找不到模块的情况我建议直接在Simulink库浏览器里搜索模块名称的关键词比逐个翻目录效率高得多。另外要注意版本之间的许可问题以及MATLAB路径中不要出现中文或特殊字符否则仿真文件可能加载失败。3.2 主电路仿真模型搭建主电路按“三相电源 → 电感 → 整流桥 → 直流电容 → 负载”的结构依次搭建。三相电源用Simscape Electrical里的Three-Phase Source模块设置相电压幅值311V、频率50Hz、相位依次相差120度。三个电感受器分别串联在电源和整流桥交流输入端之间电感值用前面表格里的5mH注意加上等效串联电阻0.1Ω。整流桥使用Universal Bridge模块桥臂数选3功率器件类型选IGBT/Diode这样仿真模型里既包含开关管也包含反并联二极管。直流侧用一个并联电容接整流桥正负母线再并一个电阻作为负载。这里有个常见问题Universal Bridge模块的“Snubber resistance”参数默认值可能过高影响仿真数值稳定性。建议在搭建完主电路后把这个参数设置为较大值比如1e6Ω或关掉缓冲电路否则仿真步长会变得很小速度很慢。为了让MPC控制器能获取正确的电压电流反馈量还需要加测量模块。电流测量用Three-Phase V-I Measurement接在电源侧测三相电流电压测量直接量直流侧电容两端电压。注意测量的信号要经过信号转换模块如Goto/From或Bus Selector传入控制器格式统一为Simulink信号线。3.3 MPC控制器的MATLAB Function实现这是整个仿真模型最核心的部分。我在Simulink里添加一个MATLAB Function模块在模块的输入输出接口处分别定义好端口然后在函数内部实现上面说的预测和寻优逻辑。先说明输入输出接口的设计。输入端口有6个三相电流ia、ib、ic三相电网电压ea、eb、ec直流母线电压Vdc以及电压外环生成的电流参考值id_ref、iq_ref这里如果做法不同可以换成直流电压指令全看控制器分层方式。输出端口有3个输出一组开关信号Sa、Sb、Sc直接给Universal Bridge的触发脉冲端。MATLAB Function核心代码的逻辑结构大致如下function [Sa, Sb, Sc] mpc_controller(ia, ib, ic, ea, eb, ec, Vdc, id_ref, iq_ref) % 模型预测控制核心函数 % 状态与外参 persistent theta; if isempty(theta) theta 0; end % 坐标变换abc - alpha/beta ialpha (2/3)*(ia - 0.5*ib - 0.5*ic); ibeta (2/3)*(sqrt(3)/2*(ib - ic)); ealpha (2/3)*(ea - 0.5*eb - 0.5*ec); ebeta (2/3)*(sqrt(3)/2*(eb - ec)); L 5e-3; R 0.1; Ts 50e-6; % 参考电流转换到静止坐标系 t 0; % 需要从锁相环获得角度这里简化为0 theta theta 2*pi*50*Ts; id_alpha_ref id_ref*cos(theta) - iq_ref*sin(theta); id_beta_ref id_ref*sin(theta) iq_ref*cos(theta); % 开关状态表8种组合 switches [0 0 0; 0 0 1; 0 1 0; 0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1]; g_min inf; best_state switches(1,:); for row1:8 s switches(row,:); % 计算桥臂输出电压矢量 va Vdc*(2/3)*(s(1) - 0.5*s(2) - 0.5*s(3)); vb Vdc*(2/3)*(sqrt(3)/2*(s(2) - s(3))); % 预测下一时刻电流 ia_pred (1 - R*Ts/L)*ialpha (Ts/L)*(ealpha - va); ib_pred (1 - R*Ts/L)*ibeta (Ts/L)*(ebeta - vb); % 代价函数 g abs(id_alpha_ref - ia_pred) abs(id_beta_ref - ib_pred); if g g_min g_min g; best_state s; end end Sa best_state(1); Sb best_state(2); Sc best_state(3); end注意上面这段代码的坐标变换和参考电流计算为了演示做了简化工程实现通常需要带锁相环获取电网角度并用电压外环生成有功电流参考和无功电流参考。我在实际模型里用了一个简化的PLL模块读取电网角度然后把电压外环PI控制器的输出作为id_refiq_ref在单位功率因数模式下设为0。这样处理比较接近真实工程仿真运行起来也更稳定。3.4 仿真参数设置与运行配置模型搭完后仿真参数设置的合理性决定结果是否有参考价值。我在运行前的配置如下求解器选择离散步长求解器discrete solver固定步长设为1e-6秒。虽然MPC的控制周期是50μs但Simulink中的电力电子开关器件需要更小的仿真步长才能准确捕捉开关动作的瞬时过程。我取仿真步长1μs这样每个MPC控制周期内有50个仿真采样点波形细节不会丢失。如果电脑配置一般也可以放宽到5μs对验证算法影响不大。仿真时间设置稳态分析跑0.5秒足够观察动态响应则要跑1秒以上并在某个时刻人为突加负载或改变参考值。我建议模型里加一个Step或Signal Builder模块来触发动态扰动这样可以一次性观察到动态响应波形。在实际运行过程中有个小技巧很实用把MPC的控制周期固定下来用一个采样保持器或者脉冲发生器作为触发信号确保MATLAB Function在每个控制周期内只执行一次。如果直接在函数块里用连续时间逻辑可能会导致控制周期不稳定波形看起来会有很多毛刺。4. 仿真结果分析与调试经验4.1 稳态性能电流谐波与THD分析仿真运行到稳态后先看三相输入电流波形。理想情况下应该是三相对称的正弦波与电网电压同相位THD尽量低。我用自己的模型跑出来的结果输入电流波形比较光滑正弦度不错用FFT工具分析后THD大约在3%~5%之间这在仿真层面是可以接受的。有几个影响THD的因素值得留意。第一是电感值电感越大电流纹波越小THD越低但系统动态响应变慢。第二是采样频率MPC的控制频率越高电流跟踪越精确THD也越低。第三是代价函数的权重设计如果只控制电流THD通常比较好如果加入了开关频率限制项THD会有所牺牲。仿真时如果THD偏高优先检查这三个维度。直流侧电压的稳态波形也很关键。理想情况下母线电压稳定在参考值600V附近纹波尽量小。MPC控制下的直流电压有一定脉动频率为300Hz6脉波整流对应6倍工频这是正常现象。纹波大小和电容参数直接相关电容越大纹波越小。我的模型在满载工况下电压纹波大概在正负5V以内符合预期。4.2 动态响应负载突变与参考值阶跃动态响应是MPC一个重要的卖点。我在仿真中做了两类测试。第一类是参考电压阶跃实验。启动时直流电压参考设为600V在t0.3s时阶跃到650V观察直流电压的跟踪过程和输入电流的变化。MPC控制下电压响应很快约在几十毫秒内完成新参考值的跟踪超调量比较小。这个过程的响应时间和电压外环PI参数有关需要配合调整。第二类是负载突变实验。运行到0.4s时突然切除一半负载并联电阻从36Ω改为72Ω观察直流电压的瞬时变化和恢复过程。我的模型中电压跃升约20V然后大约在50ms内恢复到设定值。输入电流会同步减小整个过程基本没有振荡。对比传统PI双闭环方案MPC的动态恢复时间可以减少30%到50%这是这类算法很明显的优势。在实际做对比验证时建议同一套主电路参数分别跑PI控制和MPC控制把动态波形放在同一个Scope里对比能从视觉上直观感受两种策略的差异。4.3 常见问题与排查思路仿真过程中我遇到过不少问题其中几个典型的分享一下排查思路。问题一MATLAB Function运行报错“Input data type mismatch”或“Output data type mismatch”。这种通常是函数块输入信号的类型不匹配Simulink默认信号类型是double但也可能有布尔信号或整型信号混入。解决办法是在函数块里使用“Ports and Data Manager”把每个输入输出端的类型统一设置为double。问题二电流波形发散仿真直接报错。这通常是循环逻辑写错了或者开关状态计算出来的电压和实际测量不一致。先检查电源、电感的连接极性是否正确再检查函数块里坐标变换公式的符号。最有效的排查方式是把台架逐段跑通先不接MPC直接用固定开关信号测试主电路是否正常然后再接入MPC控制。问题三直流电压充电缓慢启动时间太长。因为启动阶段输出电阻没有限制电容充电电流过大可能导致过流保护或者仿真速度慢。常见做法是加一个预充电电阻分两步启动——先串电阻充电等电容电压接近参考值后切到直接供电模式。在仿真里可以简化为用Breaker模块或者直接用一个时变电阻代替。问题四THD分析结果不准。使用Powergui的FFT分析工具时要保证分析的波形窗口包含完整的整数个周期一般从t0.1s往后选0.2秒的数据进行分析。离散步长如果过大FFT结果的频谱会混叠建议把仿真步长设置为控制周期的百分之一量级。我还遇到过Simulink版本兼容性问题。比如R2023b里有些模块在R2020a中不可用建议在模型搭建时留意MATLAB版本用比较通用的模块。分享模型给别人跑的时候要把MATLAB的版本信息一并说明否则换版本后模块名称变化会让大家重新找模块浪费时间。5. 进一步扩展与工程落地思考5.1 权重系数如何整定如果代价函数不止电流控制一项比如还加入了开关频率限制或中点电位平衡就面临权重系数整定问题。这个在MPC里没有通用的解析公式一般都是经验优先加仿真验证。我的做法是先把电流跟踪项的权重设为1其他项从0开始逐步增大观察每增大一个数量级对波形的影响找到性能拐点。举个例子如果加了开关频率限制项权重过小时起不到限制作用权重过大则电流波形明显畸变。这时候就需要找到一个折中值我通常先做多组仿真扫描把不同权重下的THD和开关频率记录成表格再从中选一组工程上可接受的参数。5.2 数字实现中的延时补偿前面讲的是理想情况但实际数字控制器执行MPC需要时间从采样到计算再到输出PWM脉冲有一个控制周期甚至更长的延时。如果在算法中不考虑这个延时系统的相位裕度会降低严重时会出现振荡。工程上常用的方法是两步预测在当前周期先预测k1时刻的状态再基于k1时刻继续预测k2时刻然后用k2时刻的状态代入代价函数选择出的最优开关状态在下一个周期输出。这个改进在MATLAB仿真里很容易实现只需要把函数块里的预测逻辑多迭代一次。加了延时补偿后仿真波形在高采样频率下的稳定性和动态响应会明显变好。5.3 从仿真走向实验台的几条心得仿真模型验证OK之后如果想迁移到实际DSP或FPGA平台上有几个需要特别注意的地方。首先是采样和执行的时序。仿真里MATLAB Function是理想化的实时运行时必须精确控制ADC采样时刻、计算时刻和PWM更新时刻的时序关系。建议在DSP中使用PWM下溢中断触发ADC采样然后在中断服务函数中执行MPC算法最后更新PWM比较寄存器。其次是模型参数的准确辨识。仿真参数是我们自己设置的但实际系统的电感值和电阻值需要通过离线测试来测量可以用LCR表测量电感同时测一下线路电阻和死区效应带来的等效电阻。最后是开关器件的非理想特性。仿真的IGBT模型是理想的实际IGBT有导通压降、开关时间、死区时间这些都会影响电流波形和THD。建议仿真阶段就把死区时间加入到PWM驱动逻辑里看看它对控制效果的影响有多大提前做到心中有数。项目做完回头总结模型预测控制在三相整流器上的应用核心价值在于它把“控制问题”变成了“优化问题”让工程师可以用更直观的方式调整控制目标。用MATLAB/Simulink做仿真验证是理解这个算法最快、风险最低的途径。我个人的建议是先把带电压外环和MPC电流控制的完整模型跑通再逐步加入延时补偿、权重系数优化这类改进项循序渐进每一步都有清晰的波形结果做支撑。这样无论是做研究还是做工程都能把模型预测控制吃得更透。
返回列表