最近手头在做一个厂区供电改造的预研项目,朋友工厂那边的龙门吊一动作,低压侧母线电压明显往下掉,车间几十台变频器群启的时候,功率因数表指针摆得厉害。翻遍原有电容柜的方案,怎么算都觉得投切冲击和响应时间跟不上,最后把目光放到SVG上——想先用MATLAB Simulink做一套无功补偿SVG仿真,把控制思路、主电路参数和动态响应验证清楚,再谈工程落地。整个过程走下来踩了几个坑,也摸出了一些调PI的心得,这里完整记录下来,给同样在做SVG仿真和电力电子控制的朋友参考。
这篇内容适合电力电子方向的在校学生、刚开始接触SVG研发的工程师、做配电成套方案的人阅读。我会从SVG的基本原理讲起,然后把Simulink里主电路搭建、双闭环控制、PWM调制、参数整定和结果分析一条线讲透,最后把实际仿真里容易发散的几个坑单独拎出来说。全程用一套具体的仿真算例参数来演示,你可以直接照抄结构,再按自己的电压等级和容量改参数就行。
1. SVG到底比传统无功补偿强在哪
1.1 无功补偿这个问题的本质
先捋一下无功补偿的底层逻辑。感性负载在运行时要建立磁场,这部分能量不对外做功,但会在电源和负载之间来回交换,占用了线路传输容量,增大了线路压降和损耗。功率因数考核、变压器容量不够用、线损超标、末端电压偏低,很多时候都是无功没有得到合理补偿带来的。
传统做法是接触器分组投切电容器:感应电机多或者变频器多的现场,就根据电流和功率因数反馈,一组一组往母线上并电容。这个方法便宜、可靠、用了很多年,但痛点很明显——补偿量是阶梯式的,一个步长至少几十千乏,负载波动幅度小的时候,要么过补要么欠补。另外电容投切瞬间会产生很猛的冲击电流,对触头、电容本身、甚至整个母线上的其它设备都是考验。热轧产线、焊机群、龙门吊、提升机这类负载,无功变化速率很快,分级投切基本追不上。
后来出现了SVC,用晶闸管控制电抗器的导通角来连续调节吸收无功,或者用晶闸管投切电容器组,响应速度在几十毫秒级别,比接触器快了一个数量级,是无功补偿领域的重要升级。但SVC本身是阻抗型补偿,存在几个顽固问题:晶闸管触发角大时谐波明显,系统阻抗和补偿回路之间可能发生谐振,而且本质上它既要有电容器又要有电抗器,占地面积大。
这时候SVG走到台前。SVG全称Static Var Generator,静态无功发生器,核心是一个电压源型PWM变流器加直流侧电容,再通过电抗器并联接入电网。它的本质是受控电流源:通过控制变流器交流侧输出电压的幅值和相位,让流过电抗器的电流连续可调,逆变状态输出容性无功,整流状态吸收感性无功,从满载感性到满载容性都能平滑过渡。响应时间能做到几毫秒甚至更快,动态性能甩开SVC一个身位。
| 补偿方式 | 响应速度 | 补偿连续性 | 谐波水平 | 占地/体积 | 控制复杂度 |
|---|---|---|---|---|---|
| 接触器电容柜 | 秒级 | 阶梯式 | 低 | 大 | 低 |
| SVC(TCR+FC) | 20~50ms | 连续 | 较高,需滤波器 | 很大 | 中 |
| SVG | 毫秒级 | 连续平滑 | 低(PWM可优化) | 小 | 高 |
从这张对比表能明显看出SVG在响应速度上的代差优势。这也是为什么现在配电网、充电站、新能源场站这些对动态无功需求强的场景,绝大多数都直接上SVG。吃透SVG的仿真,其实就是吃透PWM整流器的建模和控制这个底层能力,掌握之后再做有源滤波APF、光伏逆变器、储能变流器PCS的控制,思路是通的。
1.2 SVG补偿的物理过程直观理解
要建好SVG的Simulink模型,得先想明白它在电路层面到底干了什么事。
SVG主电路就是三相桥式逆变器,直流侧一个大电容,交流侧经过电感L接入电网。电抗器L两端连着两个电压源:一侧是电网电压Us,另一侧是变流器输出电压Ui。电抗器上的电流I = (Us - Ui) / (jωL)。也就是说,只要改变变流器输出电压矢量的大小和方向,就能控制流过电抗器的电流。
在理想情况里,SVG补偿无功时只交换无功功率,直流侧电容电压基本不变。这时变流器输出电压Ui和电网电压Us幅值很接近,两者夹角很小,流过电抗器的电流近似为无功电流:要是Ui幅值比Us高,电流相位超前电压,SVG输出容性无功,相当于给母线上补了个可调节的电容;反过来Ui幅值略低,电流滞后电压,SVG吸收感性无功,行为像一个可调节的电感。幅值差越大,无功电流就越大。
实际工程中不能只靠幅值差控制,因为变流器输出电压和电网电压之间还存在相位差,相位差会伴随有功功率流动。仔细研究会发现,稍微控制一点相位差,能量就能从电网侧流入直流电容,维持电容电压稳定。所以完整的控制策略必须双管齐下:用幅值差控制无功电流,用相位差控制有功分量补充直流损耗和维持直流电压。
这个思想落到控制上,就变成了后面要讲的dq坐标系下的电流解耦控制。交流量在三相静止坐标系里是正弦波,PI控制器没法做到无静差跟踪,但经过Park变换到与电网电压同步旋转的dq坐标系后,基波正弦量变成了直流量,用传统PI控制器就能精确控制无功分量和有功分量。这一步是所有三相VSC控制软件的核心基石。
2. 双闭环控制的数学原理和PI参数初值
2.1 dq坐标系下的SVG数学模型
为了给Simulink建得有理有据,数学模型必须先列清楚。取电网电压矢量方向为d轴,q轴超前d轴90度,经过Park变换后,SVG交流侧的状态方程如下:
- L·di_d/dt = Us_d - Ui_d + ω·L·i_q
- L·di_q/dt = Us_q - Ui_q - ω·L·i_d
Us_d和Us_q是电网电压的dq分量,Ui_d和Ui_q是变流器输出侧电压的dq分量,ω是电网角频率。从公式可以看出,d轴和q轴之间通过ωL交叉耦合。电流控制器要同时控制i_d和i_q,必须把耦合项和前馈电压补偿掉,这叫前馈解耦控制。
实际控制器输出的变流器参考电压为:
- Ui_d_ref = Us_d + ω·L·i_q - (Kp_i + Ki_i/s)·(i_d_ref - i_d)
- Ui_q_ref = Us_q - ω·L·i_d - (Kp_i + Ki_i/s)·(i_q_ref - i_q)
前两项是解耦和前馈,后面括号部分是PI调节器对电流误差的校正。这样设计之后,i_d和i_q就可以独立控制:d轴电流控制有功通道,q轴电流控制无功通道。
2.2 双闭环结构怎么安排
SVG控制策略通常采用电压外环和电流内环双闭环。电流内环的作用是快速跟踪指令电流,保证动态响应和限流能力,带宽要求高。外环分两路:
第一路是直流电压外环。SVG工作时直流侧电容需要有功功率来维持电压,如果把直流电压控制住,相当于告诉有功通道从电网吸收多少有功来补充开关损耗、线路损耗和电容漏电。直流电压外环输出的是d轴电流指令i_d_ref,整定原则是外环带宽大约为内环带宽的1/5到1/10,保证两个环路不打架。
第二路是无功/交流电压外环。对要补偿无功的SVG来说,通常根据电网调度指令或本地母线电压目标,计算出需要补偿的无功功率Qref,然后换算成q轴电流指令i_q_ref。换算关系是Q ≈ 1.5·Us_d·i_q。注意i_q的方向定义不同会导致符号相反,Simulink里搭模型前先把坐标变换约定写清楚,不然后面看波形很容易怀疑人生。
整个控制链路已经比较完整了:电网电压通过PLL锁相后得到同步角度θ,用θ做Park变换把采样到的三相电流转成i_d和i_q,和指令值比较,各自过PI调节器,再加上前馈解耦量得到Ui_d_ref和Ui_q_ref,反Park变换得到三相调制波,和三角载波比较输出PWM波,驱动IGBT。
2.3 PI参数怎么给初值
很多时候仿真发散不是模型不对,而是PI参数瞎给的。这里我说一下我整定的基本步骤。
电流内环对象近似为一阶惯性环节,传递函数是1/(L·s + R)。设电流环开环截止频率为ω_ci,闭环带宽建议为载波频率的1/10到1/5。以我后面搭建的仿真为例,开关频率10kHz,电流环带宽取1000rad/s左右。调节器写为Kp_i + Ki_i/s,当零点被放置在对消掉被控对象极点位置时,Kp_i约等于L·ω_ci,Ki_i约等于Kp_i·R/L,R一般是电抗器寄生电阻加线路电阻。
直流电压环的带宽取电流环的1/10,约100rad/s。控制对象是直流电容的积分特性,工程上先给一组初始参数,然后在阶跃负载下观察直流电压的恢复时间和超调量,按“先比例后积分”的次序迭代。我最终的参数范围如下,供参考:
| 控制环 | Kp初值 | Ki初值 | 备注 |
|---|---|---|---|
| 电流内环d轴 | 1.5 | 20 | 根据电流超调微调 |
| 电流内环q轴 | 1.5 | 20 | 与d轴对称 |
| 直流电压外环 | 0.1 | 3 | 带宽远低于电流环 |
| 无功/交流电压外环 | 0.02 | 0.5 | 动态响应最慢的一环 |
这里的初值是以380V/10kVar等级、L=3mH、直流电容3000μF为基准估算的。你换电压等级和容量时,不要照抄数字,要按比例重新估算。后面我会说怎么通过仿真波形反过来修正参数,这也是实际工程中真正花时间的地方。
3. Simulink建模实操:从搭主电路到跑通第一次仿真
3.1 模型的整体框架
我用的模型结构是:三相电网电源→线路阻抗→母线→带负载的馈线,同时在母线处并联SVG支路。SVG支路由三相电抗器、三相全桥、直流电容组成。控制部分用Simulink Simscape Electrical里的模块配合普通Simulink模块实现。
这套模型的参数按一个普通低压配电室的情况来设:电网线电压380V、50Hz,负载额定有功30kW,功率因数0.75,无功需求约26kvar左右。为了让仿真运行时间不至于太长,SVG容量设计为30kvar,这样在调节范围内能覆盖负载无功波动。具体主电路参数见下表:
| 参数 | 数值 | 说明 |
|---|---|---|
| 电网线电压 | 380V/50Hz | 三相 |
| 线路阻抗 | R=0.01Ω,L=0.1mH | 模拟配电电缆 |
| 交流侧电抗器L | 3mH | 约0.06pu,兼顾滤波和动态响应 |
| 直流侧电容C | 3000μF | 支撑直流电压,抑制纹波 |
| 直流电压给定Vdc_ref | 750V | 高于电网电压峰值537V,留足裕量 |
| IGBT开关频率 | 10kHz | 工程常用范围 |
| 载波 | 三角波 | 幅值1,频率10kHz |
主回路模块选择需要注意:电源用“Three-Phase Source”,通过内部阻抗参数模拟线路压降;断路器或者STEP阶跃负载用“Three-Phase Breaker”和RL串联负载实现;变流器直接用“Universal Bridge”,内部型号选IGBT/Diode,导通压降、导通内阻可以按默认或按所选IGBT器件参数修改。直流侧用一个大容量的“Series RLC Branch”,选电容模式。
3.2 Simulink模型搭建顺序
第一步,搭电源和负载。把三相电源、线路阻抗、负载接到一起,先在Simulink里跑一遍纯电路仿真,确认没有SVG时母线电压和负载电流正常,记录此时的功率因数和电压跌落值。这个基础波形非常重要,后面所有SVG的效果都要和它对比。
第二步,在主母线处接SVG支路。把3mH电抗器和Universal Bridge串联,桥的直流端口接3000μF电容和直流电压测量。电抗器的位置我建议放在变流器和母线之间,而不是放在直流侧,这样电抗器既有滤波作用又作为能量交换媒介。注意电抗器两端都有电压电流测量模块,电流的方向要保证从电网流入SVG时为正值,不然后面坐标变换出来q轴电流的正负全乱。
第三步,做控制子系统。我从Simulink库中拖出这几个关键模块:Three-Phase PLL、abc_to_dq变换模块、dq_to_abc反变换模块、PID Controller、调制波饱和限幅、PWM发生模块以及几个直流电压、无功功率的计算模块。为了调试方便,把整个控制部分封装成一个Subsystem,输入是三相电压、三相电流、直流电压,输出是六路PWM脉冲。
第四步,生成PWM波。最直接的方式是用“PWM Generator”模块,三个桥臂各一个比较器,三角载波和调制波比较,产生带死区时间的两路互补脉冲。Simulink的“PWM Generator(MOSFET/IGBT)"其实内部就已经带了死区逻辑,直接用就行。死区时间设2μs左右,模拟真实驱动保护的延时。
3.3 求解器和仿真参数设置
这一步很重要,SVG这种功率电子电路,变流器开关在微秒级变化,如果求解器没选对,不是仿真发散就是速度慢到让人崩溃。
在powergui里我选了离散仿真模式,采样时间设为2微秒。PWM载波频率10kHz,理论上载波周期100微秒,一个载波周期内至少要采50个点才比较准确,2微秒采样满足这个条件。离散模式下不光功率电子器件被离散化,控制环的采样也是和这个步长同步的,整个系统稳定性更好。不要直接用连续模式加ode23tb硬跑,连续模式下每两个开关事件之间都要做事件检测,仿真速度会慢一个数量级,而且稍微有点数值毛刺就容易发散。
求解器选离散固定步长,求解器类型选ode3或者ode4都行。仿真总时长我设为0.5秒,算下来步数25万步,在普通PC上大概几分钟能跑完。控制采样时间和功率电路采样时间可以分开,但我建议一开始先用同一采样时间,模型简单清晰,后期优化性能时再解耦。
运行模型之前把示波器挂好:电网三相电压和电流、SVG输出三相电流、直流电压Vdc、无功功率Q、PLL角度、d轴和q轴电流、PI输出。一次仿真跑完后,不要急着改参数,把这几路波形先整体看一眼,基本能判断出整个系统工作在什么状态。
我为了验证模型结构,第一次仿真通常先不加负载,只给SVG一个很小的无功指令,比如-2kvar,看它能不启动、能不能稳定。SVG起动瞬间直流电压从电网经反并联二极管整流后变为约537V,然后控制环会把它抬升到750V给定值。这步能过,说明控制方向、PLL角度、PWM极性都没有问题,再进入下一步带载实验。
4. 典型工况的仿真结果和分析
4.1 无SVG基线的惨状
先看没有投入SVG的基准工况。三相电源通过线路阻抗带30kW负载,功率因数0.75。仿真出来的母线电压虽然还在合格范围,但已经比电源侧低了不少,电压跌落大约在5%左右;负载电流很大,峰值接近80A,而且电流和电压之间相位差明显,电流滞后电压约41度。这时候去算功率因数是0.75,线路上的无功电流占了大头,端部电缆、上级变压器都在白白承担这部分容量。
这个基线场景的作用是提醒我们一个事实:无功补偿做得越好,同样的有功功率下线路电流越小,线损和电压跌落也都跟着改善。后面SVG投入后,对比这个工况就能直接量化补偿效果。
4.2 SVG投入后的稳态补偿效果
把SVG在t=0.1s时投入,给定无功指令Qref=20kvar,配合负载无功需求。投切瞬间先看到一点冲击电流,随后在20ms左右电源电流波形趋于正常,电压电流相位差明显缩到很小的角度,功率因数从0.75提升到0.97以上。母线电压的幅值也基本恢复到电源侧水平,跌落从5%降到1%以内。
直流母线电压的表现是整个系统是否健康的最直观信号。投入瞬间直流电容先被充电到约750V给定值,这中间有一个小幅超调,大约到770V,然后很平滑地稳定下来,纹波控制在±5V以内。这个750V的稳定性说明有功通道工作正常,控制器在实时调整有功电流来平衡系统损耗。
再细看SVG输出的电流波形,三相正弦度很好,总谐波畸变率THD大约在3%以内。这里多说一句,电抗器L的取值对THD影响很大:L太小,开关纹波电流太大;L太大,动态响应变慢,无功补偿反应迟钝。3mH这个值在380V/30kvar这个容量下是合理区间,实际产品里还会加LCL滤波器进一步降纹波,但在仿真验证阶段单L够用。
4.3 负载突变下的动态响应
工程中最关心的是动态响应,所以我专门设了一个工况:t=0.25s时把负载从30kW切到45kW,无功需求也随之增大;t=0.4s时再切回30kW。观察SVG能不能快速跟踪无功变化。
从波形可以清楚看到:负载突增瞬间,母线电压出现了一次短时跌落,因为无功功率瞬间出现缺口;SVG检测到这个变化后,q轴电流参考值快速升高,输出无功电流增大,大约经过半个到1个电网周期,母线电压就恢复到接近原来的水平。整个过程响应时间在10ms量级,这比电容柜投切的几百毫秒快了太多,比SVC的几十毫秒也优势明显。
直流电压在负载突增的瞬间出现了一个小幅下坠,这是因为瞬间有功功率需求增加,直流电容需要先放出一点能量来支撑变流器输出,电压外环随后调整d轴电流从电网补充能量。下坠幅度大约15V左右,在20ms以内恢复。这里你如果看到直流电压掉得特别深,甚至跌到600V以下,就要检查直流电压外环的带宽设置,大概率是给得太低了,外环跟不上负载变化。
4.4 从波形反推参数怎么调
仿真中反复看到几个典型的波形问题也一并说一下。
电流内环整定过强时,d轴或q轴电流跟踪波形会出现明显的超调和振荡,稳态时电流振荡纹波加大。这种情况要把Kp_i降下来,Ki_i也适当减小,让电流响应更平稳。电流环太弱时,电流跟踪会有较大静差,加上前馈量不够,波形上能看见电流指令和实际电流一直有固定偏差,这就要加大Ki_i来提高低频增益。
直流电压超调太大时,优先降低Kp_vdc。直流电压波形发生等幅振荡时,要检查电压环带宽是不是和电流环带宽太接近了,带宽拉开到5倍以上就很少出现这种问题。
无功环的输出如果出现稳态震荡,我遇到最多的是PI输出没有做限幅,导致i_q_ref饱和,退出饱和时发生极限环振荡。这是个非常常见又隐蔽的坑,所有PI输出都要加饱和限幅,限幅值要根据SVG额定容量换算成最大电流值来设定。
5. 仿真过程中踩过的坑和规避套路
5.1 PLL锁相角度出错引发的连锁反应
我第一次搭这套模型时,PLL输出角度是逆时针旋转为正的dq坐标系,而abc_to_dq变换模块默认的坐标变换符号约定不完全一致,结果PLL给的角度和变换模块里期望的角度符号方向差了个负号,导致i_d和i_q完全反了,直流电压根本建不起来,波形疯狂振荡。这个问题的排查过程很有代表性:一看到直流电压稳不住,先查PLL角度和电压采样A相信号的相位关系是否和坐标系定义一致。
经验做法是:先用一个理想电网电压信号加入PLL,把PLL输出的角度和A相电压的相位放同一张示波器里看。如果角度波形在A相电压过零时刚好处于0或2π附近,说明PLL跟踪正确;如果错开一个固定角度或者方向反了,马上调整坐标变换的符号。
5.2 开关频率和仿真步长的数字稳定性问题
仿真发散这个问题在SVG模型里出现频率极高。我的排查经验是从小步长开始试:首先把powergui的采样时间从2e-6增大到1e-5,如果波形只是变粗糙但还能稳定,说明是采样步长精度不够;如果波形直接爆炸,再查PWM载波有没有和采样时间同步。
另一个隐蔽点是离散PWM发生模块的载波频率应该和电路采样频率成整数倍关系。10kHz载波配2微秒采样步长,载波周期100微秒,正好50个采样点,相位关系稳定;万一用了非整数倍,PWM波在数字离散下会产生时间抖动,给控制环引入噪声。
5.3 PI限幅和积分饱和
积分饱和这个问题,在SVG这种有大惯性直流电容的系统中特别容易犯。启动阶段直流电压离给定值很远,电压环PI输出很快顶到限幅最大值,如果积分项没有做抗饱和处理,后面等电压靠近给定值时,积分项里积了一大堆误差能量,要花很长时间才能退出来,表现就是直流电压大幅超调,甚至冲得很高。
解决办法有两种,在Simulink里都可以做:一个是PID模块内部勾选“anti-windup”模式,设置合适的Back-calculation系数;另一个是更工程化的做法,用两个滞环比较器对PI输出限幅,并把限幅状态反馈回积分项的输入端,切断继续积分。我一般先试PID模块自带的抗积分饱和,不够再手写。
还有一个容易踩的是电流环PI输出的饱和限幅没有考虑电流极限。SVG允许的最大补偿电流是交流电抗器设计和开关器件容量的核心约束,限幅值设得太大会让IGBT过流,设得太小则输出无功能力不足,导致补偿效果达不到目标。
5.4 三相断路器谐波冲击和初始条件问题
Simulink里用断路器投切负载时,如果没有在断路器模块勾选“初始状态关断,从t=0时刻就开始仿真”,断路器闭合瞬间可能产生数值冲击,导致仿真波形出现莫名其妙的尖峰。解决方法是仿真开始时断路器处于打开状态,需要合闸的时刻由外部Step信号切换,给系统一个明确的初始稳态。
同理SVG本身的投入时机也要靠断路器控制,主断路器在t=0.1s才闭合,避免SVG启动冲击和电源初始瞬态耦合在一起。工程现场里SVG的并网投入也有复杂的预充电、软启流程,仿真里简化成断路器操作,但投入时机的概念是一致的。
5.5 电抗器寄生电阻对结果的影响
很多人仿真时把电抗器设成纯电感,结果直流电压稳定得很“理想”,但实际系统的损耗被忽略了。我在模型里给电抗器加了一个0.05Ω左右的寄生电阻,模拟线圈铜损和磁芯损耗,幅度不大但对系统稳定性和直流电压外环的PI参数都有影响。加了这个电阻后你会发现,SVG在零无功输出时,直流电压也要依靠一点有功电流维持,这是真实SVG的工作特性。
如果实际产品里没有这个损耗,直流电容电压会缓慢上升,因为开关器件的驱动能量损耗低于理论计算值,电压外环需要吸收少量的多余有功。仿真把这个损耗建出来,对后面做实验时的参数迁移有很大帮助。
最后再分享一个调参习惯:SVG仿真最容易出成就感但也是最容易走弯路的地方,就是双环PI参数都还没调稳就上去追求完美波形。我现在的做法是分步验证——先把PLL跟踪、坐标变换方向、PWM极性这些“方向性”的东西确认到波形完全正确,然后调电流环到跟踪正常,再调电压环到直流电压可控,最后才调无功环到补偿效果。每一步都用固定的仿真场景验证,参数修改有记录,回到工程现场调设备时也能按这套顺序排查问题。