做光伏逆变器相关课题的同学,应该都听过一句话:“PI 调不好的地方,就试试 MPC。”这句话信息量很大,但也容易误导人。很多人打开 Simulink,找到 MPC Controller 模块拖进去,结果发现和预期完全不一样——模型跑不起来,波形乱跳,甚至不知道该把哪个信号接进去。
原因是:电力电子领域里用的模型预测控制,和教材里讲的最优控制、或 MPC Toolbox 里那种连续集 MPC,并不是同一种玩法。光伏 DC-AC 变换器里真正常说的 MPC,大多是有限控制集模型预测控制(FCS-MPC)——它不需要调制器,不输出占空比,而是直接枚举逆变器的所有开关状态,用代价函数“打分”,选一个最合适的开关组合。
这篇文章不绕弯子,直接用 Simulink 把“光伏供电 → DC-AC 变换器 → MPC 控制”这条链路拆开讲清楚。读完你会明白:MPC 控制器的内部到底在算什么;光伏系统中的 MPPT、母线电压、参考电流和 FCS-MPC 是怎么配合的;以及仿真跑出来后,怎么判断波形质量、怎么排查问题。
1. 这篇文章真正要解决的问题
光伏供电的 DC-AC 变换器,简单说就是把光伏板输出的直流电,经过逆变器变成交流电,供给负载或者并入电网。常见的控制目标是:输出电压/电流的波形质量好、动态响应快、THD(总谐波畸变率)满足标准。
传统方案是电压/电流双闭环 PI 控制,配合 SPWM 或 SVPWM 调制。这种方案足够成熟,但有两个现实问题:
第一,PI 参数整定依赖经验。在 d-q 旋转坐标系里做电流解耦时,不仅要调比例、积分系数,还要考虑前馈补偿项是否准确。光伏侧功率波动、电网电压畸变时,PI 控制容易出现动态响应慢、波形畸变的问题。
第二,PI 是“线性控制器 + 调制器”的组合,本质上是通过占空比间接控制开关管。它不能直接处理“开关频率限制”“电流过流约束”“多目标协调”这类问题。如果你想让逆变器在跟踪电流的同时,兼顾开关次数最少、或者中点电位平衡,用经典 PI 得加很多辅助回路。
MPC 的思路完全不同:它靠系统模型预测未来几个采样周期的电流行为,然后在线枚举所有可能的开关状态,选择一个让代价函数最小的状态。这个过程天然把“约束”和“多目标”放进了一个框架里。
所以这篇文章的真正价值是:
- 讲清楚 FCS-MPC 的原理和适用边界,避免你把 MPC Toolbox 的用法硬套到电力电子仿真里。
- 带你搭建完整的光伏 DC-AC Simulink 仿真链路,包括 PV 阵列、MPPT、Boost、逆变器、L 滤波器,以及核心的 MPC 控制器。
- 给出可运行的 MATLAB Function 代码,解释每个细节为什么这样写。
- 总结常见坑和调参路径,让你少走两周弯路。
如果你正在做光伏逆变器、微电网、储能变流器方向的研究,或者准备拿“MPC 替代 PI”写学术课题,这篇文章适合你。
2. MPC 基础概念:它到底在“算”什么
2.1 模型预测控制的三个关键动作
模型预测控制不是某一个固定的公式,而是一种控制思想。所有 MPC 都逃不开三个动作:
- 预测(Model):用被控对象的数学模型,根据当前采样值计算未来几个时刻的变量值。
- 优化(Optimization):构造代价函数(Cost Function),在候选控制序列中选一个让代价最小的方案。
- 反馈校正(Receding Horizon):只执行第一步的控制量,等待下一次采样后重新预测、重新优化。
用生活中的例子类比:你开车进入一段多路口路段,每到一个路口前,会先根据当前位置、车速和导航信息,预判接下来几条路哪个更快,然后选择当前最优的一条。等到了下一个路口,再重新获取位置信息,重新选择。这就是“滚动优化”的感觉。
2.2 连续集 MPC 与有限集 FCS-MPC 的区别
很多初学者在 Simulink 里找 MPC 模块,找到的是 Model Predictive Control Toolbox 提供的连续集 MPC。它的输出是连续控制量,比如占空比或电压参考,后面还需要接 PWM 调制器把控制量变成开关信号。这种 MPC 多用在慢速工业过程、温控、运动控制里,采样周期通常在毫秒级甚至更大。
但电力电子逆变器的开关频率往往是几千赫兹甚至几十千赫兹,留给控制算法的计算时间极短。这时候更适合用有限集模型预测控制(Finite Control Set MPC,FCS-MPC)。它的特点是:
- 逆变器的开关管状态是有限的(比如单相全桥有 4 种有效状态,三相两电平逆变器有 8 种状态)。
- 直接枚举每个开关状态对应的输出电压,用系统模型预测对应的电流。
- 用代价函数比较所有候选状态,选一个最好的,直接输出开关信号。
| 对比项 | 连续集 MPC(MPC Toolbox) | 有限集 FCS-MPC |
|---|---|---|
| 输出量 | 连续控制量(如电压/占空比) | 离散开关状态 |
| 是否需要调制器 | 需要(SPWM/SVPWM) | 不需要 |
| 采样周期 | 通常较慢(毫秒级) | 很快(微秒级) |
| 应用场景 | 过程控制、运动控制、温度控制 | 逆变器、整流器、多电平变换器 |
| 实现方式 | 二次规划/QP 在线优化 | 枚举所有状态,计算代价函数 |
| 在 Simulink 里的位置 | MPC Toolbox 模块 | MATLAB Function / S-Function 手动实现 |
从这张表能看出:电力电子里的 FCS-MPC 虽然也叫 MPC,但实现逻辑非常简单直接——甚至不需要任何优化工具箱,用 for 循环枚举状态就行。这也正是它在变换器控制中流行的原因。
2.3 FCS-MPC 的代价函数和权重系数
FCS-MPC 的核心设计点是代价函数。以单相全桥逆变器控制电感电流为例,代价函数最基本的形式是:
g = (iref - i_pre)^2其中:
iref是当前周期的参考电流;i_pre是使用某一开关状态预测出来的下一周期电流。
要让电流跟踪得好,只要遍历所有开关状态,找出哪个状态使g最小,就选择该状态对应的开关组合。
如果我们还想限制开关管的切换次数、降低开关损耗,可在代价函数中加入惩罚项:
g = (iref - i_pre)^2 + lambda_sw * n_sw这里的n_sw代表本次选择的开关状态和上一周期开关状态的差异数,lambda_sw是权重系数。权重越大,系统越倾向减少开关动作,但电流跟踪性能会下降。这就是“多目标协调”的直观体现。
小结论:FCS-MPC 看似高深,本质是做有限次枚举和比较。真正影响控制效果的,是预测模型是否准确、代价函数设计是否合理、权重系数是否调好。
3. 光伏供电 DC-AC 变换器系统架构
3.1 系统整体结构
光伏供电的 DC-AC 变换器系统通常包含以下部分:
光伏阵列 → Boost 升压电路 → 直流母线电容 → 全桥逆变器 → L/LC 滤波器 → 交流负载或电网每一级的作用如下:
- 光伏阵列:将太阳能转化为直流电,输出电压随光照和温度变化。
- Boost 电路:把光伏板电压拉升到直流母线所需电压,同时通过 MPPT 算法控制工作点,让光伏输出功率最大。
- 直流母线电容:稳定母线电压,缓冲前后级功率差。
- 全桥逆变器:将直流电转化为交流电,是本文 MPC 的直接控制对象。
- L 滤波器:滤除开关频率附近的高频谐波,使输出电流平滑。
- 交流负载/电网:消耗或接收电能。
3.2 控制层级的划分
在这个系统里,MPC 并不是孤立工作的。整个控制系统分三层:
第一层:光伏侧 MPPT 控制。常用扰动观察法(P&O)或电导增量法,输出 Boost 电路的占空比,尽量让光伏工作点在最大功率点附近。
第二层:母线电压外环。为了平衡光伏输出功率和交流侧输出功率,需要对直流母线电压做闭环控制。常用 PI 控制器,根据母线电压误差生成交流侧电流的幅值参考。
第三层:电流内环 FCS-MPC。接收外环生成的参考电流,同时采样电感电流、母线电压、电网电压等信号,通过枚举逆变器开关状态,选择最佳开关组合。
很多论文里会把外环叫功率/电压控制层,内环叫电流控制层。FCS-MPC 替代的是传统方案中的“电流 PI + SPWM 调制”,而不是整个控制系统。
3.3 为什么直流母线电压控制很关键
光伏系统的特殊性在于:光伏板输出功率不可控,它随光照、温度变化。如果负载或电网侧不能及时吸收光伏发出的功率,多余的能量就会堆积在母线电容上,导致母线电压升高,严重时会损坏器件。
所以母线电压外环的任务就是:检测母线电压偏差,实时调整逆变器输出电流的幅值。母线电压高了,让逆变器多输出电流;母线电压低了,让逆变器少输出电流。这个环节一般用 PI 控制器实现,也可以换成 MPC,但实际工程中 PI 已经足够,重点是给出准确的电流幅值。
4. FCS-MPC 控制器设计:核心原理与离散化推导
本节以单相全桥逆变器 + L 滤波器为例,写出 FCS-MPC 控制器的完整设计过程。这套推导同样适用于三相逆变器,区别只是开关状态数量和输出电压表达式。
4.1 被控对象模型
单相全桥逆变器通过 L 滤波器连接到交流负载或电网。电感 L 的微分方程可以写成:
L * di_L/dt = v_inv - v_g - R * i_L其中:
i_L:电感电流,即输出电流;v_inv:逆变器桥臂中点电压;v_g:交流侧电压(电网电压或负载反电动势);R:电感等效串联电阻和线路电阻之和;L:滤波电感值。
如果采样周期非常短(例如 10 微秒到 50 微秒),可以用前向欧拉法将连续微分方程离散化:
di_L/dt ≈ (i_L(k+1) - i_L(k)) / Ts代入原始方程,得到预测模型:
i_L(k+1) = (1 - Ts * R / L) * i_L(k) + (Ts / L) * (v_inv(k) - v_g(k))这个公式是 FCS-MPC 控制器的核心。它告诉我们:只要知道当前电流、当前的桥臂电压和交流侧电压,就可以预测下一个采样周期的电流。
4.2 单相全桥逆变器的开关状态枚举
单相全桥逆变器有 4 个开关管,通常上、下桥臂互补导通,以防止直通短路。定义开关状态:
- S1、S2 为左桥臂上、下管;
- S3、S4 为右桥臂上、下管。
考虑互补导通后,实际可用的开关组合有 4 种,对应三种桥臂输出电压:
| 开关状态 | S1 | S2 | S3 | S4 | 桥臂电压 v_inv |
|---|---|---|---|---|---|
| 状态 1 | 1 | 0 | 0 | 1 | +Vdc |
| 状态 2 | 0 | 1 | 1 | 0 | -Vdc |
| 状态 3 | 1 | 0 | 1 | 0 | 0 |
| 状态 4 | 0 | 1 | 0 | 1 | 0 |
FCS-MPC 要做的事很简单:把上述 4 个电压值依次代入预测公式,算出 4 个候选电流,再和参考电流比较,选误差最小的状态输出。
4.3 代价函数设计
最基础的代价函数是电流跟踪误差平方:
g = (iref - i_pre)^2其中iref是当前采样周期得到的参考电流瞬时值,i_pre是枚举某个开关状态后预测出的下一周期电流。
如果只控制电流,这个代价函数已经足够。但实际系统中,我们往往不希望开关管频繁切换,因为这会增加开关损耗。于是可在代价函数中增加开关动作惩罚项:
g = (iref - i_pre)^2 + lambda_sw * n_swn_sw表示本次选择的开关组合与上一次相比,有几个管子发生了切换;lambda_sw是权重系数,通过调节它平衡电流跟踪性能和开关损耗。
从实现角度看,FCS-MPC 的“优化”就是遍历所有候选状态,依次计算代价函数,找最小值。矩阵维度小、枚举次数少,非常适合在 Simulink 的 MATLAB Function 里实时运行。
4.4 关于一拍延时问题
数字控制器从采样到输出开关信号,需要一定计算时间,因此实际输出的开关状态往往是在当前周期结束前才确定。这个“计算延时”在高采样频率下不可忽略,通常需要延时补偿。
一个通用做法是:在预测时多预测一步,用 k 时刻的信息预测 k+2 时刻的电流,再代入代价函数比较。这样就把一拍延时的影响建模进去了。Simulink 仿真里,如果只关注算法原理,可以先忽略延时补偿;但做实际控制系统或写高质量论文时,建议加一步延时补偿,否则动态性能和波形质量会受到可观察的影响。
5. Simulink 完整建模与代码实现
5.1 搭建思路
整个 Simulink 模型可以分成以下模块:
| 模块 | 实现方式 | 说明 |
|---|---|---|
| 光伏阵列 | Simscape Electrical 的 PV Array 模块 | 也可用方程自建,参数按需求设置 |
| Boost 电路 | Simscape Electrical 基本电力电子元件 | 配合 PWM 驱动 |
| MPPT 控制器 | MATLAB Function 实现 P&O 算法 | 输出 Boost 占空比 |
| 直流母线电容 | 电容元件 | 稳定母线电压 |
| 全桥逆变器 | 4 个开关管(MOSFET/IGBT) | 由 MPC 输出的开关信号驱动 |
| L 滤波器 | 电感与电阻串联 | 滤除高频谐波 |
| 电压/电流采样 | 电压电流测量模块 | 输入给 MPC 控制器 |
| 母线电压外环 | PI Controller 或 MATLAB Function | 输出参考电流幅值 |
| FCS-MPC 控制器 | MATLAB Function | 核心控制算法 |
其中关键点在于:MPC 控制器输出的是离散开关信号,而不是连续占空比信号。因此逆变器的开关管不需要额外接 PWM Generator,直接把 MPC 输出的 0/1 信号接到 Gate 端即可。
5.2 光伏阵列与 MPPT 实现
光伏阵列参数建议使用 Simscape Electrical 自带的 PV Array 模块,设置组串数和并联数时参考你课题中的光伏板参数。MPPT 采用扰动观察法,核心是周期性扰动 Boost 占空比,比较功率变化方向。
function D = mppt_pand_o(Vpv, Ipv, D_prev, P_prev) % MPPT: 扰动观察法 % 输入: 光伏电压、光伏电流、上一时刻占空比、上一时刻功率 % 输出: 更新后的占空比 D P_now = Vpv * Ipv; dD = 0.001; % 扰动步长,需要根据仿真步长调整 if P_now > P_prev % 功率增加,保持扰动方向 D = D_prev + dD; else % 功率减小,反向扰动 D = D_prev - dD; end % 限幅保护 if D > 0.9 D = 0.9; elseif D < 0.1 D = 0.1; end end代码说明:这是一个简化版 P&O 算法,实际使用中需要根据采样周期合理设置扰动步长dD。步长太大会引起功率振荡,太小则跟踪速度变慢。在 Simulink 中,该函数还需要结合persistent变量保存上一时刻状态,或者把上一时刻输入作为函数输入。
5.3 母线电压外环与参考电流生成
MPPT 让光伏输出功率基本恒定在最大功率点。为了维持母线电压稳定,需要外环 PI 控制。假设功率因素为 1,参考电流的瞬时值可以用以下逻辑生成:
I_amp = Kp * (Vdc_ref - Vdc) + Ki * integral(Vdc_ref - Vdc) iref = I_amp * sin(theta)其中theta是交流侧电压的相位,通常通过 PLL(锁相环)获得。在离网逆变器中,theta由逆变器自身生成;在并网逆变器中,theta由电网电压锁相得到。
这里更推荐用一个 PI Controller 模块直接生成I_amp,再在 MATLAB Function 里乘上sin(theta)。注意:为了防止外环输出过大导致过流,需要对I_amp做限幅。
5.4 FCS-MPC 核心控制代码
这是本文最核心的代码块。将以下代码放入 MATLAB Function 模块,输入为采样电流iL、直流母线电压Vdc、交流侧电压Vg、参考电流iref、采样周期Ts、滤波电感L、等效电阻R,输出为 4 个开关管的 0/1 信号。
function [S1, S2, S3, S4] = fcs_mpc_single_phase(iL, Vdc, Vg, iref, Ts, R, L, lambda_sw) % 单相全桥逆变器 FCS-MPC 控制器 % 输入: % iL - 当前电感电流 (A) % Vdc - 直流母线电压 (V) % Vg - 交流侧电压/反电动势 (V) % iref - 当前参考电流 (A) % Ts - 采样与控制周期 (s) % R - 滤波电感等效电阻 (ohm) % L - 滤波电感 (H) % lambda_sw - 开关切换惩罚权重 % 输出: % S1~S4 - 逆变器开关管驱动信号 % 枚举4种有效开关状态 % 状态1: +Vdc 状态2: -Vdc 状态3: 0 状态4: 0 V_out_vec = [Vdc, -Vdc, 0, 0]; % 对应的开关管状态 [S1 S2 S3 S4] S_mat = [ 1, 0, 0, 1; 0, 1, 1, 0; 1, 0, 1, 0; 0, 1, 0, 1 ]; % 使用 persistent 变量保存上一时刻开关状态,用于计算开关切换惩罚 persistent S_prev if isempty(S_prev) S_prev = [0, 0, 0, 0]; end g_opt = 1e10; S_opt = S_mat(1, :); % 遍历所有候选状态 for k = 1:4 % 前向欧拉预测下一周期电流 i_pre = (1 - Ts*R/L) * iL + (Ts/L) * (V_out_vec(k) - Vg); % 电流跟踪代价 g = (iref - i_pre)^2; % 开关切换惩罚代价 n_sw = sum(abs(S_mat(k, :) - S_prev)); g = g + lambda_sw * n_sw; % 选择使代价函数最小的状态 if g < g_opt g_opt = g; S_opt = S_mat(k, :); end end % 更新上一时刻开关状态 S_prev = S_opt; % 输出开关信号 S1 = S_opt(1); S2 = S_opt(2); S3 = S_opt(3); S4 = S_opt(4); end这段代码的关键逻辑:
V_out_vec存放 4 种状态对应的桥臂电压。S_mat存放每个状态对应的开关管组合。persistent S_prev用于保存上一次的开关状态,以计算开关切换次数。- 代价函数
g由两部分组成:电流跟踪误差平方 + 开关切换惩罚。 - 循环里比较每个候选状态的代价,最后输出最优的开关组合。
需要注意:如果你暂时不想加入开关切换惩罚,把lambda_sw设为 0 即可。
5.5 三相逆变器 FCS-MPC 扩展思路
如果你的研究对象是三相光伏逆变器,控制思路完全一致,区别在于:
- 三相两电平逆变器有 8 种开关状态,其中包括 6 个有效电压矢量(V1~V6)和 2 个零矢量(V0、V7)。
- 把三相 abc 电流通过 Clark 变换到 αβ 坐标系,在 αβ 轴下分别做预测。
- 预测公式是两个轴分开计算:
iα_pre = (1 - Ts*R/L) * iα + (Ts/L) * (vα_inv - vα_g) iβ_pre = (1 - Ts*R/L) * iβ + (Ts/L) * (vβ_inv - vβ_g) - 代价函数为:
g = (iα_ref - iα_pre)^2 + (iβ_ref - iβ_pre)^2 + lambda_sw * n_sw
核心逻辑没有变化,只是枚举的状态数量从 4 个变成了 8 个,预测方程从一维变成了二维。
5.6 Simulink 连接注意事项
在实际连接 Simulink 模型时,有几个容易出错的细节:
第一,MATLAB Function 输入的信号需要是离散信号。建议用 Zero-Order Hold 模块,把连续电流、电压信号按控制周期Ts采样,否则会出现仿真时间步长与控制周期不匹配的问题。
第二,逆变器开关管建议选择 Simscape Electrical 的 Mosfet 或 IGBT 模块,并把 Gate 输入连接到 MATLAB Function 输出的 S1~S4 信号。注意检查开关管的方向和逻辑是否与电路一致。
第三,仿真求解器建议选择离散求解器(discrete),或者把最大步长设置为小于控制周期Ts。如果使用变步长连续求解器,仿真时间会非常慢,而且可能出现数值振荡。
第四,为了避免代数环问题,MPC 的采样信号应当经过 Unit Delay 模块,或者在 MATLAB Function 内部使用persistent变量缓存上一状态。
6. 仿真运行与效果验证
6.1 仿真参数设置
这里以一个单相光伏离网逆变器为例,推荐一组起点参数。实际项目中请以你的课题参数为准。
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 直流母线电压参考 | 400 V | 由 Boost 输出决定 |
| 交流输出电压 | 220 V / 50 Hz | 单相交流负载 |
| 滤波电感 L | 5 mH | 实际根据纹波要求调整 |
| 等效电阻 R | 0.1 Ω | 电感内阻+线路电阻 |
| 控制周期 Ts | 20 μs | 对应 50 kHz 采样频率 |
| 光伏阵列 MPPT | 扰动观察法 | 扰动步长 0.001 |
| 仿真时长 | 0.5 s | 观察稳态与动态 |
| 求解器 | discrete | 步长 1e-6 或更小 |
6.2 如何判断仿真结果是否正确
运行模型后,重点观察以下波形:
第一,电感电流是否跟踪参考电流。把示波器接在iL和iref上,稳态时两条曲线应当基本重合。如果电流明显滞后或幅值偏差大,检查预测模型中的L、R是否和电路参数一致。
第二,直流母线电压是否稳定在参考值附近。外环 PI 参数不合适时,母线电压会出现较大波动,导致参考电流幅值抖动,进而影响输出电流波形。
第三,逆变器输出电流的 THD 是否在可接受范围。使用 Simscape Electrical 的 Powergui 模块,选择 FFT Analysis,对稳态电流波形做频谱分析。工程中常见要求是 THD 小于 5%。
6.3 典型对比实验:MPC 与 PI 控制
量化 MPC 的控制效果,最直接的方式是设置几组对比实验:
- 给定相同的电流参考突变(例如从 5 A 跳变到 10 A),比较 MPC 与 PI 的响应时间。
- 在交流侧加入一定的电压谐波扰动,比较两种控制策略下的电流波形畸变程度。
- 记录固定运行时间内开关管的切换次数,比较 MPC 与 PI+SPWM 的开关损耗。
这些对比数据也是写论文时的有力支撑。不需要展示具体数值,这里提示思路:仿真模型的参数必须保持一致,只有控制器不同,对比才公平。
6.4 失败时第一步看什么
如果模型运行失败或波形发散,按以下顺序排查:
- 先看是否有仿真错误:确认所有模块连接正确,MATLAB Function 输入输出定义一致。
- 再看波形发散方向:如果是电流发散,重点检查预测模型中的
R、L是否与电路实际一致;如果是母线电压发散,重点检查外环 PI 和功率平衡。 - 最后看采样时间:
Ts是否设置合理,是否使用了离散求解器,是否在采样信号前加了 Zero-Order Hold。
7. 常见问题与排查思路
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 仿真速度极慢 | 采用了变步长连续求解器,且没有合理设置最大步长 | 查看求解器设置 | 改用离散求解器,或把最大步长设为Ts的若干分之一 |
| 电流波形发散 | 预测模型中的 R、L 与实际电路不一致 | 比对 MATLAB Function 参数与电路模块参数 | 统一使用相同 R、L 参数 |
| 输出电流 THD 偏高 | L 滤波电感偏小或采样频率不足 | 对稳态电流做 FFT 分析 | 增大 L,或降低控制周期 Ts |
| 母线电压波动大 | 外环 PI 参数不合适,或交流侧输出功率跟不上光伏功率 | 观察 Vdc 波形与参考值的偏差 | 调整 PI 参数,或对 I_amp 做限幅 |
| MATLAB Function 报“输出未赋值” | 循环中某些分支没有给输出变量赋值 | 检查状态枚举流程 | 在循环前初始化S_opt |
| 开关频率不固定 | FCS-MPC 本身是变开关频率控制 | 对输出电流做频谱分析 | 在代价函数中增加开关切换惩罚项 |
| 采样信号出现代数环 | 没有对采样信号加延迟 | 查看 Simulink 警告 | 使用 Unit Delay 或 Zero-Order Hold |
| 并网时锁相失败 | PLL 参数未调好,或采样信号噪声大 | 观察 theta 波形 | 调整 PLL 带宽,或增加滤波 |
8. 最佳实践与工程建议
8.1 先跑通最基本架构,再逐步加复杂度
不要一开始就搭“光伏 + Boost + MPPT + 母线电压环 + MPC”完整系统。更稳妥的路径是:
- 先做一个独立的单相全桥逆变器,用固定直流源供电,让 MPC 跟踪一个正弦参考电流。这一阶段的目标是验证控制算法本身。
- 加入母线电压外环,把固定直流源替换成可控直流源。
- 加入 Boost 和 MPPT,把直流源替换成光伏阵列模型。
每加一级都保存一个可运行的版本。你对 MPC 的理解会随着模型复杂度增长而加深,遇到问题时定位范围也更小。
8.2 权重系数怎么调
FCS-MPC 最让人困惑的就是权重系数。以lambda_sw为例,推荐调试流程是:
- 先把
lambda_sw设为 0,只做纯电流跟踪,观察电流波形质量。 - 逐步增大
lambda_sw,每次增加后可观察电流 THD 和平均开关频率的变化。 - 找到一个折中点:THD 满足要求,开关频率不要过高即可。
学术论文里常用“不同权重下的 THD/平均开关频率对比表格”来展示这个调参过程,这也是一种工程说服力。
8.3 预测模型参数要尽量准确
FCS-MPC 非常依赖模型准确性。特别是滤波电感 L 的取值,它会随电流大小和温度变化。仿真中 L 是固定值,模型容易匹配;实际系统中,建议在控制代码中留出调整接口,或者用在线参数辨识方法补偿。仿真阶段至少要确保:MATLAB Function 里的 L、R 和电路模块里的 L、R 相同。
8.4 关于代码生成与硬件部署
Simulink 模型验证通过后,可以把 MATLAB Function 转成 C 代码,部署到 DSP 或 MCU 上。需要留意的是:
- FCS-MPC 在每个采样周期要完成多次枚举计算,对处理器的计算速度有要求。实际使用中需要提前估算最坏情况执行时间。
- 代码生成时,
persistent变量会被映射为静态变量,仿真和实现行为基本一致。 - 硬件实现时,还需要额外处理调理电路、模数转换延时、死区时间等非理想因素。
8.5 扩展方向
如果你后续想深入研究,可以把 FCS-MPC 扩展到以下方向:
- 三电平 NPC 逆变器控制:需要平衡中点电位,代价函数中会增加中点电流项。
- 模型预测直接功率控制(MPDPC):直接控制有功和无功功率,不再通过电流中间量。
- 带 LC 滤波器的离网逆变器:控制对象扩展为电容电压和电感电流,状态方程变成二阶。
- 显式 MPC:提前离线求解优化问题,在线退化为查表,减少计算量。
9. 总结与后续学习方向
这篇文章围绕“光伏供电 DC-AC 变换器 + MPC 控制 + Simulink 仿真”,讲清楚了一条核心链路:
光伏板发出直流电 → MPPT 维持最大功率 → 母线电容稳压 → 逆变器把直流变成交流 → MPC 枚举开关状态实时跟踪参考电流 → 滤波器改善波形 → 供给负载或电网。
模型预测控制在这里不是神秘的高维优化器,而是一个“对每个开关状态做一次预测、用代价函数打分、选最优状态”的直接控制器。它真正带来的好处是:能够把电流跟踪和开关次数等多目标放进同一个代价函数中,实现统一优化。
实操层面,建议你按文中的步骤,先搭一个固定直流源的逆变器 MPC 电流跟踪模型,跑通后再加入光伏模块。遇到波形发散时,优先检查预测模型参数是否和电路一致、采样周期是否合理、外环功率是否平衡。这三个点解决掉,整个仿真系统就不会有大问题。
如果你是奔着学术研究来的,下一步可以沿着“延时补偿设计”“权重系数自整定”“三相不平衡工况下的 MPC 策略”“三电平逆变器 MPC”这些方向深入。MPC 在电力电子方向的延展性很好,掌握了这套“预测-枚举-选择”的框架,再看其他拓扑的预测控制会轻松很多。
建议把文中的单相 FCS-MPC 代码保存下来,作为你后续三相、多电平变换器控制的模板。跑通一个最小案例,比看 100 篇论文都管用。