做光伏混合储能VSG并网仿真这个项目,起因是手里有一个弱电网场景下的光伏电站接入问题。光伏本身没有惯量,储能如果不加控制也只是个功率源,电网一有波动,整个系统就在那里晃。VSG(虚拟同步机)的思路,就是把并网逆变器控制成一台“虚拟的同步发电机”,让系统具备惯量和阻尼特性。这篇文章把我搭建这套仿真模型的完整流程、参数整定方法、工况设计和踩过的坑全部整理出来,打算复现这个方向的朋友可以直接抄作业。
1. 项目背景与整体设计思路
1.1 为什么是“光伏+混合储能+VSG”这个组合
先聊项目起点。光伏并网最大的问题是出力随光照、温度剧烈变化,而且逆变器接口没有转动惯量,对电网来说相当于一个“硬功率源”。一旦电网频率波动,光伏帮不上忙,反而可能因为自身出力波动加剧系统振荡。在弱电网场景下,这个矛盾尤其明显。
解决思路就是加储能。但储能不是随便配一组电池就完事。系统功率波动有快有慢:光伏云层遮挡可能在秒级产生大幅功率跌落,负荷投切也是瞬态事件,而长时间的能量搬移则是分钟级甚至小时级的任务。单一储能很难同时扛住高频冲击和低频长时功率平衡。所以这里选用混合储能:蓄电池+超级电容,两者形成互补。
| 储能类型 | 能量密度 | 功率密度 | 响应速度 | 循环寿命 | 扮演角色 |
|---|---|---|---|---|---|
| 蓄电池 | 高 | 低 | 秒级 | 短 | 能量型,承担低频功率波动 |
| 超级电容 | 低 | 高 | 毫秒级 | 长 | 功率型,吸收高频冲击 |
VSG的价值则是从逆变器控制层面引入“虚拟的转动惯量”。它把同步发电机的转子运动方程搬到逆变器控制算法里,让逆变器对外呈现类似同步机的频率响应特性。这样一来,光伏+储能系统并网后不再是一个被动跟随的功率源,而是能主动参与电网频率调节、阻尼振荡的“友好型电源”。
1.2 系统拓扑选型:共直流母线还是交流耦合
混合储能和光伏的集成方式,我在项目里对比过两种方案:交流耦合和共直流母线。
交流耦合的优点是各部分独立性强,光伏、储能各自通过逆变器并网,改造成本低,适合在已有光伏电站上加装储能。但缺点也很明显:多一级DC/AC变换,效率下降,控制协调复杂度升高,而且VSG要同时协调多台逆变器,策略实现起来很麻烦。
我最终选择的是共直流母线拓扑:光伏通过Boost变换器升压到直流母线,蓄电池和超级电容分别通过双向Buck-Boost变换器接入母线,母线再统一接到三相全桥逆变器,逆变器经LCL滤波器并网。这样整个系统只有一级DC/AC变换,效率更高,而且VSG控制在逆变器这一级就能统一实现,储能和光伏只需要管理直流母线的功率平衡。
整个仿真在MATLAB/Simulink里搭建,电气部分用Simscape Electrical(原SimPowerSystems)工具箱,控制部分用普通离散模块。版本用的是R2022a,模型跑得比较稳。
2. VSG的核心原理与参数整定方法
2.1 把转子运动方程“搬”进逆变器控制
VSG的本质,是用控制算法去模拟同步发电机的电磁暂态和机电暂态特性。同步发电机最核心的数学模型是转子运动方程:
J·(dω/dt) = Pm - Pe - D·(ω - ωn)
其中J是转动惯量,ω是虚拟机角速度,ωn是电网额定角速度,Pm是机械功率(在VSG中对应给定的有功功率指令),Pe是电磁功率(对应逆变器输出有功功率),D是阻尼系数。
把这个方程实时求解出来的ω积分,就得到虚拟转子角度θ,再用θ去驱动逆变器的PWM波相位。这样输出的电压相角就会像真实同步机一样,在功率不平衡时缓慢摆动而不是突变。
另外还有无功-电压控制环,模拟同步发电机的励磁调节:
E = E0 + Kq·(Qn - Q)
其中E是虚拟电势幅值,E0是空载电势,Kq是电压调差系数,Qn是额定无功,Q是逆变器实际输出无功。
理解VSG的关键,是要明白它并不真正“储”能量,而是在控制层面把变化的规律造出来。它的惯量效应来自控制环路的动态响应,不是来自物理旋转体。所以J给得越大,逆变器输出频率变化越慢,但功率振荡周期也越长;D给得越大,对频率偏差的阻尼越强,但动态响应会变得迟钝。
2.2 J和D参数到底怎么取
这是整个项目里最考究经验的部分。VSG参数没有绝对的“标准答案”,它和系统容量、电网强度、滤波参数都有关。
我习惯按标幺值来整定。以本系统额定容量10kVA为例,基准角频率ωn = 314 rad/s(50Hz对应的电角速度)。先算基准转动惯量:
H = (0.5·J·ωn²) / Sn
其中H是惯量时间常数,单位是秒,Sn是额定容量。真实同步机的H通常在2~8s之间。仿真开始时我按H=4s来取J,反向算:
J = (2·H·Sn) / ωn² = (2×4×10000) / (314²) ≈ 0.81 kg·m²
D的取值思路是:在额定频率变化1%(即0.5Hz)时,输出功率变化100%额定功率。按这个条件:
D = ΔP / (ωn·Δω) = Sn / (ωn × 0.01 × ωn) = 10000 / (314 × 3.14) ≈ 10.1 N·m·s/rad
注意D的单位在标幺转化后,实际操作中常直接代入转子运动方程。建议先按上述初值仿真,观察有功阶跃响应波形,再微调:超调大、振荡衰减慢就增大D或减小J;响应太慢、频率跌落太深就减小J或降低D。
另一个实践技巧:把J设成光伏/储能输出功率的函数,实现“变惯量VSG”。功率大时J大,让系统在高功率区间更稳;功率小时J小,保持灵活响应。这个扩展功能我在后面优化阶段才加,初版仿真先用定值J,先把基础逻辑跑通。
2.3 一次调频和一次调压的下垂系数
VSG除了模拟惯量和阻尼,还必须具备一次调频能力。有功-频率下垂的表达式为:
Pref = P0 + Kp·(ωn - ω)
其中Kp是有功下垂系数,P0是参考功率。Kp取值按照系统要求的调差率来定。调差率通常取3%~5%,意思是频率从额定变化5%时,输出功率从0变化到额定。那么Kp = Sn / (0.05×ωn),按10kVA系统计算约0.637 kW·s/rad。
无功-电压下垂Kq:按电网导则要求,电压偏差5%时无功输出达到额定,Kq = Qn / (0.05×Un),仿真里取Un = 311V(相电压峰值),Qn = 5kVar,算下来Kq约321 Var/V。
下垂系数太大,系统调压调频能力强,但容易稳定裕度不足;太小,则参与调节有限。我的建议是:先按5%调差率给初值,再通过频域分析(看控制环路的Bode图和闭环主导极点)确认稳定裕度,最后用时域仿真验证。
3. 仿真建模实操:各环节参数计算与配置
3.1 光伏阵列与MPPT控制
光伏阵列用Simscape Electrical里的PV Array模块。组件参数我选的是典型250W组件,设置20串、2并,额定功率约10kW,与VSG容量匹配。
关键参数:开路电压、短路电流、MPPT电压、MPPT电流,这些从组件数据手册获取。仿真时较容易忽略的是标准测试条件(STC,辐照1000W/m²、温度25℃)之外的工作点,我额外做了两组工况,一组辐照800W/m²,一组600W/m²,用来测试MPPT在辐照突变后的跟踪行为。
MPPT我用扰动观察法(P&O),原理是周期性地小幅扰动光伏输出电压,比较扰动前后功率变化决定下一步扰动方向。P&O的优点是实现简单、不需要光照传感器,缺点是在稳态下会有功率小幅振荡。
扰动步长的选择需要权衡:步长太大,MPPT稳态振荡明显,直流母线电压纹波变大;步长太小,光照剧烈变化时跟踪速度跟不上。我最后取扰动步长0.5V,采样周期0.01s。实测辐照从1000骤降到600W/m²时,MPPT能在约0.3s内找回新最大功率点,母线电压跌落控制在6%以内,效果能满足后续VSG控制的输入要求。
Boost升压电路的参数:开关频率10kHz,电感按电流纹波≤20%计算,取L = (Uin×D) / (f×ΔI),工作点在输入电压约300V、输出电压600V时占空比D=0.5,ΔI取5A,算得L ≈ 3mH,实际取3.3mH。母线电容取2000μF,作用是支撑母线电压、抑制功率波动。
3.2 混合储能双向DC/DC控制与功率分配
混合储能的控制核心是功率分配策略。我采用一阶低通滤波器做频率分离:直流母线功率缺额信号经过低通滤波器后,低频分量给蓄电池参考,高频分量给超级电容参考。
滤波器截止频率的选择:超级电容一般响应10Hz以上的功率波动可能不现实,受其电压范围限制。我这里取截止频率0.5Hz,意思是以0.5Hz为界,低于该频率的功率波动主要由蓄电池承担,高于该频率的冲击由超容承担。这个值是在仿真实测后调整过的:一开始取0.2Hz时,超容容量很大但利用率低;取1Hz时蓄电池纹波电流明显增大。0.5Hz是这台系统的折中。
蓄电池双向Buck-Boost变换器采用电流内环+功率外环控制,外环给定的是低通滤波后的功率指令,除以蓄电池端口电压后得到电流指令,内环用PI调节器控制电感电流跟踪指令。蓄电池模型用Simscape的Battery模块,额定电压360V,容量100Ah,初始SOC设为70%。
超级电容支路同理,电压范围我用的是150V~250V,通过双向DCDC接入600V母线。它的控制环是功率外环+电流内环,但限制条件多一个:SOC(实际是剩余能量)必须在20%~90%之间,低于20%时降额运行,防止超容过放。
超容模型参数:一个模块等效电容2.91F、内阻90mΩ,我串了10个等效模块提高电压等级。初版仿真我犯过一个错:超容SOC直接用电压比率算,结果在高压侧小变化对应能量大变化,导致控制震荡。正确做法是用超级电容能量公式E=0.5·C·U²反算SOC,控制效果平顺很多。
3.3 三相逆变器与LCL滤波器参数设计
逆变器直流母线电压600V,三相全桥拓扑,开关频率设定10kHz。VSG生成的参考电压经过电压电流双闭环后,用SPWM调制产生六个IGBT的驱动信号。
LCL滤波参数是这次仿真里改得最多次的部分。LCL相比单L电感的优势是高频衰减性能好,可以用更小的总电感量满足并网谐波要求。设计需满足三大约束:
- 总电感感抗压降不超过额定相电压的10%
- 谐振频率在10倍电网频率(500Hz)和0.5倍开关频率(5kHz)之间
- 滤波电容吸收的无功功率不超过系统额定无功的5%
具体计算:逆变器侧电感L1取2mH,网侧电感L2取1mH,总感抗2π×50×3mH≈0.94Ω,额定相电流约21.5A,基波压降约20V,对额定相电压220V占比9%,勉强合格。滤波电容Cf取10μF,产生的无功Qc=3×220²×2π×50×10μF≈456Var,占额定10kVar的4.6%,在5%以内。谐振频率:
fres = 1/(2π) × sqrt((L1+L2)/(L1×L2×Cf)) ≈ 1950Hz
落在500Hz~5kHz区间,设计合理。
但仿真中无阻尼LCL直接并网容易谐振,因为实际电网阻抗变化可能让谐振点发生偏移,而且数字控制延时会降低阻尼。我采用无源阻尼方案:在Cf支路串联电阻,电阻值取谐振角频率处电容容抗的1/3左右:
R = 1/(3×2π×fres×Cf) ≈ 2.7Ω
取3Ω无感电阻。代价是增加损耗,但仿真任务里关注的是控制逻辑,这个损耗可以接受。若做效率分析,可以考虑后续改用有源阻尼(电容电流反馈法),效果类似但无额外损耗。
3.4 VSG并网控制的完整信号流
这节把VSG的控制链路串一遍。我在仿真模型里用三级结构:
第一级:采样三相输出电压Uabc和输出电流Iabc,用瞬时功率公式计算有功P和无功Q。注意电压采样点选在滤波电容处,而非电网侧,因为VSG控制的是逆变器机端电压。
第二级:将P、Q送入VSG算法模块。模块内部分两部分:
- 有功频率环:用下垂方程P0+Kp(ωn-ω)得到虚拟机械功率,减去当前Pe,代入转子运动方程求解ω,再积分得到虚拟角度θ
- 无功电压环:按E=E0+Kq(Qn-Q)得到虚拟电势幅值
第三级:将E和θ合成为三相参考电压,进入电压外环和电流内环。电压外环用PI调节器控制滤波电容电压跟踪参考值,输出作为电流内环指令。电流内环用PI调节器控制逆变器侧电感电流。
电流内环的PI参数我按工程设计法整定:电流环截止频率设为开关频率的1/10即1000Hz,相位裕度45°以上。通过传递函数推导,Kp = L1×ωc,Ki = L1×ωc×R1/L1(R1是电感电阻,此处忽略),离散化用后向欧拉法。电压外环的截止频率取电流环的1/5,约200Hz,参数按典型II型系统整定。
VSG算法模块必须注意初始化问题:并网前θ要与电网同步,不能从0开始。我直接加入预同步环节:并网前实时检测电网电压相位θg,通过锁相环(PLL)获取,然后用θg作为VSG虚拟角度的初始值,同时将ω初始化为314rad/s,这样并网瞬间角度差最小,冲击电流才能压下来。
4. 仿真工况设计与结果分析
4.1 工况一:辐照突变时光伏与储能的动态配合
第一个工况模拟太阳能云层遮挡:t=0.5s时辐照从1000W/m²突降到600W/m²,持续2s后恢复。
这个过程中,光伏输出功率瞬间下降了约4kW。此时直流母线出现功率缺额,母线电压下跌。VSG检测到输出功率变化后,其输出频率先发生动态偏移,然后一次调频环节逐步修正。同时储能控制系统的功率分配逻辑检测到母线功率缺额中的高频分量,超级电容在0.05s内释放功率支撑母线电压;蓄电池则慢一些,在0.5s时间尺度上补充能量。
仿真结果:直流母线电压最大跌落约38V,占比6.3%,超容在1s内完成高频分量放电,蓄电池逐步接管长时间功率支撑。整个过程中,VSG的输出频率最大偏差0.12Hz,恢复时间约1.2s,对比不加VSG控制的工况,频率跌落了0.35Hz且恢复时间接近3s。
这里要注意:储能系统承担的是母线功率平衡,VSG承担的是并网暂态支撑,两者必须协调,否则会出现“储能拼命顶功率、VSG同时也在调频率”的矛盾。我的做法是把VSG的有功功率指令Pref直接引自直流母线功率平衡控制器,让VSG看到的需求和储能看到的需求来源一致,从源头避免控制冲突。
4.2 工况二:并网点负荷突增
第二个工况模拟本地负荷突然接入,并网点功率需求瞬间增大。t=3s时负荷功率从5kW跳到12kW,考验VSG的惯量响应能力。
接入瞬间,逆变器输出功率阶跃增大,按同步机特性,VSG的虚拟转子角速度应逐渐下降,不能突变。仿真波形显示:频率从50Hz缓慢下降,最低跌到49.78Hz,变化率约0.32Hz/s,这个斜率是J参数起的作用。如果没有J的惯量支撑,频率会瞬间跌落,这在强电网下可能不明显,在弱电网场景就会触发低周减载装置。
D参数则决定了振荡能否快速平息。我对比了D=5和D=15两组参数:D=5时功率振荡了6个周期才收敛;D=15时2个周期就贴回稳态,但初期频率跌落略深。原因是阻尼大时,功率调节行为更“急”,频率下降略快。实际取舍要看系统对频率偏差和振荡衰减的要求。
4.3 工况三:VSG预同步并网瞬间
第三个工况是重头戏,验证预同步控制防止并网冲击的效果。仿真里,逆变器先在离网模式下发电带本地负载,然后准备并网。如果不做预同步直接合闸,电网和机端电压存在相位差,合闸瞬间会产生很大的冲击电流,严重时波形直接畸变。
我的预同步实现分三步:
- 用PLL锁定电网电压频率和相位
- 调整VSG虚拟角速度,使输出相位逐步追上电网相位,目标相位差小于0.1rad
- 幅值匹配:用无功电压环将输出电压幅值调到与电网幅值一致,偏差小于3V
完成预同步后,发出并网信号,将VSG切换到并网模式。实测并网瞬间冲击电流峰值为1.6A,约为额定电流的7.5%,基本可以接受。如果没做预同步,最大冲击电流能冲到30A以上,非常夸张。
这个工况我提醒一句:PLL和VSG同时运行时要注意二者不要打架。VSG本身有自己的频率和相位,PLL也在跟踪电网相位,两者如果都输出角度信号,就必须明确谁驱动电压矢量、谁只做预同步观测。我在模型里将PLL输出的相位仅用于并网前的同步比较,一旦并网完成就断开预同步通路,完全由VSG自己生成的θ驱动,避免双相位源冲突。
5. 常见问题与排查技巧实录
5.1 仿真发散:第一个要查的其实不是参数
仿真一上来就发散,是最劝退的问题。我遇到的情况有几种:
- 求解器步长过大。Simscape Electrical连续模型建议用变步长ode23tb,我这套模型最大步长限制在10μs以内,一开始用默认步长就会在IGBT开关瞬间发散。
- 代数环。VSG算法输出θ后立刻被用于PWM生成,如果模块没有memory或延迟单元,Simulink会报代数环错误,看起来是仿真跑不动,其实是逻辑回路没有解耦。解决办法是在VSG指令电压后加一个Unit Delay或Memory,牺牲一个周期的延时,换来来仿真稳定。
- 初始条件不一致。电感电流和电容电压初始值为零,但光伏Boost输出电压指令直接给600V,启动瞬间冲击电流极大。我的做法是加一个软启动环节:母线电压参考值从0按斜坡上升到600V,用时0.2s,让系统平滑建压。
5.2 LCL谐振引起的高频振荡
模型跑起来之后,最容易看到的问题是并网电流波形上叠加高频毛刺。频谱分析显示毛刺频率约1.9kHz,正好是LCL的谐振频率,典型谐振现象。
第一次遇到时我先调的PI参数,结果怎么调都没用,因为谐振根不在闭环主导极点上,PI调不到那里。后来加了3Ω无源阻尼电阻,波形立刻干净。如果想在仿真里避免额外损耗,可以用电容电流反馈的有源阻尼:采样滤波电容电流,乘以阻尼增益K后反馈到调制波输入端,效果等价于并联虚拟电阻,但没有真实损耗。
有源阻尼的增益设计:K = R_d × (Cpwm/L1) 的折算关系,具体根据开关周期和离散化延迟修正。我仿真中比较过后,无源阻尼在仿真里更稳定,因为它不引入反馈通路稳定性问题,所以我最终保留无源方案。
5.3 功率振荡衰减慢:J、D和锁相环的联合锅
第一次跑负荷阶跃工况时,有功功率震荡了八个周期,衰减极慢。我当时以为J给太小,结果把D调大后发现振荡衰减改善,但引入了新的问题:高频噪声被放大。后来用频域分析法才找到根因——锁相环带宽设置过高。
VSG在有功频率环中自带相位生成能力,理论上不需要传统PLL提供并网相位。但我为了监控电网状态,保留了PLL,而且PLL带宽设到了200Hz,远高于VSG的固有频率。这导致PLL的快速相位跟踪和VSG的慢速虚拟摆动相互干扰,等效于在VSG频率反馈回路里注入了一个额外相位滞后。
解决办法:把PLL带宽降到20Hz以下,只让它输出频率和相位做监控和预同步用,别参与VSG的动态校正。改完之后,同样的D参数,功率振荡4个周期内衰减到稳态。这是个非常隐蔽的坑,排查了大半天。
5.4 储能SOC越限与保护链条
蓄电池SOC初始设为80%,超级电容初始电压200V。在长时间仿真工况中,如果储能功率指令一直单向输出,SOC会一路下跌冲破下限,仿真实测会出现电池电压崩塌、母线电压跌落、VSG输出波形畸变的连锁反应。
我最终加入了完整的保护链条:
- SOC大于90%时,蓄电池禁止充电,充电功率指令置零
- SOC小于20%时,蓄电池禁止放电,负荷功率不足的部分由电网支撑
- 超级电容电压低于最小允许值时,同样限制其放电功率,并逐步转移功率到蓄电池支路
保护逻辑切换要加滞环:比如SOC达到90%时禁止充电,但必须等SOC回落到85%才恢复充电,防止临界点反复切换造成功率指令抖动。这个滞环宽度一般取5%~10%。
5.5 模型跑得慢的优化技巧
大系统仿真最怕速度慢。光伏Boost、两组储能DCDC、逆变器、LCL、VSG控制、PLL、PWM,全模型包含六个IGBT桥臂和大量离散控制器,在Simscape Electrical下仿真50s工况,变步长要跑十几分钟。
我的优化手段:
- 功率器件用理想开关模型,不用IGBT物理模型。仿真只关心外特性,不需要管开关损耗和结温。
- 控制系统离散化,采样频率与开关频率一致,不要用连续时间控制器。
- 尽量合并模型:比如两组DCDC如果控制逻辑相同,可以用一个封装模块加参数化配置,减少模块之间的通信开销。
- 用Simulink代码生成工具将控制部分转成C代码加速,这个适合后期做大工况扫描。
6. 仿真结果复现与后续扩展方向
写到这里,把模型和数据准备清单整理成一个参考表,方便复现:
| 模块 | 关键参数 | 数值 | 备注 |
|---|---|---|---|
| 光伏阵列 | 组件参数 | 250W×20串×2并 | STC约10kW |
| Boost电感 | L | 3.3mH | 电流纹波20%约束 |
| 直流母线电容 | C | 2000μF | 支撑母线电压 |
| 蓄电池 | 电压/容量 | 360V/100Ah | 初始SOC 70% |
| 超级电容 | 模块参数 | 10个模块串联 | 电压范围150~250V |
| LCL滤波器 | L1/L2/Cf | 2mH/1mH/10μF | 谐振频率约1.95kHz |
| 阻尼电阻 | R | 3Ω | Cf串联 |
| VSG惯量 | J | 0.81 kg·m² | H=4s |
| VSG阻尼 | D | 10.1 N·m·s/rad | 1%频率偏差对应100%功率 |
| 有功下垂 | Kp | 0.637 kW·s/rad | 调差率5% |
| 无功下垂 | Kq | 321 Var/V | 电压偏差5%对应额定无功 |
做完这个项目后,我自己的体会是:VSG本身控制算法并不复杂,真正的工作量全在参数配合和系统级调试上。LCL参数影响电流环性能,电流环性能影响VSG看到的功率计算质量,而VSG的J、D参数反过来又决定储能系统承担的动态功率需求。一个环节失衡,整个系统都会表现出“说不清道不明”的异常。
这套模型后续还可以扩展的方向不少。一个是自适应惯量VSG,根据功率变化率实时调整J参数,让系统在大扰动时更稳,正常运行响应更快;另一个是多机并联场景,两台不同容量VSG并联运行时,参数匹配和功率分配需要重新整定下垂系统,仿真平台的调试思路同样适用;还可以把光伏短期预测模块引入,用预测数据提前调整储能SOC,让系统更从容地应对天气突变。仿真模型的好处就是这些新想法可以先在平台上验证,不怕烧设备,再逐步迁移到实际控制器里。
最后再分享一个小技巧:VSG控制器的代码尽量用模块化方式封装,把有功频率环、无功电压环、电流内环分开成独立子系统。调试时给每个子系统加调试信号输出,用Scope和数据记录器同时观测功率计算值、VSG虚拟角速度、调制波参考值和实际并网电流。这样一旦波形异常,能快速定位问题出在哪个环节,而不是对着总输出猜。这套排查思路,比直接用PID自动整定工具靠谱得多——工具只能调参数,定位不了思路层面的设计问题。