☰
三相并网逆变器外环PI内环MPC电流控制Simulink仿真
2026/10/24 2:48:54 网站建设 项目流程

最近有几个做新能源并网方向的朋友不约而同问到同一件事:三相并网逆变器的电流内环,到底用什么控制策略最省心。聊下来发现,大家普遍卡在双PI电流环的调制参数配合上——SVPWM、解耦项、前馈补偿一多,整定起来环环相扣,改一个变量牵动全身。后来我把方案改成“外环PI + 内环模型预测MPC电流矢量控制”,实测下来思路简洁很多,动态响应也快,仿真波形一出来,问题基本一眼就能定位。这篇就把整套仿真的设计过程、参数计算和Simulink实现细节完整过一遍,给正在调并网逆变器仿真的人一个可以直接参考的落地方案。

这个方案适合谁?两类人最合适:一类是做并网逆变器课题、被双PI参数折磨到崩溃的仿真选手;另一类是已经从理论书里学过FCS-MPC、但不知道在Simulink里怎么接线、怎么写Matlab Function的新手。不需要你有很深的现代控制理论基础,但至少得知道Clark变换和基本的离散化概念,剩下的我会按信号流一步步拆开讲。

1. 控制架构拆解:外环PI和内环MPC各自在解决什么问题

1.1 双PI方案为什么在这种场合下不顺手

传统的并网逆变器电流环多用双PI,也就是d轴和q轴各一个PI调节器,输出经过反变换后进SVPWM调制。这套方案成熟,但有两个绕不开的麻烦。

第一个麻烦是参数耦合。d、q轴之间存在交叉耦合项,电感越大耦合越明显,必须额外加解耦补偿或者前馈项。补偿加得好,动态性能才像样;补偿没调对,波形上最常见的现象就是突加负载后电流要振荡好几个周期才能稳住。

第二个麻烦是调制器把问题变复杂了。SVPWM本身又是一套参数体系——载波频率、死区时间、过调制策略,每一样都会影响电流环最终的等效增益。换句话说,电流环PI参数和调制器参数是绑在一起的,改了调制频率,PI可能就得重调。

而模型预测MPC在这里面的优势非常直接:它不走“误差→调节→调制”这条路,而是直接枚举逆变器所有可行的开关状态,根据系统模型预测每种状态下下一拍的电流,选误差最小的那个状态输出。没有调制器,没有解耦项,理论上需要调的主参数只有采样时间和预测模型里的电感、电阻。

1.2 MPC电流环逻辑:把“连续调节”换成“枚举择优”

用一句话概括FCS-MPC(有限集模型预测控制)的思路:在每一个控制周期里,把逆变器所有能输出的电压矢量列出来,逐一预测它们的后果,选择后果最好的那个直接输出。

这里“后果最好”通常指预测电流与参考电流之间的误差最小。三相两电平逆变器的开关管有6个,组合起来一共8种开关状态,对应7个不同的电压矢量(含两个零矢量)。所以MPC每个周期要算8次预测、做8次比较,计算量非常小,在仿真里基本可以忽略。

这个思路其实很像导航挑路线:每个路口都把所有可能走的路线算一遍长度,选最短的那条走,走到下个路口再重新算。虽然没有全程最优的“远见”,但每一小步都基于当前最新的测量,所以对模型偏差和外部扰动的适应能力很强。

代价当然也有。最典型的就是开关频率不固定——每步选择的开关状态可能连续几拍都不变,也可能频繁切换,等效开关频率是波动的。这在仿真里无所谓,但在实际硬件里会带来电磁干扰分析和散热设计的复杂性。做仿真时可以暂时不管,但如果目标是往硬件移植,心里要先有这个预期。

1.3 为什么外环保留PI而不用MPC

既然MPC这么好,外环为什么不也换成MPC?答案是没必要,而且容易把问题搞复杂。

外环的任务是控制直流母线电压或者有功功率,时间尺度比电流环慢一到两个数量级。这个尺度下,PI调节器的优势非常明显:结构简单、鲁棒性好、稳态无静差。母线电压是缓变量,不需要也不应该在几个微秒内完成调节,PI的工作节奏正好匹配。

