简介:面向新能源并网、电力电子及逆变器控制方向研究者的一份技术文档,系统梳理了弱电网下基于模型预测控制的NPC三电平LCL型并网逆变器谐振抑制方法。资料为1个docx文档,大小1.09MB,内容涵盖弱电网特性分析、LCL滤波器谐振机理、模型预测控制建模、滚动优化算法与谐振抑制策略,并包含并网试验验证及不同方法控制效果对比。文档还建立了输出电流与直流侧中点电压的预测模型,针对弱电网阻抗变化实现了有效谐振抑制。已有273人学习浏览,适合电力电子与新能源并网领域的研究生、工程师及科研人员查阅参考,可帮助快速理解该方向的研究思路、关键技术环节与验证方法。
1. 弱电网下LCL谐振如何逼出MPC模型预测控制
接在公共耦合点(PCC)上的并网逆变器,面对的不是实验室那堵理想电网墙。尤其当线路拉长、变压器短路容量下降,电网等效阻抗从几百微亨涨到几毫亨时,LCL滤波器原本在中频段留下的那个谐振尖峰,会被外部电感推向更低的频率、更高的品质因数。传统PI双闭环习惯把零点放在固定LCL参数上,电网阻抗一变,相位裕度立刻缩水。这就是弱电网研究的麻烦所在。
MPC模型预测控制走的是另一条路:把电网阻抗的变化直接收进预测模型,用滚动优化在每一个控制周期里重新平衡并网电流和电容电压,谐振抑制不再只靠调阻尼比,而是靠每一步都对“下一步”做校正。这篇文章把这条路径上的谐振机理、MPC建模、代价函数设计、弱电网自适应调参和仿真验证方法拆开讲,适合正在做并网逆变器控制、微网逆变器预研,或者在毕业设计中碰了一鼻子谐波后想换条技术路线的工程师对照参考。
2. NPC三电平LCL并网逆变器的谐振机理与MPC建模
在讨论抑制方法前,先得把谐振的根找清楚。LCL滤波器是把逆变器输出电流里的开关纹波压掉的,但L1、Cf、L2串成一个不带电阻的被动态网络后,天然是一个三阶无阻尼系统。逆变器侧电感和网侧电感的感抗在中频段与电容容抗交替作用,会产生一个增益突然抬高、相位快速翻转的频率点。对电流控制环来说,这个点附近就是一个潜在振荡源。
2.1 LCL滤波器的谐振峰为什么让传统阻尼方案头疼
如果不在控制器里做特殊处理,LCL的谐振峰会在开环传递函数中形成一个接近-180°的相位跳变,并伴随一个高增益尖峰。只要电流环带宽靠近这个频率,闭环系统就会在该频段出现接近单位圆之外的极点。工业界最直接的压峰办法是无源阻尼:在Cf支路串入几欧姆电阻,用电阻把尖峰削平。代价是电阻在基波电流流过时也会发热,系统满载效率掉零点几个百分点;电阻值越大,高频旁路损耗越难看,所以阻尼电阻往往只取谐振阻抗的一半,效果有限。
有源阻尼则是在控制器里模拟一个虚拟电阻,最常见的是把电容电流引出来,做成比例反馈。这个方案在电网阻抗固定时非常好用,反馈系数可以按LCL参数一次性算好。但问题在于反馈系数强依赖L2的准确数值,而弱电网下L2是一个随线路、变压器抽头和当天负载变化的量。L2一变,虚拟电阻的等效值也跟着变,原本压下去的谐振峰又浮上来,严重时阻尼环节还会对某个频段形成正反馈。这是近年大家转向MPC模型预测控制的直接原因:它不是用固定反馈系数去压峰,而是用滚动优化在每个周期重新评估状态,谐振抑制能力天然随模型更新。
2.2 弱电网阻抗如何改变LCL谐振点
把电网等效阻抗记为Zg=Rg+sLg。分析LCL谐振频率时,通常把Lg与网侧电感L2串联,得到等效网侧电感L2'=L2+Lg。此时谐振频率为:
f_res = (1 / (2π)) · sqrt((L1+L2') / (L1·L2'·Cf))
从这个公式能直接看出:Lg越大,L2'越大,谐振频率越低。下面是一组典型参数算出来的结果,L1=2mH,Cf=4.7uF,L2=2mH,直流母线电压700V,控制频率10kHz。
| 电网附加电感Lg (mH) | 等效网侧电感L2' (mH) | 谐振频率f_res (Hz) | 控制难度 |
|---|---|---|---|
| 0(理想电网) | 2.0 | 2321 | 常规有源阻尼可覆盖 |
| 1.0 | 3.0 | 2118 | 电流环带宽边缘,需小心 |
| 3.0 | 5.0 | 1943 | 与数字控制延时耦合,易振荡 |
| 6.0 | 8.0 | 1637 | 常规PI双闭环很难压住 |
注意:实际弱电网中还伴随Rg增大,谐振峰品质因数会被电阻压低,但PCC电压波动变大,波形畸变和相位跳变会让PLL与电流环互相干扰。谐振频率只是第一层分析,不能只看Lg。
由于谐振频率下降并接近电流环带宽,PI双闭环中电压外环的时间尺度又更慢,内外环的相互作用会被谐振峰明显放大。弱电网工况下最有价值的信息不是“谐振频率是多少”,而是“谐振频率偏离设计点有多远”。MPC模型预测控制不需要重新调整零点或阻尼反馈系数,它把L2'直接放进预测矩阵里,只要Lg可观测,就能持续修正模型,这是它适合弱电网的根本原因。
2.3 把NPC三电平桥臂输出写成MPC可用的离散状态方程
要进入MPC,第一步是把LCL滤波器写成状态空间模型。取状态变量x=[i_L1α, i_L1β, v_Cα, v_Cβ, i_L2α, i_L2β]^T,分别代表逆变器侧电流αβ分量、滤波电容电压αβ分量、网侧电流αβ分量。输入u=v_inv_αβ为NPC桥臂输出电压的αβ分量,扰动d=v_g_αβ为电网电压。把弱电网阻抗并入L2后,连续时间状态方程为:
d/dt x = A_c x + B_c u + E_c d
其中A_c为6×6矩阵,非零项包括:逆变器侧电感对电容电压耦合项-1/L1,电容对两侧电流耦合项1/Cf,网侧电感对电容电压耦合项1/L2'。B_c的非零项是1/L1,对应桥臂电压对逆变器侧电流的直接作用。E_c的非零项是-1/L2',对应电网电压对网侧电流的扰动。离散化后得到x(k+1)=A_d x(k)+B_d u(k)+E_d v_g(k)。
在10kHz控制周期下,可以用零阶保持法求A_d,也可以用欧拉近似A_d≈I+A_c·Ts。欧拉近似代码简单,但要求Ts不超过谐振周期的1/10,否则预测相位误差会明显影响阻尼效果。这里有个容易忽略的建模要点:状态向量必须保留电容电压或电容电流这一维。如果像常规矢量控制那样只建立单电感模型,MPC的预测方程里根本没有谐振信息,后面代价函数再怎么加权,也只是在“看不到谐振”的情况下盲目优化,抑制效果不会比PI好。
NPC三电平桥臂每相有正、零、负三个电平,三相加起来有27种开关组合。把这27种组合投影到αβ坐标系,会得到一个完整的大六边形电压矢量集。后面MPC要做的,就是逐个评估这些候选电压矢量,找出对未来一步或两步代价最小的那一个,并直接输出对应开关状态。这样,谐振抑制从频域设计问题,变成了一个离散变量在线优化问题。
3. 用模型预测控制抑制谐振:状态方程、代价函数与实验代码
现在进入核心实现。MPC模型预测控制要替换掉传统电流内环PI调节器,外面仍然保留电压环、功率环或直流母线电压环,外环的输出是下一拍网侧电流参考值i2_ref。MPC在每一个控制周期执行四个动作:读取当前状态,用预测模型外推未来状态,计算所有候选开关状态对应的代价函数,选择代价最小的开关状态输出。
3.1 代价函数设计:把谐振抑制放进MPC的代价里
谐振抑制的目标不是只看网侧电流跟踪误差。如果代价函数只写成J=||i2_ref-i2||²,预测控制会把大部分注意力放在基波电流跟踪上,而LCL谐振模态在代价里没有对应项,结果和普通无阻尼控制类似。常见做法是把电容电流i_c=i_L1-i_L2作为谐振模态的直接体现加入代价函数。i_c越大,说明LCL在向电容循环充放能量,这正是谐振的表现。
最小可行的代价函数是:
J = ||i2_ref(k+1) - i2(k+1)||² + λ_d · ||i_c(k+1)||² + λ_np · v_np(k+1)²
其中λ_d是有源阻尼权重,λ_np是NPC三电平中点电位平衡权重。第一项保证电流跟踪,第二项负责压低电容电流中的谐振成分,第三项把直流侧两个电容电压差控制在零附近。谐振抑制因此被转化成对电容电流的二次惩罚,而不是额外设计阻尼滤波器。MPC预测模型已经包含L2',电容电流预测值里天然带着电网阻抗变化的影响,所以即使λ_d固定,阻尼效果也能跟随弱电网状态自适应。
实际实现时要注意量纲。若i2_ref和i_c都用安培,λ_d是无量纲系数,直接比较没问题;若某个仿真模型里电流用了标幺值,电容电压用了伏特,代价函数各项量纲不一样,λ_d就不再是“权重”而是“缩放因子”,每次修改参数都需要重新标定。
3.2 用Python仿真FCS-MPC谐振抑制的最小样例
下面这段代码不是某个商业仿真包的完整工程,而是把FCS-MPC最核心的“遍历候选矢量”部分摘出来。参数按常见的10kW级NPC LCL并网逆变器设置,方便大家对照自己的仿真模型验证思路。
import numpy as np # NPC三电平LCL并网逆变器主参数 fs = 10000 # 控制频率 10kHz Ts = 1/fs L1 = 2e-3 # 逆变器侧电感 Cf = 4.7e-6 # 滤波电容 L2 = 2e-3 # 网侧电感(不含电网附加电感) Lg = 3e-3 # 弱电网附加电感(在线辨识值) L2p = L2 + Lg # 等效网侧电感 Vdc = 700 # 直流母线电压 Cdc = 2.2e-3 # 直流侧分压电容,用于中点电位计算 # 状态空间连续模型,x=[iL1a, iL1b, vCa, vCb, iL2a, iL2b] A_c = np.zeros((6, 6)) A_c[0, 2] = -1/L1 A_c[1, 3] = -1/L1 A_c[2, 0] = 1/Cf A_c[2, 4] = -1/Cf A_c[3, 1] = 1/Cf A_c[3, 5] = -1/Cf A_c[4, 2] = 1/L2p A_c[5, 3] = 1/L2p B_c = np.zeros((6, 2)) B_c[0, 0] = 1/L1 B_c[1, 1] = 1/L1 E_c = np.zeros((6, 2)) E_c[4, 0] = -1/L2p E_c[5, 1] = -1/L2p # 一阶欧拉离散,工程调试时建议换成零阶保持离散 A_d = np.eye(6) + A_c * Ts B_d = B_c * Ts E_d = E_c * Ts # 生成NPC三电平27个开关状态对应的alpha/beta电压 states = [-1, 0, 1] voltage_vectors = [] for sa in states: for sb in states: for sc in states: va = 0.5 * Vdc * sa vb = 0.5 * Vdc * sb vc = 0.5 * Vdc * sc valpha = (2.0/3.0) * (va - 0.5*(vb + vc)) vbeta = (2.0/3.0) * (0.866*(vb - vc)) voltage_vectors.append((np.array([sa, sb, sc]), np.array([valpha, vbeta]))) def predict(x, v_grid, v_inv): # 单步预测,未加延时补偿时直接用当前拍状态 return A_d @ x + B_d @ v_inv + E_d @ v_grid def select_vector(x, i2_ref, v_grid, lambda_d, lambda_np): best_state = None best_cost = float('inf') for switch_state, v_inv in voltage_vectors: x_k1 = predict(x, v_grid, v_inv) # 延时补偿:从k+1再预测一拍到k+2 x_k2 = predict(x_k1, v_grid, v_inv) i2_pred = x_k2[4:6] # 网侧电流预测值 ic_pred = x_k1[0:2] - x_k1[4:6] # 电容电流预测值 # 中点电位计算:由alpha/beta电流重构三相电流后, # 按当前开关状态求i_np,再更新v_np vnp = 0.0 # 调试时可先忽略,正式代码必须完整计算 cost = np.sum((i2_ref - i2_pred)**2) + \ lambda_d * np.sum(ic_pred**2) + \ lambda_np * vnp**2 if cost < best_cost: best_cost = cost best_state = switch_state return best_state, best_cost代码逻辑说明:predict函数完成一个控制周期的状态递推,select_vector对27个电压矢量逐一预测。先预测k+1状态,再用同一个输入预测k+2,这是对数字控制延时的一拍补偿。i2_pred取的是x_k2的网侧电流分量,因为k拍选择的开关状态实际要到k+2拍才体现在网侧电流上。ic_pred取k+1拍逆变器侧电流与网侧电流差值,用来感知谐振模态。
参数说明:i2_ref是外环给出的网侧电流参考值,通常由直流母线电压环或PQ功率环生成。λ_d初始可从0.1开始,观察电流波形;λ_np初始取0.05~0.1,若直流侧有独立均压电路可以置0。Lg在弱电网工况下不能用一个固定值,需要实时估计,第4章会给出常见做法。另外,这个示例用欧拉离散,当控制频率降到5kHz附近时,一定要换成零阶保持离散,否则预测相位误差会吃掉一部分阻尼裕量。
3.3 延时补偿为什么不能省
MPC在DSP上执行本身要消耗时间,从采样到输出开关状态往往落后一拍。如果不补偿,实际作用到桥臂的电压矢量比预测模型晚一个控制周期,等效于把系统的相位裕度又吃掉一块,LCL谐振峰附近更容易振荡。常见做法是两步预测:第一步先用上一拍的开关状态预测当前采样时刻对应的k+1状态,第二步再遍历候选矢量预测k+2状态。上面代码中的x_k2就是按这个思路写的。
这一步几乎是谐振抑制MPC从仿真稳定走向实验稳定的分水岭。仿真里不补偿延时也能跑,因为理想采样时刻和实际动作同步;换成真机后,调制波更新总是滞后,控制周期稍紧就会暴露问题。所以这节的代码里特意保留了两步预测结构。
4. 弱电网自适应的MPC调参:权重、预测时域与电网阻抗识别
MPC模型预测控制把传统控制器的“极点配置”问题转化为“权重选择”问题,调参直接影响谐振抑制效果。如果还按PI调参的思路一个一个试,很容易把λ_d调得过大,导致电流波形看起来平滑,但基波响应变慢,低次谐波反而上升。下面给一个相对规范化的调参路径和环境自适应方法。
4.1 MPC自身的LCL参数与Ts如何匹配
预测模型里每一个参数最终都会影响预测精度。L1和Cf是设计滤波器时确定的,误差不大;容易出问题的是L2',它包含了弱电网附加电感Lg。控制频率Ts决定离散化误差,经验上控制频率要高于LCL谐振频率的5~10倍。第2章的例子谐振频率大约1.6~2.3kHz,Ts取50~200us是可行的;若Ts小于200us,必须用零阶保持离散而不是欧拉近似。常见调参起点如下表:
| 参数 | 符号 | 初值 | 对谐振抑制的主要影响 |
|---|---|---|---|
| 控制周期 | Ts | 100us / 50us | Ts越大,离散误差越大,λ_d需要越保守 |
| 谐振抑制权重 | λ_d | 0.1~0.3 | 太大拖慢动态,太小压不住谐振峰 |
| 中点平衡权重 | λ_np | 0.05~0.1 | 影响中点电位波动,对谐振峰影响不大 |
| 预测时域 | Np | 1~2 | Np增大更接近最优控制,但计算量显著上升 |
| 电网电感估计值 | Lg | 先取最严重工况 | 估偏时系统会欠阻尼或过阻尼 |
预测时域Np超过2时,27个候选矢量会变成27^Np种组合,普通MCU很难在几十微秒内算完。工程上常用方案是先用价值函数筛选出大扇区,再在扇区内只评估少量矢量;或者把遍历从每个控制周期降为每两个周期一次,换取Np=2的滚动优化时间。弱电网场景下,单步预测加延时补偿已经能解决大部分谐振问题,不建议一上来就追求Np=3。
4.2 三电平NPC中点电位在代价函数里的处理
NPC三电平桥臂在输出零电平时,电流会从中性点流过,导致上下电容电压不平衡。长时间运行后,电压偏置会反映到桥臂输出电压上,并网电流产生偶次谐波。代价函数里的λ_np就是用来约束这个状态的。中点电流计算如下:
i_np = (1-|s_a|)·i_a + (1-|s_b|)·i_b + (1-|s_c|)·i_c
其中s_a、s_b、s_c取值为-1、0、1。然后中点电压更新为v_np(k+1)=v_np(k)+Ts·i_np/(2Cdc)。把v_np加入状态向量,MPC就能在选开关状态时判断这个矢量对中点电压的影响。λ_np过大会导致MPC牺牲电流跟踪性能去平衡中点,波形变差。通常先固定λ_d调出基本电流波形,再逐步加大λ_np,观察上下电容电压差是否收敛到±5V以内。
4.3 弱电网阻抗在线辨识:MPC自适应的前提
要让MPC真正适应弱电网,需要在线获得Lg。工程上常用短路比SCR描述电网强弱,SCR低于3就属于弱电网。忽略线路电阻时,Lg≈电网额定电压² / (SCR·额定功率·2π·50)。这个估算值适合作为MPC模型的初值,实际运行中再根据PCC电压和并网电流做在线修正。
最小二乘辨识利用的是PCC电压方程:v_pcc = v_g + Rg·i_g + Lg·di_g/dt。写成离散向量后,可以用带遗忘因子的递推最小二乘(RLS)估计Rg和Lg。下面给一段离线批量回归代码,方便先用录波数据验证公式,再移植到在线RLS:
import numpy as np def estimate_zg_offline(v_pcc, i_g, dt): # v_pcc: Nx1采样序列,i_g: Nx1采样序列 v = v_pcc[1:].reshape(-1, 1) i = i_g[1:].reshape(-1, 1) di = np.diff(i_g.flatten(), n=1).reshape(-1, 1) / dt H = np.hstack([np.ones_like(v), i, di]) # 增加常数项估计直流偏置,减少数值误差 theta, _, _, _ = np.linalg.lstsq(H, v, rcond=None) v_g_off, Rg, Lg = theta return float(v_g_off), float(Rg), float(Lg)参数说明:v_pcc和i_g必须同步采样,di由相邻两拍电流差除以dt得到,直接差分会放大采样噪声,所以在线版本要在di前面加一个500Hz~1kHz的低通滤波器。theta中的v_g_off是电网电压的等效直流偏置,在离线计算中用来吸收传感器零漂。在线RLS不需要求逆矩阵,只用协方差矩阵递推,计算量可以接受。
拿到Lg之后,更新L2p,再重新离散化A_d、B_d、E_d,让MPC预测模型跟随电网状态移动。这里要避免每个控制周期都更新离散矩阵,否则在线估计噪声会直接抖动到预测方程里,造成电流突变。常见做法是每20~50个控制周期更新一次,并对L2p加一阶低通滤波,比如当前值和前值各取50%平均。这样MPC的谐振抑制中心会平滑地跟随弱电网阻抗变化,这是固定参数有源阻尼做不到的。
5. 验证谐振抑制效果:从Bode图到电流FFT的实操技巧
MPC模型预测控制是变结构控制系统,严格意义上不能像线性控制器那样直接画出全频域开环Bode。工程上常用“工作点扫频+FFT”的组合验证方法。
5.1 用扫频小信号观察谐振峰是否被压住
在仿真或半实物平台上,让逆变器稳定工作在某个功率点,然后在PCC电压处叠加一个小幅正弦扰动,频率从500Hz扫到5kHz。每个扫频点运行几十个基波周期,等暂态消失后取并网电流做FFT,提取该扫频频率对应的电流幅值。把MPC的λ_d设为0和正常工作值各跑一遍,两条幅值曲线的差异就是谐振抑制效果。如果λ_d生效,原LCL谐振峰对应的频段电流幅值应该下降5dB以上,同时低频段幅值不应抬高。
扫频间隔可以取100Hz,但扫频扰动幅值不能设太大,否则系统会进入过调制,切换点附近出现大量边带谐波,FFT结果失去参考意义。小信号幅值建议取额定电压幅值的2%~5%,并在录波中同步记录PCC电压,确认注入扰动确实到达了PCC。
5.2 看阶跃响应和THD的联合指标
谐振抑制的最终评价不是频谱上有没有尖峰,而是并网电流THD和动态响应都满足并网要求。验证时分别做有功功率阶跃和电网阻抗阶跃。电网阻抗阶跃可以用可编程电网模拟器,或者用一个接触器把附加电感切入/切出。记录切入Lg前0.2s到切入后0.2s的电流波形,重点观察切入瞬间是否有持续衰减的等幅振荡。若在Lg=3mH时,电流波形在3~5个基波周期内恢复稳态,且稳态THD低于5%,基本可以认为抑制策略有效。
如果电网阻抗切换瞬间出现振荡,先不要急着加λ_d,而是检查延时补偿是否生效。常见现象是仿真中一切正常,半实物一台机就振,多半是采样到输出的实际延时比两步预测多出来的那一拍还要长,比如电流采样滤波引入额外延迟。此时应该在控制周期内把滤波器滞后也折算进预测模型,而不是单纯加宽λ_d。
5.3 λ_d的实际选点技巧
如果要快速找到合适的λ_d,建议不要一次一次试参数,而是把λ_d设成0.05、0.1、0.2、0.5、1.0五个值,分别记录电容电流RMS和并网电流THD。通常会看到:λ_d从0.05加到0.2时,THD快速下降;再往大加,THD下降趋缓,甚至低次谐波开始上升。取THD曲线拐点位置对应的λ_d,再留0.7~0.8倍裕量作为最终值,就能避开过阻尼和欠阻尼两侧的问题。
本文还有配套的精品资源,点击获取