构网型逆变器,特别是它的并网瞬间控制,一直是工程上的一个硬骨头。我最早接触这个课题是因为一次不太愉快的实验经历:一台已经稳定离网运行了几分钟的构网型变流器,在准备并网时,我没有做任何预同步处理直接下了合闸指令,结果并网瞬间的冲击电流直接冲到了额定电流的4倍以上,过流保护几乎是立刻动作。那次之后,我才真正把注意力放在预同步控制上。最近我把"基于自适应PI的构网型变流器预同步控制策略"完整复现了一遍,从理论推导到仿真调试,踩了不少坑,也理清了很多之前模糊的细节。这篇报告就是这次复现的记录,内容包括预同步的原理、为什么固定PI参数在这个场景下不好用、自适应PI的参数整定思路、完整的仿真实现方式,以及我在复现过程中踩过的坑和排查方法。
如果你正在做构网型变流器的并网控制,或者你只是在研究下垂控制、虚拟同步机的预同步环节,这篇文章应该能帮你少走不少弯路。即使你自己暂时不做复现,只是需要理解预同步策略的设计逻辑,也可以参考这里的思路。
1. 为什么要做预同步:从一次并网冲击事故说起
1.1 构网型变流器与跟网型的本质区别
要理解预同步,先要理解构网型变流器跟传统跟网型变流器的根本区别,这是整个后续讨论的基础。
跟网型变流器(PLL-based Grid-Following),它的本质是一个受控电流源。它通过锁相环实时跟踪电网电压的幅值、频率和相位,然后控制输出电流跟踪给定的有功无功指令。因为它的输出时时刻刻都在跟随电网,所以只要锁相环工作正常,它的电压天然就是和电网同步的。这种变流器并网合闸相对简单,因为它本来就"贴着"电网在运行。
构网型变流器(Grid-Forming)则完全不一样。它本质上是一个受控电压源。在离网运行状态下,它自己决定输出电压的频率和幅值,不依赖锁相环去跟随任何外部电压。最典型的下垂控制逻辑是:有功功率增大、频率下降,无功功率增大、电压幅值下降。这种控制模式让变流器像一个真正的发电机一样,能够自主建压建频,为弱电网或者纯离网负荷提供支撑。
但问题恰恰就出在"自主"上。由于构网型变流器离网运行时是在自由地建立自己的电压,而电网电压有自己的频率和相位,这两个"源"在没有主动干预的情况下,相位差会随着时间越拉越大。如果此时直接合闸并网,相当于两个电压源硬并联。
1.2 不预同步直接合闸会发生什么
两个电压源硬并联的后果,可以从一个简单的数学表达式看出来。忽略电阻,假设电网电压是 Vg,变流器输出电压是 Vv,连接电抗是 X,相位差是 Δθ,那么并网瞬间变流器输出的有功冲击功率近似为:
P ≈ (Vg × Vv / X) × sin(Δθ)
假设电抗标幺值是 0.1,两个电压都是额定值,相位差如果有10度,那这个冲击功率就是 sin(10°) / 0.1 ≈ 1.74 倍额定功率。冲击有功电流会以同样的比例直接反映在电流上。加上如果幅值也有偏差,无功冲击和潜在的直流分量都会叠加进来。我当时那个4倍额定电流的冲击,就是在相位差大约15度、幅值差大约8%的情况下合闸的结果。
从波形上看,合闸瞬间三相电流会出现一个尖锐的非对称尖峰,变压器或者滤波电感会发出明显的"嗡"的一声。如果是电流内环响应不快的机组,这个尖峰大概率直接触发硬件过流或者IGBT短路保护。更严重的,如果反复冲击,滤波电容、电抗器和功率模块的寿命都会受到影响。
1.3 预同步的目标:幅值、频率、相位对齐到"可接受的精度"
所以预同步控制要干的活归结起来就一句话:在并网合闸前,主动调整变流器输出电压的幅值、频率和相位,让它跟电网电压的差值缩小到一个工程上可接受的范围内,然后再合闸。
工程上"可接受"是有量化指标的。按照我个人的经验,合闸时相位差最好控制在2度以内,幅值差控制在2%~3%以内,频率差自然是和相位差联动——只要相位差收敛且保持稳定,频率差近似为零。这三个量满足条件后,合闸冲击电流可以控制在额定电流的1.2~1.5倍以内,这个量级对设备和断路器都是安全的。
这里说一个容易被忽略的细节:预同步不是让相位差严格变成零,而是让它在某个小范围内稳定。因为电网频率本身不是恒定不变的(会有±0.1Hz甚至更大的波动),所以相位差永远处于动态平衡中。只要相位差在允许范围内且波动可接受,就达到了合闸条件。这也是后面设计预同步PI参数时的一个重要约束——不能一味追求收敛速度快,否则稳定性和抗扰动能力反而会变差。
2. 预同步控制链路设计:从电网信息提取到补偿量注入
2.1 电网相位与幅值的信息获取
预同步控制的第一步是获取电网电压的相位和幅值。常用的做法是用锁相环(PLL)对电网电压进行同步。这里我用的是经典的SRF-PLL(同步旋转坐标系锁相环),它的原理是把三相电网电压变换到dq旋转坐标系下,通过调节q轴分量为零来锁定相位。在电网电压平衡的情况下,SRF-PLL的带宽可以做到100~300Hz,稳态精度在0.1度以内,满足预同步需求。
有一个细节要提醒:锁相环的输出并不直接等于电网相位,锁相环输出的相位本质上是一个与电网频率同步且q轴归零的积分结果。在电网三相平衡、畸变不大的理想条件下,可以近似认为PLL的输出 θg 就是电网A相电压的相位。但如果电网有畸变或者不平衡,PLL的动态误差会直接影响预同步精度。所以在我的复现模型中,电网侧刻意设置成理想电压源加微小的谐波含量,这样能更干净地观察到预同步控制本身的效果。
幅值信息 Vg 可以用两种方法获取:一种是对三相电网电压做dq变换后取d轴分量,另一种是计算三相电压的幅值平方和再开根号。前者更平滑,适合直接作为预同步幅值环的参考;后者动态响应快,但容易受谐波影响。考虑到预同步本身不需要太高的带宽,我选了前一种,也就是利用PLL旋转角度对齐后的d轴电压作为电网幅值参考。
2.2 预同步补偿量与下垂控制的叠加方式
获取了电网信息之后,关键问题是如何把预同步的补偿量注入到原有的构网型控制环路中。这涉及控制逻辑的改动,也是很多初学者容易犯迷糊的地方。先说一下构网型变流器传统下垂控制的参考值产生过程:
- 频率参考:ω = ω0 - m × P,其中 ω0 是空载频率,m 是有功下垂系数,P 是实测有功功率。
- 电压幅值参考:V = V0 - n × Q,其中 V0 是空载电压幅值,n 是无功下垂系数,Q 是实测无功功率。
- 相位由频率积分得到:θ = ∫ω dt。
预同步模块叠加之后的参考值变成了:
- ω_ref = ω0 - m × P + Δω_pre
- V_ref = V0 - n × Q + ΔV_pre
其中 Δω_pre 来自预同步相位环PI调节器的输出,ΔV_pre 来自预同步幅值环PI调节器的输出。这样设计的好处是:预同步模块只是在原下垂参考值上做了一个平移,不影响构网型变流器原有的"自主建压"特性。一旦并网完成,预同步模块退出,变流器立即恢复纯下垂控制,整个过程是平滑切换的。
2.3 固定PI在预同步场景下的"原罪"
很多第一次做预同步的人,包括我自己,最开始都是简单地给相位差和幅值差各配一个固定PI参数,然后看仿真波形。结果通常不理想,而且会让人困惑:明明PI参数调好了,为什么换一个初始相位差就不行?
原因在于预同步过程是一个大动态范围的过程。设电网相位是 θg,变流器输出电压相位是 θv,相位差 Δθ = θg - θv。离网运行时间越长,Δθ 越大。从极端情况看,Δθ 可能从几十度甚至上百度的初始值,一路被调节到1度以内的收敛值。这个过程误差从大到小跨越了一到两个数量级。
固定PI的局限性在这里暴露得很明显。如果按照初始大误差来整定参数,Kp 就得取的比较大,否则收敛速度太慢,预同步要花两三秒甚至更久;但大Kp在误差较小时会产生明显的超调和振荡,相位差会在零附近来回摆动,迟迟无法稳定在1度以内。反过来,如果按照小误差来整定参数,用较小的Kp去换平稳性,那初始大误差阶段的收敛会非常迟钝,工程上根本等不起。
我复现时做过一组固定PI的对照实验:Kp=3,Ki=50,初始相位差35度,相位差收敛到1度以内耗时约0.8秒,但超调量达到8度左右。把Kp降到0.8以后,超调几乎没了,但收敛时间拉长到2.5秒以上。这个矛盾是固定PI结构上的缺陷,不是调参技巧能解决的。预同步这个场景天然需要一个"误差大时动作快、误差小时动作稳"的调节器,自适应PI就是基于这个需求应运而生的。
3. 自适应PI的设计:按误差分段调增益的思路与代码
3.1 自适应规则:大误差快逼近,小误差细对准
我采用的自适应PI策略并不复杂,核心思想是按误差幅值分段切换调节器增益,本质上是一种增益调度(Gain Scheduling)策略。根据相位差的大小,把整个预同步过程分成三段:
- 第一阶段(误差大):要求快速逼近,Kp取大值、Ki取小值,比例主导,让相位差快速被拉到接近目标的范围。
- 第二阶段(误差中等):要求平稳过渡,Kp适当减小、Ki适当增大,比例和积分共同作用,保证收敛速度的同时抑制超调。
- 第三阶段(误差小):要求精细对准,Kp进一步减小、Ki增大,积分主导,让相位差慢慢被"吸"到零附近,同时保持稳定。
具体参数我在复现中取的值如下(以相位环为例,rad单位和pu制):
| 相位差绝对值区间 | Kp | Ki | 设计目标 |
|---|---|---|---|
| ≥ 0.15 rad(约8.6°) | 6.0 | 20 | 大误差快速拉入,比例主导 |
| 0.02 ~ 0.15 rad | 3.0 | 60 | 中等误差平稳过渡 |
| < 0.02 rad(约1.1°) | 0.5 | 120 | 小误差精细对准,积分主导 |
这套规则背后的逻辑很朴素:误差大的时候,宁可牺牲一点稳定性也要保证快速性,因为此时离目标还很远,超调的空间很大;误差小的时候,如果还用大比例增益,系统会在目标值附近来回振荡,此时必须把比重交给积分,让相位差缓慢但确定地收敛到允许范围。
幅值环的自适应逻辑类似,只不过误差阈值和增益大小不同。因为我设置的场景是离网额定电压输出,幅值差初始时就5%左右,动态范围没有相位差那么大,所以幅值环只用了两段:误差大于2%时用中增益,误差小于2%时用小增益大积分。
3.2 MATLAB/Simulink实现细节:两种方案对比
在Simulink里实现自适应PI有两种常见方式,我都试过,各有利弊。第一种是用一个MATLAB Function模块(也就是编译器生成代码的嵌入式函数块)来实时计算增益,然后送给两个乘法器去调节原PI模块的输入输出增益。这种方案代码直观、易于调试,但给代码生成到嵌入式控制器时,需要注意函数块的可变输入输出数据类型的支持问题。
第二种更接近工程实现的做法,是直接在Simulink的函数模块里把整个增益调度逻辑写成输出 Kp 和 Ki 两个量的函数,然后在Simulink的连续PI模块的外部做增益相乘。我复现时用的是第二种,代码大致是这样:
function [Kp, Ki] = adaptive_pi_gain(e, th1, th2, Kp_large, Kp_mid, Kp_small, Ki_large, Ki_mid, Ki_small) % 按误差绝对值分段计算增益 % e: 输入的误差(相位差或幅值差) % th1 为大误差阈值,th2 为小误差阈值 abs_e = abs(e); if abs_e >= th1 Kp = Kp_large; Ki = Ki_large; elseif abs_e >= th2 Kp = Kp_mid; Ki = Ki_mid; else Kp = Kp_small; Ki = Ki_small; end然后在Simulink中,把误差信号 e 同时送入这个增益计算函数和原PI模块的输入,把计算出的 Kp、Ki 分别与PI模块内部的比例路径、积分路径输出相乘。关键点在于原PI模块的积分器要实现外部重置(external reset)功能,这样当增益切换时,积分值不会因为增益跳变而产生台阶。
3.3 增益切换的平滑化处理
直接按上述代码进行增益切换,会有一个实际工程中绕不开的坑:Kp和Ki在切换瞬间会发生跳变,导致PI输出突变。这个突变反映到控制量上就是频率参考或电压幅值参考的阶跃,可能引发电磁暂态上的抖动和噪声。
解决办法是对增益切换做平滑过渡。最简洁的实现方式是在切换点附近做一个线性插值,让增益在一定的时间常数(比如5~10ms)内从当前值渐变到目标值。另一种更工程化的做法是对Kp、Ki本身做一阶低通滤波,让增益在任何时候都不会突变。举例来说,当误差从0.14 rad降到0.02 rad以下时,Kp从3.0平滑降低到0.5,而不是瞬间跳变。一个简单的一阶惯性滤波实现如下:
function Kp_filtered = gain_filter(Kp_ref, Kp_prev, T_filter, Ts) % 一阶低通滤波,T_filter为滤波时间常数,Ts为采样周期 alpha = Ts / (T_filter + Ts); Kp_filtered = Kp_prev + alpha * (Kp_ref - Kp_prev); end在仿真中,我给Kp设了5ms的滤波时间常数,给Ki设了10ms的滤波时间常数(因为积分增益突变比比例增益突变危害更大)。加上滤波之后,预同步输出的频率参考值波形变得平滑,几乎没有毛刺。
4. 仿真复现全过程:模型、参数与波形验证
4.1 主电路与控制器参数设置
整个仿真在MATLAB/Simulink中完成,模型由主电路、控制系统和并网逻辑三部分组成。主电路用Simscape Electrical搭建,包含直流电压源、三相桥臂、LCL滤波器、断路器、电网以及本地负载;控制系统用普通Simulink模块搭建,包含下垂控制环、电压电流双闭环内环、预同步模块和自适应PI。
系统参数如下:
| 参数 | 数值 | 说明 |
|---|---|---|
| 额定功率 | 50 kW | — |
| 电网线电压有效值 | 380 V / 50 Hz | — |
| 直流母线电压 | 700 V | 由理想直流源提供 |
| LCL滤波 | L1=0.8 mH, C=30 μF, L2=0.15 mH | 阻尼采用无源阻尼电阻 |
| 开关频率 | 8 kHz | 双极性PWM |
| 有功下垂系数 m | 0.01 rad/(s·kW) | 满载频率跌落约0.5Hz |
| 无功下垂系数 n | 0.02 V/kvar | 满载幅值跌落约2% |
| 电网短路比 | 2.5 | 通过电网阻抗模拟弱电网 |
预同步控制的运行流程是:t=0时刻变流器带本地负载离网运行;t=0.5s时启动预同步模块,此时通过一个初始相位偏移设置(把变流器输出电压相位相较于电网偏移约35度),模拟离网期间累积的相位漂移;当相位差小于0.5度且幅值差小于2%时,控制系统向断路器发出合闸信号,t=1s时合闸。
4.2 预同步阶段波形:相位差与幅值差的收敛过程
先看自适应PI下预同步阶段的波形趋势。启动预同步后,相位差Δθ的初始值约为35度(0.61 rad)。按照我设置的自适应阈值,0.61 rad大于0.15 rad,处于第一阶段,Kp=6、Ki=20。此时相位差以大约每秒200度以上的速率快速减小,变流器输出的频率参考值整体上升(因为要赶超电网相位),从50Hz快速抬升到大约50.4Hz左右,然后随着相位差减小逐渐回落。
在大约0.12秒后,相位差降到0.15 rad以下,进入第二阶段,Kp降到3.0、Ki升到60。从波形上可以看到,相位差的下降速率变缓,但依然稳步收敛。这个阶段是最容易出现超调的区间,我后来仔细观察了波形,在相位差从10度降到3度的过程中,曲线的"惯性"感明显变弱,没有出现固定PI那种明显冲过零点的迹象。
大约在0.35秒左右,相位差降到0.02 rad(约1.1度)以下,进入第三阶段。此时积分主导,Kp只有0.5、Ki有120,相位差被非常缓慢但稳定地"拖"向零。最终在t≈0.75s左右,相位差稳定在0.2度以内波动,完全满足我设定的0.5度合闸条件。整个预同步用时约0.25秒(从启动到达到合闸条件),相比固定PI中增益方案的0.8秒快了3倍多,比小增益方案更是快了8倍以上。
幅值差这边,初始约5%,在幅值环PI作用下,大约0.4秒收敛到1%以内。需要注意幅值环和相位环不是完全解耦的,我在下一节会详细讲这个问题。
4.3 合闸冲击电流对比:固定PI和自适应PI
预同步最终是为合闸服务的,所以最核心的评判标准是合闸那一刻的冲击电流大小。我做了三组对比:
| 控制方案 | 预同步收敛时间 | 合闸相位差 | 合闸电流峰值(标幺值) |
|---|---|---|---|
| 固定PI(Kp=3,Ki=50) | 0.8s | 约1.5度 | 2.6 pu |
| 固定PI(Kp=0.8,Ki=20) | 2.5s | 约2.0度 | 2.2 pu |
| 自适应PI | 0.25s | 约0.3度 | 1.3 pu |
这里提一下为什么固定小增益方案合闸电流也有2.2 pu——因为已经满足合闸逻辑(相位差<2度),但合闸时仍存在约2度的残余相位差,再加上幅值差和负载切换的暂态过程,冲击电流依然不小。而自适应PI在合闸时相位差只有0.3度,这个差异直接反映在冲击电流上。从A相电流波形看,自适应PI合闸瞬间波形几乎没有畸变,电流在一个工频周期内就平稳过渡到逆变器输出额定电流;固定PI方案合闸瞬间则有一个明显的尖峰,大约3~4ms后衰减到稳态值。
4.4 抗扰动性测试:电网频率扰动下的表现
实际电网的频率不是恒定的50Hz,而是围绕50Hz小幅波动。为了验证自适应PI策略在电网频率扰动下的鲁棒性,我在仿真中叠加了一个0.2Hz的正弦频率扰动(模拟电网频率波动)。
固定PI方案在这个扰动下暴露了一个问题:当预同步收敛到小误差区间后,如果电网频率持续波动,固定大Kp会让相位差跟随扰动剧烈动作,预同步输出频率参考值出现明显的抖动,合闸逻辑频繁满足又不满足,可能反复触发合闸——这是工程上非常忌讳的情况。
自适应PI在进入第三阶段后,Kp被刻意调小、Ki调大,相当于对高频的电网频率扰动做了一个低通。相位差在扰动下维持在0.5度以内波动,预同步模块输出平滑,合闸指令稳定可靠。这个测试让我确信,自适应PI不仅仅是为了"快",更是为了"稳",两者在这个策略里是统一体。
5. 复现过程中的坑与排查思路
5.1 相位环与幅值环的耦合问题
我最初的设计里,相位环和幅值环完全独立,互不通信。但仿真中发现一个现象:相位差收敛得很好的时候,幅值差突然出现了一个阶梯状的跳变。排查之后定位到原因:在弱电网(SCR=2.5)条件下,变流器输出的有功功率变化会显著影响公共连接点的电压幅值。相位差快速收敛意味着有功输出快速变化,预同步幅值环还没反应,电压幅值已经被有功功率的波动"带跑"了。
这个耦合关系在强电网里基本可以忽略,但在弱电网工况下必须处理。我的解决方案是:在预同步启动的第一阶段(相位差较大),主动降低幅值环的带宽;等相位差进入小误差区间后,再恢复幅值环的调节能力。实现上很简单,就是把幅值环的自适应阈值和相位环联动——相位差大于0.05 rad时,幅值环Ki限制在一个小值;小于0.05 rad后,恢复正常增益。
这么做背后的工程逻辑是:相位差是合闸条件中最难满足的硬指标,幅值差稍微滞后一点影响不大。优先把相位差收敛到合闸范围内,再处理幅值差,两个环之间的动态耦合风险就大大降低了。
5.2 增益切换瞬间的输出抖动
这是我在仿真里观察到的最难察觉的一个问题。最初实现自适应PI时,我用的是直接切换,没有做增益平滑。波形上看,预同步功能是正常的,相位差也收敛了,但把波形放大到细节会发现,每次增益切换的瞬间,变流器输出电压的相角会有一个肉眼几乎不可见但数值存在的突变。这个突变对合闸本身影响不大,但会带来两个隐性危害:一是电压畸变率微微升高,二是对PLL环节造成扰动,可能引发PLL的瞬态响应。
排查思路是这样的:先用示波器把切换瞬间的频率参考值放大,发现频率参考值有约0.1Hz的跳变。然后倒推——频率参考是由有功下垂输出叠加预同步Δω得到的,Δω的变化来自相位环PI输出。PI输出在增益切换瞬间跳变,说明增益跳变直接注入了控制量。确认根因后,加上增益低通滤波,问题消失。这个坑也再次验证了工程上"控制量变化率限制"的重要性,任何控制器参数突变,都会以某种形式体现到最终输出上。
5.3 仿真步长对合闸条件判定的影响
还有一个容易被忽略的问题来自仿真步长。我一开始为了加快仿真速度,把步长设成了100微秒。结果发现谐振到50Hz工频下,100微秒步长对应的相位分辨率是50Hz×100μs×360°=1.8度。也就是说,在判断"相位差小于0.5度"这么小的合闸条件时,仿真器根本分辨不出来——相位差在1.8度的量化台阶上跳来跳去,合闸条件永远无法满足。
我把步长改到5微秒后,相位分辨率变为0.09度,这个精度足够判断0.5度的合闸条件了。如果你在复现时发现合闸逻辑迟迟不触发,先别急着怀疑控制算法,检查一下仿真步长可能是个更高效的排查方向。对于含PWM和LCL滤波的构网型模型,建议步长不要大于系统开关周期的1/20,也就是8kHz开关频率下步长不要超过6微秒。
另外还有一个容易被忽视的逻辑细节:合闸条件判定时,相位差必须连续满足条件一段时间(比如10ms以上),而不是瞬时满足就触发合闸。这是因为相位差本身是瞬时值,可能在合闸判定瞬间碰巧满足,但马上又偏离。加入持续判定逻辑后,实际合闸可靠性和波形一致性都明显提高了。
6. 复现后的几点体会
这次完整复现做下来,我最大的感受是:预同步这个环节,表面上看只是加了一个同步控制器,但真正把它做好,需要的是对整个构网型控制体系的理解,包括下垂控制的下垂特性如何与同步控制交互、弱电网条件下各个控制环之间如何耦合、以及合闸逻辑与时序如何与控制环配合。自适应PI在其中扮演的角色,一方面是解决了大误差快速性和小误差稳定性的矛盾,另一方面也天然提供了一种抗扰动能力——它把频率波动带来的相位扰动当成了"中等误差"处理,而不是以固定增益去硬扛。
从仿真实测来看,和固定PI相比,自适应PI在收敛速度上的提升是非常可观的(0.25s对比0.8s),合闸冲击电流也从2.6倍额定电流降到了1.3倍。如果你接下来要做硬件实验,我建议在DSP或者FPGA中实现自适应PI时,优先用查表法配合增益平滑滤波;同时一定预留预同步模块的使能和退出信号,让它能和并网时序逻辑正确配合。如果遇到相位差收敛但幅值差反复波动的情况,也可以从我上面提到的相位幅值耦合角度去分析,大概率能快速定位到问题所在。