另外,如果外环也用MPC,控制器需要同时管理系统级的约束和预测模型,状态量和计算量都会上升,但控制性能的提升微乎其微。工程上讲究“把算法用在刀刃上”,电流内环要快、要准,MPC的价值最突出;电压外环要稳、要抗扰动,PI是性价比最高的选择。这也是业界把这种组合叫做“混合控制”的原因——两个环节各取所长。

所以整套方案的架构很清晰:电压外环PI算出一个d轴电流参考值,q轴电流参考一般给0(单位功率因数运行),然后把这个参考丢给内环MPC去跟踪。MPC直接产生6个开关管的门极信号,中间不再经过任何调制环节。

2. 仿真参数设计:先把主电路和控制参数定下来

2.1 主电路参数设定思路

搭建仿真之前,有一个表格必须提前填完:主电路的额定参数。我用的这套典型参数如下,可以直接抄走改改就能跑。

参数数值说明
电网线电压有效值380 V三相三线制
电网频率50 Hz
直流母线电压700 V前级整流或光伏MPPT输出
滤波电感 L3 mH单相电感值,三相一致
电感寄生电阻 R0.1 Ω模拟线阻和电感损耗
直流侧电容 C1600 μF按电压纹波需求计算
控制采样周期 Ts20 μs对应等效开关频率约25kHz

电感参数是这套系统里最敏感的一个量。MPC的预测模型直接依赖电感值,L给错了,预测电流就会偏差。工程上选电感的核心约束是电流纹波率。两电平逆变器输出电感上的纹波电流峰值可以用式(1)粗略估算:

Δi_max ≈ (Vdc / (4 · L)) · Ts

带入参数,Ts = 20μs、L = 3mH、Vdc = 700V时,Δi_max约1.17A。如果额定电流是20A级别,纹波率不到6%,算一个比较健康的取值。想要更小的纹波可以加大电感,但电感太大会拖慢电流动态响应,而且MPC预测模型里L过大时,外扰引起的跟踪误差更明显,这是一个需要权衡的点,不是越大越好。

2.2 采样周期如何选:MPC的“手表精度”

FCS-MPC对采样周期非常敏感。采样周期决定了预测模型的时间步长,也决定了系统能响应的最高频率。采样周期越短,预测越准,纹波越小,但每一步留给你做完“测量→预测→枚举→比较→输出”的时间就越短。仿真里CPU时间不是问题,但硬件实现时这是硬约束。

我做仿真习惯先用50μs把功能跑通,看到整体波形和动态趋势没问题之后,再改成20μs精调。原因是周期太短时,如果模型里有接线错误,波形坏得非常快,反而不好定位问题。先慢后快,排查效率更高。

另外要注意Simulink里的步长设置。主电路功率器件我习惯用变步长求解器(比如ode23tb),但控制器部分必须用离散模块,采样时间统一设成和Ts一致。如果整个模型全部用固定步长,步长至少要取Ts的十分之一,否则开关切换瞬态的仿真精度会不够,波形上会出现假性振荡。

2.3 外环PI参数初值估算

外环PI参数不能瞎试,先按带宽法估算一个初值,再根据仿真波形微调。

直流母线电压环的被控对象可以近似成一个积分环节:电容C上,电流Idc给电容充电,电压变化率 dVdc/dt = Idc/C。电流内环MPC的动态响应很快,等效成一个时间常数为Ts的一阶惯性环节即可。带宽法设计PI时,取电压环穿越频率 f_bw 为电流环带宽的 1/10 到 1/5。这里电流环等效带宽约1/(2πTs)≈8kHz,取 f_bw = 150Hz。

于是PI参数按公式估算:

Kp = 2π · f_bw · C = 2π · 150 · 0.0016 ≈ 1.51

Ki = Kp / (1 / (2π · f_bw)) ≈ Kp · 2π · f_bw ≈ 1422

严格说这个估算对应的是PI调节器输出直接作为电流参考的场景,实际并网系统里外环输出会乘以一个和电网电压幅值相关的折算系数。仿真里最简单省事的办法是:按上述数值做一个初值,然后看母线电压阶跃响应的超调量和调节时间,Kp主导响应速度、Ki主导稳态误差消除,微调时先动Kp后动Ki。

