做了快十年电力电子仿真,Simulink用得最多的场景就是无功补偿类装置,尤其是SVG——静止无功发生器(Static Var Generator)。风电场、光伏电站、钢厂轧机这些场合里它出现频率极高,动态无功响应快、调节范围宽,是当前无功补偿的主流设备。它的名字容易和前端开发里的SVG图片格式混淆,但在这个语境下,完全是指电力电子领域的无功补偿装置。
很多做仿真的朋友问过同一个问题:Matlab Simulink里到底怎么搭一个能稳定运行的SVG模型。原理书上讲得都清楚,一上手就全是坑:锁相环角度对不上、dq变换符号搞反、双闭环PI怎么调都振荡、直流电容电压建立不起来、模型一跑就发散。这篇文章就把我完整探索SVG仿真的过程写下来,从基本概念到模型骨架,从控制策略到调参实战,再到问题排查,一步不跳。适合正在做相关课程设计、毕业设计或者工程预研的工程师和同学参考,也可以当作新手入门SVG仿真的第一份操作手册。
1. 无功补偿与SVG:先把概念校准
1.1 无功功率补的到底是什么
很多人一听到“无功补偿”,第一反应是“无功就是没用的功”,这个理解偏差非常大。在交流电力系统里,电感类设备——电机、变压器、电抗器——在工作时需要通过电流建立磁场,这个电流和电压之间有90度的相位差,不产生有功,却占用电网容量、在线路上产生损耗和压降。这个电流对应的功率就叫无功功率,单位是乏(Var)。
电网里的电动机、轧机、电弧炉、变频器吸收大量无功。如果不做补偿,后果非常直接:线路末端电压被拉低,功率因数下到零点几,变压器和电缆被无功电流白白占用容量,线路损耗增加,电费还得按功率因数考核罚款。所谓无功补偿,本质上就是“就地”给负载提供它需要的无功电流,让电网只需要传输有功,从而改善电压、功率因数和线损。
我习惯用一个类比:无功功率像工厂里临时摆放的周转货架。货物(有功)搬运的时候,货架不产生价值,但搬货过程离不开它。如果每个车间都自己备货架(就地补偿),主干道运输压力就小很多;如果所有货架都堆在仓库(电网远端),每条运输通道都得为货架腾出空间。无功补偿就是给车间配货架的过程。
1.2 SVG和传统方案到底差在哪里
传统无功补偿手段经历了几个阶段。最基础的是并联电容器组,结构简单、造价低,但只能固定发无功,负载波动它就傻眼。再进一步是机械投切电容电抗器,能分组投切,但开关动作慢、级差大,瞬间响应能力差。后来出现了SVC(静止无功补偿器),用晶闸管控制电抗器(TCR)和电容器(TSC)的组合,可以实现连续调节,但晶闸管换相过程会产生大量低次谐波,响应时间也在几十毫秒量级。
SVG走的是完全不同的路线。它本质是一个电压源型 Pulse Width Modulation 变流器,通过IGBT高频开关,经过耦合电抗器并联到电网。控制变流器输出电流的幅值和相位,让输出电流始终和电网电压保持90度方向,就能连续、平滑地吸收或者发出无功功率。我把SVG和SVC几个关键指标做了对比,放在一起看非常直观:
| 对比项 | SVG | SVC(TCR+FC型) |
|---|---|---|
| 响应速度 | 亚周期级,通常5~10ms | 几十毫秒级 |
| 调节范围 | 容性到感性连续平滑调节 | 连续但有分级叠加 |
| 谐波特性 | PWM调制,自身谐波可控 | 晶闸管换相产生低次谐波严重 |
| 低电压适应性 | 电压跌落时无功出力按电压规律维持 | 电压越低输出无功越下降 |
| 噪声与占地 | 较小 | 电抗器体积大、噪声高 |
| 控制灵活性 | 可同时兼顾电压调节和功率因数控制 | 相对单一 |
这个差距决定了SVG在高动态响应的场景里几乎是不可替代的。比如冶金轧机负载急剧波动、新能源电站并网点电压支撑这些场合,用SVC往往反应不过来,SVG才能压住电压闪变。仿真研究SVG,不只是为了走通一个模型,而是要理解这套变流器控制的核心逻辑,它和光伏逆变器、风电变流器、储能变流器的控制框架高度一致,搞通一个就等于搞通了一大类设备。
2. Simulink仿真整体架构:先把骨架搭对
2.1 主电路模块选型与参数初设
搭建SVG仿真模型,我强烈建议使用Simscape Electrical工具箱(老版本里叫SimPowerSystems),里面有三相电源、耦合电抗、IGBT桥臂、直流电容这些现成元件,精力可以集中在控制策略上,不用自己写微分方程去搭主电路。
主电路拓扑是:三相电网经过线路阻抗连接耦合电抗器,再接到三相电压源型变流器,变流器直流侧并联大电容。仿真时我对初学者建议用“VSC + 电抗 + 直流电容”这个电压源型结构,不要先去碰电流源型,电流源型拓扑在工程上已经很少用了。模块选型我给一个可以直接套用的参考:
| 部件 | 模块 | 参考参数 |
|---|---|---|
| 三相电网 | Three-Phase Source | 线电压380V,50Hz |
| 线路阻抗 | Three-Phase Series RLC Branch | R=0.05Ω,L=0.1mH(可选) |
| 耦合电抗器 | Three-Phase Series RLC Branch | R=0.2Ω,L=5mH |
| 变流器 | Universal Bridge | IGBT/Diodes,3桥臂,开关频率10kHz |
| 直流电容 | Capacitor | 3000μF,耐压1000V |
| 直流电压参考 | Constant | 700V |
| 负载模拟 | Three-Phase Series RLC Load | 可并联感性负载测试补偿效果 |
参数取值的逻辑说一下。耦合电抗5mH对应工频下的感抗大约1.57Ω,如果额定无功电流按100A算,电感压降约157V,约为相电压310V的一半左右,这个磁芯和容量占比是工程上比较合理的比例。电抗太小,谐波抑制不够可控电流纹波很大;电抗太大,无功输出能力受限且电压损耗高。直流母线电压取700V,是因为线电压380V对应的相电压峰值约310V,半桥VSC输出相电压最大只能到直流电压的一半,也就是350V,留出调制度空间取700V比较稳。
2.2 控制层架构:从采样到脉冲的一条龙
主电路建好以后,关键是控制链路。SVG控制部分大体分五步:采样、锁相、坐标变换、双闭环调节、调制发波。信号从物理域进入控制域之前,需要用电压电流测量模块配合PS-Simulink Converter转换器把物理信号变成Simulink信号,Simulink里各种坐标系变换和PI调节器才能正常工作。
我习惯把控制链路分成几条明确的支路:
- 电网电压abc经坐标变换后送入锁相环PLL,得到同步旋转角θ;
- 用θ把三相电流abc变换到dq轴,得到有功电流iq和无功电流id;
- 电压外环把直流母线电压实测值与700V参考的误差经PI调节,输出有功电流指令;
- 无功电流指令根据补偿目标设置(按功率因数、按电压或者手动给定);
- 电流内环对dq轴电流分别做PI调节,加上前馈和交叉解耦项,输出调制电压;
- 调制电压经反变换回静止坐标系,送入PWM发生器产生12路IGBT触发脉冲。
控制支路全部要在子系统里封装,不要把一堆模块平铺在模型顶层。信号与物理域混在一起会非常难查,而且容易产生代数环。控制回路采样率我建议设置成2e-5秒(对应50kHz采样),PWM载波频率10kHz,控制周期和载波周期保持整数倍关系,数字控制仿真更真实。
2.3 为什么要分层建模
很多初学者喜欢把整个模型画在一张图里,总想一眼看到所有信号。SVG模型做完以后模块数轻松上百,全平铺的话一个Signal线交叉得看不下去,排查问题更是噩梦。我现在的习惯是严格分层:主电路层、测量层、控制层、调制层。
主电路层只放电源、电抗器、桥臂、电容、负载这些物理元件;测量层负责把所有要观测的电压电流提取出来并完成物理信号到数字信号的转换;控制层全部用Simulink模块搭建,输入是测量值和参考值,输出是电压调制信号;调制层统一生成PWM脉冲。每层之间用Goto-From标签或者数据总线连接,层次清楚,哪个环节出波形一眼就能定位。
还有一条经验:先跑平均模型,再上开关模型。所谓平均模型,是把IGBT桥臂用受控电压源替代,理论上等于忽略开关动作,只保留基波成分,仿真步长可以放大到50e-6秒,一秒工况几分钟就跑完,控制参数整定和整体逻辑验证全在平均模型上完成。逻辑验证通过以后,再切换回Universal Bridge详细开关模型,用1e-6的步长做几毫秒的波形验证,效率提升非常明显。
3. 核心控制策略逐个拆解
3.1 SRF-PLL锁相环:坐标系的基准
SVG所有控制都建立在和电网同步的旋转坐标系上,坐标系歪了,后面全错。同步参考坐标系锁相环SRF-PLL是三相并网设备最常用的相位同步方式,原理不复杂:先把三相电压做Clark变换得到αβ静止坐标分量,再做Park变换得到dq坐标分量,然后通过PI调节器控制q轴电压为零。当q轴电压为零时,Park变换使用的角度θ正好等于电网电压相位。
我实际搭的时候,在Simulink里会用Fcn模块或者数学运算模块直接写变换公式。Clark变换按等幅值变换取系数2/3:
v_alpha = (2/3)*(v_a - 0.5*v_b - 0.5*v_c); v_beta = (2/3)*(0.866*v_b - 0.866*v_c);Park变换(也叫dq变换)选择旋转方向时注意,工程习惯常用这种形式:
v_d = cos(theta)*v_alpha + sin(theta)*v_beta; v_q = -sin(theta)*v_alpha + cos(theta)*v_beta;PLL的PI输出是角频率修正量,在基准角频率(工频对应314rad/s)上叠加,再积分得到θ。这里有个关键坑:初始化阶段θ和电网相位的偏差会导致d、q轴波形摆得很厉害,甚至电流冲击。我的做法是先给PLL一个内部初始值,让θ从0开始,同时把电网A相初相位设为0,这样模型启动几毫秒内PLL就能锁定,不会出现长时间失锁。
3.2 dq变换与功率方向约定
做完坐标变换后,SVG在dq坐标系下的数学模型可以写成一组非常漂亮的方程。电网电压e和交流侧电压u之间的电感关系为:
L di_d/dt = e_d - u_d + ωL i_q
L di_q/dt = e_q - u_q - ωL i_d
其中ω是工频角频率。稳态时电流导数为零,有功功率P对应d轴电流,无功功率Q对应q轴电流,方向由坐标系定义决定。这组方程是整个双闭环控制的理论基础,也解释了为什幺要在电流环里加解耦项——ωL i_q和ωL i_d这两个交叉耦合项不处理,d轴和q轴的电流环会互相干扰。
功率方向约定是所有人都会踩的坑。我仿真SVG时发现,iq的正负方向直接影响无功输出方向。我采用的约定是:输出电流滞后电压90度(感性)时iq为正,超前电压90度(容性)时iq为负。所以当模型要“发出无功功率”时,iq参考值需要设为负值。很多初学者把参考值设成正数,结果发现不仅没补偿,反而吸收了无功,波形一看完全反了。
3.3 电压外环、电流内环双闭环
双闭环控制的整体思路是外环慢、内环快。电压外环的任务是稳住直流母线电压,因为变流器桥臂和电网之间交换有功功率才能维持电容电压,直流电压跌了说明有功流入不足,抬高了说明有功流入过多。把直流电压参考值700V和实测值做差,过PI调节器,输出就是有功电流指令id_ref。这个关系的物理解释是:通过控制有功电流为电容充放电,维持母线电压稳定。
电流内环的任务是快速跟踪id_ref和无功指令iq_ref。电流环PI直接输出调制电压在dq轴的分量,同时要加上两组补偿:一是电网电压前馈项e_d和e_q,作用是抵消电网电压这个扰动量;二是交叉解耦项ωL i_q和ωL i_d,作用是抵消dq轴耦合。加了这两项以后,电流环面对的对象近似是一个纯电感积分环节,控制难度大幅下降。
我搭的电流环输出表达式是这样的:
u_d_ref = Kp_i*(id_ref - id) + Ki_i*integral(id_ref - id) + e_d - omega*L*i_q; u_q_ref = Kp_i*(iq_ref - iq) + Ki_i*integral(iq_ref - iq) + e_q + omega*L*i_d;注意符号。我第一版模型把解耦项符号搞反了,结果电流一上去就开始振荡,查了整整一天才发现是这里的问题。把解耦项符号和前面dq方程严格对应起来,每一处都要检查。
3.4 调制方式:SPWM还是SVPWM
得到dq轴的调制电压后,要反Park变换回αβ静止坐标,然后送入PWM调制器。我在Simulink里先用的是SPWM,搞明白逻辑以后再换SVPWM。SPWM实现最简单:三相反变换得到的电压调制波分别和三角载波比较,大于载波给上管导通,小于给下管导通。载波频率选10kHz,调制波幅度限制在1以内,注意调制比不能超过1否则进入过调制区,波形会畸变。
SVPWM相比SPWM直流电压利用率更高,约提升15%,谐波特性也好一些,但是实现逻辑复杂一点。Simulink里可以自己搭扇区判断、矢量作用时间计算,也可以用工具箱自带的功能模块。我自己测试的感受是,在仿真阶段用SPWM完全够用,重点是先把控制逻辑调通;如果课题或者项目要求研究SVPWM的谐波优化效果,再切换到SVPWM不迟。基础模型切忌一步到位上复杂调制,调试难度会成倍增加。
4. 仿真调参实战:手把手跑出正确波形
4.1 双闭环PI参数整定的带宽法
PI参数是SVG仿真里最让新手头疼的环节,很多人上来就零四三二地试,模型振荡了也不知道往哪个方向调。我整定双闭环参数用的是带宽法,这个方法工程上最实用,逻辑也最清楚。
电流内环的开环对象近似为(Ls+R),电感5mH,电阻0.2Ω。如果电流环闭环带宽取ωc,那么比例增益Kp和积分增益Ki粗略估算为:
Kp ≈ L × ωc,Ki ≈ R × ωc
开关频率10kHz,电流环带宽通常取开关频率的1/30到1/10,也就是1000~3000rad/s左右。我取ωc=2000rad/s,L=5mH算出来Kp=10,R=0.2Ω算出来Ki=400。这两个值作为初值,仿真后如果电流跟踪有静差就增大Ki,如果波形振荡就适当调低Kp。
电压外环带宽应该明显低于电流环,典型取电流环的1/10左右,也就是200rad/s。电压环对象受直流电容特性和负载影响,很难精确建模,我用的是工程经验初值:Kp=1,Ki=50。先跑起来,看直流电压动态,再根据超调量和调节时间微调。这个方法不能保证一次到位,但能保证方向正确,不会让参数毫无头绪地乱飞。
4.2 三步调试法:从开环到闭环
我强烈建议不要一开始就全闭环跑,SVG模型牵涉的环节太多,哪个环节有错都可能导致波形崩溃,而且难以定位。我调试时严格遵守三步走:
第一步,开放PWM验证调制链路。手动给一个恒定调制电压(比如幅度0.8的正弦波),通过PWM直接驱动桥臂,观察变流器交流侧是不是正确输出了对应的正弦电压。这一步能确认PWM逻辑、脉冲分配、死区设置和桥臂连接是否正常。
第二步,固定无功指令验证电流环。在平均模型里,把id_ref设为一个小的定值比如5A,把iq_ref设为目标值比如-100A,只投入电流内环,观察电流dq轴分量是否快速无静差跟踪参考。如果这一步波形发散,八成是PI符号接反或者解耦项方向错误。
第三步,投入电压外环验证全系统。把直流电压参考设到700V,让电压外环自动生成id_ref,这时整个SVG闭环系统应该能稳定运行。观察启动过程,直流电容电压从充电到稳定的过渡、无功电流阶跃的响应。我建议每一步都停下来审视一两轮波形,确认无误再进下一步。
4.3 无功阶跃响应波形怎么看
系统稳定后,最值得做的验证试验是无功阶跃。运行模型到稳态,在0.4秒时刻把iq_ref从0突变为-100A(对应容性无功输出),记录三相电流、直流电压、系统无功功率这几条曲线。
从波形上要确认三件事。第一,无功电流在几个毫秒内跟上参考值,无超调振荡。第二,电网A相电压和SVG输出的A相电流相位差接近90度,电流超前电压(容性补偿状态),说明补偿方向正确。第三,直流母线电压在阶跃瞬间会有一点波动,但1到2个工频周期内应恢复到700V附近,如果电压持续跌落检查id方向,电压持续抬升检查指令方向。
负载突变试验同样重要。可以并联一组感性负载,比如功率接近20kW、无功接近20kVar的三相RL负载,在0.5秒投入,观察SVG是否自动增发无功、电网功率因数是否维持在0.95以上。这是评价SVG动态补偿能力最直观的画面。
5. 常见问题与排查技巧实录
5.1 模型发散和代数环问题
Simulink报错“Algebraic loop”或者仿真一开始波形就飞到天上,这是SVG模型最常见的故障。代数环的根源通常是控制信号和测量信号形成了无延时的闭环,比如电流测量值直接进控制模块,又马上影响到同一时刻的电流。解决办法有两个:在反馈路径上加Unit Delay模块引入一拍延迟,模拟数字控制器的采样保持特性;或者在求解器设置里启用“zero crossing detection”配合合适的求解器。
发散还有一个高频原因:仿真步长太大。详细开关模型用变步长求解器时,IGBT开关时刻和步长不匹配容易产生数值振荡。我现在的做法是,详细开关模型一律用离散求解器,固定步长1e-6秒,平均模型用50e-6秒。步长这个参数对仿真稳定性和速度影响极大,不要偷懒。
5.2 直流电容电压建立不起来
直流电压建立不起来或者建立超慢,最常见的原因是IGBT触发脉冲根本没送到桥臂。先检查PWM输出的脉冲信号是否正确地连接到了Universal Bridge的g端口,再看脉冲逻辑反没反——上下桥臂同时导通会直接短路,模型会发散或者报错。
第二个常见原因是初始阶段PLL未锁定,电流指令方向翻转导致电容只放不充。处理方式是给PLL合理的初始相位匹配,并且给电压外环输出加限幅,启动阶段把id_ref限制在20A以内,防止充电电流冲击过大。第三个原因是调制电压方向问题,控制环路的电压前馈和解耦项符号不够正确,导致变流器有功电流方向反了,电容持续放电。
5.3 电流波形畸变、谐波严重
电流畸变严重时,先看调制波有没有饱和。如果PI输出达到限幅上限,等于调制波顶部削平,等效于过调制,电流波形必然出现明显削顶畸变。这种畸变不是改开关频率能解决的,要给PI控制器加抗积分饱和(Anti-windup)功能,在Simulink里用带限幅的PID模块并且开启积分反馈。
排除调制饱和后,再看PWM脉冲里有没有加入死区时间。Universal Bridge没有直接给死区参数时,需要外部死区模块,没有死区在低压不太明显,电压一高就会产生电流毛刺和谐波。最后检查电抗值,5mH电抗在100A电流下的电流纹波通常在5%以内,如果纹波超过10%,说明电抗太小或者开关频率太低,需要重新核算参数。
5.4 无功方向不对、功率计算符号混乱
无功方向反了是最隐蔽的错误之一,波形看起来挺好,电流正弦、响应也快,一算功率发现完全反了。问题通常出在dq变换和功率计算公式的信号流向不匹配。dq变换有两种等幅值变换和等功率变换之分,旋转方向也有正反两套约定,PI输出反变换后调制电压的正负随之变化。
排查方法是做一次专项测试:在静止坐标系下直接测量SVG交流侧输出电流和电网电压,用手算或者示波器模块计算相位关系。电流超前电网电压90度是容性,滞后90度是感性。以此为基准调整控制环路里id_ref和iq_ref的方向符号,把所有符号约定统一成一个体系,不要混用不同参考文献的坐标变换公式。
5.5 模型运行太慢怎么办
详细开关模型经常出现步长1e-6还跑得极其慢的情况,一秒钟仿真要跑十几分钟。优化手段除了前面说的先跑平均模型外,还有几个实用技巧:把通断损耗忽略掉,IGBT和二极管的Ron、Roff尽量设小;关掉不必要的示波器连续采样,Simscape的Scope节点过多也会显著拖慢仿真;将连续求解器换成离散求解器,离散化后可以从根本上减少数值解算开销。
如果这些做完仍然慢,还可以把控制环路的采样率从2e-5放宽到4e-5,前提是仿真结果差异可接受。实际工程推理阶段不需要精确到每个开关的谐波细节时,甚至可以继续放宽。我这里有一张我常用的运行指南表,可以参考:
| 仿真阶段 | 桥臂模型 | 步长 | 目标 |
|---|---|---|---|
| 逻辑调试 | 平均模型(受控电压源) | 50e-6s | 验证控制逻辑、整定参数 |
| 详细验证 | Universal Bridge | 1e-6s | 验证谐波、死区、开关动态 |
| 系统级分析 | 平均模型 | 100e-6s | 长时间运行看电压波动、功率因数 |
这套仿真做完之后,你会发现SVG的核心难点其实就三个:坐标系转换、双闭环参数方向、调制链路的完整性。我个人最大的体会是,控制链路里的每个环节都要单独验证然后再合到一起跑,任何一步都不建议跳过。调试过程中心态最容易崩的就是波形离谱、找不到原因的阶段,这种时候回到平均模型,把每个中间信号都用Scope接出来逐级检查,比盲目改参数有效得多。后面再扩展,可以在这个基础上加入负序电流抑制功能、电网电压不平衡补偿策略,或者多台SVG协调控制,每一步都有充足的课题空间可以继续深入。