Simulink中VSG低电压穿越仿真:限流控制与电流平衡策略解析

📅 发布时间:2026/10/13 9:24:36
Simulink中VSG低电压穿越仿真:限流控制与电流平衡策略解析
几年前我第一次做VSG低电压穿越仿真的时候被一个基础问题卡了整整两天明明把电流限幅指令限到1.2pu了故障瞬间波形里的电流还是冲到2.4pu。后来才想明白限幅指令只是给了电流内环一个参考逆变器的实际输出电流由滤波电感、调制电压和电网电压共同决定内环带宽不够、电感参数又偏小的时候物理上根本拦不住那个冲击。这篇文章就是把我在Simulink里搭建VSG低电压穿越检测、限流控制、电流平衡控制以及有功调频、无功励磁双闭环这套完整系统的思路、参数和踩坑记录整理出来。适合已经会基础逆变器仿真、正在做并网逆变器控制或者微电网稳定性验证的同学参考这篇文章不涉及某一种具体软件的操作截图重点是讲清楚控制逻辑和仿真验证的要点。1. 低电压穿越到底是“穿”什么VSG在电网故障中的真实处境1.1 故障电流不是“设定”出来的而是“逼”出来的很多人刚接触VSG时会有一个误解既然VSG内部控制的是电压那我只要在故障时手动把电流指令调小输出电流就会变小。实际完全不是这么回事。VSG本质上是电压源型控制逆变器输出电流是由外部网络方程决定的而不是由控制器直接决定的。简化到单相稳态输出电流近似为I (E∠δ - U∠0) / Z其中E是VSG的内电势幅值U是电网电压幅值δ是两者相位差Z是包括滤波电感和线路阻抗在内的总阻抗。正常并网时E和U之间的差值很小只有阻抗压降这么大电流自然在额定值附近。一旦电网电压跌落比如U跌到0.5pu而VSG的内电势还没来得及调整E和U的差就会迅速拉大。我做过一个很简单的计算假设滤波电感标幺值是0.1pu电网电压跌到0.5puVSG内电势保持1.0pu那么电流差值是(1.0 - 0.5) / j0.1 ≈ 5pu。这个数值即使考虑到相位差和线路电阻也远超IGBT能承受的2倍过流能力。这就引出了低电压穿越限流控制的核心逻辑限流不是给内环一个“小电流参考”就行而是要在检测到跌落之后快速主动改变内电势幅值或者切换到电流控制模式从物理上把电流压下来。1.2 LVRT不只管“不脱网”还要管“支撑和恢复”并网导则里的LVRT一般包含三层含义。第一层是“不脱网”电网电压跌落到一定范围时逆变器要保持并网运行一段规定时间不能因为瞬时低压保护而立刻跳闸。通常以电压跌落深度为横轴、时间为纵轴画出一条曲线跌落越深允许的并网时间越短。第二层是“无功支撑”在电压跌落期间逆变器要向电网注入容性无功电流帮助电网电压恢复。多数导则里的典型要求是正序无功电流增量与电压跌落深度成正比即iq_ref K × (0.9 - U_pu) × InK通常在1.5到4之间我仿真里常用2到3。第三层是“平稳恢复”故障清除后有功功率不能突然猛拉否则会对电网频率造成二次冲击。很多系统里会做一个斜坡恢复限定有功功率上升速率。所以LVRT不是一个阈值判断而是“检测—状态机切换—限流控制—无功支撑—恢复”的全过程。Simulink建模时我会把这一整套逻辑做成一个独立的状态机模块和VSG的主控制环分开方便调试。2. 整个仿真系统的顶层架构与五个核心模块划分2.1 模块划分整套仿真我一般拆成五个模块每个模块单独封装信号接口在顶层连接。主电路模块直流电压源、三相逆变桥、滤波电感、滤波电容、线路阻抗和电网。直流侧我习惯用一个700V的理想直流源加一个大电容并联这样故障期间直流电压波动不至于太大。故障发生器模块Simulink里用Three-Phase Fault可以设置单相接地、两相短路、三相短路还能控制故障发生时刻和持续时间。测量与检测模块三相电压电流采样、正负序分离、LVRT状态机。这个模块的输出是LVRT标志位和跌落深度是整个控制策略切换的依据。VSG控制核心模块有功调频环、无功励磁环、电流平衡限流器、正负序电流内环。这部分是重点所有控制逻辑都在这里。PWM驱动模块把调制波变成开关脉冲。我习惯用离散SPWM或者SVPWM开关频率定在10kHz。2.2 控制信号流正常工况和LVRT工况怎么切换正常工况下VSG的功率外环根据有功和无功指令输出内电势幅值E和相位θ然后生成三相电压参考经过电压电流双闭环跟踪最后送PWM。在LVRT状态整个控制路径要切换电压跌落被检测到后功率环的输出不再是唯一的参考来源限流器的输出要接管电流内环的指令。有功电流参考要根据剩余容量和无功电流需求重新分配。负序电流环投入抑制不对称跌落后的负序分量。切换过程最容易出问题的是积分器状态跳变。功率环的积分器在故障前可能积到了一个比较大的值故障瞬间直接切换会让调制波突变电流冲击反而更严重。我的做法是在切换到LVRT模式时把功率环积分器冻结保持故障前的值或者对切换前后的电流参考做一阶滤波过渡。3. 电压跌落检测与LVRT标志位生成这部分最容易被忽略很多人把LVRT仿真的重点放在限流和电流环上结果检测模块随手搭一个有效值比较器仿真一跑就发现状态机乱跳。实际上检测模块是整个控制策略正确动作的前提检测慢半拍限流就来不及。3.1 三种检测方式对比我试过几种跌落检测方案各自特点很明显。第一种是三相电压有效值窗口法对三相电压分别算RMS再跟阈值比较。优点是实现简单直接拿Simulink的RMS模块就行缺点是有效值需要至少半个工频周期才能算准也就是说在50Hz系统里检测延迟至少有10ms。这个延迟在严重跌落时会让电流冲击已经结束限流控制才反应过来效果很差。第二种是正序电压d轴分量检测通过Clark变换和Park变换把abc三相电压转到dq坐标系取正序d轴电压作为跌落判据。这个方案的检测速度比有效值法快得多一个采样周期就能更新一次但前提是锁相环在故障时还能锁住。三相严重跌落时PLL容易失效所以我的做法是用正序分量重新构建一个电压角度给检测模块用不让它依赖主PLL的恢复速度。第三种是DSOGI正负序分离后再检测在αβ静止坐标系下用双二阶广义积分器把正序和负序电压分离出来然后用正序d轴电压做阈值判断。这个方案既能快速检测又能在不对称故障时不误判缺点是多了一组运算模块仿真步长要足够小。检测方式响应速度不对称故障适应性Simulink实现难度RMS有效值法慢约半周期差可能误判低正序d轴法快中依赖PLL中DSOGI正负序分离快好高我在最终版本里用的是DSOGI方案因为后续电流平衡控制也需要正负序分离这一个模块同时解决了检测和内环参考构成两个问题。3.2 阈值、滞环和确认延时LVRT状态机的阈值不能只设一个点必须设启动阈值和恢复阈值中间留滞环否则在临界跌落深度附近会出现状态反复切换。我的典型参数如下表参数数值说明LVRT启动阈值0.9 pu正序电压低于该值进入LVRTLVRT恢复阈值0.85 pu正序电压高于该值退出LVRT动作确认延时5 ms电压连续低于阈值5ms才确认返回确认延时20 ms电压连续高于恢复阈值20ms才返回启动阈值和恢复阈值不一致是为了防止电压在0.88pu附近抖动时状态机反复切换。确认延时也很有必要因为电压跌落瞬间可能会有测量噪声或者瞬时扰动如果没有延时一个极短的低压毛刺就会触发整个限流切换。在Simulink里实现状态机我建议用Stateflow或者一个简单的有限状态机子系统。如果不想引入Stateflow用逻辑门加延时模块也能做但状态多了之后逻辑会非常乱后面想加条件很难维护。4. 限流控制为什么要“看方向”从电压相位到电流指令的映射4.1 三种限流策略对比限流策略在文献里有无数种变体但本质只有三类。第一类是直接限幅把三相电流指令直接钳位在最大允许值。实现最简单但问题是三相电流矢量限幅和单相限幅是两回事三相电流合成矢量超限的时候单独看每一相可能都没超器件照样会被冲击损坏。第二类是dq轴分别限幅对d轴有功电流和q轴无功电流分别限幅。这种比直接限幅好一些能限制合成矢量的每个分量但如果在dq坐标里分别限成1.2pu合成电流的大小可能超过1.2pu因为矢量的模是√(id²iq²)。第三类是幅值限制方向优先分配先确定最大电流幅值I_max再根据电网需求分配d轴和q轴电流。这是我在LVRT里推荐的做法。限流策略实现难度矢量超限风险是否满足无功支撑要求直接三相限幅低高否dq轴独立限幅中中部分满足幅值限制无功优先中高低是4.2 无功优先电流指令怎么算LVRT期间控制目标不是维持额定有功输出而是优先保证无功支撑。我的指令生成逻辑如下。首先计算当前正序电压标幺值U_pu然后算无-功支撑电流参考iq_ref K × (0.9 - U_pu) × InK我取2.5In是额定电流峰值。当电压跌到0.5pu时iq_ref 2.5 × 0.4 × In 1.0pu也就是说无功电流已经占满了全部电流容量。然后计算有功电流参考原则是不能让合成电流超过I_maxid_ref min(id_normal, √(I_max² - iq_ref²))I_max我一般取1.2pu。如果id_normal还保持原来的额定值而iq_ref已经到1.0pu那√(1.2² - 1.0²) 0.66pu有功电流就得往下压。这个动态分配过程在Simulink里用几个数学函数模块就能实现注意对id_normal的正负都要处理。如果原来是有功从电网倒灌回直流侧的整流工况id_normal本身是负的那就不能简单用min要分象限处理。4.3 电流参考的相位怎么取无功优先给出了电流的幅值但电流的方向由电压相位决定。dq坐标下q轴电流要锁定在电压矢量方向上这样iq_ref才是真正的容性无功电流。这里有个容易犯的错直接用故障前PLL锁出来的θ或者用VSG自己的虚拟θ。在三相电压不对称跌落时PLL输出的相位可能振荡非常厉害以这个相位做Park变换得到的i_q根本不是想控制的那个无功分量。我的处理是在LVRT模式下电流控制环的dq变换角度用正序电压的角度这个角度从DSOGI模块里直接拿。正序分量不会因为不对称故障产生2倍频脉动锁出来的角度更干净。VSG的虚拟θ在故障期间依然用于功率环计算但电流内环的方向参考要切换成正序电压角两者解耦。5. 电流平衡控制在不对称跌落里的作用机制5.1 为什么不对称跌落会产生过流电网故障很大比例是单相接地或两相故障这类故障产生的电压跌落是不对称的。不对称电压可以分解为正序、负序和零序三部分。零序分量在没有中线或采用三角形接法的主电路里不构成通路但负序分量会在逆变器输出端产生负序电流。负序电流的危害有两个一是让三相电流幅值不再平衡最不利情况下某一相电流可能比平均电流高出30%到50%限流保护按单相最大值来计算时会过早触发或者误判二是负序电流在电机类负载里会产生2倍频转矩脉动在逆变器直流侧产生2倍频纹波对器件和电容都不友好。所以“电流平衡控制”本质上是负序电流抑制把负序电流指令控制为0让三相电流重新恢复到幅值对称的状态。5.2 正负序分离的Simulink实现负序电流抑止需要先把正序和负序电流分离出来。两个常用方案方案一DSOGI分离abc电流先变换到αβ静止坐标系然后过两个SOGI分别提取αβ轴上的正序和负序分量再分别做Park变换到正序dq和负序dq。这个方案在电网频率偏移不大时效果很好仿真里也容易实现只需要用传递函数搭SOGI模块。SOGI的传递函数是H(s) kωs / (s² kωs ω²)k是阻尼系数我取1.414ω是基波角频率314rad/s。在Simulink里直接用Transfer Fcn模块搭这两个二阶环节注意把采样时间设为连续或者足够小。方案二dq坐标系陷波器先按正序PLL角度做Park变换得到d轴和q轴分量。正常对称情况下dq分量是直流量存在负序分量时dq分量里会出现2倍频的脉动。用100Hz陷波器把2倍频分量滤掉就相当于提取了正序分量。负序分量则可以通过原信号减去滤波后的正序来获得。实现方式动态响应对频率偏移敏感度模块复杂度DSOGI快中较高dq轴陷波器中高较低我最终选DSOGI因为仿真里频率偏移是我们要研究的内容之一陷波器对频率偏移太敏感频率跑偏5%之后负序提取效果会明显变差。5.3 负序电流抑制闭环的参数要点负序电流抑制需要增加一个负序电流内环。正序d轴、正序q轴、负序d轴、负序q轴四个PI控制器加上负序电压补偿一起输出到调制波生成模块。负序dq轴以2倍频旋转PI控制器的带宽要高于2倍频一般和正序电流内环设同一套参数就行。我常用的电流内环PI参数是Kp 0.5Ki 50基准是标幺值系统电感标幺值0.1。这样算出来的电流环带宽大约在800Hz到1kHz能够跟踪负序的2倍频指令变化。负序电流环的输出是负序电压指令叠加到正序电压指令上最后经过反Park变换成αβ轴的调制波。在Simulink里这等于把SVPWM的输入从一组变成两组叠加接线时要小心符号负序dq的旋转方向是反向的反Park变换角度要用-θ。6. 有功调频环和无功励磁环的双闭环整定思路6.1 有功调频环从摆动方程到参数选择VSG的核心是模拟同步发电机的转子运动方程J × dω/dt P_ref/ω - P_e/ω - D × (ω - ω_ref)其中J是虚拟转动惯量D是阻尼系数P_ref是有功指令P_e是测量到的输出有功ω_ref是电网同步角速度。转动惯量J在标幺化系统里和惯性时间常数H直接相关近似关系为J 2H × S_base / ω_s²S_base是额定容量ω_s是同步角速度。H我通常取2秒这个值对应物理同步电机中一个中等偏大的惯量水平。H太小跌落瞬间频率变化率RoCoF很大H太大频率恢复变慢仿真时长也要拉长。D跟下垂系数相关。电网频率下降1%时有功输出增加的百分比就是下垂系数。D我一般取20到30对应约3%到5%的下垂率在10kW的仿真系统里D20意味着频率偏差1Hz时有功变化大约2000W。Simulink里实现这个环节很直接一个积分器产生θ一个减法器求频率偏差加一个乘法器算阻尼功率。要注意在LVRT期间有功指令P_ref可能要临时降低否则限流控制一直在把id往下压有功外环的积分器却还在往上推两者打架会让电流波形长时间震荡。6.2 无功励磁环Q-U下垂关系无功励磁环模拟的是同步发电机励磁系统的无功-电压特性基本表达式是E E_ref K_q × (Q_ref - Q_e) K_u × (U_ref - U)E是VSG内电势幅值Q_ref是无功指令Q_e是测量无功U_ref是并网点电压参考U是实际电压。K_q是无功-电压下垂系数。在标幺值下我把K_q取为0.05意思是无功功率变化1pu时电压变化0.05pu也就是5%的电压调整率。K_u是电压偏差调节系数取值在1到2之间相当于把电压偏差直接变成内电势修正。LVRT期间无功励磁环的做法有点微妙正常模式下E_ref是0.98到1.05pu之间的一个工作点但在LVRT模式下如果还是让U_ref保持1.0pu而实际电压跌到0.5puK_u×(U_ref - U)这一项会瞬间变成很大的正值把内电势E往上推反而恶化电流冲击。所以LVRT期间一般有两种处理一是把无功励磁环的U_ref切换成当前正序电压让E主动跟随电压跌落缩小E和U之间的差二是直接用LVRT模块生成的无功电流指令驱动配电流内环绕过无功励磁环。我实际仿真里用的是第二种切换最干脆也不会出现积分饱和问题。6.3 电压电流双闭环的带宽匹配思路热搜里提到“电压电流双闭环pi控制”和“带宽与谐波的关系”这确实是控制整定的关键。在VSG控制链路里实际存在三级闭环最外层的功率环有功调频、无功励磁带宽最窄中间是电压环最内层是电流环。三级闭环的带宽必须从内到外逐级拉开通常电流环带宽是电压环的5到10倍电压环带宽是功率环的5到10倍。举例来说我的仿真参数电流内环带宽约800Hz到1kHz响应时间1ms左右电压外环带宽约100到200Hz功率外环带宽约5到20Hz主要跟踪指令和低频振荡。电流环带宽如果取得过高会放大采样噪声和开关谐波电流波形里出现明显毛刺带宽如果过低对故障电流的抑制能力变差限流控制的效果大打折扣。带宽和谐波的最佳平衡点我在10kHz开关频率的系统里一般选在1/10到1/20开关频率之间也就是500Hz到1kHz。7. Simulink建模的实测踩坑记录从总步长到代数环7.1 求解器和步长选择这套系统是连续和离散混合的功率环是连续积分器PWM是离散事件故障发生器带时序逻辑。我尝试过统一用连续求解器仿真速度非常慢也试过统一用离散功率环精度又不够。最终用的是固定步长步长2e-5秒求解器选ode3PWM和数字控制部分用离散模块功率环用连续积分器。整个0.6秒的故障仿真在普通台式机上大概跑半分钟到一分钟完全可以接受。步长如果放到5e-5秒开关频率10kHz时一个开关周期只有两个采样点调制波精度明显下降电流谐波增大限流效果也会看起来变差。这是仿真假象不是控制策略的问题。7.2 几个典型坑第一个坑是代数环。VSG功率计算输出电流和PWM调制波之间如果存在直接反馈Simulink解算时会报警告说存在代数环仿真速度骤降甚至卡死。解决办法是在反馈路径上插一个Memory模块或者Unit Delay把直接反馈切断。代价是延迟一个采样周期但只要延迟远小于控制带宽周期影响很小。第二个坑是Three-Phase Fault参数设置。很多人把故障电阻设成0.001Ω以为这样故障够深结果仿真时电压直接变成零附近逆变器电流保护动作整个系统被切成离网状态LVRT完全没机会表现。我的做法是把故障电阻设成让电压跌到0.3到0.5pu这个范围既满足跌落深度要求又能让VSG的限流控制充分动作。第三个坑是PLL在严重跌落时锁不住。我前面提过解决方案是正序分量电压重建锁相角或者在LVRT模式下直接切换到正序DSOGI送出来的角度。第四个坑是直流侧电容。直流电容如果取太小故障期间直流电压会跟着电网波动测量到的有功功率和电流会带2倍频分量干扰LVRT状态判断。我的经验是直流电容按每kW至少取200μF以上10kW系统用3000μF左右比较稳。8. 仿真结果怎么看波形趋势与性能指标的关系8.1 关键波形该长什么样以三相电压在0.2秒跌落到0.35pu、持续0.25秒、0.45秒恢复为例故障瞬间电流有一个尖峰然后限流控制介入输出电流稳定在1.0到1.2pu之间。如果尖峰超过2pu说明检测模块动作太慢或电流环带宽不足。无功功率在LVRT期间明显上升对应的无功电流跟随指令维持电压支撑效果有功功率在故障期间会受到一定限制有功电流被“削”下来。频率波形会有一个小幅摆动摆动幅度和速度反映J和D的配合是否合理。不对称故障时三相电流幅值应该逐渐趋于一致说明负序电流抑制有效动作。如果某一相电流始终明显偏大先查正负序分离模块的输出再查负序电流环的PI参数。8.2 性能指标评估表我在调参时用的评估表大致如下指标我的目标值说明故障瞬间电流峰值≤2pu器件暂态耐受上限LVRT稳定后电流0.9~1.2pu限流稳定值无功支撑电流≥0.4pu 电压跌至0.5pu并网导则常见要求恢复正常时间≤0.3s故障清除后有功功率恢复频率最大偏差≤0.5HzJ和D共同决定负序电流占比≤5%电流平衡控制效果8.3 如果电流还是超限问题最可能在哪个环节我调试中遇到电流仍然超限优先排查顺序是一查LVRT状态机有没有在规定时间内切换。把标志位波形和电压波形放在同一张图里看如果标志位晚了半拍问题出在检测模块。二查电流指令有没有被正确限制。看id_ref和iq_ref两个信号在故障期间的波形如果iq_ref已经到1.2pu而id_ref还保持在1.0pu那么合成电流超过1.2pu是必然的问题出在指令发生器。三查电流内环跟踪能力。给内环一个阶跃指令看跟踪时间是否在1ms量级。如果慢了调Kp。四查调制波是否饱和。如果调制波在故障期间长时间削顶说明电压余量不够实际输出电流会被限幅到更低水平这种情况要减小滤波电感压降或者调整直流母线电压。最后分享一个我一直沿用的习惯把LVRT状态机的每个状态变化存成workspace变量同时把J、D、滞环阈值、无功电流系数K做成一组可批量扫描的脚本把所有典型工况跑完再统一看指标。这套流程一开始搭建费点时间但对后面参数优化帮助极大。