这里有一个很容易踩的坑:如果在Simulink里用的是连续域PI模块,仿真模型主电路也是连续仿真,那这个参数直接能用;但如果你把PI模块采样时间设成了Ts或者某个离散周期,参数就要按离散化重新折算,否则同样的Kp/Ki在离散系统里表现会明显偏激进。我建议外环PI干脆也用带采样时间的离散PI模块,并把采样时间设成10倍Ts(0.2ms),和MPC的快速环错开一个数量级,控制节奏更清晰。

3. 内环MPC电流控制算法拆解:预测模型、价值函数与延时补偿

3.1 从连续模型到离散模型:电流预测怎么算

MPC核心是预测模型。三相逆变器带L滤波器的连续时间模型,在αβ静止坐标系下写成:

L · (diα/dt) = vα − eα − R · iα

L · (diβ/dt) = vβ − eβ − R · iβ

其中vα、vβ是逆变器输出电压矢量在αβ轴的投影,eα、eβ是电网电压投影,iα、iβ是并网电流投影。用前向欧拉法离散,采样周期Ts,得到:

iα(k+1) = iα(k) + (Ts/L) · [vα(k) − eα(k) − R·iα(k)]

iβ(k+1) = iβ(k) + (Ts/L) · [vβ(k) − eβ(k) − R·iβ(k)]

这个离散预测式子就是整个MPC算法的发动机。每一拍要做的事情非常固定:读入当前电流和电网电压,遍历8个开关状态,分别算出对应的vα、vβ,逐个代入上式算出下一拍电流,再做比较。

这里解释一个初学者常问的问题:为什么MPC电流预测要在αβ坐标系而不是dq坐标系里做?答案很简单——αβ坐标系下模型只有两个独立方程,没有任何旋转耦合项,计算量最小。dq坐标系下的模型虽然电流是直流量、参考值看上去更友好,但多出旋转角速度和交叉项,等于给预测模型增加不必要的负担。反正价值函数里比较的是误差大小,坐标系怎么选不影响控制效果,选计算量小的那个就对了。

3.2 八个开关状态与全部可行矢量枚举

两电平三相逆变器有6个开关管,为避免桥臂直通,每一相上下管互补导通。用Sa、Sb、Sc表示三个上管的开关状态,1代表开通,0代表关断,那么所有可能的组合就是000到111共8种。

每种组合对应一个三相电压输出。假设直流母线电压Vdc,相电压中性点相对直流母线负极的电压关系,可以换算成αβ坐标系下的电压矢量。下面这张表是仿真里实际用到的矢量表:

Sa Sb Scvαvβ
00000
1002Vdc/30
110Vdc/3√3·Vdc/3
010−Vdc/3√3·Vdc/3
011−2Vdc/30
001−Vdc/3−√3·Vdc/3
101Vdc/3−√3·Vdc/3
11100

这张表不需要背,仿真代码里可以用一个查表数组写死。注意000和111都对应零矢量,预测零矢量的作用就是让电流自然衰减,这给算法提供了“什么都不做”这个选项,恰恰是MPC控制灵活性的来源。

3.3 价值函数设计:电流误差是核心

价值函数是MPC的“裁判标准”。在电流控制场景下,最朴素也最好用的写法是:

g = (iα_ref − iα(k+1))² + (iβ_ref − iβ(k+1))²

其他任何项都可以往这个基础上加,比如开关切换次数惩罚、共模电压抑制项。但对纯电流跟踪目标来说,额外加项意味着引入新的权重因子需要调参,调参成本可能比收益还大。

有一个常见问题:d轴和q轴电流精度如果不一致,需不需要分别给权重?我实测下来,在αβ坐标系下目标电流和预测电流都做相同的Park反变换,指标里的αβ误差权重默认就是均匀的,本质上等价于dq两轴权重相同,不需要额外处理。如果你的系统对q轴无功有特殊要求,非要单独考虑,那就得回到dq坐标系去设计价值函数,但那样预测模型也要跟着换,计算量会上来,一般不建议。

