光伏储能VSG并网仿真:主电路、控制与调试全解析

光伏储能VSG并网仿真:主电路、控制与调试全解析
上个月帮朋友调一个光储VSG并网模型母线电压在并网瞬间直接掉了60V频率振荡了大半秒才稳住。查到最后问题不在控制参数而在直流侧建模时把光伏模块当成恒压源接了。这种事情在仿真里太常见了——VSG虚拟同步发电机听起来高大上但很多人的模型从主电路开始就是错的。这篇文章我打算按自己实际搭建“光伏储能 三相全桥逆变 800V直流侧 VSG控制”这个仿真模型的完整思路来写把主电路结构、直流侧设计、控制算法落地和调试过程中踩过的坑都捋一遍。适合正在做新能源并网仿真、写毕业论文、或者刚接触VSG想快速跑通一个完整模型的朋友参考。1. 为什么光伏储能要虚拟同步发电机从“没转子”到“假装有转子”大概五年前大家做光伏逆变器并网用的最多的还是PQ控制——给定有功无功指令电流内环一跟就完事。那时候电网强谐波少 PQ控制的“跟随型”特性不太暴露问题。但这两年新能源渗透率上来电网强度下降老办法开始不好使了。光伏和储能逆变器本质上是电力电子变换器没有旋转质量系统惯性几乎为零。电网频率一旦波动逆变器既不能像同步发电机那样靠转子动能自发抵抗频率变化也不会自动分担有功波动。弱电网下分布式电源一多频率和电压的稳定问题就特别突出。虚拟同步发电机VSG的思路就是既然你没有机械转子那我就在控制算法里“虚拟”一个转子出来让逆变器的外特性向同步发电机看齐。我这里要插一句大家经常混淆的概念VSG和下垂控制Droop Control不是一回事。下垂控制是静态的P-f和Q-V关系是一条固定斜率的直线没有惯性和阻尼VSG在功率下垂关系之上叠加了一个二阶动态方程——也就是同步发电机的转子运动方程。这个方程给系统引入了惯性和阻尼动态性能完全不一样。换句话说下垂控制是“跟随”VSG是“主动支撑”。具体到光伏储能场景VSG还能让光储系统从根源上具备“惯量支撑能力”。光伏本身出力波动剧烈如果逆变器采用VSG控制储能电池承担功率缓冲光伏维持直流母线能量平衡整个系统在并网点的外特性就很像一个可控的同步电源。这对弱电网接入、孤岛切换、黑启动这些场景都有实际意义。2. 从800V直流侧开始搭光伏模块、MPPT和母线稳压2.1 光伏阵列与Boost电路别再把光伏当恒压源这个仿真模型很多人第一个错误就是把光伏阵列直接用直流电压源替代。如果你想验证的只是VSG控制算法本身这么干确实省事但只要你稍微关注一下光伏波动对VSG的影响就必须把光伏模块的实际输出特性建进去。光伏组件的Simulink模型我用的是Simscape Electrical里的PV Array模块。选型上我以一个10kW的光储系统为例用250W组件40块串联成一组两组并联。额定工况下最大功率点电压约620V最大功率点电流约16A总功率约10kW。这个电压选得很有讲究——Boost后面要升到800V直流母线输入电压620V意味着Boost的升压比只有1.29倍控制压力小、效率高。要是组件串联数太少输入电压只有300VBoost升压比逼近3倍占空比跑到0.6以上效率和稳定性都会明显变差。MPPT算法我用的扰动观察法PO在Simulink里搭一个函数模块采样周期设为0.02s步长取最大功率点电压的0.5%。这个参数我用下来比较稳扰动步长太大功率振荡明显太小跟踪速度又太慢。光照突变场景下PO的响应滞后大概在3~5个采样周期内可以接受。如果你想做更复杂的控制可以用电导增量法但PO在仿真里足够用别为了追求复杂度浪费时间。Boost电路用MOSFET带反并联二极管加电感电容组成开关频率我设在20kHz。电感值的选择看电流纹波额定功率下电感纹波电流限制在20%以内按公式 L V_in * D / (f_sw * ΔI) 计算D约0.225ΔI约3.2A算出来电感约1.4mH我取1.5mH。母线电容主要用来吸收光伏和逆变器之间的瞬时功率差额我取2000uF这个值对抑制800V母线的二倍频波动有帮助。2.2 储能单元建模母线电压靠谁来稳住很多朋友搭“光储”模型时直接把储能电池接在直流母线上用一个理想直流源代替。这样做VSG的功率响应确实也能跑但储能当前SOC对VSG有功出力上限的影响完全体现不出来。更合理的做法是储能通过双向Buck-Boost变换器接入直流母线。光伏侧Boost只负责MPPT维持800V母线稳定的任务交给储能单元的双向变换器。储能电池模型我用Simscape Electrical的Battery (Table-Based)模块额定电压640V容量我按2C倍率配置10kW系统配5kWh电池。双向DC/DC采用电压外环、电流内环双闭环结构。外环给800V参考值内环控制电感电流PI参数我调了一版外环Kp2Ki50内环Kp5Ki200母线电压动态偏差控制在±15V以内。这里有个关键点要跟各位说清楚当光伏出力大于负载需求时多余功率流向电池母线电压不会升高反之光伏出力不足时电池放电补充差额。也就是说VSG的有功功率响应其实是由“光伏储能”整体提供的能量平衡决定的储能SOC给VSG设定一个输出功率上限这个约束在做长时间仿真时必须加进去否则你会看到SOC变成负数还照样输出有功这种不符合实际的状况。2.3 800V母线电压那点事关于直流母线电压为什么选800V我在这个模型里补充一个计算逻辑。并网电压是AC 380V系统采用SVPWM调制SVPWM的直流电压利用率是1线性调制区最大相电压幅值约为Udc/√3。考虑留出10%的调制裕量、开关管压降和线路阻抗压降实际需要的直流母线电压约750V左右取800V正好合适。如果用SPWM调制直流电压利用率只有0.866母线电压得升到900V以上所以我建议使用SVPWM。母线电容的取值还有个经验法则电容存储的能量要能支撑系统在半个工频周期内维持母线电压不跌穿也就是 C ≥ P / (2 * f * Udc * ΔU_max)。以10kW、允许母线电压波动50V计算C ≥ 10000 / (100 * 800 * 50) 2500uF。我仿真里用的2000uF略微偏小如果你发现直流母线电压在逆变器突加负载时波动超过3%把电容加到3000uF会明显改善。3. 三相全桥逆变主电路和LCL滤波参数不是拍脑袋定的3.1 三相全桥逆变与开关管选型三相全桥逆变主电路结构很标准六个开关管构成三个桥臂每个桥臂上下管互补导通。这个模型里我用的是Simscape Electrical中带热效应的IGBT而不是理想开关。这两个差别很大理想开关没有管压降、没有死区损耗跑出来的波形干净但并网冲击、直流电压利用率和实际系统对不上。IGBT模块要设置导通压降Vce(on)和开关损耗参数我用的是Infineon IKW75N60T的近似参数额定电流75A耐压600V开关频率10kHz。直流侧800VIGBT耐压需要留2倍左右的裕量600V的管子理论上勉强够但工程上必须用1200V等级的器件。仿真模型可以直接把参数改为1200V耐压型号关键是导通压降不同会直接影响效率你在分析系统效率时要注意这个细节。死区时间的设置是主电路建模最容易忽略的环节。很多初学者的模型里上下管直接互补触发没有任何死区。这在真实系统里会直接炸桥臂——上管还没完全关断下管就导通了。Simulink里要在PWM生成模块后面加一个死区模块或自己搭延时逻辑死区时间取3us比较合理。死区会造成输出电压的谐波畸变和基波幅值损失如果你的VSG模型输出电压出现了明显的三次谐波第一时间检查死区补偿逻辑有没有写进去。3.2 LCL滤波器参数工程化计算逆变器输出不能直接并网开关器件产生的谐波需要滤波器滤除。LCL滤波器比单L滤波器在高频段有更好的衰减特性同样的滤波效果可以缩小电感体积。以下是我用10kW系统的完整计算过程额定电压U 380V额定功率P 10kW额定电流 I P/(√3*U) ≈ 15.2A逆变器侧电感L1的纹波电流一般限制在额定电流的10%~20%取15%约2.3AL1 Udc / (8 * f_sw * ΔI_max) ≈ 800 / (8 * 10000 * 2.3) ≈ 4.3mH。这个值偏保守实际取3mH左右也能满足并网谐波要求网侧电感L2通常取L1的0.6~0.8倍取2mH滤波电容Cf限制无功电流不超过额定电流的5%Cf 5% * I / (2π * f * U) ≈ 0.05 * 15.2 / (2π * 50 * 220) ≈ 11uF取10uF谐振频率需要设置在10倍基波频率和0.5倍开关频率之间f_res 1 / (2π√(L1L2Cf/(L1L2))) ≈ 1.28kHz满足50Hz f_res 5000Hz的设计准则LCL滤波器不带阻尼时在谐振频率处有尖锐的增益峰值会让闭环系统不稳定。工程上最常用的是在电容支路串联一个阻尼电阻阻值取谐振频率处电容阻抗的1/3左右Rf 1 / (3 * 2π * f_res * Cf) ≈ 4.1Ω我取4Ω。这个小电阻看起来不起眼但没有它你在仿真里会看到输出电流在谐振频率附近持续振荡怎么调PI都没用。3.3 并网接口与测量配置如果要做并网仿真电网侧我建议用一个三相可编程电压源通过断路器接入LCL滤波器的网侧。断路器的合闸时刻要配合VSG预同步控制不能让VSG输出电压和电网电压存在幅值差或相位差时直接合闸那个冲击电流能到正常电流的5倍以上。测量模块方面最容易踩的坑是电压电流测量的参考方向不统一。我在模型里统一规定逆变器侧电感电流的正方向是从逆变器流向电网并网点电压定义为滤波电容两端电压。这样在dq变换计算功率时就不会出现符号错乱否则后面VSG控制信号会反号整个系统跟着发散。4. VSG控制核心转动惯量方程在Simulink里怎么落地4.1 从同步发电机方程到控制框图VSG控制的核心方程为转子运动方程J * dω/dt Pm/ω - Pe/ω - D * (ω - ωg)其中J是虚拟转动惯量ω是虚拟角速度Pm是机械功率输入对应有功指令Pe是电磁功率并网输出有功D是阻尼系数ωg是电网角频率。实际仿真时我会在同步旋转坐标系下做计算转子运动方程输出的是虚拟角速度ω和虚拟功角θ。θ通过对ω积分得到这就是VSG输出电压的相位。而输出电压的幅值由无功-电压下垂控制决定E E0 Kq * (Qref - Q)这里E0是额定电压幅值Qref是无功参考值Q是实测无功功率Kq是无功下垂系数。4.2 Simulink中的具体搭法这个方程怎么落地转子运动方程在Simulink里搭法有两种一种用基础模块直接搭另一种用S-Function或Matlab Function写。我推荐基础模块搭建方便调试和查看中间环节。具体的信号流向是这样的功率计算模块瞬时功率法 → 低通滤波器滤除二倍频脉动 → 有功支路Pm-Pe/ω-D(ω-ωg)乘以1/J积分得到ω → 对ω积分得到θ → θ合成三相参考电压相位这里有一个关键细节算式中的 1/J 积分一个量纲问题。在标幺值体系下J的数值远小于有名值所以很多同学的模型Pm和Pe都用标幺值但J却用了有名值最后积分器输出完全不对。我的建议是把整个方程用标幺值写Sn 10kVAωbase 314rad/sJ的标幺值按惯性时间常数H换算公式是 J_pu 2H/ωbase²。取H 2sJ_pu ≈ 4.06e-5。这个数值看起来很小但在标幺值系统里就是对的别被吓到。阻尼系数D的设定原则是保证频率偏差在允许范围内。假设允许0.5Hz的频率偏差额定功率10kWD ΔP / (ωbase * Δω) 10000 / (314 * 3.14) ≈ 10.1。我在模型中的阻尼系数就是取的这个量级效果也符合经验预期。4.3 电压电流双闭环和SVPWM的实现VSG外环输出的是三相参考电压这个电压要经过电压外环、电流内环后生成SVPWM驱动信号。电压外环用PI控制器把VSG给定的参考电压和实际电容电压做差得到电流内环的参考值电流内环再控制逆变器侧电感电流跟随。PI参数我通过带宽法整定电流内环带宽取2kHzPI参数Kp L1 * 带宽Ki R * 带宽电压外环带宽取200HzKp取电容值的1/5左右。我调出来一版在实际模型里表现不错电流环Kp8Ki400电压环Kp0.5Ki100。SVPWM的Simulink实现有两种方式直接调Simscape Electrical自带的SVPWM模块或者用Matlab Function自己写。如果用自带的调制波频率设为10kHz输入是dq轴电压参考值。如果你要用自写版本核心思路是把两相静止坐标系下的电压矢量分配到相邻两个开关状态的占空比大约150行代码这里不展开了。4.4 功率计算与滤波器细节决定动态响应VSG控制里功率反馈的计算速度直接影响系统响应。很多同学直接用乘法器计算P 1.5 * (VdId VqIq)然后不加滤波直接送去控制。这样会有很大的二倍频脉动——在dq同步旋转坐标系下负序分量会造成功率以2倍基波频率振荡。这个振荡会干扰转子运动方程导致输出电流也带上二倍频纹波。解决方法是加低通滤波器。我实测下来滤波时间常数取20~40ms比较合适对应截止频率大概5~8Hz。太小滤不掉二倍频脉动太大VSG的惯量表现会失真因为功率反馈本身就滞后了。我习惯用一阶滤波时间常数30ms。5. 并网调试实录项目中最容易翻车的五个点5.1 预同步控制不预同步直接合闸等于炸机VSG没有起动过程逆变器的输出电压和电网电压不可能天然同频同相。很多新手直接给电网断路器一个合闸信号仿真误差一大就发散了。正确的做法是先让VSG运行在离网带载模式接到本地负载通过预同步控制让VSG输出电压的幅值、频率、相位逐步逼近电网这个过程的通俗说法就是“跟着电网调”当电压差和相位差小于允许范围后再发合闸指令。Simulink里预同步模块的核心是一个基于锁相环的相位跟踪器检测电网电压相位θg与VSG相位θ做差将差值经过PI控制器输出频率修正项叠加到转子运动方程给出的角速度上。我设的闸条件是幅值差小于5V、相位差小于0.01rad现场效果很好。这个环节必须做否则你省下的时间最后都花在找发散原因上。5.2 仿真中的代数环Simulink频繁提示模型跑不动VSG控制里的“功率计算→转子运动方程→参考电压→反馈”闭环很容易形成代数环Simulink会提示模型包含代数环导致仿真速度大幅下降甚至卡死。我最常遇到的是功率计算输出的瞬时值未被滤波就直接作用于转子运动方程而电压电流又是方程的解这种互相依赖关系就是典型的代数环。处理方式有几种我用的是在反馈通路中插入Memory模块或使用离散低通滤波器作为虚拟延时代替连续的传递函数。你可以把功率计算改成采样保持方式比如用零阶保持器每0.1ms更新一次功率值这样既不影响精度又能打破代数环。另外整个系统如果用离散求解器代数环问题会少很多。5.3 虚拟惯量和阻尼怎么调不是越大越好VSG虚拟惯量J决定了系统在频率变化时的动态响应。J太大系统惯性大响应慢功率振荡衰减慢J太小响应快但频率变化率大系统缺乏抵抗频率突变的能力。我实际调试时发现J的设置跟系统容量和电网强度强相关弱电网场景下J要调小否则频率和功率容易发生低频振荡。阻尼系数D控制的是振荡衰减速度。D太小有功功率阶跃响应会衰减很慢表现为持续低频振荡D太大频率偏差被快速压住但系统失去弹性。我用的整定方法是先设置D为临界值让系统稳定再逐步增大J直到频率变化率满足要求。整定过程中要把光伏输出功率波动作为扰动输入看VSG输出频率能否在1s内恢复到稳定状态。5.4 步长设置与数值发散VSG的转子运动方程是二阶动力学方程开关频率10kHz、LCL谐振频率1.3kHz如果仿真步长太大这些动态就会完全失真。我建议使用变步长求解器最大步长设为5e-5s对应20kHz开关周期的1/10以下相对容差1e-4。用定步长的话至少设置1e-6s否则IGBT开关瞬间的电压尖峰和电流纹波会算不准模型表现为频繁的数值振荡。5.5 光伏波动下系统响应怎么看把前级光伏模块的MPPT输出和VSG主控放在一起跑时我建议做两个场景验证光照突变和并网功率阶跃。光照从1000W/m²突降到400W/m²时光伏出力瞬间从10kW掉到4kW储能单元会自动补上缺额。这时候VSG输出的有功功率不应出现大幅跌落频率偏差不应超过0.1Hz。我在仿真里做这个测试时发现如果储能双向变换器的电压环带宽不够母线电压会先跌20V左右随后VSG频率跟着下探加了前馈补偿后改善很多。实际项目中你可以给储能变换器加一个基于光伏输出功率的前馈信号电流环能提前响应。写在最后的实操建议模型整体跑通后我建议你把仿真数据导出来做一次FFT分析看并网电流的THD是否符合GB/T 19964对光伏电站并网电能质量的要求——一般是5%以内。如果THD超标优先检查死区补偿和LCL阻尼参数其次是调SVPWM的调制比别一上来就改控制算法。另外提一个很多人会忽略的细节MATLAB版本对仿真结果影响很大。同样的模型在R2020a和R2023b中Simscape Electrical的某些器件参数默认值有变化并网波形会略有差异。跑不到理想结果时先确认器件库版本和参数是否一致再检查控制参数。最后说说我的感受VSG仿真模型最大的价值不只是把控制算法仿真出来而是能让你在1秒内直观看到参数改动对系统动态的影响。做好前级光伏和储能的直流侧建模按本文思路把主电路、LCL、VSG控制、预同步一步步搭起来你拿到的模型就是一台可以反复“折腾”的虚拟同步发电机。后面不管是做低电压穿越、孤岛切换还是弱电网适应性的分析都可以在这个底盘上继续加功能。

最新新闻

日新闻

周新闻

月新闻