
做光伏储能并网仿真这几年我最深的一个体会是控制策略的差异比硬件拓扑的差异更容易决定一套系统的成败。同样是光伏板、电池、逆变器组成的并网系统用传统的PQ控制去做电网弱一点、阻抗大一点波形就开始抖换成VSG虚拟同步发电机控制之后同样的硬件拓扑暂态特性完全换了一副面孔。而要把这套东西在Matlab/Simulink里完整搭出来、跑出让人信服的波形不只是拖几个模块连线那么简单——光是buck_boost变换器的参数、VSG的转动惯量和阻尼系数、Simscape Battery的配置这三个点就够人折腾好几周。这篇文章就围绕光伏储能并网仿真模型这件事展开重点拆解 VSG虚拟同步发电机控制 和 buck_boost变换器 在整个模型里的角色把拓扑结构、控制环路、参数计算逻辑、以及我在调试中踩过的坑一次讲清楚。适合正在做并网逆变器课题的研究生、准备用仿真验证方案的工程师以及毕设选题涉及光储系统的同学。我会尽量用当时我是怎么想的这种角度来讲少一点教科书腔多一点实际能用的东西。1. 为什么要给光伏并网逆变器配上虚拟的发电机惯性1.1 传统并网逆变器在弱电网下的天然劣势先把话说透一台常规并网逆变器和一台同步发电机在电网眼里的性格是完全不同的。同步发电机转子是几十吨重的钢铁带着巨大的转动惯量在转。电网频率稍微跌一点转子会因为电磁转矩变化释放动能向电网多送出一些有功功率这个过程是物理自发的响应虽然迟钝但非常可靠。这就是电力系统里常说的惯量支撑。而传统光伏并网逆变器走的是跟网型控制路线核心是锁相环PLL加上电流内环。它的控制带宽很高响应极快但本质上是把电网当作一个电压源来跟随。电网强的时候没问题一旦电网变弱短路比SCR偏低PLL、电流环、电网阻抗三者之间就容易发生交互振荡。说白了逆变器身手敏捷但底盘太虚电网打个喷嚏它就跟着抖。这几年新能源渗透率提高以后电网对并网设备提出了具有同步发电机外特性的要求VSG就是在这样的背景下被推到台前的。1.2 VSG虚拟同步发电机到底虚拟了什么VSG做的事情用一个词概括就是**装笨**——在控制算法里人为加入同步发电机才有的物理约束让逆变器的端口特性和同步发电机对齐。具体来说VSG在控制层模拟了两样东西转子运动方程有功-频率特性$$J\frac{d\omega}{dt} P_m - P_e - D(\omega - \omega_g)$$ 它决定了逆变器输出有功功率与电网频率之间的动态关系J就是虚拟转动惯量D是阻尼系数。励磁调节特性无功-电压下垂$$Q_m - Q_e K_q (V_{ref} - V)$$ 它模拟了同步发电机的自动电压调节器AVR外特性让逆变器根据并网点电压偏差调整无功输出。这两条不算特别复杂但放在控制环里之后逆变器就不再是电网的跟班而变成了有脾气、有惯性的电压源。电网频率下跌它能短时多出力电网电压跌落它能补无功。这些行为传统PQ控制的逆变器很难做出来。1.3 这套模型为什么值得搭我之所以建议想做并网方向的人尽快在Matlab/Simulink里搭一套带VSG的光储模型是因为它把新能源并网研究里最高频的几个知识点全部串起来了光伏电池建模与MPPT算法电力电子变换器buck_boost、三相逆变器的拓扑与控制储能系统的充放电管理与直流母线稳压并网逆变器的外环策略VSG与内环电流控制电网故障/扰动下的暂态响应分析五个点单独拎出来都能写一篇文章但真正有意思的是它们耦合在一起的表现。Simulink里一套完整的模型既可以用来验证VSG控制算法也可以作为后续做硬件在环测试、做参数优化、甚至写论文出图的基础平台。这也是为什么我推荐从仿真模型入手而不是直接上实验台——仿真里把逻辑理顺了实验台上会省掉大量炸管和保护误动的冤枉时间。2. 模型总体拓扑从光伏组件到电网的完整功率链路2.1 整体架构与能量流动我搭的这套模型整体架构是这样的光伏阵列用Simulink的PV Array模块按实际组件参数设置开路电压、短路电流、MPP电压/电流、串并联数输出经过一个DC/DC变换器。光伏侧变换器这里用buck_boost拓扑核心任务是执行MPPT让光伏阵列工作在最大功率点。至于为什么选buck_boost而不是单纯的boost后文会专门讲。储能电池用Simscape Battery库里的Battery (Table-Based)模块通过双向buck_boost变换器挂接在直流母线上。它承担直流母线电压稳压和光伏功率波动的平抑任务。直流母线典型设置400V或750V取决于逆变器输出电压等级和电网电压。三相逆变器三相全桥SPWM或者SVPWM调制经LCL滤波后并入三相电网。VSG控制器输出逆变器的参考电压幅值和频率作为电压电流双闭环的给定。控制层面分得也很清楚光伏侧DC/DC只负责MPPT不管母线储能侧DC/DC管住直流母线电压并网逆变器执行VSG策略向电网呈现受控电压源特性。三者各管一段调试时互不干扰出问题的定位效率也高。2.2 光伏侧buck_boost与储能侧变换器的功能划分这里有个常见的迷惑点为什么光伏侧也要加buck_boost很多教材里光伏并网用的是boost升压把组件电压升到母线电压再接逆变器。我的考虑是这样的如果光伏组件的MPP电压范围很宽比如低温时电压高、高温时电压低用boost只能升压不能降压在某些工况下会丢失MPP跟踪能力。而buck_boost既能升又能降可以保证组件始终工作在最大功率点附近。代价是电感电流纹波略大、控制略复杂但在仿真里这些代价完全可接受。储能侧则必须用双向buck_boost原因在于电流方向要能反转光伏出力大于并网指令时储能吸收功率充电电流朝一个方向光伏出力不足时储能释放功率放电电流反向。双向DC/DC通过上下两个开关管的互补PWM实现这个功能本质上是两个单向变换器背靠背的简化实现。2.3 Simscape Battery建模与参数设置的几个细节Matlab现在的Simscape Battery库比以前的SimPowerSystems电池模型好用不少Battery (Table-Based)模块用起来就很顺手。我遇到最典型的坑有三个SOC初始值不能乱设如果设成0%仿真一启动就容易出现数值异常建议设50%-80%对应实际工程中电池的常规工作区间。热端口问题新版电池模块默认带热端口。如果不勾选使用热端口Use thermal port必须在参数页把电池温度设为固定值否则模型会报端口连接错误。刚开始搭模型时我就被这个问题卡了半天。内阻和容量参数容量建议按仿真时间尺度设置如果只是看秒级动态电芯容量设小一点几十Ah就够了太大反而增加仿真计算量。电池模型的原则是先简单后精细第一版用一个中等复杂度的等效电路模型把控制跑通之后再替换成电化学模型做精细研究不要在第一步就和模型死磕。3. VSG控制环路的搭建与参数整定3.1 VSG本体的Simulink实现方式VSG的算法层面我已经贴过转子运动方程了这里说以下怎么在Simulink里落地。我用的方式是MATLAB Function模块写状态方程核心代码简化后大致是这个样子function [theta, E, w] VSG_core(Pm, Pe, Qm, Qe, wg, Vref, Vg, J, D, Kq, Ts) % 转子运动方程 persistent w theta E_integral if isempty(w) w 2*pi*50; theta 0; E_integral Vref; end % 有功-频率环 dw (Pm - Pe - D*(w - wg)) / J; w w dw * Ts; % 更新角频率 theta theta w * Ts; % 更新相位角注意wrap到[-pi, pi] % 无功-电压环 dE (Qm - Qe Kq*(Vref - Vg)) / Kq; % 这里做了简化处理实际常用积分形式 E Vref dE; % 输出相电压幅值参考从原理上拆解这个函数做的是四件事输入并网有功Pe与给定有功Pm之差除以虚拟惯量J得到角频率变化率对角频率积分得到VSG输出角度θ这个θ就是逆变器PWM调制的相位基准输入并网无功Qe与给定无功Qm之差加上电压偏差修正得到电压幅值参考E输出的E、θ连同额定频率一起作为逆变器电压外环的给定从控制理论角度看VSG本质是一个二阶系统这决定了它天然有振荡的可能性所以J不能乱设D不能省。3.2 转动惯量J与阻尼系数D的整定方法这是VSG控制最核心的参数问题也是很多人容易拍脑袋的地方。我先说结论J决定惯量响应的快慢D决定系统振荡的衰减速度两者必须联合整定。我自己的试凑步骤是先设D0只调J观察有功功率和频率振荡。J越小系统暂态响应越快但振荡剧烈J越大系统越迟钝但过大之后会出现低频慢振荡频率甚至长达数秒一个周期。再引入D从小到大增加。D的本质是给转子运动方程增加一个与频率偏差成正比的阻尼转矩D合适时功率振荡会在1-3个周期内衰减下来。用阶跃响应做检查给电网频率一个0.1Hz的阶跃跌落看VSG有功输出是否快速上升并平稳收敛。如果收敛时间在1秒以内且超调小于20%参数基本可用。给一个参考范围在50Hz/10kVA的模型里J取2-10 kg·m²D取20-100Kq取50-200基本都能得到合理的动态。但注意这些值和系统容量、基准值有关换了系统一定要重调。3.3 为什么VSG外环之后还要电压电流内环这里我想多说一句因为很多初学VSG的人会想VSG不是已经输出E和θ了吗直接给PWM不行吗理论上行但工程上不建议。原因在于VSG环路的带宽很低一般只有几Hz到十几Hz它输出的E和θ是慢变量如果直接用作PWM调制波逆变器对直流母线波动、负载扰动、电网谐波都没有任何抑制能力加了电压电流内环之后VSG负责给出电压幅值和相位的目标内环负责精确跟踪这个目标同时抑制扰动一般的设计是电压外环电流内环两个PI的带宽拉开5-10倍。比如电压环带宽200Hz左右电流环带宽1000-2000Hz。这样VSG的慢动态和内环的快动态就不会打架系统稳定性好得多。4. buck_boost变换器的控制设计与参数计算4.1 buck_boost在整套模型里到底扮演什么角色很多文章把buck_boost一笔带过好像它只是个辅助电源但在这套光储模型里两处buck_boost都是核心环节光伏侧buck_boost核心是MPPT。扰动观察法PO或者增量电导法IncCond输出一个功率参考或电压参考内环用电流环跟踪让组件电压稳定在MPP附近。这个变换器需要能在 buck 和 boost 两种模式下平滑过渡因为光伏组件的MPP电压随温度和辐照是连续变化的可能从70V变到130V而母线电压固定在400V跨越了 buck 和 boost 的边界。储能侧双向buck_boost核心是母线电压控制和充放电电流控制。母线电压外环的输出作为电池电流参考误差经过PI后生成PWM占空比。光伏出力大于并网功率时母线电压有上升趋势外环让电流参考变为负电池充电反之则放电。这其实就是一个典型的高性能双向DC/DC变换器的控制问题。4.2 电感电容参数的计算逻辑参数计算的核心是纹波指标和动态响应指标。以储能侧双向buck_boost工作在boost模式放电为例开关频率fs取20kHz仿真里可以根据计算量调整但控制参数也相应要改电感电流纹波系数取额定电流的15%-20%母线电压纹波系数取1%-2%电感量计算升压模式电流纹波公式是 $\Delta I_L \frac{V_{in} \cdot D}{L \cdot f_s}$反推 $L \frac{V_{in} \cdot D}{\Delta I_L \cdot f_s}$。举例输入电池侧电压200V输出电压母线400V则占空比D1-Vin/Vout0.5额定功率5kW额定电流25A纹波系数0.2对应5A。$$L \frac{200 \times 0.5}{5 \times 20000} 1 \text{ mH}$$电容量计算母线电容主要看动态要求一个常用经验是让母线电容能支撑半个开关周期的能量波动而不产生过大电压变化$C \frac{P \cdot T_s}{2 V_{dc} \Delta V_{dc}}$。用上面的例子$C \frac{5000 \times 5\times10^{-5}}{2 \times 400 \times 4}78\mu F$工程上留裕量取100-200μF。在Simulink里做参数化时我习惯把fs、L、C设成变量跑一个参数扫描看不同组合下的纹波和动态响应选一组折中点作为最终值。4.3 光伏MPPT与buck_boost控制的协同最后说说MPPT和变换器控制的协同。扰动观察法实现最简单但稳态时会在MPP附近来回扰动输出功率有小幅振荡。增量电导法更平滑但对步长的选择敏感。我的做法是MPPT算法输出一个电流参考值而不是直接输出占空比。电流内环以PI控制器快速跟踪这个参考这样MPPT的慢动态和电流环的快动态天然解耦系统不容易振荡。具体是外环MPPT通过测量光伏电压、电流判断当前工作点在MPP左侧还是右侧微调电流参考内环电流PI控制器调节占空比让电感电流等于参考这种结构的额外好处是当你想限制光伏功率变化速率避免对母线产生冲击时只需要给电流参考加一个斜坡限速器非常方便。5. 仿真调试我踩过的那些坑与完整排查思路5.1 求解器与步长设置导致的波形发散这是新手最容易栽的第一个跟头。现象是模型搭好之后一运行就报Simulink cannot solve the algebraic loop或者波形剧烈发散。我当时排查的顺序是先看功率电路用的什么求解器。如果用的是连续变步长默认ode45在电力电子开关频率高的情况下很容易出现数值刚性我建议改用离散求解器比如固定步长1e-6或2e-6秒。检查所有控制模块采样时间。PWM发生器、PI控制器、VSG核心统一用离散控制采样时间也保持一致。如果用了Simscape Electrical组件打开Local Solver选项让它为电力电子电路单独解算能显著减少代数环问题。这个坑的特征很明显就是一跑就报错或者波形飞了如果是这种情况先把求解器换成固定的离散步长大概率能解决。5.2 直流母线电压在功率阶跃瞬间失控这个坑是控制问题的经典代表。现象是光伏辐照阶跃上升或者并网有功指令突变时直流母线电压突然冲到500V以上或者跌到300V以下然后慢慢恢复。根本原因是储能变换器的电流环带宽不够跟不上母线电压外环的调节需求。母线电容的储能有限在功率突变瞬间如果储能电流不能快速补上母线电压就会大幅波动。我的排查链路是这样的第一步把母线电压波形和储能电流波形放在同一张图里看推动关系。如果是母线先跌、电流后跟基本就是电流环响应太慢。第二步检查储能变换器电流环的PI参数适当增大比例系数可以明显改善。第三步如果电流环带宽已经调高但母线波动依然大那就要考虑母线电容是不是太小。按我之前给的公式重新核算电容加大一档往往立竿见影。第四步还有一个非常实用的手段——在VSG的并网有功指令路径上加一个斜坡限速器把功率变化率限制在每周期10%-20%额定功率以内母线压力会小很多。5.3 VSG并网瞬间的冲击电流VSG模型里经常出现一个现象并网断路器合闸瞬间电流冲击巨大甚至超过额定电流好几倍直接把过流保护触发。这个问题的根源在于VSG输出的电压相位与电网电压相位不一致。合闸瞬间两侧电压有相位差就相当于一个瞬时短路冲击电流自然大。解决方法是加预同步控制在并网之前用PLL实时检测电网电压的相位和幅值通过一个PI调节器把VSG的输出相位逐步调整到和电网一致当相位差、幅值差都小到一定阈值后再合闸。在Simulink里可以用一个简单的逻辑检测相位差绝对值小于0.01rad持续10ms才允许断路器闭合。加了预同步之后合闸冲击电流可以从额定电流的5倍以上降低到10%-20%以内并网过程平滑得多。5.4 Simscape Battery的SOC初始值与热端口问题最后再提醒一个电池建模上的细节。我最早搭模型时SOC初始值随手填了0%结果整个仿真从第一秒开始母线电压就不对查了很久才发现是电池模型在SOC0时内阻异常增大导致电流输出受限。换成50%之后一切正常。另外热端口的问题前面提到过这里补充一下现象如果版本较新、电池模块默认有热端口而你没有连接任何热源或设置温度仿真会直接报unconnected input port错误。有两种处理方式在电池模块参数页里禁用热端口勾选或不勾选相关选项具体看版本或者连接一个常量温度源比如设25°C这样还能顺便观察电池温升这些都是仿真模型里不起眼但非常影响进度的细节提前设置好能省很多时间。6. 仿真结果判读、评估指标与后续扩展方向6.1 关键波形怎么判读才不算白跑跑完一次仿真以后不要着急截图先按下面的清单把波形逐张看一遍有功功率P与电网频率fVSG的核心特征就在这里。给电网频率一个跌落阶跃看有功功率是否快速上升并在1-2秒内稳定。如果P没反应说明有功-频率环的参数或者输入信号连接有问题。无功功率Q与并网点电压V电压跌落时无功应该迅速补偿恢复后无功回落到设定值附近。无功环的参数Kq决定了补偿力度。直流母线电压Vdc不管功率怎么变化母线电压波动应该在±5%以内。超出这个范围优先检查储能侧电流环带宽和母线电容。电池SOC正常情况下SOC是缓慢变化的如果发现SOC在几秒内剧烈变化说明储能功率指令设置不合理。三相电流THD并网电流的波形质量直接反映LCL滤波器和逆变器控制的效果。稳态时THD应小于5%如果谐波大检查PWM调制方式与滤波参数。把这几张波形对齐看基本就能判断模型搭得对不对、控制调得好不好。6.2 评估VSG控制效果的量化指标做课题写论文时光给波形不够需要用量化指标说话。我个人实践里常用下面几个指标计算方式典型取值惯量响应时间常数频率阶跃后有功上升到63%的时间0.1-0.5s最大频率变化率频率跌落瞬间的df/dt越小说明惯量支撑越强有功超调量暂态有功峰值与稳态值之比小于20%阻尼比ζ由功率振荡衰减曲线拟合二阶系统得到0.4-0.8母线电压偏差max|Vdc - Vref|/Vref小于5%这些指标可以用一个对比实验来构造同一套系统一组用传统PQ控制一组用VSG在相同频率扰动下记录各组指标。这种对比图放在任何报告里都很有说服力。6.3 这套模型后续还可以怎么扩展模型搭好只是第一步这个框架的扩展空间很大我列几个我做过或者觉得很有价值的方向参数优化把J、D、Kq做成可调变量用遗传算法或粒子群算法做离线优化寻找最优动态性能。Simulink里和MATLAB脚本联调很方便只需要把仿真包进一个函数反复调用就行。故障穿越验证在电网侧加三相短路、单相接地、电压跌落等故障模块看VSG控制的系统怎么应对。这是当前并网标准里的硬指标做出来非常加分。黑启动与孤岛切换加入孤岛检测逻辑让系统在电网失电时主动切换为孤岛运行并具备带载启动能力。这是微电网方向的核心场景。硬件在环测试把VSG算法部署到控制器硬件上通过实时仿真器闭环验证。Simulink Coder生成代码后可以直接和Speedgoat等平台对接。每一步扩展都能独立形成一个小课题模型本身的复用价值很高。最后分享一点个人体会VSG的参数整定我一开始也走过弯路以为J设得越大系统惯性越强就越高级结果仿真里系统持续低频振荡波形难看得很。后来把D加上去、把J降下来才真正理解惯量和阻尼是两回事——一个管储能释放的速度一个管振荡衰减的快慢。仿真模型的好处就是你可以肆无忌惮地改参数、看趋势把每组参数对应的物理含义摸透这种手感是直接做实验很难快速获得的。希望这篇文章能帮你把模型搭起来少走几步我走过的弯路。