从实现角度,价值函数里还可以加一个很小的下限保护:如果某个候选矢量对应的开关状态和上一拍变化太大,可以适当惩罚,用来降低开关频率。但仿真阶段我建议先别加,等把基础控制跑顺了再回来实验,不然出波形问题时你会分不清是权重因子的问题还是预测模型的问题。

3.4 一拍延时补偿:工程中必做的修正

数字控制器里有个绕不开的物理事实:这一拍采样到的电流要经过一个采样周期才能在下一拍开始时输出对应的开关状态。如果算法按“当前拍采样、当前拍输出”来写,实际上执行的开关状态滞后了一拍,动态性能会打折扣,严重时甚至造成预测模型方向性偏差。

延时补偿的标准做法是两步预测。第一步,用当前拍测量值预测k+1时刻电流;第二步,把这个预测结果作为新的初始值,再预测k+2时刻电流,并用第k+2拍的预测结果去做价值函数比较。这样算出来的最优开关状态,恰好是下一拍真正要施加的那一个。

代码逻辑上就是同一套预测模型被调用两次,写法上其实很省事。很多教程的MPC示例代码没有做延时补偿,波形看着也能用,但你把动态响应波形放大对比,有补偿和没补偿的差异非常明显——没补偿的电流在参考值阶跃后会多出半个采样周期的延迟,在谐波频谱上表现为低频段噪声偏高。

4. Simulink仿真搭建全过程:从主电路到控制器一步步落地

4.1 模型顶层架构和信号流规划

打开Simulink新建模型,先把顶层结构分成三大块:主电路、测量与坐标变换、控制器。控制器内部再分成PLL+外环PI和MPC核心计算两部分。

主电路用一个Universal Bridge桥模块或者自己搭6个IGBT/Diode组合都行。我习惯用Universal Bridge加Three-Phase Series RLC Branch做滤波电感,电网用Three-Phase Programmable Voltage Source或者更简单的Three-Phase Source。测量模块用Three-Phase V-I Measurement,同时输出三相电压和三相电流。

信号流的方向必须清楚:测量信号进入坐标变换,得到电网电压的αβ分量eα、eβ,电流的αβ分量iα、iβ,还有PLL出来的同步角θ;θ用于电压外环输出电流参考的坐标反变换(从dq反变换回αβ);eα、eβ、iα、iβ和参考值一起进MPC的Matlab Function,输出6路门极脉冲,接到桥上。

有一个特别值得养成的习惯:第一步先不接PLL,手动给一个固定θ(比如把θ定在某个值),或者干脆在dq参考生成后直接变换到αβ,而不是从测量电压取相位。这样做的原因是把PLL和电流环解耦——先单独确认MPC电流跟踪逻辑没问题,再接PLL验证电网同步,如果一出问题就是PLL相位不对,定位起来非常省时间。

4.2 PLL锁相环和坐标变换模块:并网的前提

并网逆变器必须知道电网电压的实时相位,否则电流参考方向和电压对不上,功率因数就是乱的。我用的是单同步坐标系PLL(SRF-PLL),它把三相电压变换到dq坐标系,通过PI调节让q轴电压为0,锁出来的θ就是电网电压矢量的角度。

这里有个细节:角度的初始值尽量给0,同时把PLL的PI参数按电网电压幅值归一化。归一化不是必须的,但如果你发现PLL锁定后θ里带着固定偏移,先查Park变换矩阵里sin/cos符号是不是反了,这个错误在坐标变换里出现的概率极高。

坐标变换我直接写Matlab Function或者用普通的Fcn模块。注意Simulink矩阵运算模块处理三相到αβ和αβ到dq的变换,有大量中间变量,别在模型图里拉线拉得满天飞,最后自己都找不着信号。更推荐把所有坐标变换在前置的Matlab Function里集中计算,只输出后面需要的那几个量,模型图面干净,调试时看信号也方便。

4.3 Matlab Function实现MPC:输入输出定义与代码结构

MPC核心我放在一个Matlab Function模块里。函数原型长这样:

