尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

光储并网VSG虚拟同步发电机Matlab/Simulink仿真模型搭建详解

光储并网VSG虚拟同步发电机Matlab/Simulink仿真模型搭建详解 搞过光储并网仿真的朋友应该都有同感VSG虚拟同步发电机这个词这几年在Matlab/Simulink仿真模型里出现的频率越来越高。光储并网系统如果只是用传统PQ控制或下垂控制遇到电网频率波动、负荷突变逆变器就像一个没有惯性的快枪手响应快但撑不住场面。而VSG控制的核心就是让逆变器在控制层面模拟一台同步发电机的转子运动方程把惯量和阻尼这些物理特性用算法造出来。这篇文章我会把我搭建光储并网VSG系统Matlab/Simulink仿真模型的全过程拆开讲包括拓扑结构怎么定、VSG控制环节怎么落地、参数怎么试出来、并网瞬间电流尖峰怎么压以及我踩过的几个典型坑。无论你是刚开始接触VSG的电力电子方向学生还是做微网/分布式能源仿真验证的工程师这篇文章都按照能复现、能调参、能避坑的标准来写。1. 为什么光储并网要引入VSG电力电子逆变器欠下的惯量债很多人在做光储并网仿真时第一反应是电网不是已经在那了吗逆变器跟着电网跑不就行了这种思路在强电网场景下确实够用但一旦把视角放到高比例新能源渗透的未来电网、弱电网或孤岛微网场景问题就出来了。1.1 传统逆变器控制的问题常规并网逆变器通常采用PQ控制或电流源型控制锁相环盯住电网相位然后按照给定功率输出电流。好处是控制简单、动态响应快坏处是对电网几乎没有支撑能力。电网频率一旦波动逆变器不会像同步发电机的转子那样自动释放或吸收动能来阻止频率变化而是事不关己地继续按指令发功率。分布式电源多了以后系统总惯量下降频率稳定性会变得很差这就是业内常说的电力电子化系统惯量不足。下垂控制Droop Control算是往前走了一步模拟了同步发电机的有功-频率下垂特性和无功-电压下垂特性但它模拟的是稳态外特性缺了同步发电机的转子运动方程。也就是说下垂控制可以在稳态时按比例分配功率可是在暂态过程中没有转子摇摆的过程频率变化率可能非常快。1.2 VSG的本质用控制算法造出一台同步发电机VSG的全称是Virtual Synchronous Generator中文叫虚拟同步发电机它的核心思想一句话就能说清把同步发电机的二阶数学模型主要是转子运动方程写进逆变器的控制算法里让逆变器对外呈现同步发电机的机械特性。转子运动方程通常写成这样J * dω/dt Tm - Te - D * (ω - ωg)其中J是虚拟惯量单位kg·m²在标幺化模型里也可以等效为惯性时间常数H单位是秒代表系统抵抗频率变化的能力。ω是逆变器虚拟角频率ωg是电网角频率。Tm是机械转矩由有功功率指令决定Te是电磁转矩由实际输出功率决定。D是阻尼系数模拟同步发电机的阻尼绕组和机械摩擦等产生的阻尼转矩。这个方程在Simulink里实现起来并不复杂一个积分器加一个增益就能完成但它的物理意义非常深刻当电网频率突然下降时VSG输出的有功功率会自动增加像同步电机转子转速降低时释放动能一样当电网频率上升时又会自动减少输出整个过程完全由虚拟转子的惯性决定而不是靠锁相环快速跟随。这就是为什么VSG被看作提升新能源并网友好性的关键技术之一。1.3 光储VSG的系统价值光伏本身是间歇性电源没有储能配合时VSG的虚拟惯量输出其实是受光照条件制约的天阴了想释放动能也释放不出来。所以工程上通常要把光伏和储能组合成光储一体化系统光伏负责发有功储能负责平衡功率缺口、提供惯量支撑所需的有功脉冲VSG控制则作用在整个光储系统的并网逆变器上让整个系统对外表现为一个具有惯量和阻尼特性的电压源。我做的仿真模型就是按这个思路搭的光伏单元储能单元共用直流母线逆变器采用三相两电平拓扑控制层采用VSG算法并网模式下可以给电网提供频率和电压支撑离网模式下可以独立带负载。这套架构在Matlab/Simulink里完全可以用标准模块搭出来关键是要把层级拆清楚、参数定明白。2. 仿真模型整体架构先定拓扑再谈控制光储VSG的Simulink分层设计搭建仿真模型之前我建议先把系统拓扑画在纸上哪怕画得很潦草也行。我见过太多人一上来就拖模块拖到最后模型连线像一团毛线排查问题从头查到尾。光储并网VSG模型本质上可以分成三层主电路层、控制层、测量与逻辑层。把这三层分开建每个子系统独立封装后面调试会舒服得多。2.1 系统拓扑与能量流我采用的拓扑如下光伏阵列PV Array接Boost变换器通过MPPT控制实现最大功率跟踪锂电池组接双向Buck-Boost变换器既能在光照不足时向直流母线放电也能在光伏功率过剩时吸收多余能量光伏Boost和储能变换器共同连接到直流母线直流母线接三相两电平逆变器Universal Bridge模块逆变器交流侧通过LCL滤波器接入电网控制层生成VSG的电压参考经过电压电流双闭环和PWM调制驱动逆变器开关管。能量流的逻辑关系是光伏功率PPV和储能功率PBat相加等于直流母线输入功率PDC逆变器输出有功功率P INV经过滤波器后馈入电网。在VSG控制里如果给定有功功率Pref和实际输出功率Pe存在偏差虚拟转子就会加速或减速进而改变输出电压的相位和频率最终调节输出功率。所以储能单元的作用是兜底保证直流母线电压稳定让VSG有功功率调节有足够的能量来源。2.2 光伏单元、储能单元、并网接口的分工光伏单元我使用的是Simulink标准库里的PV Array模块配合Boost电路和PO扰动观察法MPPT算法。这里有一个容易被忽视的点并网场景和离网场景下光伏的工作点变化规律不同MPPT的步长和扰动周期会影响直流母线电压的纹波进而影响VSG控制的稳定性。我建议MPPT扰动周期不要低于1ms否则在Simulink仿真里会造成不必要的开关纹波和迭代负担。储能单元使用Simscape Electrical里的Battery模块初始SOC根据工况设置比如并网模式下初始SOC设置为70%留出双向调节空间。Buck-Boost变换器采用电压外环电流内环的双闭环控制电压外环维持直流母线电压在680V左右电流内环控制电池充放电电流。并网接口部分我使用的是LCL滤波器而不是单L滤波器。原因很简单VSG控制的逆变器输出含有丰富的高频开关谐波LCL对高频谐波的衰减能力远强于单L而且LCL的谐振峰可以在控制参数设计时通过阻尼来抑制。在Simulink里LCL可以用Three-Phase Series RLC Branch搭或者直接用LCL Filter模块后者更省事但是电感值和电容值需要自己算。2.3 Simulink模型层级规划与模块选型整个模型的层级结构我是这样设计的顶层包含主电路、控制器子系统、并网开关、电网电源、测量示波器VSG_Control子系统输入是有功参考Pref、无功参考Qref、电网电压Va/Vb/Vc、输出电流Ia/Ib/Ic输出是逆变器调制波或SPWM脉冲MPPT_Control子系统输入是光伏输出电压和电流输出是Boost占空比Storage_Control子系统输入是直流母线电压、电池SOC、电池电流输出是Buck-Boost占空比PreSync子系统负责并网前的预同步控制处理相位和幅值匹配。这种分层的好处是调VSG参数时不用在庞大模型里找参数块双击子系统进去改就行仿真出错时也能通过子系统边界快速定位是主电路问题还是控制问题。我在做模态切换离网转并网、并网转离网时还会加一个Mode Select子系统专门处理不同模式下的控制切换逻辑。模块选型方面逆变器我用Universal Bridge器件选IGBT/DiodesPWM用Discrete PWM Generator或者根据载波频率自己搭三角波比较。滤波器和电网用Simscape Electrical时仿真类型要选离散或连续我一般用离散仿真步长固定为1e-5或5e-6这样PWM的开关频率和采样步长能配合上仿真速度也能接受。3. VSG核心控制建模转子运动方程、虚拟阻抗和双闭环是怎么在Simulink里落地的这是整个仿真模型的心脏部分。很多教程会把VSG说得玄乎但真正在Simulink里实现其实就是几个标准模块的组合。关键在于你要理解每一步算出来的是什么信号以及它怎么和主电路接口对接。3.1 转子运动方程与虚拟惯量/阻尼系数VSG控制的第一件事是算出虚拟转子角频率ω和虚拟功角δ。在Simulink里我通常用下面的方式实现由有功参考Pref和实际有功功率Pe计算转矩差(Pref - Pe) / ωn其中ωn是额定角频率100π rad/s将这个转矩差经过增益1/J后减去阻尼项D*(ω-ωg)/J得到dω/dtdω/dt经过积分器得到ωω经过积分器得到相位θ也就是逆变器输出电压的参考相位同时ω与额定频率ωn比较经过频率-有功下垂环节后形成有功闭环。J和D这两个参数的选取我做仿真的时候反复调过给一个参考范围参数物理含义参考范围调参影响虚拟惯量J系统抗拒频率变化的能力0.5 ~ 10 kg·m²小功率系统取小值J越大频率变化率越小但动态响应变慢容易低频振荡阻尼系数D抑制功率/频率振荡的能力20 ~ 200 N·m·s/radD越大振荡衰减越快但稳态有功偏差可能增大无功下垂系数n无功-电压下垂斜率0.001 ~ 0.05 p.u.越大则电压调节越硬但可能引起无功环流我的经验是J和D的选取不能孤立看它们的比值J/D决定了虚拟转子振荡的阻尼比。你把J调大以后D也要相应增大否则系统会像没有阻尼的弹簧一样持续振荡。仿真时可以先固定D逐步增大J观察有功功率和频率的动态曲线直到超调量可接受。3.2 有功-频率控制与无功-电压控制的Simulink实现有功-频率控制除了转子运动方程通常还会加上一次调频下垂特性。即把频率偏差信号引入有功参考Pref Pref0 kf * (ωn - ω)这个环节模拟的是同步发电机的调速器VSG检测到频率降低时自动增加有功输出。kf一般取系统额定有功的5%到10%对应额定频差相当于调差系数。无功-电压控制类似模拟同步发电机的励磁调节器Qref Qref0 n * (Vref - Vm)其中Vm是逆变器输出电压幅值的测量值。通过无功偏差生成电压幅值参考E。在Simulink里电压幅值用abc_to_dq变换或者瞬时幅值计算都可以。d轴定向通常选择VSG虚拟相位θ这样电压参考就写成了Vref_d E * cos(θ)简化模型里可以考虑q轴分量做轻负载或直接E∠θ实际实现时我习惯把E和θ直接构造成三相电压参考Ea/Eb/EcEa E * sin(θ) Eb E * sin(θ - 2π/3) Ec E * sin(θ 2π/3)然后送给电压电流双闭环。3.3 虚拟阻抗与电压电流双闭环的配合VSG输出的是一个电压源但如果直接把电压参考送给逆变器系统在并网状态下会因为没有阻抗形成很大的环流。真实同步发电机的定子绕组有同步电抗这个电抗在电力系统中起到了解耦和限流的作用。VSG里就通过增加虚拟阻抗来模拟这个电抗。虚拟阻抗的表达式是Vref_final Vref - Zv * I_out其中Zv Rv jXv通常Xv远大于Rv相当于一个虚拟电抗感性的。在Simulink里可以把虚拟阻抗写成dq坐标系下的解耦项Vd_mod Vd_ref - Rv * Id Xv * Iq Vq_mod Vq_ref - Rv * Iq - Xv * Id注意这里Xv和Rv的单位是欧姆还是标幺值要跟系统的基准阻抗对应好。我通常取虚拟感抗为0.1 p.u.左右虚拟电阻取0.02 p.u.这个组合能有效抑制并网环流又不会让电压跌落太多。虚拟阻抗之后就是电压外环和电流内环。电压环一般用PI控制器控制输出电压跟踪VSG给出的电压参考电流环可以用P或者PI控制器输出作为PWM调制波产生触发脉冲。在Simulink里电压电流双闭环用Simulink字块搭采样信号来自主电路调制波送给PWM Generator。这个闭环的带宽要有明显的梯度电流内环带宽要高于电压外环一般是10倍的差距否则两个环会互相干扰。3.4 参数设计的数量级参考我碰到过很多初学者上来就问J到底取多少Kp/Ki取多少这类问题没有标准答案但可以给一个数量级参考。以一套额定功率10kW/线电压380V/频率50Hz的光储系统为例基准阻抗Zbase Vbase² / Pbase 380² / 10000 ≈ 14.44Ω虚拟感抗0.1 p.u.对应实值约1.44Ω在50Hz下电感约4.6mH虚拟惯量J如果取2相当于惯性时间常数H约2秒这个数值比较适中电压环PI可以参考典型电压环设计比例系数0.5~2积分时间常数5~20ms电流环比例系数2~10积分时间常数1~5ms。这些参数是我在不同仿真模型里试出来的经验区间不同模型结构会有差异但量级一般不会差太多。把这组参数作为起点再用试错法微调比凭空猜要快得多。4. 并网工况与光储协调仿真MPPT、SOC和预同步一个都不能少VSG控制本身可以独立工作但如果把光储系统加进去仿真模型的复杂度会上升一个大台阶。光伏的随机性、储能的SOC约束、并网开关的闭合时序任何一个环节没处理好VSG控制表现得再好系统也可能直接仿真失败或者结果离谱。4.1 光伏MPPT与功率波动模拟Simulink的PV Array模块支持直接设置光照强度Irradiance和温度Temperature这两个量可以做成阶跃信号或时序信号用来模拟云遮、天气突变等场景。我会在仿真中设置几个关键时刻0~0.5s光照1000W/m²光伏满发0.5~0.8s光照降低到600W/m²模拟云层遮挡0.8~1.2s光照回升到800W/m²1.2s之后光伏功率恒定。通过MPPT控制Boost占空比会不断调整使得光伏输出电压稳定在最大功率点电压附近。这里有一个细节MPPT的收敛速度不能太快不然会和VSG控制的动态过程相互影响。我见过有人把MPPT扰动周期设为1e-5s结果光伏功率在最大功率点附近剧烈抖动VSG的有功功率也跟着抖频率曲线全是毛刺。建议扰动周期取0.01~0.05s既能看到MPPT动态又不会产生高频干扰。4.2 储能SOC管理与直流母线稳压储能单元承担着直流母线稳压和功率平衡的双重任务。在仿真里我通常在DC bus两端接一个大的直流电容然后通过双向Buck-Boost控制电容电压。电压外环输出电流参考电流内环实现电池电流跟踪电池模型会自动根据充放电电流更新SOC。注意电池初始SOC不能设成100%或0%因为在仿真一开始系统就可能有功率波动SOC没有裕度的话储能根本无法响应。我一般设初始SOC为60%~70%并且把SOC的上下限也加入控制逻辑比如SOC低于20%时不放电只充电高于90%时不充电只放电。这部分逻辑用Simulink里的Stateflow或者普通逻辑模块都能实现关键是别把SOC写成可无限制变化的变量。还需要注意电池模型类型Simscape Electrical的Battery模块有两种等效电路模型一种简化的一种参数化的。对于VSG并网仿真简化模型完全够用如果追求更真实的动态特性可以选用带内阻和RC环节的参数化模型但仿真速度和收敛性会差一些。4.3 离网/并网模式切换与预同步控制VSG一个很大的优势是支持离网和并网两种模式而且可以在两种模式之间切换。离网模式下逆变器按额定电压和频率建立交流母线直接带本地负载并网模式下逆变器输出电压的频率和相位必须与电网一致否则合闸瞬间会产生巨大的冲击电流。预同步控制就是为了解决这个问题。在并网开关闭合之前预同步逻辑会比较VSG输出电压与电网电压的幅值差、频率差和相位差然后自动调整VSG的参考频率和参考电压直到三个偏差都小于设定阈值我一般设置为幅值差5V频率差0.1Hz相位差3°才发出并网开关闭合信号。在Simulink里这个逻辑可以用PLL检测电网电压相位再和VSG的虚拟相位比较相位差经过PI控制器输出一个频率补偿量叠加到VSG的ω上。这一步非常关键我强烈建议别用简单的延时合闸来模拟并网那样你做出来的并网电流尖峰把仿真器都搞崩。手动合闸看似省事但完全掩盖了VSG最重要的工程价值之一——无冲击并网。4.4 负载突变与电网电压跌落工况设置一套仿真模型有没有说服力要看它能不能扛得住扰动。我一般会在模型里设两个标准工况负载突变在离网模式下在某一时刻突然投入或切除一部分负载观察VSG输出电压和频率的恢复过程电网电压跌落在并网模式下给理想电压源加一个幅值跌落比如跌到0.8 p.u.并持续0.2s观察VSG能否在电压跌落下保持稳定甚至向电网提供无功支撑。这些扰动在Simulink里实现很简单电压跌落就是给Three-Phase Programmable Voltage Source模块设置Step变化负载突变就是并联一个用Breaker控制的电阻负载。难点在于你要通过这些扰动结果反推控制参数要不要调整以及虚拟惯量和虚拟阻抗的设置是否合理。比如电网电压跌落时如果VSG输出电压没有及时调整无功功率会显著增大这其实是无功-电压控制环路在起作用是正常现象不要误以为是模型出错。5. 调试实录参数震荡、启动冲击、并网瞬间电流尖峰的排查链路这个章节的每一条经验都是我实际搭模型时踩过的坑。仿真模型报错和波形异常很多问题不是原理不懂而是模块用错了或者参数区间不对。5.1 启动阶段频率震荡的排查我第一次把VSG控制系统跑起来时频率波形不是平滑上升而是大幅度正弦震荡有功功率也在额定值附近来回摆动幅值越摆越大最后仿真直接发散。我当时第一反应是PI参数没调好但改PL参数并没解决问题。后来逐步排查发现问题出在虚拟惯量J和阻尼D的比例上。因为我改了个系统参数J设得很小、D设得更大系统变成了欠阻尼状态。解决办法是重新计算阻尼比在J2、D80的情况下虚拟转子的自然振荡频率约为sqrt(Kω/J)其中Kω是频率-有功下垂系数这里约为2000算下来自然频率约31.6 rad/s阻尼比约为D/(2sqrt(JKω)) 80/(2sqrt(22000)) ≈ 0.63这个阻尼比接近0.707动态响应比较合适。调试时我就是把D从40往上加一直加到80振荡才明显收敛。从这件事我总结了一个经验VSG的动态调试不能只看J必须配套检查D和下垂系数Kω三者之间的关系。遇到频率振荡先算阻尼比再决定往哪个方向调参数。5.2 并网瞬间冲击电流怎么压下去并网瞬间的冲击电流是光储并网VSG仿真的经典难题。如果你在并网开关闭合时看到电流尖峰达到额定电流的十几倍甚至几十倍大概率是预同步没有做好。我遇到过一次幅值和频率都匹配了但合闸瞬间还是有尖峰。后来把示波器数据拉长了看发现相位差虽然小于3°但合闸时刻刚好落在电网电压过零点附近相位差变化率即频率偏差仍然存在导致合闸瞬间的电压差变化率极高。解决方法是预同步不仅要匹配相位还要确保VSG的虚拟角频率与电网角频率尽量一致也就是相位差的变化率趋近于零。我在预同步PI控制里增加了频率前馈项让VSG频率快速跟踪电网频率冲击电流才下来。另外并网开关我建议用三相Breaker模块合闸命令触发后会有断口闭合时间如果你把Breaker的断口电阻设得很大会产生额外压降也会影响并网电流。我把Breaker导通电阻设为0.001Ω模拟实际接触器触头电阻波形才比较理想。5.3 仿真步长与PWM开关频率的匹配这个坑比较隐形但影响巨大。我用的PWM载波频率是10kHz如果仿真步长取得太大比如1e-4s一个载波周期内只有10个仿真步PWM的占空比分辨率和波形质量都很差输出电流会出现明显的阶梯状畸变。反过来仿真步长太小1e-7s计算量暴增跑一个工况要几小时。对于10kHz的PWM我比较推荐下面这组配置参数推荐值说明仿真步长1e-5s固定步长每个载波周期10个步够用且不太慢PWM载波频率10kHz兼顾谐波和仿真速度示波器采样间隔1e-5s和步长一致避免波形失真直流母线电容2~5mF太小会导致母线电压纹波大影响VSG输出如果是做稳态分析可以用变步长求解器计算效率更高但如果涉及PWM和并网暂态还是固定步长离散求解器更稳。Simulink里如果出现Simulink cannot solve the algebraic loop之类的报错十有八九是控制回路里出现了代数环可以在反馈路径上加一个小的Transport Delay我常用1e-6s来打断代数环但注意延迟不能太大否则控制相位滞后会引发新的振荡。5.4 结果观测与评价指标仿真模型搭完不能只看波形看起来正常还是要有几个量化指标。我在光储并网VSG模型里重点观测以下几个量并网电流总谐波畸变率THD目标小于5%如果超标先看LCL滤波器参数和PWM载波频率频率最大偏差和恢复时间负载突变后频率偏差应小于±0.5Hz离网恢复时间在0.2~1s量级并网瞬间冲击电流倍数应小于额定电流的1.5~2倍超过这个数就要重新检查预同步直流母线电压纹波小于2%如果纹波大增大母线电容或者调整储能电压环PI有功功率响应时间VSG输出有功跟踪Pref的响应时间一般在10~50ms量级太慢了说明虚拟惯量偏大或电压环带宽过低。我通常会在模型的测量单元里直接用RMS和THD模块算这些指标然后放在Scope里同步观察。这样做的好处是每次改完参数后能立刻看到指标变化而不是靠肉眼对比波形。6. 从仿真到工程模型扩展、硬件在环与参数整定的现实建议仿真模型做到能跑出漂亮波形只是一个开始。我自己的经验是把仿真模型往更深的方向推一步会逼着你重新理解VSG控制的实际工程约束。6.1 从单机到多机并联的扩展单个VSG模型稳定运行之后下一个自然而然的想法就是多台并联。多机并联时虚拟阻抗和下垂参数设计不当很容易出现无功环流也就是两台逆变器之间来回交换无功功率严重时会导致个别逆变器过流。我在多机模型中用了一个比较简单但有效的策略每台VSG的无功-电压下垂系数要设置一致虚拟阻抗也尽量接近这样才能保证各台逆变器无功功率按容量比例分担。此外每台VSG的虚拟惯量不要相差太大否则并联系统在扰动时会互相激发振荡。Simulink里做多机并联时建议先把两个VSG模型做简洁封装再复制成多实例这样模型不会因为重复逻辑而膨胀。6.2 硬件在环与代码生成如果你手头有控制器硬件想把Simulink里的VSG控制算法部署上去可以考虑用Simulink Coder生成C代码。不过VSG控制里有三角函数、积分器、PI控制器代码生成时要注意数据类型的匹配尽量避免在控制回路里用连续积分器换成离散积分器Discrete-Time Integrator并指定采样时间生成的代码更干净硬件上跑起来也不会积累积分漂移。我做过一个初步的硬件在环测试把VSG控制算法部署到一款DSP控制器里和Simulink中的主电路模型通过DA/AD接口连接。最大的问题不是算法本身而是采样和PWM中断的频率问题实际硬件的采样频率可能只有10kHz如果你在仿真里用的是1MHz的理想采样算法参数必须重新整定。换句话说仿真阶段的控制参数在硬件上只能作为初值不能直接照搬。6.3 仿真之外的思考参数整定的工程意义最后想聊一点软件之外的东西。VSG参数整定在仿真里可以靠试错但在实际工程中J和D的选择往往受制于储能系统的容量和变换器过流能力。虚拟惯量J设置得很大意味着频率波动时VSG需要吸收或释放的瞬时功率非常大储能电池和逆变器未必扛得住。所以真正做工程时通常是根据直流侧储能的最大充放电功率来反推J的上限。这个约束在仿真模型里也建议加进去否则你调出来的系统在数字世界里完美但根本没有实际部署价值。我个人在做这类仿真时会刻意保持一个习惯J和D这类虚拟参数一定要和储能容量、逆变器过流倍数绑定在一起做一套校核计算。仿真只是把算法在理想环境里验证一遍但约束条件越接近实际仿真结果的参考价值就越高。再分享一个特别实用的小技巧在Simulink模型里建一个参数初始化脚本例如VSG_parameters.m把所有电气参数、控制参数集中放在里面模型里的参数名用变量名引用。每次跑仿真前先运行脚本参数一目了然复制到别的电脑上也不会出现找不到变量的尴尬。我后来几乎所有仿真模型都采用这种做法改参数、对比工况都变得非常高效。
返回列表