基于双模式MPC的三相并网逆变器闭环控制与仿真

基于双模式MPC的三相并网逆变器闭环控制与仿真
最近在做一个三相并网逆变器的控制项目反复在电流控制与功率控制之间切换需求既要压住并网电流谐波又要能快速响应有功无功调度指令。查了一圈资料传统 PI 双闭环虽然成熟但参数整定繁琐动态响应受限模型预测控制MPC结构直观、动态性能好配合 Simulink 仿真验证非常适合这类非线性、强耦合的电力电子控制场景。这篇文章围绕“基于电流-功率双模式 MPC 的三相并网逆变器闭环控制策略”展开包含 MPC 原理说明、电流模式与功率模式两种代价函数设计、Simulink 仿真模型搭建思路、Matlab 核心代码实现以及我在调试过程中遇到的高频问题。适合刚接触模型预测控制的电力电子方向研究生也适合做新能源并网工程仿真验证的工程师。1. 背景与核心概念1.1 为什么用 MPC 控制三相并网逆变器三相并网逆变器是将直流侧电能转化为与电网同频同相的交流电能的关键装置广泛应用于光伏并网、储能变流器、风电变流器等领域。它的控制目标通常包括输出电流跟踪参考电流、控制有功功率和无功功率、保证并网电流谐波满足要求、维持直流母线电压稳定。传统控制方案以 PI 双闭环控制为主内环控制电流外环控制直流电压或功率。PI 参数整定依赖工作点当电网阻抗变化、负载突变或电网电压跌落时控制性能可能下降。而模型预测控制不依赖精确的开关调制策略它利用系统的离散数学模型在线预测未来多个控制周期的输出通过最小化代价函数直接选择最优的开关状态。在并网逆变器控制中MPC 的突出优势体现在动态响应快速适合电流突变和功率阶跃场景不需要调制器和 PWM 生成环节开关状态直接由代价函数优化得到多约束和多目标容易处理例如限制开关频率、限制电流幅值对系统参数变化有一定的鲁棒性。1.2 什么是“电流-功率双模式”控制在实际并网工程中逆变器可能面对两种不同的控制需求。电流模式控制是最常见的方式核心目标是让并网电流精确跟踪参考电流适用于电流源型控制结构例如底层电流内环、上层功率外环或者电压外环。并网电流的质量直接决定了电能质量。功率模式控制则直接以有功功率和无功功率作为控制目标外环指令通常来自电网调度系统或者上层能量管理系统例如要求变流器按照指令发送 P10kW、Q0kVar。功率模式下MPC 可以直接预测有功无功的演变趋势而不需要先把功率指令转换为电流指令再做跟踪。所谓双模式就是在同一个 MPC 框架下设计两套预测模型和代价函数电流模式跟踪电流误差功率模式跟踪功率误差并且根据需要切换控制模式。这样既保留了电流模式在限流、动态响应上的优势又发挥了功率模式在调度响应上的直观性。1.3 本文实现的总体方案本文采用的总体控制结构如下对三相并网逆变器进行 Clarke 变换把 abc 三相变量转换到 αβ 两相静止坐标系建立逆变器输出电流的离散预测模型基于有限控制集FCS-MPC遍历逆变器 8 种开关状态设计电流模式代价函数直接跟踪 αβ 轴参考电流设计功率模式代价函数根据瞬时功率理论计算预测有功、无功跟踪功率参考值通过模式选择信号在电流控制和功率控制之间切换在 Simulink 中搭建完整闭环仿真模型用 Matlab 编写控制算法代码块。2. 系统结构与数学模型2.1 三相并网逆变器拓扑本文讨论的三相两电平并网逆变器拓扑如图中常见结构所示文字描述如下直流侧为电压源通过三相桥臂逆变后经过滤波电感 L 和等效电阻 R 接入三相电网。电网电压可以等效为三相对称电压源。滤波电感和电阻构成一阶 RL 负载模型这也是 MPC 预测模型的物理基础。在仿真中通常直接用 Simulink Simscape Electrical 或者 SimPowerSystems 模块搭建主电路控制部分用 Matlab Function 或 S-Function 实现。2.2 αβ 坐标系下的连续数学模型首先进行 Clarke 变换[ \begin{bmatrix} x_\alpha \ x_\beta \end{bmatrix} \frac{2}{3} \begin{bmatrix} 1 -\frac{1}{2} -\frac{1}{2} \ 0 \frac{\sqrt{3}}{2} -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} x_a \ x_b \ x_c \end{bmatrix} ]其中 (x) 可以代表电压或电流。在 αβ 坐标系下并网逆变器的动态方程为[ L \frac{di_\alpha}{dt} v_\alpha - e_\alpha - R i_\alpha ][ L \frac{di_\beta}{dt} v_\beta - e_\beta - R i_\beta ]其中(v_\alpha, v_\beta) 是逆变器输出电压的 αβ 分量由直流母线电压和当前开关状态决定(e_\alpha, e_\beta) 是电网电压的 αβ 分量(i_\alpha, i_\beta) 是并网电流的 αβ 分量(R) 是滤波电感等效串联电阻(L) 是滤波电感值。2.3 离散化预测模型MPC 需要在离散域内预测未来电流本文使用一阶前向欧拉法对连续方程进行离散化。设采样周期为 (T_s)则[ \frac{di}{dt} \approx \frac{i(k1) - i(k)}{T_s} ]代入连续方程后得到[ i_\alpha(k1) \left(1 - \frac{R T_s}{L}\right) i_\alpha(k) \frac{T_s}{L} \left[ v_\alpha(k) - e_\alpha(k) \right] ][ i_\beta(k1) \left(1 - \frac{R T_s}{L}\right) i_\beta(k) \frac{T_s}{L} \left[ v_\beta(k) - e_\beta(k) \right] ]注意在实际控制中由于信号采集、计算和开关动作存在延迟通常还需要一拍延迟补偿本文在 4.3 节代码中会体现。2.4 有限控制集与开关状态三相两电平逆变器共有 6 个开关管上桥臂和下桥臂互补导通因此一共有 (2^3 8) 种开关组合对应 8 个电压矢量其中包括 6 个有效电压矢量和 2 个零矢量。设三相开关状态为 (S_a, S_b, S_c)取值为 1 表示上桥臂导通0 表示下桥臂导通。逆变器输出相电压为[ v_{aN} S_a V_{dc},\quad v_{bN} S_b V_{dc},\quad v_{cN} S_c V_{dc} ]经过 Clarke 变换后得到 αβ 坐标系下的电压矢量。FCS-MPC 的核心思想就是在每个采样周期内根据当前测量值依次代入 8 种开关状态对应的电压矢量预测下一拍电流或功率计算代价函数选择使代价函数最小的开关状态输出。3. 电流模式 MPC 与功率模式 MPC 的设计3.1 电流模式 MPC 的代价函数设计电流模式 MPC 的目标是让并网电流跟踪参考电流。最直接的代价函数是[ g_i \left| i_\alpha^(k1) - i_\alpha(k1) \right| \left| i_\beta^(k1) - i_\beta(k1) \right| ]考虑到实际系统中可能存在开关频率约束、电流限幅约束可以增加惩罚项。例如[ g_i \left| \Delta i_\alpha \right| \left| \Delta i_\beta \right| \lambda_{sw} \cdot n_{sw} ]其中 (n_{sw}) 表示当前开关状态与上一拍开关状态之间发生切换的开关次数(\lambda_{sw}) 是权重系数。增加该惩罚项可以降低平均开关频率减少开关损耗但会略微削弱动态性能。电流模式适合下列场景并网电流质量要求高需要严格限制 THD低电压穿越或故障条件下需要限流外环控制器输出本身就是电流指令。3.2 功率模式 MPC 的代价函数设计功率模式以有功功率 P 和无功功率 Q 为控制目标。根据瞬时功率理论在 αβ 坐标系下[ P \frac{3}{2} \left( e_\alpha i_\alpha e_\beta i_\beta \right) ][ Q \frac{3}{2} \left( e_\beta i_\alpha - e_\alpha i_\beta \right) ]对应地可以用预测电流 (i_\alpha(k1), i_\beta(k1)) 计算预测功率[ P(k1) \frac{3}{2} \left( e_\alpha(k1) i_\alpha(k1) e_\beta(k1) i_\beta(k1) \right) ][ Q(k1) \frac{3}{2} \left( e_\beta(k1) i_\alpha(k1) - e_\alpha(k1) i_\beta(k1) \right) ]功率模式代价函数为[ g_p \left| P^(k1) - P(k1) \right| \left| Q^(k1) - Q(k1) \right| ]也可以对不同目标赋予权重例如优先控制有功或优先控制无功。功率模式适合下列场景上层调度直接下发有功无功指令储能变流器参与电网调频调压并网系统需要快速平滑调整输出功率。3.3 双模式切换逻辑双模式切换可以采用外部使能信号。例如信号 mode0 表示电流模式mode1 表示功率模式。切换逻辑的建议正常运行且功率指令明确时使用功率模式检测到过流风险或需要快速限流时切换为电流模式并将参考电流限制在安全范围内并网启动阶段建议使用电流模式避免直接控制功率导致冲击电流两种模式共用同一个预测模型只切换代价函数部分降低算法复杂度。在 Simulink 中可以通过一个 Step 信号或者手动开关模拟模式切换观察切换瞬间的电流和功率动态过程。4. Matlab 代码与 Simulink 模型实现4.1 环境准备与版本说明本文仿真示例基于 Matlab/Simulink 环境需要安装 Simscape Electrical 或 SimPowerSystems 工具箱不同 Matlab 版本中名称可能略有不同。本文代码为通用示例版本需要根据你的项目实际情况调整重点演示控制算法实现思路。仿真主电路部分由 Simulink 模块搭建控制算法通过 Matlab Function 模块编写。如果你手头没有 Simscape Electrical也可以使用纯 Simulink 基础模块结合受控电压源搭建简化模型。4.2 Simulink 模型总体结构整体仿真模型可以用如下结构描述直流电压源模拟直流侧母线电压三相两电平桥Universal Bridge 模块选择 IGBT/Diodes 类型滤波电感与等效电阻串联在桥臂输出与电网之间三相电网电源Three-Phase Source 模块测量模块测量电网电压、并网电流、直流母线电压控制算法模块Matlab Function 实现 MPC 算法模式切换信号Step 或者手动开关示波器 Scope观察电流、功率、开关状态。需要注意三相电网电源、桥式电路和测量模块需要共地否则仿真可能出现奇异解。4.3 电流模式 MPC 核心代码下面给出 Matlab Function 模块内的核心代码示例。该函数输入为当前采样时刻的电流、电网电压、直流母线电压、参考电流和上一拍开关状态输出为最优开关状态。function [Sa, Sb, Sc] mpc_current_mode(i_alpha, i_beta, e_alpha, e_beta, Vdc, i_ref_alpha, i_ref_beta, Ts, R, L, last_state) % 电流模式 FCS-MPC 核心函数 % 输入 % i_alpha, i_beta 当前并网电流 alpha/beta 分量 % e_alpha, e_beta 当前电网电压 alpha/beta 分量 % Vdc 直流母线电压 % i_ref_alpha, i_ref_beta 参考电流 alpha/beta 分量 % Ts 采样周期 % R, L 滤波电感和等效电阻 % last_state 上一拍最优开关状态用于开关频率约束 % 输出 % Sa, Sb, Sc 三相开关状态 % 开关状态表每一行对应一种开关组合 [Sa Sb Sc] sw_table [ 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 0.0; % 初始化最优值 g_opt 1e10; opt_switch 0; % 遍历 8 种开关状态 for idx 1:8 Sa_cand sw_table(idx, 1); Sb_cand sw_table(idx, 2); Sc_cand sw_table(idx, 3); % 由开关状态计算逆变器输出相电压 va Sa_cand * Vdc; vb Sb_cand * Vdc; vc Sc_cand * Vdc; % Clarke 变换得到 alpha/beta 轴电压 v_alpha (2/3) * (va - 0.5*vb - 0.5*vc); v_beta (2/3) * ((sqrt(3)/2)*vb - (sqrt(3)/2)*vc); % 预测下一拍电流 i_alpha_pred (1 - R*Ts/L) * i_alpha (Ts/L) * (v_alpha - e_alpha); i_beta_pred (1 - R*Ts/L) * i_beta (Ts/L) * (v_beta - e_beta); % 求参考电流预测值简单处理假设下一拍参考值等于当前拍参考值 i_ref_alpha_pred i_ref_alpha; i_ref_beta_pred i_ref_beta; % 开关切换次数计算 switch_count abs(Sa_cand - sw_table(last_state1, 1)) ... abs(Sb_cand - sw_table(last_state1, 2)) ... abs(Sc_cand - sw_table(last_state1, 3)); % 代价函数 g abs(i_ref_alpha_pred - i_alpha_pred) abs(i_ref_beta_pred - i_beta_pred) lambda * switch_count; % 记录最小值对应的开关状态 if g g_opt g_opt g; opt_switch idx; end end % 输出最优开关状态 Sa sw_table(opt_switch, 1); Sb sw_table(opt_switch, 2); Sc sw_table(opt_switch, 3);需要注意上面的代码示例做了简化处理参考电流预测值直接取当前参考电流实际工程中可以做一拍延迟补偿。另外Matlab Function 模块内部保存 last_state 时建议使用持久变量或者在 Simulink 层用 Unit Delay 模块保存上一拍状态。4.4 功率模式 MPC 核心代码功率模式与电流模式的区别在于代价函数部分。下面给出功率模式的预测与代价函数计算片段。function [Sa, Sb, Sc] mpc_power_mode(i_alpha, i_beta, e_alpha, e_beta, Vdc, Pref, Qref, Ts, R, L, last_state) % 功率模式 FCS-MPC 核心函数 % 输入 Pref, Qref 为有功无功参考值 sw_table [ 0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 1 1 ]; g_opt 1e10; opt_switch 0; for idx 1:8 Sa_cand sw_table(idx, 1); Sb_cand sw_table(idx, 2); Sc_cand sw_table(idx, 3); va Sa_cand * Vdc; vb Sb_cand * Vdc; vc Sc_cand * Vdc; v_alpha (2/3) * (va - 0.5*vb - 0.5*vc); v_beta (2/3) * ((sqrt(3)/2)*vb - (sqrt(3)/2)*vc); i_alpha_pred (1 - R*Ts/L) * i_alpha (Ts/L) * (v_alpha - e_alpha); i_beta_pred (1 - R*Ts/L) * i_beta (Ts/L) * (v_beta - e_beta); % 假设电网电压变化不大用当前电网电压预测功率 P_pred 1.5 * (e_alpha * i_alpha_pred e_beta * i_beta_pred); Q_pred 1.5 * (e_beta * i_alpha_pred - e_alpha * i_beta_pred); % 代价函数 g abs(Pref - P_pred) abs(Qref - Q_pred); if g g_opt g_opt g; opt_switch idx; end end Sa sw_table(opt_switch, 1); Sb sw_table(opt_switch, 2); Sc sw_table(opt_switch, 3);功率模式的优点是控制目标直接对应调度指令不需要中间经过电流指令计算。但在电网电压畸变或者不平衡时有功无功计算会受到电压质量影响需要结合实际情况增加滤波或正负序分离处理。4.5 双模式切换的 Matlab 函数双模式切换可以在 Simulink 中通过一个精简的封装函数实现。假设 mode 信号输入为 0 或 1代码结构如下function [Sa, Sb, Sc] mpc_dual_mode(mode, i_alpha, i_beta, e_alpha, e_beta, Vdc, i_ref_alpha, i_ref_beta, Pref, Qref, Ts, R, L, last_state) % 双模式 MPC 封装函数 if mode 0.5 % 电流模式 [Sa, Sb, Sc] mpc_current_mode(i_alpha, i_beta, e_alpha, e_beta, Vdc, i_ref_alpha, i_ref_beta, Ts, R, L, last_state); else % 功率模式 [Sa, Sb, Sc] mpc_power_mode(i_alpha, i_beta, e_alpha, e_beta, Vdc, Pref, Qref, Ts, R, L, last_state); end在 Simulink 中可以把 mode 信号连接到 Constant 或 Step 模块仿真过程中动态改变模式观察 MPC 输出开关状态和并网电流的动态变化。4.6 运行与验证仿真时间建议设置 0.1s 到 0.5s采样周期 Ts 取 20e-6 s 到 100e-6 s 比较合适。Ts 越小控制效果越精细但仿真速度越慢。本文示例中如果只是验证控制算法逻辑可以先取 Ts50e-6 s观察波形稳定后再逐步缩小。预期结果在电流模式下并网电流能够快速跟踪给定参考电流动态响应时间一般在几个采样周期内在功率模式下有功无功能够快速收敛到参考功率稳态时功率纹波较小双模式切换瞬间电流和功率会有短暂过渡过程但整个切换过程应保持收敛不发生发散开关状态在稳态时呈现常见的 FCS-MPC 非固定频率特征。5. 常见问题与排查思路在实际仿真和调试中最容易遇到的问题如下表所示问题现象常见原因解决思路仿真发散电流数值爆炸采样周期 Ts 过大导致离散化模型失稳减小 Ts 重新运行检查滤波电感 L 和电阻 R 是否设置合理电流波形畸变严重THD 偏高权重因子设置不当开关状态切换过于频繁增加开关频率惩罚项权重 lambda增大滤波电感功率模式稳态纹波大电压波形畸变影响瞬时功率计算对电网电压进行滤波或采用一阶低通滤波后再计算功率模式切换瞬间出现过流切换瞬间参考值突变没有限幅在参考值输入端增加斜坡函数或者限幅器切换时先切换到电流模式再改变功率指令MPC 计算时间长仿真速度慢循环遍历和浮点运算量大优化代码减少重复计算用 C MEX S-Function 替代 Matlab Function高频开关噪声明显FCS-MPC 开关频率不固定频谱分散添加开关频率约束项考虑使用调制型 MPCSimulink 启动报 LAPACK 加载错误Matlab 环境或者工具箱安装异常检查 Matlab 安装完整性重装或修复对应工具箱确认第三方库路径无误另外在调试 MPC 时可以先断开电网电压或者使用理想电压源简化系统逐步排除因为电网模型引起的异常。6. 最佳实践与工程建议6.1 采样周期与模型参数匹配采样周期 Ts 不是越小越好也不是越大越好。Ts 过大离散化误差增大系统可能不稳定Ts 过小控制算法来不及执行仿真和实际控制器都承受不了。建议从以下公式估算采样周期上限[ T_s \ll \frac{L}{R} ]同时考虑开关周期。工程中常取 Ts 在 10us 到 100us 之间。如果你做硬件在环仿真还需要考虑数字处理器的运算能力。6.2 权重因子的整定方法当代价函数中包含多个控制目标时权重因子直接决定控制的优先级。例如开关频率惩罚项权重 lambda 如果过大系统会为了降低开关频率而牺牲电流跟踪精度。整定权重因子没有统一公式常用方法先令 lambda0确认系统动态和稳态性能逐步增大 lambda观察平均开关频率下降和电流 THD 变化选择 THD 满足要求且开关频率较低的临界值如果加入电流限幅项权重应足够大确保过流时强制限幅。6.3 参数鲁棒性与在线辨识FCS-MPC 依赖系统模型的准确性尤其是滤波电感 L 的取值。实际运行时电感可能因温度、饱和而变化。如果电感误差过大会导致预测电流偏移甚至稳态误差。提高鲁棒性的常用方法代价函数中增加积分项使用扰动观测器估计模型失配项在运行过程中做参数在线辨识但需要保证辨识算法在合法、受控的环境中验证。6.4 延迟补偿问题数字控制中从采样到开关动作存在一拍延迟也就是常说的计算延迟。如果不做补偿当采样周期较大时系统可能振荡。延迟补偿的方法是假设 k 时刻采样的数据要等到 k1 时刻才作为控制量输出。因此需要先对 k1 时刻的电流进行预测再基于预测值继续预测 k2 时刻的电流最后在代价函数中比较 k2 时刻的预测值与参考值。代码中可以将预测过程执行两次。6.5 仿真与硬件实现的差异Simulink 仿真通过后并不意味着硬件实现一定顺利。MPC 在硬件实现时需要注意Matlab Function 模块在生成 C 代码时循环次数需要固定避免动态数组开关状态输出到 FPGA 或 DSP 时需要增加死区时间实际采样存在噪声建议对电流电压进行低通滤波FCS-MPC 开关频率不固定在电磁兼容和滤波器设计上要留裕量。如果考虑工程落地推荐先从简化模型仿真开始再逐步过渡到控制器硬件在环HIL测试最后再做功率级实验。任何涉及真实电气装置的实验都必须在安全的实验室条件下进行遵守相关操作规程。7. 总结与下一步学习路线本文围绕三相并网逆变器梳理了基于电流-功率双模式 MPC 的闭环控制策略。核心内容包括MPC 的基本原理、三相并网逆变器的 αβ 数学模型、电流模式和功率模式的两套代价函数设计、Simulink 仿真模型搭建思路以及 Matlab 代码实现。通过双模式切换可以同时兼顾电流动态响应和功率调度响应在某些工程场景下比单一控制模式更灵活。继续深入可以从以下几个方向展开从两电平逆变器扩展到三电平 NPC 逆变器 MPC 的开关状态数量会显著增加研究模型预测控制与 PWM 调制结合的 MPC 策略例如模型预测直接功率控制加空间矢量调制研究 LCL 滤波器的有源阻尼问题MPC 需要考虑状态变量增多带来的预测模型复杂度考虑电网不平衡或者畸变工况下的控制策略引入正负序分离或者谐波抑制目标。如果你在实践中遇到本期内容相关的调试问题建议先把采样周期调小、把权重因子清零、把参考值变化斜率放缓这三个手段通常能解决大部分发散和振荡问题。

最新新闻

日新闻

周新闻

月新闻