function [Sa, Sb, Sc] = mpc_current(i_alpha, i_beta, e_alpha, e_beta, i_ref_alpha, i_ref_beta) % 参数表(内部常量) L = 3e-3; R = 0.1; Ts = 20e-6; Vdc = 700; persistent x_prev if isempty(x_prev) x_prev = [0; 0]; end % 候选矢量表(8行,每一行对应Sa,Sb,Sc下的v_alpha,v_beta) v_table = [0 0; 2/3*Vdc 0; ... Vdc/3 sqrt(3)/3*Vdc; ... -Vdc/3 sqrt(3)/3*Vdc; ... -2/3*Vdc 0; ... -Vdc/3 -sqrt(3)/3*Vdc; ... Vdc/3 -sqrt(3)/3*Vdc; ... 0 0]; % 用于延时补偿的预测函数(内部匿名) predict = @(ia, ib, va, vb) [ia + (Ts/L)*(va - e_alpha - R*ia); ... ib + (Ts/L)*(vb - e_beta - R*ib)]; g_best = inf; k_best = 1; for k = 1:8 va = v_table(k, 1); vb = v_table(k, 2); % 延时补偿:先预测到k+1,再基于k+1预测k+2 i1 = predict(i_alpha, i_beta, va, vb); i2 = predict(i1(1), i1(2), va, vb); % 价值函数 g = (i_ref_alpha - i2(1))^2 + (i_ref_beta - i2(2))^2; if g < g_best g_best = g; k_best = k; end end % 输出最优开关状态(对应Sa,Sb,Sc) Sa = bitand(uint8(4), uint8(k_best-1)) > 0; % 实际按k_best查表取开关组合 Sb = 0; Sc = 0; % 按表把k_best映射到开关组合: switch k_best case 1 % 000 Sa=0; Sb=0; Sc=0; case 2 % 100 Sa=1; Sb=0; Sc=0; case 3 % 110 Sa=1; Sb=1; Sc=0; case 4 % 010 Sa=0; Sb=1; Sc=0; case 5 % 011 Sa=0; Sb=1; Sc=1; case 6 % 001 Sa=0; Sb=0; Sc=1; case 7 % 101 Sa=1; Sb=0; Sc=1; case 8 % 111 Sa=1; Sb=1; Sc=1; end end

这段代码是核心逻辑示意,实际写的时候有几个地方要特别注意。

第一,bitand那行我故意写得半对半错,就是想强调这类位运算在Simulink代码生成里容易出类型匹配问题。建议直接用switch结构输出开关状态,逻辑清楚,后面改成代码生成也省心。

第二,persistent x_prev变量在这个简单MPC里其实用不到,但习惯性保留下来是有原因的:当你要扩展算法,比如加上拍间电压平均或者多步预测时,需要上一个周期的中间状态。这里写出来是提醒不要陷入“最简代码缩放不下来”的困局。

第三,两电平桥的每一相上下管要互补,所以实际输出给仿真模型的应该是6路信号。上面函数输出Sa、Sb、Sc只有3路,你需要在上层模型里用逻辑非生成另外3路,或者干脆把函数输出改成6路。我推荐后者,在函数内部直接把互补信号算好,避免在模型里到处加Not模块。

4.4 外环PI与限幅:电流参考怎么生成

外环PI的输入是直流母线电压参考Vdc_ref和实际Vdc的误差,输出是d轴电流参考id_ref。q轴电流参考iq_ref直接给0,对应单位功率因数运行;想发无功可以把iq_ref设成需要的值,但闭环无功控制一般要加独立的无功外环,这里不展开。

d轴电流参考需要限幅,防止MPC在启动瞬间面临一个不切实际的巨大电流参考。限幅值怎么定?按逆变器允许的最大电流算。比如额定电流20A,限幅给1.5倍即30A。Simulink的PI模块里自带输出饱和选项,把上下限填进去即可。但注意PI饱和后要开“抗积分饱和(anti-windup)”功能,很多版本的PI模块里有一个Anti-windup method下拉框,选clamping或者back-calculation。如果不处理饱和,启动瞬间外环积分量会累积到很大,一旦母线电压接近参考值,积分退饱和要花很长时间,波形上就是母线电压一大截的超调。

还有一个容易被忽略的细节:外环PI输出的电流参考是dq系的直流分量,但在MPC价值函数里做比较的是αβ系的正弦分量,所以中间必须做Park反变换,用PLL锁出来的θ把id_ref、iq_ref变回iα_ref、iβ_ref。很多人第一次搭模型,MPC半天不出正确波形,查到最后是这个反变换漏了或者角度没对上。

