ARTICLE DETAIL

资讯详情

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

三相PWM整流器有限集模型预测直接功率控制仿真全解析

三相PWM整流器有限集模型预测直接功率控制仿真全解析 简介三相PWM整流器是储能变流器、风力发电并网、直流充电桩等工业场景中的核心功率变换环节其控制策略直接决定了系统的动态响应与电能质量。有限集模型预测直接功率控制FCS-MPC-DPC通过枚举整流器全部开关状态利用离散化预测模型估算下一时刻的有功、无功功率并以价值函数最小化为准则直接输出最优开关信号省去了传统PI内环与调制器显著降低了参数整定难度同时提升了负载突变时的响应速度。在Simulink环境中搭建该仿真模型时需要重点处理坐标变换系数、功率递推公式、权重系数选择以及采样周期等关键细节并可通过斜坡参考电压、输出限幅等手段改善启动冲击。该方案尤其适用于对动态性能要求较高、需要快速验证新型算法的并网变流器设计也为后续硬件移植与工程实现提供了可靠依据。 做电力电子仿真的人对“三相PWM整流器”这几个字应该都不陌生。这类拓扑在储能变流器、风力发电变流器、直流充电桩前端、有源电力滤波器里到处都是而它的控制策略从传统的电压定向矢量控制到直接功率控制再到这几年特别火的有限集模型预测直接功率控制每一步升级本质上都在解决同一个问题怎样让系统响应更快、电流质量更好、算法又足够简单到能在真实控制器上跑起来。今天想把这个“三相PWM整流器有限集模型预测直接功率控制仿真模型”完完整整拆开讲一遍包括原理、建模步骤、参数计算、Simulink搭建细节以及我自己调试时踩过的一些坑适合刚接触模型预测控制的同学也适合想快速在仿真里验证新算法、后面还要做硬件移植的工程师参考。很多人在查这个方向时会看到“有限集”“模型预测”“直接功率控制”三个词被捏在一起但不太清楚它们各自负责什么。先给个最简单的心智模型三相PWM整流器有8种开关状态对应7个不同的电压矢量有限集就是把所有的开关状态都枚举出来模型预测就是用整流器的数学模型把每种开关状态下的下一时刻功率都算一遍直接功率控制就是控制目标不选电流、也不选电压而是直接盯住有功功率和无功功率。四个词拼起来就是一个“把所有可能开关状态都算一遍挑选最接近功率指令的那一个直接输出开关信号”的控制算法。这套东西听起来有点绕但实际搭建起来核心代码量很小而且效果很直观。1. 这个模型到底在解决什么问题1.1 三相PWM整流器的工程地位与痛点三相PWM整流器也叫VSRVoltage Source Rectifier在工业里的存在感非常高。传统变频器前级如果只用不控整流或相控整流网侧会产生非常大的谐波而且功率因数低能量也不能回馈。三相PWM整流器能实现网侧电流正弦、单位功率因数、直流电压稳定还能让能量双向流动所以高端变频器、储能变流器、风电变流器基本都离不开它。但控制这种拓扑并不简单。我最早接触它时用的还是最传统的双闭环控制外环是直流电压环内环是电流环通过SVPWM调制输出开关信号。这种方案稳定可靠、开关频率固定但有一个让人头疼的问题——PI参数多整定周期长。调完电流环再看电压环动不动就要反复试好几次而且负载一旦突变直流电压的动态响应总是慢半拍。这种体验做过传统矢量控制仿真的朋友应该都懂。后来接触到直接功率控制DPC和模型预测控制MPC才意识到困扰我的“PI参数整定”和“动态响应慢”这两个痛点其实有另一种解法。直接功率控制把控制对象从电流换成瞬时功率模型预测控制把“误差调节”变成“预测枚举”两者结合后连调制器都不需要了控制逻辑一下子清爽很多。1.2 为什么不直接上传统DPC而要选FCS-MPC-DPC直接功率控制“Direct Power Control”最初其实是用查表法的就像直接转矩控制一样先判断有功无功误差符号再结合电网电压矢量位置查开关表。查表法结构简单、动态快但开关频率不固定而且表格设计依赖经验换一个工况就得重新核对逻辑。而有限集模型预测直接功率控制FCS-MPC-DPC的思路更直接不是查表而是把所有可能的开关状态逐个“算一遍”用预测模型算它们各自下一时刻的功率最后选误差最小的那组开关状态。我把三种方案放在一起对比过各自的定位非常清晰控制方案内环调节器调制器动态响应参数整定难度开关频率电压/电流双闭环SVPWM两个PI需要慢高固定传统查表DPC无不需要快中低不固定FCS-MPC-DPC无不需要快低不固定从表格可以看出来FCS-MPC-DPC最大优势是既突破了PI内环的调参负担又比传统查表法更容易迁移到不同工况。因为它是“由数学模型驱动”而不是“由经验表格驱动”的换一套电网参数只需更新模型参数不用重新设计开关逻辑。1.3 这套方案有哪些不能回避的短板不过在选题之前我也想把它的短板说清楚免得有人照着做完仿真满怀信心去搞硬件结果一上电就懵。第一FCS-MPC-DPC的开关频率不固定。因为没有调制器功率器件会在不同时刻随机动作谐波频谱比较分散EMI滤波器设计难度比固定开关频率方案高。第二它对采样和计算延迟非常敏感。控制算法从采样到输出开关信号需要时间如果忽略这一拍延迟预测模型和实际系统对不上轻则电流畸变重则系统发散。第三枚举计算量虽然不大但在低端单片机上跑还是吃力一般需要DSP或FPGA。第四预测模型依赖电感参数电感不准会导致有功无功之间存在耦合影响控制精度。所以这套方案适合什么场景适合对动态响应要求高、控制平台算力充足、并且愿意花时间处理EMI问题的场合也特别适合做控制算法验证和技术原型展示。如果只是想快速做一个固定开关频率、便于工业量产的设计那用SVPWMPI可能更省心。仿真模型的最大价值就是让你在动手做硬件之前把这些权衡看得明明白白。2. 核心原理拆解从数学建模到预测器输出2.1 三相PWM整流器的数学模型怎么建做FCS-MPC-DPC不需要像传统矢量控制那样非要在dq旋转坐标系里建模型反而在αβ静止坐标系里最方便因为直接功率控制的功率计算天然就在αβ坐标系里完成。三相电网电压和整流器桥臂电压经过Clarke变换后得到αβ轴分量。忽略电网电压畸变、假设三相平衡整流器交流侧电压方程可以写成eα Ls·diα/dt Rs·iα uαeβ Ls·diβ/dt Rs·iβ uβ这里eα、eβ是电网电压的αβ分量uα、uβ是整流器桥臂输入电压的αβ分量Ls是网侧电感Rs是网侧等效电阻。uα、uβ的值由直流母线电压Udc和当前开关状态共同决定每个开关组合对应一组uα、uβ这直接构成了“有限集枚举”的基础。瞬时功率的定义则是P 3/2·(eα·iα eβ·iβ)Q 3/2·(eα·iβ - eβ·iα)注意这里我用的系数是3/2前提是用了等幅值Clarke变换。如果你在仿真里改用了等功率变换系数会变成1这一点很多初学的人会弄混最后导致功率数值全部偏大50%调来调去以为算法有问题其实就是坐标变换系数不统一。2.2 功率预测怎么递推离散化怎么做FCS-MPC-DPC的预测器不是直接预测电流而是预测功率。把上面的电压方程和功率定义联立可以用电网电压、桥臂电压、当前功率和电网角频率推导出有功无功的变化率。有功功率和无功功率对时间的导数近似可以写成dp/dt ≈ (1/Ls)·[eα² eβ² - (uα·eα uβ·eβ)] - ω·Q - (Rs/Ls)·Pdq/dt ≈ (1/Ls)·[eα·uβ - eβ·uα] ω·P - (Rs/Ls)·Q这个式子看起来复杂但每一项物理意义都很明确。第一项是电网电压和桥臂电压之间相互作用产生的功率变化率是主驱动力第二项是功率之间的交叉耦合本质上来自电感储能和电网频率第三项是电阻带来的功率衰减。实际做仿真时Rs往往很小电阻项有时候可以忽略但保留它并不会增加多少计算量反而会让预测更稳。离散化采用最简单的一阶欧拉法P_{pre}(k1) P(k) Ts·dp/dtQ_{pre}(k1) Q(k) Ts·dq/dt这里的Ts就是控制周期也是仿真里的采样周期。有了这两条递推式我们就有了预测能力在k时刻针对每一种开关状态都能算出k1时刻的有功无功预测值。2.3 价值函数设计与权重系数的门道有了8个开关状态的预测功率怎么选最优的那个靠价值函数Cost Function来打分。最基础的价值函数形式是J (P_ref - P_{pre}(k1))² λ·(Q_ref - Q_{pre}(k1))²P_ref是有功功率参考值一般由直流电压外环给出Q_ref是无功功率参考值单位功率因数工况下通常设为0。λ是有功和无功的权重系数也是做这个仿真时最需要花时间调的东西。说实话λ的取值在不同论文里差别很大。有直接取1的有取0.5的有根据功率基数归一化的。我在仿真里比较推荐的做法是先不急着拍脑袋给λ而是把P和Q各自除以一个基准功率比如用额定视在功率Sn作为基准J ((P_ref - P_{pre})/Sn)² λ·((Q_ref - Q_{pre})/Sn)²这样处理后λ的调整范围会更稳定一般落在0.5到2之间。如果只关心有功控制可以把λ调得很小比如0.1让系统优先保证有功跟踪无功约束放松如果要做功率因数控制就保持λ在1附近让两者平等竞争。这里还有一个很容易被忽略的细节P_ref的符号方向。整流器的默认功率流向是电网向直流侧送电所以P_ref一般为正。如果后期你要把模型改成逆变器并网P_ref的符号要相应变化否则直流电压会失控。3. 仿真模型搭建从空模型到能跑通的算例3.1 主电路参数选择与计算逻辑搭建Simulink模型之前先把主电路参数定下来。我习惯用一组比较有代表性的参数方便后面和文献结果对比也方便扩展到不同功率等级。参数数值说明电网相电压有效值220V对应幅值约311V电网频率50Hz工业标准频率网侧电感Ls5mH兼顾滤波和动态响应网侧电阻Rs0.1Ω实际线路等效电阻直流母线参考电压600V高于电网线电压峰值即可直流母线电容C2200μF支撑直流电压和抗负载扰动负载电阻Rload20Ω对应约18kW功率采样/控制周期Ts20μs对应约50kHz采样频率这些参数不是随手写的。直流母线电压为什么取600V而不是400V因为三相380V线电压的峰值是537V左右PWM整流器是升压型拓扑母线电压必须高于电网线电压峰值留出一定裕量后取600V比较合理。电感5mH对应的电感电流纹波和动态响应是比较平衡的选择太小则谐波大太大则动态响应慢电容2200μF能保证在负载突变时母线电压跌落不至于太夸张。3.2 Simulink主电路搭建步骤Simulink里建这个模型我一般按以下几步来第一步放电源。用Simscape Electrical里的Three-Phase Voltage Source或者直接用三个单相交流电压源注意幅值设置成311V而不是220V因为那是相电压幅值有效值220V×√2≈311V。第二步接电感电阻。网侧每相串联一个Rs和一个Ls组成交流侧滤波阻抗。整流器的工作特性很大程度由电感决定所以这里的电感参数必须和控制器里写到的Ls保持一致否则会出现模型失配。第三步放整流桥。用Universal Bridge模块Power Electronics器件类型选IGBT/Diode桥臂数为3。这样它就组成一个典型的三相两电平电压型PWM整流器开关信号由外部控制。第四步接直流侧。整流桥输出端并联一个直流母线电容C再接负载电阻Rload。电容两端加一个电压测量模块用来给电压外环提供反馈。第五步接测量和坐标变换。采集电网电压和网侧电流经过Clarke变换模块或自己写函数得到eα、eβ和iα、iβ。这两组信号是控制器的输入。搭建时最容易出的问题是三相电源的中性点接法。如果电网侧不需要零线最好把三个电源星形连接并把中性点处理好否则仿真会出现不必要的奇异电压导致电流波形莫名其妙地不对称。3.3 控制算法核心代码与接线控制部分的实现我用的是MATLAB Function模块。把整个FCS-MPC-DPC算法封装成一个函数输入是eα、eβ、iα、iβ、Udc、P_ref、Q_ref输出是三个开关信号。核心代码思路如下function [sw_a, sw_b, sw_c] fcs_mpc_dpc(e_alpha, e_beta, i_alpha, i_beta, Udc, P_ref, Q_ref, Ts, Ls, Rs, w) % 计算当前瞬时功率 P 1.5 * (e_alpha * i_alpha e_beta * i_beta); Q 1.5 * (e_alpha * i_beta - e_beta * i_alpha); % 定义8种开关状态对应的桥臂电压(三相)和开关组合 % 开关状态表: [sa, sb, sc] switches [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 1 1]; lambda 1.0; % 有功无功权重系数 % 初始化解 J_min inf; best_idx 1; for i 1:8 sa switches(i,1); sb switches(i,2); sc switches(i,3); % 桥臂输出相电压(相对于直流母线负端) ua Udc * (2*sa - sb - sc) / 3; ub Udc * (-sa 2*sb - sc) / 3; uc Udc * (-sa - sb 2*sc) / 3; % Clarke变换得到u_alpha, u_beta u_alpha (2*ua - ub - uc) / 3; u_beta (ub - uc) / sqrt(3); % 功率变化率 dp_dt (1/Ls) * (e_alpha^2 e_beta^2 - u_alpha*e_alpha - u_beta*e_beta) ... - w*Q - (Rs/Ls)*P; dq_dt (1/Ls) * (e_alpha*u_beta - e_beta*u_alpha) ... w*P - (Rs/Ls)*Q; % 预测下一时刻功率 P_pred P Ts * dp_dt; Q_pred Q Ts * dq_dt; % 价值函数 J ((P_ref - P_pred)/P_ref)^2 lambda * ((Q_ref - Q_pred)/P_ref)^2; if J J_min J_min J; best_idx i; end end sw_a switches(best_idx, 1); sw_b switches(best_idx, 2); sw_c switches(best_idx, 3); end代码本身并不长但有几个关键点需要注意。第一桥臂电压的计算用的是“相电压等效”而不是直接除以2因为整流器的三个桥臂电位是相互耦合的必须通过公式换算成相对电网中性点的相电压。第二价值函数里我用P_ref做归一化基数如果你的P_ref可能接近0比如空载启动那这里会出除零问题更稳妥的做法是用额定功率或固定常数做归一化基数。第三输出开关信号和Universal Bridge的门极信号之间要在Simulink里加一个很小的延迟模块比如Unit Delay模拟数字控制的执行延迟不加也能跑通但硬件移植时会发现波形对不上。MATLAB Function模块之外还需要一个P_ref生成环节。我是用一个直流电压外环来实现的典型PI控制器输入是Udc_ref和Udc的误差输出是有功功率参考值P_ref。这样整个系统就形成了一个完整的闭环电压外环采用PI功率内环采用FCS-MPC既保留了MPC的动态优势又保证了直流母线电压的稳态精度。3.4 结果怎么看典型波形与参考点仿真设置可以这样安排总时长0.4s在0.15s时把负载从30Ω切到15Ω观察动态响应在0.25s时把无功参考从0突变为一个给定值验证无功控制能力。正常的仿真结果应该能看到几个特征。启动阶段直流母线电压从0逐渐建立到600V经过快速调节后稳定稳态时网侧电流波形接近正弦和电网电压同相位单位功率因数有功功率P稳定在负载对应值附近无功Q在0附近小幅波动。动态阶段负载突变后有功功率快速跟上新负载直流母线电压短暂跌落后在几个毫秒内恢复这个恢复速度明显比传统PI双闭环快。如果你看到的波形是启动后电压过冲很大、或者电流波形扭曲严重那大概率不是MPC算法本身的问题而是要往下看第四节里的调试细节了。3.5 进阶玩法把仿真结果放进GUI界面用App Designer管理参数模型跑通以后如果要做汇报、教学演示或者给组里其他人用一个很实用的扩展是用MATLAB App Designer做一个参数化操作界面。这个思路也是最近仿真圈子里问得比较多的方向Simulink模型怎么和GUI界面无缝联动仿真结果怎么直接显示在界面上。我常用的方法很直接。在App Designer的界面里放几个编辑框分别代表电网电压、电感、电容、参考电压、采样周期等参数再放一个“运行仿真”按钮一个坐标区用于显示波形。按钮回调里的核心逻辑是这样的function RunButtonPushed(app) % 把GUI参数写入基工作区 assignin(base, Ls, str2double(app.LsEditField.Value)); assignin(base, Udc_ref, str2double(app.UdcRefEditField.Value)); assignin(base, Ts, str2double(app.TsEditField.Value)); assignin(base, Rload, str2double(app.RloadEditField.Value)); % 调用Simulink模型 simOut sim(fcs_mpc_dpc_model, StopTime, app.StopTimeField.Value); % 从仿真输出对象中取数据并绘制 data simOut.get(scope_data); plot(app.UIAxes, data.Time, data.Udc, LineWidth, 1.2); grid(app.UIAxes, on); xlabel(app.UIAxes, 时间 (s)); ylabel(app.UIAxes, 直流母线电压 (V)); end用这种方式模型本身不嵌入App界面而是通过sim命令从外部调用参数通过assignin传到模型工作区仿真结果通过输出对象拿回来再在坐标区里刷新显示。这样做的好处是模型和界面解耦改界面不影响模型改模型不用动界面。如果只是想做一个“参数面板波形窗口”的演示工具这套做法足够用而且比之前很多人用的set_param回调方式更简洁也不容易出现回调函数权限问题。4. 调参与排雷我在仿真中踩过的坑4.1 采样周期与预测精度的矛盾刚开始做这个模型时我为了图省事把Ts设置成了100微秒结果仿真跑起来以后发现两个问题一是功率预测的离散误差变大稳态时电流波形上有明显的低频抖动二是负载突变的瞬间直流母线电压振荡很厉害恢复时间也变长。后来把Ts压到20微秒一切都正常了。这个现象背后的道理很简单FCS-MPC-DPC是靠离散递推公式做预测的Ts越小欧拉离散的误差越小预测越接近真实系统。但Ts也不是越小越好因为控制器执行枚举计算需要时间你在仿真里可能感觉不到硬件上如果Ts太短算法根本跑不完。我个人的经验值是三相两电平FCS-MPC-DPC的Ts在10微秒到50微秒之间比较合理。如果芯片性能一般选20-50微秒如果芯片性能好比如跑在高主频DSP上可以选10-20微秒动态性能会有明显改善。4.2 为什么功率纹波那么大权重和滤波怎么处理有朋友第一次跑完仿真盯着P和Q的波形问我为什么有功功率纹波这么大这其实是FCS-MPC-DPC的天然特性。传统SVPWM有调制器能在一个控制周期内精确合成任意矢量而有限集方法一个周期里只能输出一个固定开关状态8个状态对应的电压矢量是离散的功率纹波自然比连续调制方案大。如果你的应用对功率纹波敏感有两个改进方向。一个是在价值函数里把功率误差之外的约束项加上去比如增加开关切换次数惩罚项让开关动作更收敛但代价是动态响应变慢。另一个是多矢量FCS-MPC把一个控制周期拆分成两段或三段分别作用两个不同的电压矢量这样等效电压矢量更精细纹波明显减小。代价是枚举次数从8次变成几十次甚至上百次计算压力陡增。4.3 启动冲击和直流过冲问题这个坑几乎每个人都踩过。仿真启动的一瞬间直流母线电容两端电压从0开始建立而外环PI看到的是参考电压600V减去实际电压误差非常大输出P_ref直接打到饱和导致启动瞬间网侧电流冲击很大有时候甚至会超过额定电流好几倍。解决思路有几个可以单独用也可以配合用。第一给电压外环输出加限幅把P_ref限制在合理范围内比如额定功率的1.2倍。第二把参考电压设成一个斜坡信号从400V开始经过0.05秒爬升到600V这样P_ref不会一直在饱和区。第三在电压外环积分环节加积分限幅防止积分器饱和太深导致后续收敛慢。我实测下来最简单有效的是“斜坡参考电压输出限幅”组合启动电流可以控制在额定电流的1.5倍以内直流电压过冲也能压缩到5%以内。4.4 从整流器到逆变器风力发电并网仿真里的扩展思路做完这个三相PWM整流器模型后很多人会自然地想到一个问题这套算法能不能用到风力发电并网仿真里答案是能而且思路很顺。风力发电变流器大多是背靠背结构机侧变流器负责最大功率跟踪控制网侧变流器负责把直流母线能量馈送到电网。网侧变流器本质上就是一个PWM整流器只是功率流向反转了从“吸收有功”变成“发出有功”。我之前做风力发电并网仿真时就是直接复用了这套FCS-MPC-DPC控制结构把P_ref改为负值代表向电网输出有功Q_ref设为0代表单位功率因数并网。仿真结果表明直流母线电压稳定网侧电流正弦度好动态响应也很快。唯一要注意的是风机出力波动时P_ref变化可能比较剧烈需要在前端加一个斜率限制否则过快的功率指令变化会让直流母线电压产生明显波动。如果再往后走一步把两电平拓扑升级成NPC三电平整流器FCS-MPC的核心思想依然不变只是开关状态从8个变成27个电压矢量更丰富功率纹波会更小。我自己的体会是把两电平FCS-MPC-DPC彻底搞透之后再去看多电平的模型预测控制基本就是一通百通的事。本文还有配套的精品资源点击获取
返回列表