单相STATCOM做了差不多两个月,从最开始只会搭三相的模型,到能把单相系统的无功和谐波一块儿收拾干净,中间踩了不少坑。这篇就把整个思路、模型搭建过程和控制参数设计一起捋一遍,给同样在做单相无功补偿仿真或者准备入门STATCOM的朋友一个能直接参考的路径,也把我调试时遇到的一些怪问题列出来。这里说的单相STATCOM,指的是通过一个单相电压源型逆变器并联在电网上,既能输出超前或滞后的无功电流来补偿系统无功,又能在电流指令里叠加谐波分量,让装置输出反向谐波电流去抵消负载产生的谐波。整套东西用Simulink验证下来,效果很直观。
1. 单相系统的功率因数困境与STATCOM的定位
1.1 单相低压系统谐波电流的主要来源
单相系统里最常见的非线性负载就是整流桥后面带一个大电容的直流负载,比如家用空调、变频器、开关电源、LED驱动电源。这类负载从电网取电流的时候,只有交流电压峰值附近那一小段才有导通,电流波形是一组很窄的尖峰脉冲,不是正弦波。
从频域看,这个尖峰电流里除了基波分量,还带着大量的3次、5次、7次等奇次谐波。单相系统里3次谐波问题尤其突出,因为三相系统的3次谐波在中性线上会叠加,而单相系统的3次谐波直接就体现在相电流里。谐波电流在线路阻抗上会产生谐波压降,导致供电电压畸变,还会增加变压器和线路的铜损,中性线过热。
1.2 为什么选择STATCOM而不是并联电容器
传统的无功补偿手段是并联电容器组或者接触器投切电容。电容器组只能补偿固定的容性无功,负载变化的时候没法连续调节,而且电容和系统电感在某些谐波频率下容易发生并联谐振,反而把谐波放大。早期有人用“电容+电抗”组成调谐滤波器来兼顾无功补偿和谐波吸收,但滤波器参数受电网阻抗变化影响很大,失谐之后效果衰减很明显。
STATCOM用全控型器件(IGBT、MOSFET)构成电压源型逆变器,通过调节输出电压的幅值和相位来控制注入电网的电流,从而实现对无功功率的连续动态补偿。它的本质是"一个可控的电流源",既能输出超前无功也能输出滞后无功,补偿范围是双向的。更重要的是,电流指令可以由瞬时无功计算得到,谐波分量也可以叠加进去,这样STATCOM同时就具备了有源滤波器APF的功能——这是无源电容绝对做不到的。
1.3 标题所描述的"补偿无功+减轻谐波"到底是什么意思
标题里"补偿无功功率,并减轻谐波"这句话,对应的控制目标是两件事:
第一,让电网输出的电流和电网电压同相位,也就是把系统的功率因数校正到接近1,消除基波无功电流。表现在波形上,补偿后电网电流是正弦的,相位和电压对齐。
第二,让电网电流里不含有谐波分量。非线性负载产生的谐波电流由STATCOM本地提供,电网只提供基波有功电流。表现在波形上,补偿后电网电流的THD数值明显下降。
这两个目标在控制上是可以合并处理的:先把负载电流的基波无功分量和谐波分量都提取出来,取反之后作为STATCOM的电流指令,用电流跟踪控制让STATCOM输出相应的补偿电流即可。这也是我在这篇文章里采用的统一控制框架。
2. 单相STATCOM主电路拓扑与控制原理拆解
2.1 单相桥式VSC拓扑结构与器件选型
单相STATCOM的主电路就是一个单相全桥电压源型逆变器(VSC),交流侧通过一个滤波电感L接入电网,直流侧是一个支撑电容C。四个开关管可以选用IGBT加反并联二极管,如果仿真电压等级不高(比如220V系统),用MOSFET也可以,关键是反并联的续流二极管必须有,因为在无功补偿的时候电流经常是反着流的。
直流侧电容的作用是维持直流电压稳定,同时为逆变器提供一个低阻抗的电压源。电容电压必须大于交流侧电压的峰值,否则逆变器无法输出足够的补偿电流。对于220V有效值的系统,交流峰值约为311V,直流电压至少要给到360V以上,实际工程里一般取380-400V。
滤波电感L的作用有两个,一是把逆变器输出的PWM电压波滤成比较平滑的交流电流,二是限制电流的变化率,让电流能跟上指令值。电感取值和开关频率有关,后面会专门讲。
2.2 单相系统无法直接套用三相dq坐标变换
很多从三相STATCOM转过来做单相的人,第一个反应就是把三相的dq变换直接拿来用。但单相系统只有一个交流量,没有天然的αβ两相正交分量,直接做Park变换是没有意义的。这里需要人为构造出一个正交的虚拟相量。
常用的做法有两种,一种是信号延迟法,把当前采样值延迟1/4个工频周期(5ms)作为虚拟的β轴分量;另一种是SOGI(二阶广义积分器)法,通过一个自适应滤波器同时输出与输入同相和正交的两个分量。延迟法实现简单,但动态响应慢半拍,且在频率偏移时有误差。SOGI法响应快、抗频率偏移能力强,我自己用的是SOGI,配合一个简单的锁相环(PLL)实时跟踪电网频率,在整个仿真过程中表现得非常稳定。
构造出正交分量后,就可以套用标准的dq变换公式:
[ \begin{bmatrix} i_d \ i_q \end{bmatrix} = \begin{bmatrix} \sin\theta & -\cos\theta \ \cos\theta & \sin\theta \end{bmatrix} \begin{bmatrix} i_\alpha \ i_\beta \end{bmatrix} ]
其中(\theta)是锁相环输出的电网电压相位。对于基波正序分量,变换到dq同步旋转坐标系后是直流量,用PI控制器可以实现无静差跟踪;对于谐波分量,在dq坐标系下则是特定频率的交流量。这个特性后面设计谐波补偿策略时很关键。
2.3 谐波电流检测与指令电流生成逻辑
单相STATCOM的指令电流怎么来,我试过两种方案。第一种是直接检测负载电流,做dq变换后取其中的无功分量和谐波分量作为补偿指令;第二种是检测电网电流,把电网电流控制在纯有功正弦,STATCOM自动补上缺的那部分。
我采用的是把负载电流作为检测对象、让STATCOM补偿"负载电流中的无功与谐波部分"这种方案。具体步骤如下:
- 采样负载电流(i_L),使用SOGI构造正交的αβ分量。
- 通过dq变换提取有功电流(i_d)和无功电流(i_q),这里的(i_d)和(i_q)是包含直流分量和交流分量的复合信号。
- 基波有功分量是(i_d)中的直流部分,基波无功分量是(i_q)中的直流部分,谐波分量就是两者中的交流部分。
- 补偿指令电流(i_c^* = i_q)的直流分量反号 + (i_d)的交流分量反号 + (i_q)的交流分量反号。
为了分离直流和交流,可以用一个低通滤波器或者陷波器,滤波器带宽不能太低,否则动态响应慢;但带宽太高又滤不干净,这个需要折中。我仿真中用一阶低通,截止频率设在100Hz左右,再配合一个10ms左右的响应时间,效果还不错。
整个控制框架就是:外环是直流电压环,维持直流侧电压稳定在400V;内环是电流环,跟踪指令电流;调制环节用单极性SPWM把电流控制器输出的调制波变成驱动信号。
3. 控制系统的设计与参数整定
3.1 双闭环控制结构:直流电压外环+电流内环
电流内环是整个人STATCOM控制的核心。电流环的输入是指令电流(i_c^*)和实际输出的补偿电流(i_c),两者做差后经过PI控制器,得到逆变器输出电压的参考值,再通过SPWM产生驱动信号。
注意这里的电流环PI控制器和前馈解耦。单相系统的电压方程是:
[ u_{inv} = u_s + L\frac{di_c}{dt} ]
(u_{inv})是逆变器输出电压,(u_s)是电网电压。如果只用PI控制器去跟踪指令电流,PI环节需要自己去对付电网电压这个扰动,动态响应差不说,还可能饱和。所以我在PI输出前面加了电网电压的前馈项,把(u_s)直接补偿掉,这样电流环面对的被控对象就近似成一个纯积分环节,PI参数设计起来就非常方便。
直流电压外环的作用是维持电容电压稳定。因为STATCOM本身是有损耗的,开关管的开关损耗、线路电阻损耗都会让直流电压慢慢掉下去,需要外环提供一点有功电流来补充这个能量损失。外环PI输出的是有功电流指令的幅值,和锁相环输出的单位正弦信号相乘后,加到电流指令里。
3.2 PI参数整定方法
最早调PI参数的时候是经验试凑,试来试去总有一个环节在振荡。后来用了基于对象模型的整定法,一下清爽很多。
电流环在加入电网电压前馈之后的等效对象是:
[ G_i(s) = \frac{1}{Ls} ]
这是一个纯积分环节,按I型系统整定,PI控制器的传递函数为(K_p + K_i/s),开环传递函数为((K_p s + K_i) / (L s^2))。如果取(K_i / K_p = R/L)(这里R是线路电阻,通常很小可忽略),那可以把开环传递函数化简为(K_p / (Ls)),闭环带宽约等于(K_p/L)。我仿真里L=4mH,希望电流环带宽在1kHz左右,那么(K_p = L \times 2\pi \times 1000 \approx 25),(K_i = K_p \times R / L \approx 5)(R取0.8Ω时)。实际调试中在这个基础上微调就很快收敛了。
直流电压外环的带宽要远低于电流环,一般设计在20-50Hz,否则直流电压环的调节会和电流环互相干扰。外环PI参数同样可以用类似方法整定,把电流环近似成单位增益,(C)是电容值,外环对象近似为(1/(sC)),按带宽需求算即可。
3.3 单极性SPWM与双极性SPWM的取舍
单相全桥逆变器可以用双极性SPWM,也可以用单极性SPWM。双极性SPWM四个开关管在每一个载波周期内都高频切换,桥臂中点输出电压在(±U_{dc})之间跳变,等效输出电压的谐波频谱差一些,而且开关损耗大。
单极性SPWM的特点是输出电压在(0)和(±U_{dc})之间切换,等效开关频率翻倍,同样的开关频率下谐波小很多。具体实现是左桥臂(A相)用高频三角波调制,右桥臂(B相)用工频方波或者互补的调制信号,使得桥臂输出电压只在正半周和负半周分别工作。
我在Simulink里用两个比较器分别控制左桥臂和右桥臂:
- 左桥臂:调制波(电流环输出)与高频三角载波比较,输出A相上管驱动。
- 右桥臂:需要产生一个与调制波反相的基准,或者更简单的做法——用正弦绝对值信号与载波比较后,再根据调制波符号决定输出极性。
用单极性SPWM之后,电网电流的纹波明显减小,THD进一步降低,而且L可以取小一点。代价是控制逻辑比双极性复杂一点,不过用Simulink的逻辑模块完全够用。
4. Simulink建模与仿真实现细节
4.1 模型整体搭建设计
打开Simulink之后,我先建了一个新的模型,把仿真类型设为离散(定步长),步长取10微秒(对应100kHz采样率,足够覆盖20kHz的PWM载波)。模型分几个子系统:
- 电网与主电路子系统:交流电压源、线路电感、整流桥非线性负载、STATCOM主电路。
- 负载子系统:一个单相不控整流桥接电阻负载,用来产生谐波和无功需求。
- 控制子系统:PLL、SOGI正交分量构造、dq变换、直流电压环、电流环、SPWM生成。
- 测量与显示:电压电流波形采集、THD分析(可以用Powergui的FFT工具,也可以把数据导出用MATLAB的fft函数处理)。
这里必须提醒一点:如果用了Simscape Electrical(原SimPowerSystems)的电力电子模块,一定要额外放一个Powergui模块(选择离散仿真模式,采样时间设1e-6或2e-6),否则仿真会非常慢或者直接报错。
4.2 关键模块参数参考
下面是我仿真里用的一组经过验证的参数,直接照搬基本能跑通:
| 参数 | 数值 | 说明 |
|---|---|---|
| 电网电压有效值 | 220 V | 50 Hz单相 |
| 线路阻抗 | 0.5 Ω + 2 mH | 模拟线路阻抗 |
| 直流侧电容 | 2200 μF | 支撑直流电压 |
| 直流电压参考值 | 400 V | 高于峰值311V |
| 滤波电感 | 4 mH | 并网电感 |
| 开关频率 | 20 kHz | 单极性SPWM等效40kHz |
| 负载电阻 | 10 Ω | 不控整流桥输出 |
| 不控整流桥直流侧电容 | 470 μF | 产生典型谐波电流 |
| 电流环PI | Kp=25, Ki=5 | 按带宽1kHz整定 |
| 电压环PI | Kp=0.5, Ki=15 | 带宽约30Hz |
4.3 仿真步长与求解器的选择
很多初学者在搭电力电子仿真的时候会因为求解器选得不对而出现"仿真发散"或者"仿真速度慢得离谱"的情况。
如果用的是Simscape Electrical元件库,我建议仿真类型选择离散,Powergui的采样时间设为1微秒。这样Simulink会用定步长离散求解器来处理整个模型,虽然牺牲了一点精度,但换来的是几十倍的仿真速度提升,而且不会出现连续求解器在开关切换点处反复迭代导致的收敛失败问题。
如果坚持用连续求解器,推荐ode23tb,相对容差设为1e-3,最大步长限制在2e-6秒以内。连续仿真在开关动作频繁的情况下会很慢,所以我在实际调参过程中都是先用离散模式跑通逻辑,最后再切换到连续模式验证一遍。
4.4 模型运行前需要检查的几处细节
电感电流初始值:在电路的初始状态里,滤波电感的初始电流设成0,直流电容的初始电压可以设成0或者400V。如果从0开始,启动瞬间电流冲击会比较大,但也能顺便观察控制器的动态调节过程。我一般设为0,看完整的启动动态。
PLL的初始相位:PLL初始相位设为0,仿真一开始有一个短暂的锁相过程。如果想要更快进入稳态,可以把PLL输出的相位初值和电网电压的初始相位对齐。
负载的连接位置:非线性负载和STATCOM的公共耦合点必须一致,否则补偿效果会打折扣。实际模型里我把两个都接在同一个母线上,母线电压就是电网电压经过线路阻抗后的电压。
测量模块采样率:示波器或者To Workspace模块的采样时间别设太大,否则FFT分析的时候分辨率和频带都不够。我的数据采集步长是1e-5秒,FFT分析窗口取0.2秒(10个周期)。
5. 仿真结果分析与性能评估
5.1 补偿前的"惨状"
固定步长仿真设置好之后,先把STATCOM的驱动信号屏蔽掉(比如把逆变器四个开关管的G极脉冲置零),只让非线性负载跑起来,这样得到的就是补偿前系统的原始状态。
这时候看电网电流波形,是非常典型的尖顶波,峰值大约能到35A左右,但波形很瘦,每个工频周期只有两小段导通。用FFT分析THD,测出来大概在60%-80%之间(具体数值和负载电阻、电容大小有关)。基波电流的相位也比电压稍微滞后一点,功率因数大概只有0.85左右,其中既有谐波导致的畸变功率,也有基波无功的成分。
5.2 投入STATCOM后的波形改善
把STATCOM的驱动信号恢复,运行到稳态之后再看波形,效果非常直观:电网电流从尖顶波变成接近正弦的波形,电流峰值略降(因为无功和谐波不再由电网提供,总电流减小了),同时电流和电压的相位完全对齐。
从波形细节看,补偿后的电网电流并不是完美正弦,还残留着开关频率附近的纹波(这是PWM的正常现象),但工频段的谐波基本被消除干净了。THD从60%-80%降到5%以内,功率因数从0.85提升到0.99以上,效果符合预期。
这里有个有意思的现象是:STATCOM输出的补偿电流波形特别复杂,既有基波无功分量,又叠加了高频谐波分量,看起来乱糟糟的,但正是这个"乱糟糟"的电流把负载产生的谐波和无功电流"顶"掉了,让电网只提供干净的有功电流。这正是STATCOM与单纯的无功补偿装置的核心区别。
5.3 直流侧电压的动态响应
直流侧电压从初始0V启动后,会经历一个较长的动态过程。电压环刚开始的时候误差很大,PI输出饱和,STATCOM输出较大的有功电流给电容充电,电压快速上升。接近400V的时候,充电电流逐渐减小,电压进入平稳状态,整个建压过程大约耗时0.1-0.15秒(和电容大小、电压环参数有关)。
当负载突变的时候(比如把负载电阻从10Ω跳到5Ω),直流电压会有短暂的跌落(大约跌落10-20V),随后在0.1秒内恢复到参考值。这个动态过程正好说明电压外环工作正常:负载突然增大,STATCOM损耗增加或者需要补偿的电流增大,直流电压下降,外环感知到误差后增加有功电流指令,把电压拉回来。
6. 参数设计原则与排坑实践
6.1 直流侧电容怎么定
直流电容的大小直接影响直流电压的纹波和系统的动态响应。电容太大,电压纹波小,但启动充电时间长,动态响应慢;电容太小,电压纹波大,可能会导致电流环的参考指令直接叠加较大的低频纹波,让补偿效果变差。
单相系统中有一个特殊问题——直流侧天然存在2倍频(100Hz)的功率脉动,因为瞬时功率等于电压和电流的乘积,单相系统瞬时功率的频率是100Hz。这个100Hz的脉动会在直流电压上产生2倍频纹波,纹波大小:
[ \Delta U_{dc} \approx \frac{P}{2\omega C U_{dc}} ]
假设系统容量是5kVA,(U_{dc}=400V),(C=2200\mu F),那么(\Delta U_{dc} \approx 5000/(2\times 2\pi\times 50 \times 0.0022 \times 400) \approx 9V),大约是2.3%的纹波,这个幅度可以接受。如果电容取太小,纹波变大,电流环指令里会混入明显的100Hz分量,补偿效果会变差。
6.2 滤波电感的取值逻辑
电感的取值受两个约束。一是电流纹波的要求:电感越小,电流纹波越大;二是电流跟踪速度的要求:电感越大,电流变化越慢,动态响应差。单极性SPWM等效开关频率是40kHz,假设允许10%的额定电流纹波,那电感大约在3-5mH之间。如果开关频率降到10kHz,电感就得相应增大到10mH以上,否则纹波电流会很大。
另外还要注意电感的直流电阻。仿真里我为了方便把电感设为纯感性,但实际工程中电感总是有电阻的。电阻太大会在电感上产生较大的压降和有功损耗,影响补偿精度,这也是为什么实际STATCOM里的滤波电感要用高频低损磁芯。
6.3 仿真发散与不收敛的排查链路
我在调试中遇到过一次特别诡异的发散问题:STATCOM一投入,仿真没过多久就报"Input voltage contains NaNs或者仿真步长不断减小"。排查链路过了一遍,最后定位到是SPWM生成模块的载波比较逻辑出了bug——调制波超过载波幅值范围,导致比较器输出异常。
遇到发散问题,我的排查顺序是:
- 先把PWM开关频率降低,比如从20kHz降到2kHz,看是否还发散。如果不发散了,基本是数值计算问题。
- 检查Powergui的采样时间是否足够小(要小于开关周期的1/10),如果太大,开关切换的瞬间电压电流跳变可能超过数值解算器的处理能力。
- 检查控制算法里有没有代数环。Simulink在高频开关模型里出现代数环,求解器很容易不收敛。我用电感电流作为状态量,输出为电流源性质,能有效避免代数环。
- 最后检查PI控制器的输出限幅。没有限幅的话,PI输出可能跑到几百伏,调制波超出载波幅值,必然出问题。
6.4 仿真速度慢的提速建议
电力电子仿真跑得慢是常态。我这边采取的措施:仿真类型改为离散、Powergui采样时间取2微秒、把PWM载波频率降到10kHz(牺牲一点波形质量换取速度)、关闭不必要的示波器图形显示、把所有测量数据通过To Workspace导出到工作区,最后统一用MATLAB脚本来画图。调整之后,一个5秒的仿真(包含动态过程)大概只需要几分钟就能跑完,相比连续求解器动辄半小时起步,效率提升非常明显。
6.5 一个容易被忽略的细节:锁相环在谐波环境下的表现
仿真环境里的电网是理想正弦,但在实际系统中母线电压本身是有畸变的。如果把PLL的输入接在畸变严重的母线上,锁相环输出的相位会有波动,dq变换出来的量也就不干净。
在仿真里,我刻意做了一次对比测试:把电网电压加了一些5次谐波畸变,再用普通的单同步坐标系锁相环去锁相,发现锁相输出有明显的100Hz纹波,最终的THD补偿效果也变差了。解决办法是给PLL的电压测量信号加一个前置的低通滤波器或者用基于SOGI的正交信号发生器方案来锁相,SOGI天然对谐波有衰减,锁相会稳很多。这个细节在做实际工程或者复现论文里的结果时经常遇到,值得留意。
7. 从仿真到工程样机的差距与进阶优化方向
7.1 仿真和实际装置之间隔着什么
Simulink仿真把很多理想条件都"隐藏"了。开关管没有导通压降和死区时间,电感是线性的没有饱和,直流电容是理想电容没有ESR,信号采样和PWM更新都在同一时刻完成没有延迟。这些理想化假设对控制逻辑验证没有影响,但真要做一台样机,下面几个问题立刻就会冒出来:
- 死区效应:IGBT/MOSFET换流时必须插入死区时间(一般在1-3微秒),否则上下桥臂直通炸机。但死区会导致输出电压畸变,产生低次谐波,严重时直接把补偿效果毁掉。
- 采样延迟:数字控制器的采样计算和PWM更新之间存在一拍延迟,这个延迟会降低相位裕度,实际系统的电流环带宽会比仿真低很多。
- 电感饱和:大电流时电感量下降,纹波变大,控制参数跟着变,不再是最优状态。
7.2 谐波补偿策略的批量化处理
前面讲的是最简单的全补偿策略——把负载电流里所有非基波有功分量全部补偿掉。实际工程里不一定需要做到全补偿,尤其是低次谐波用较大的容量换来的收益并不高。所以很多STATCOM(APF功能)会做成选择性补偿:只补偿3、5、7次等主要的谐波次数,每个频点单独设计谐振控制器或者重复控制器。
在dq坐标系下,谐波补偿可以这样实现:负载电流做dq变换后,(i_d)和(i_q)中的交流分量对应谐波,取反后加进指令。如果要选择性补偿,就对这些交流分量做带通滤波,只提取特定频率的分量。这种做法的好处是容量利用率更高,控制上也更灵活。
7.3 用我实测数据验证的一个对比
为了验证单极性SPWM和双极性SPWM的差异,我做了一个直接对比。同样的主电路参数和控制参数,双极性SPWM下电网电流THD大概在6.5%左右;换成单极性SPWM之后,THD降到了4.2%。纹波电流的峰峰值也明显减小。所以如果有条件,我建议一律用单极性SPWM,换取更好的补偿质量。
7.4 控制算法层面还能怎么继续做
如果目标是深入这个方向,可以考虑把重复控制加进来。重复控制利用周期信号的周期性,在一个周期内学习误差,下一周期进行补偿,对谐波的抑制能力非常强,尤其适合稳态谐波占主导的单相系统。
另一种值得关注的是比例谐振(PR)控制器。PR控制器在基波频率处提供无穷大增益,在谐振点可以做到无静差跟踪正弦电流。不过PR控制器对频率偏移比较敏感,频率一偏增益就下降,实际系统里需要配合锁相环在线调整谐振频率,或者在PR里增加频率自适应环节。
我自己的下一步计划是尝试LCL滤波器的接入。L型滤波器的电感取大了必然放慢动态响应,取小了高频纹波压不住。LCL在保证高频衰减的同时能用更小的总电感和更好的动态性能,但LCL有谐振峰,需要对谐振进行阻尼(无源阻尼或有源阻尼),控制设计比L型复杂不少。等LCL版本调通之后,再回头对比L型和LCL型的THD和动态响应,看看实际收益有多大。
希望这套从原理到仿真实现的梳理,能给正在做单相STATCOM仿真的朋友节省一点时间。仿真这种事,最怕的不是模型复杂,而是绕了一大圈发现是一个很小的地方出了错。如果照着本文的参数搭出来的模型在动态响应或者THD上有偏差,优先检查锁相环的相位准确性、PI输出的限幅范围和调制波的幅值范围——这三个位置是我踩过最多坑的地方。