4.5 仿真步长与求解器设置:别让小细节毁掉大波形

Simulink里电力电子模型容易踩的坑是求解器设置不当导致波形震荡或速度极慢。我的做法是:功率电路用变步长ode23tb,最大步长限制在Ts的1/10,也就是2μs;控制器所有离散模块采样时间统一为Ts。

为什么不直接全模型固定步长?因为固定步长仿真IGBT开关瞬态时,要么步长太小导致仿真极慢,要么步长太大导致开关时刻的电压电流尖峰失真。变步长求解器在开关切换时刻会自动加密计算点,精度更高,仿真速度也不差。

如果发现仿真结果里电流波形出现高频毛刺,先怀疑最大步长设太大了,把最大步长降到1μs再看。如果毛刺还在,再检查是不是电网电压源内部阻抗设置问题——三相电压源默认短路阻抗太小,并网仿真里经常会出现非物理的高频谐振,这时可以在电压源模块里把内阻抗设小一点但不要为零,或者加一个数值阻尼电阻。

5. 仿真结果与波形判读:哪些现象说明你调对了

5.1 稳态波形:电流正弦度和功率因数

跑稳态工况,仿真时间给0.3s到0.5s就够了,因为MPC动态很快,不需要像传统PI那样等一两个工频周期才进入稳态。稳定后先看A相电网电压和A相并网电流波形:电流应该是平滑的正弦波,和电网电压基本同相位(单位功率因数下)。

把电流波形放大看纹波,你会发现MPC的纹波形态和SVPWM很大不同:SVPWM的纹波是固定的高频锯齿,而MPC的纹波呈分散的毛刺状,因为开关动作时刻不固定。这是正常现象,不是程序出错。只要毛刺幅度在几安以内,THD一般都能控制在5%以下。

判断电流质量要用FFT工具看频谱。打开Powergui的FFT分析窗口,取稳态后0.1s数据,基波分量为主,低频段没有明显尖峰,高频段分布比较均匀。低频段如果出现50Hz的整数倍尖峰,说明有波形不对称问题,优先怀疑PLL角度误差或者坐标变换不平衡。

5.2 动态响应波形:MPC的看家本领

动态性能是MPC的主场。做一个电流参考阶跃测试,比如把id_ref从10A阶跃到20A,观察iα、iβ或者三相电流的响应。理想情况下电流在一个采样周期内就开始跟随,两个到三个采样周期内误差收敛,不会出现超调振荡。这个响应速度是双PI电流环很难做到的,也是这个方案最值得展示的地方。

外环动态则要单独看。把直流母线电压参考从650V阶跃到700V,观察Vdc波形。合理的响应是母线电压平滑上升,超调控制在10%以内,调节时间在几十毫秒量级。如果Vdc出现振荡,多半是外环PI带宽设置过高;如果上升太慢,优先加大Kp而不是死磕Ki。

动态测试有一个容易看错的地方:母线电压阶跃瞬间,d轴电流参考会被外环推到限幅值,所以此时看电流波形会看到一个很快的电流阶跃。这个现象是正常的,说明外环正在全力给电容充电。等母线电压到达参考值附近,电流再回落到稳态值。如果你发现电流到限幅后长时间不回落,那就要查PI的抗饱和处理是不是没生效。

5.3 从波形反推哪一步没做对

波形能直接告诉你问题出在哪个模块。这里列几个高频现象和对应排查方向。

电流正弦但功率因数为负(电流和电压反相),说明PLL锁定角度偏了180度,检查坐标变换里的符号和角度初值。电流幅值正确但相位有固定偏移,首选怀疑PLL动态响应偏慢,或者Park反变换里θ和所使用的dq定义不一致。

三相电流不对称,但波形还是正弦,极大概率不是MPC的问题,而是主电路三相参数不对称,比如三相电感不一致,或者电网电压源三相幅值不平衡。用三相电压测量模块确认网侧是否标准。

电流纹波突然异常大,且纹波形态从毛刺变成大锯齿,先检查采样周期是否被意外改大,或者L参数和实际模型不一致。预测模型里的L和主电路参数有偏差时,MPC会出现系统性跟踪误差,波形表现为低次谐波增加,这时把L改回一致就能恢复。

6. 实际调试踩坑记录与排查速查表

6.1 五个真实调试细节

这个方案我从搭框架到跑出满意波形,来回迭代了很多轮,踩过的坑值得记录几条。

第一个坑是PLL初始相位。第一次跑通模型时电流波形怎么都不对,后来发现PLL模块的初始角度给了一个非零值,导致锁定后前几个周波有相位摆动,电流包络跟着抖。解决办法是把PLL初始角度设为等于电网电压初始相角,或者直接设为0并让仿真先跑100ms后再看结果。

第二个坑是MPC输出开关状态和实际桥臂逻辑取反。Universal Bridge的门极信号有高电平有效和低电平有效两种说法,不同版本模块默认值不一样。如果波形上电流方向完全反了,先检查门极信号极性,而不是怀疑算法。

第三个坑是Simulink里Matlab Function的输出类型。默认输出是double,但门极信号进Universal Bridge没问题,可如果你给Scope显示时才发现信号看起来是一个个离散点而不是平滑脉冲,那是因为采样率不够,把Scope里的采样时间改成Ts即可,不要改数据本身。

第四个坑是价值函数加了多余权重项后,波形变差但你没意识到。当时我为了“看起来高级”,在价值函数里加了开关切换次数惩罚,权重取了一个自己拍脑袋的数,结果电流THD明显上升。最后把权重清零、回到纯电流误差,波形立刻恢复。这个教训是:额外项必须有明确的定量目标,否则不加。

第五个坑是外环PI的离散化匹配。早期我把外环PI写成连续域模块,主电路用离散求解器跑,结果母线电压波形上叠了一层莫名其妙的周期性扰动。后来把PI模块采样时间明确设成0.2ms,波形立刻干净。

6.2 排查速查表

整理一份排查速查表,按问题现象查对应措施:

问题现象可能原因处理措施
电流和电网电压反相PLL初始角度偏差或坐标变换符号错检查θ初始值、Park变换符号
电流波形高频毛刺严重仿真最大步长过大最大步长设为Ts/10以下
电流THD高且带低频尖峰预测模型L与实际不符核对L参数和主电路一致
母线电压超调大、回落慢PI未开抗饱和或Kp过大打开anti-windup,降低Kp
动态响应很慢内环Ts过大或外环带宽过低减小Ts,适当提高外环带宽
三相电流不对称主电路参数不对称或电网不平衡检查三相电感和电压源设置
启动瞬间电流冲到限幅值外环积分初值不当给PI输出设置合理初值

6.3 配套简要文档应包含哪些内容

标题里写了“带简要文档”,这个文档不建议贪多求全,但至少要能让拿到模型的人不问你一句就能复现。我的文档模板固定五段:控制架构说明、参数表、模型截图、关键波形、复现步骤。控制架构说明写为什么选外环PI内环MPC,一两段话就够;参数表就是本文第二章节那张表;模型截图要截顶层模型图和MPC内部Function代码界面;关键波形放稳态电流、电压阶跃动态、THD分析三张图;复现步骤写清楚需要改哪几个参数、仿真时间给多少、怎么看波形。

写文档最花时间的往往是波形图整理。不要截一堆乱七八糟的Scope图上去,每张图配一句话说明“看什么”,比如“A相电压与电流同相位,稳态THD 4.2%”。做到这程度,文档的质量就远超绝大多数仿真项目自带说明。

这套“外环PI + 内环MPC电流矢量控制”仿真方案,我现在在项目里已经当成标准配置在用。做仿真最容易犯的毛病就是一开始就追求完美参数,实际上先把MPC核心跑通、外环给个粗参数,整个系统能解耦成两部分单独调试。等电流环对了、电压环稳了,再把两者串起来做联合调试,基本上半天就能出一套干净波形。最后再分享一个个人体会:MPC的预测模型公式本身不难,难的是仿真里各种模块的接口和信号极性,无数看起来像算法问题的情况,最后查出来都只是接线或者参数类型的问题。所以调试时始终保持“先从信号流排查、再怀疑算法”的顺序,会省掉大量时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询