做并网逆变器仿真的朋友,应该都绕不开无功-有功解耦控制。最近我在Simulink里搭了一套基于两电平VSC的实时无功-有功控制器,控制器的电流反馈直接走αβ转换,不经过同步旋转坐标,结果动态性能比我预想的干净很多。这篇记录一下整个搭建思路、参数整定和踩坑过程,主要面向想落地P-Q控制、又不想被dq坐标绕晕的同行。标题里写的“两级VSC”,我这里按“两电平电压源型变流器(two-level VSC)”来处理,Simulink里对应一个三相全桥加直流侧电容,控制上分功率外环和电流内环,整体框架也适用于背靠背两级式拓扑。
1. 系统拓扑与整体设计思路
1.1 两级VSC到底指什么
做电力电子仿真的朋友对“两级”这个词多少有点争议。有些论文里“两级VSC”指背靠背结构,即整流器加逆变器,中间直流母线;也有些地方把“two-level VSC”翻译成两级VSC,其实就是最普通的三相两电平桥。我这次采用的是后者:一个三相IGBT桥,直流侧用电容和理想电压源支撑,交流侧通过电感电阻并联到电网。严格说叫两电平VSC,但为了贴合标题,我统一写成两级VSC,核心控制思路在两种结构下是通用的。
选择这个拓扑的原因很直接:它是验证实时无功-有功控制器动态性能的最小系统。三相电网提供电压支撑,VSC通过调节输出电压的幅值和相位控制电流,进而控制注入电网的有功和无功。如果一开始就用LCL滤波器或者背靠背拓扑,谐振点、直流电压动态都会干扰对功率控制环的评估,后边排查问题也会困难很多。所以第一版模型越简单越好,先把P/Q动态跑干净,再加复杂度。
主电路参数我会在第4节展开,这里先给一个总体框架:交流线电压有效值220V,工频50Hz,滤波电感L=5mH,寄生电阻R=0.1Ω,直流母线电压设为400V,开关频率10kHz。这个参数组合算出来的基波阻抗大概1.57Ω,电感压降在额定功率下不超过10%,控制带宽也比较好取。
1.2 功率外环与电流内环的分工
控制器采用经典的“功率外环+电流内环”串级结构。外环输入是有功功率参考Pref和无功功率参考Qref,反馈是实时计算得到的P和Q,外环PI输出的是电流参考值。内环输入是αβ坐标系下的电流参考和实际电流,输出是调制波,最后经过PWM发波控制VSC开关管。
为什么这样分层?因为功率本质上不是直接可控的,我们只能控制VSC输出电压,电压和电网电压之间的差值作用在电抗上,形成电流。电流决定功率,所以功率环必须通过电流环来建立通道。外环带宽一般取内环的1/10到1/5,这样才能保证内环能及时跟踪外环发出的电流指令,不然两个环之间会互相“打架”,动态过程容易振荡。
我在仿真里的具体分工是:外环PI输出两个电流参考分量,一个对应有功电流,一个对应无功电流,这两个值经过第2节介绍的参考电流生成公式,变换成αβ坐标系下的电流参考;内环PR控制器分别对α轴和β轴电流做闭环调节,再加上电网电压前馈,压制扰动。
1.3 为什么电流反馈落在αβ坐标系
传统矢量控制通常把三相电流转到dq同步旋转坐标系,让PI控制器跟踪直流量。但这次我故意不转dq,把电流反馈直接放在αβ静止坐标系,因为实时功率控制本身是建立在αβ量上的。瞬时功率理论里,有功功率P和电网电压、电流的αβ分量之间的关系非常简洁,用αβ量直接计算P、Q可以省掉一次Park变换,也避开锁相环角度误差对功率解耦的影响。
可能在dq坐标系下用PI也能达到类似效果,但dq变换里有个绕不开的点:需要实时准确的电网电压相位。如果锁相环动态不是足够快,功率阶跃瞬间角度偏差会直接耦合到P和Q上,你看到的波形就会有一大一小两个拖尾。而αβ坐标系不需要角度参与控制指令生成,只要电网电压幅值不为零,就能通过简单除法得到参考电流。这个特点在弱电网和短时电压畸变场景下尤其有吸引力。
2. αβ变换与瞬时功率计算的实现细节
2.1 Clarke变换的矩阵和系数选择
αβ变换,也就是Clarke变换,把三相abc量映射到正交的αβ轴上。这里最关键的坑是系数选择。为了控制算法里功率公式好看,我使用等幅值变换,矩阵形式是:
[ \begin{bmatrix} v_\alpha \ v_\beta \end{bmatrix}
\frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \ 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} v_a \ v_b \ v_c \end{bmatrix} ]
对应的电流变换也一样。这样变换之后,一个三相平衡正弦电压的αβ分量仍然是正弦波,幅值和相电压幅值一致。Simulink里可以自己用矩阵乘法搭,也可以用自带Clarke变换模块,但必须确认模块默认是不是等幅值。我曾经直接用过一次自带模块,发现功率计算差了1.5倍,就是因为模块用的是等功率变换。
用等幅值变换时,三相总功率等于1.5倍αβ瞬时功率,这一点很容易被忽略。所以我在功率计算模块里专门加了1.5增益,后面所有公式都对得上。如果你是做等功率变换,那么功率不需要乘以1.5,但参考电流生成公式里的系数也会跟着变,别混用。
2.2 p、q的计算与参考电流生成
在αβ坐标系下,瞬时有功和无功可以表示为:
[ p = v_\alpha i_\alpha + v_\beta i_\beta ] [ q = v_\alpha i_\beta - v_\beta i_\alpha ]
注意这是未经1.5倍增益的数值。在等幅值变换下,真正的三相平均有功功率是1.5p。无功的符号方向和三相定义有关,我这里定义成感性无功为正,后面接负载时保持一致。
外环PI输出的电流参考如果直接定义成αβ量,可以反解这个方程组。给定Pref和Qref,解出来:
[ i_{\alpha ref} = \frac{v_\alpha P_{ref} + v_\beta Q_{ref}}{1.5 (v_\alpha^2 + v_\beta^2)} ] [ i_{\beta ref} = \frac{v_\beta P_{ref} - v_\alpha Q_{ref}}{1.5 (v_\alpha^2 + v_\beta^2)} ]
这两个公式就是核心“翻译器”,把功率指令翻译成电流正弦指令。我在Simulink里用Fcn模块直接写这个运算,比用一堆乘法器和除法器清爽得多,而且方便统一处理分母限制。分母里的1.5就是等幅值变换带来的系数,如果你用等功率变换,这里就没有1.5。
2.3 用αβ不用dq的三点现实原因
第一是锁相环负担小。dq控制需要锁相环把坐标系定向到电网电压矢量,而αβ控制不需要角度,只要幅值不为零就能算。电网电压跌落或者相位跳变时,dq控制的d、q轴会短暂耦合,αβ控制天然解耦,动态性能更稳。
第二是功率计算简单透明。瞬时功率理论本来就在αβ坐标系下推导,直接用αβ量计算P/Q,和电网电压幅值无关,不需要额外归一化。换到dq域还得先用坐标变换把电流转过去,中间多一步就可能多算错一步。
第三是便于扩展到其他控制器。谐振电流控制器、模型预测控制、虚拟同步机控制都喜欢在αβ坐标系下实现,你用同一套电流反馈模块,后边换不同功率控制策略时不用反复改坐标变换。对做研究的同学来说,这个复用性很值钱。
3. 电流内环控制器设计与动态性能预期
3.1 PI在αβ下的问题与PR方案
如果电流反馈是αβ正弦量,直接用PI控制器跟踪会很尴尬。PI对直流参考信号有无穷大增益,但对工频正弦信号在稳态下做不到无静差,也就是说你明明给了1A的正弦参考,反馈会一直存在相位和幅值误差。功率外环可能最后能勉强稳住,但电流波形一定有畸变,动态响应也拖泥带水。
我在仿真里用PR控制器替代PI。PR控制器的传递函数大概是:
[ G_{PR}(s)=K_p+\frac{K_r s}{s^2+\omega_0^2} ]
其中ω0是50Hz对应的314rad/s。这个谐振项在工频处提供高增益,可以消除正弦跟踪静差,和PI在dq坐标系下的作用本质上是同一种思想。Simulink里可以直接用Transfer Fcn模块搭建,或者用两个积分器加反馈搭成谐振器模型。
如果你对数字控制比较熟,也可以写成带阻尼的准PR形式,在s^2+ω0^2的基础上加一个2ωc*s项,提高谐振频率附近的带宽。准PR在电网频率有波动时更稳,但参数多一个,调试也麻烦。我第一版先用理想PR,把动态性能跑通,再改成准PR做鲁棒性测试。
3.2 控制器带宽与参数整定
电流内环的对象是电阻电感回路,传递函数是1/(Ls+R)。我用简单带宽法预估Kp:先忽略谐振项,设定电流环闭环带宽ωc,Kp就等于L乘以ωc。我取L=5mH,期望带宽2000rad/s,对应大概318Hz,Kp=0.005*2000=10。这个Kp算出来就是个起点,实际仿真里我还会调,但基本在6到15之间浮动。
谐振项Kr的整定没有统一公式,我的经验是先把Kr设成Kp的5倍,看电流响应,然后逐步增加,直到稳态误差消失、动态波形不再有长尾巴。通常Kr在Kp的10到20倍之间。太大谐振峰太尖锐,电网频率偏差时会出现拍频;太小则相位裕度不足,功率阶跃时电流收敛慢。
一个容易被忽略的点是数字采样延时。控制器输出经过PWM延迟一拍作用到主电路,这一拍在高带宽下会显著降低相位裕度。所以设计带宽不要超过开关频率的1/10,我开关频率10kHz,电流环闭环带宽选2000rad/s是安全的,实际仿真里再稍微留一点裕度。如果你的开关频率只有5kHz,带宽就要压到800到1000rad/s,否则阶跃响应会振荡。
3.3 前馈和延迟补偿
电流控制除了反馈,还要加电网电压前馈。因为VSC输出电压直接扣除电网电压后作用在电感上,如果只靠PR控制器去纠正电网电压的扰动,动态会慢很多。前馈项很简单:调制波参考值等于PR控制器输出加上电网电压在αβ轴的分量,再乘以一定的直流电压倒数归一化。
我在仿真里的调制波生成方式是:
[ m_\alpha = \frac{u_{PR,\alpha} + v_{g,\alpha}}{V_{dc}/2} ]
[ m_\beta = \frac{u_{PR,\beta} + v_{g,\beta}}{V_{dc}/2} ]
这样把物理电压量转化成调制比,送入PWM模块。前馈加上后,功率阶跃时的电流上升率明显变快,而且电网电压波动的影响被甩到了一边。你可以在Simulink里先不加前馈跑一次,再加前馈,对比一下就能感受到区别。
延迟补偿方面,我试过在PR控制器输出后加一拍预测补偿,也就是用当前拍误差和上一拍误差做简单外推,抵消零阶保持器引起的相位滞后。实际效果几微秒级别,肉眼观察电流波形看不出太大变化,反而增加了模块复杂度。如果你不是做极高带宽控制,可以不做一拍补偿,只要PWM调制度不大就没问题。
4. Simulink仿真模型搭建过程
4.1 主电路:电源、VSC与滤波参数
我用Simscape Electrical里的Specialized Power Systems库搭建主电路。三相电网用Three-Phase Source模块,电压有效值220V,频率50Hz,三相平衡,短路容量设大一点模拟强电网,这样功率动态不会被电网阻抗干扰。VSC用Universal Bridge模块,桥臂数选3,功率器件选IGBT/Diodes,导通压降和缓冲电阻都用默认值,后边有空再精细化。
直流侧我现在用理想直流电压源400V并联一个5mF电容。理想源提供能量,电容负责吸收开关纹波。为什么不用纯电容加负载?因为纯电容做直流源,功率阶跃时直流电压会缓慢漂移,你很难判断功率响应是控制环行为还是直流电压变化引起的。加上理想源,直流电压恒定,可以单独评估P-Q控制器动态性能。
交流滤波用电感电阻串联支路,L=5mH,R=0.1Ω。如果你想模拟更接近实际系统,可以用LCL,但第一版不建议。LCL有谐振峰,需要阻尼,这会把调试范围无限拉长。我同事第一次用LCL做P-Q控制,搞了三周还在Tiktok谐振问题,换了L之后就快了。
4.2 控制链路:采样、变换、功率计算与PR控制器
控制链路全部和主电路独立,用Simulink普通模块搭建,采样周期设为50us,对应开关周期的二分之一点。三相电压电流测量出来之后,先过Abs和Hold模块没什么意义,直接送到Gain矩阵做Clarke变换。我建议用自定义矩阵,避免Simulink自带模块带来的系数混淆。
功率计算模块用Product和Sum搭,按第2节的公式来。这里有三个技巧:第一,p和q的计算通道必须用一样的采样时钟,否则会引入高频噪声;第二,q计算的符号要仔细核对,我一开始把iβ和vα的符号接反,导致无功方向颠倒,系统还能稳定运行,但功率响应全是反的;第三,参考电流生成模块里的除法要加一个小的分母下限,避免电网电压过零时刻出现爆数。
PR控制器用离散传函模块实现,采样周期同样50us。我先把连续传函写成有理多项式,再用c2d函数转成离散状态空间,最后在Simulink里用Discrete State Space模块加载。如果你的MATLAB版本比较老,也可以直接用两个积分器搭谐振项,只是参数没有传函模块来得整齐。
4.3 PWM发波与仿真步长设置
PWM部分我用自带的PWM Generator (2-level bridge)模块,载波频率10kHz,输入是三相调制波。PR控制器输出的是αβ调制波,所以先做反Clarke变换成abc三相调制波,再接到PWM模块。注意调制比要限幅在[-1,1],不然PWM会过调制,输出电压波形出现缺口,电流谐波瞬间变大。
仿真步长设置很影响动态性能评估。我的经验是,如果控制器是离散的,仿真步长设置比控制器采样周期小至少一个数量级,比如控制器采样50us,仿真步长设10us。这样PWM发生的细节能看清楚,控制器离散开关时刻和PWM中心对齐误差也小。如果你用Simulink默认的可变步长,很容易过滤掉一些PWM毛刺,然后你去调控制器参数还以为自己是神仙。
5. 动态性能测试:用什么指标衡量
5.1 有功/无功阶跃响应实测曲线解读
模型搭好后,我先做两组实验:一组是有功Pref从0kW阶跃到1kW,Qref保持0;另一组是Qref从0kVar阶跃到1kVar,Pref保持0。用示波器记录P、Q、三相电流和调制波。
有功阶跃时,P响应大约12ms内进入稳态,过程超调量8%左右,无功Q在过渡过程中出现了200Var左右的拖尾耦合,然后回零。这个耦合主要来自电流环带宽限制,不是外环PI参数问题。如果把外环PI带宽继续调高,P的响应能到8ms,但Q耦合反而会增大,因为功率交叉项被放大。
无功阶跃的响应时间比有功略快,10ms左右,超调也小。原因在于无功功率不受电网电压幅值闭环影响,只要电流能跟上,无功就是电流和电压的直接乘积,像一个线性环节。有功则受直流能量平衡影响,如果有直流电压环,它需要协调直流侧能量变化,响应自然慢一拍。
5.2 电流谐波与暂态过冲分析
我顺手测了稳态电流谐波,THD在满载时约1.8%,主要谐波集中在开关频率附近和边带。这个水平对L滤波器已经不错了。PR控制器谐振项如果调得太高,低频段增益太大,会让电流在功率阶跃瞬间出现短促过冲,最大过流达到参考电流的1.3倍。我后来把Kr从Kp的30倍降到12倍,过冲就降到1.1倍以内,THD只增加了0.2个百分点。
另一个值得关注的指标是电流参考的dα/dt,也就是α轴电流变化率。如果电流参考在功率阶跃时产生跳变,PR控制器输出会瞬间饱和,造成调制波满幅摆动。我在外环PI到参考电流生成之间加了一个一阶低通滤波器,时间常数0.5ms,限制电流参考的变化率。这让功率响应稍微慢了0.5ms,但过流风险小了很多,实用中非常值得。
5.3 弱网/参数扰动下的表现
强电网下测试完还不算完。我把电网短路容量调低,等效为一个大的电网电感串在右侧,模拟弱电网条件。这时VSC看到的电网阻抗不再是0,控制系统需要额外考虑电流和功率之间的耦合。实测弱电网下有功阶跃时Q耦合从200Var升到400Var,响应时间也多了一倍。
电感参数扰动我做了±20%的扫描。L增大20%,电流环带宽实际降低,功率响应变慢;L减小20%,响应变快,但高频噪声和振荡风险增加。这说明如果你的实际系统电感会有饱和或者磁芯温度漂移,固定PI/PR参数不一定能覆盖。要么做成在线参数辨识,要么至少把电流环带宽设计得保守一点,保证最差情况下还稳定。
6. 常见问题与调试经验
6.1 功率波形抖动的“元凶”
刚开始我跑仿真,P和Q在稳态时伴有明显的60Hz甚至100Hz波动,不是外部扰动,就是控制链路里混入了直流分量。逐段排查发现是电压电流测量模块的输出没有去掉PWM开关噪声,送到功率计算后就产生了周期性纹波。解决办法是在功率计算前对采样值做一阶低通滤波,截止频率设在1kHz,把5kHz以上的开关纹波滤掉,但保留工频信息。
如果加了滤波还抖动,多半是外环PI参数太强。功率反馈量本身就含纹波,PI积分环节会把纹波放大成控制量振荡,这时候你调小外环Kp比调内环更有用。我最后用的外环PI参数是Kp=0.002,Ki=0.2,小到一开始自己都有点怀疑,但实测下来动态正好,既没有静差也不抖。
6.2 参考电流数值异常
参考电流公式里有个除法,分母是电压幅值平方。启动瞬间电网电压从0建立,分母很小,电流参考会飙到一个巨大数值,导致控制器饱和和电流过冲。我给分母加了个下限,vα平方加vβ平方小于1e-3时,参考电流强制为0。另外,启动时可以先用斜坡给定的Pref和Qref,从零慢慢上升到设定值,这样比任何平滑模块都有效。
还有一次寻查出电流参考在相位跳变时突然出现尖峰,原因是功率外环PI输出出现了较大的p/q瞬态值。我追踪发现是PI积分器没有限幅,功率误差大时积分饱和,反冲后电流参考自然剧烈摆动。所有PI控制器积分输出都需要限幅,外环积分限幅尤其重要。我一般把外环输出的电流参考限制在额定电流的1.5倍,内环调制波限制在±0.95。
6.3 PR控制器离散化后失稳
PR控制器连续域调得好好的,一离散化就发散,这个问题恐怕每个做数字控制的人都遇到过。我在把PR传函c2d时用默认的零阶保持器方法,结果离散零极点偏移,谐振峰频率从314rad/s飘到了300rad/s,谐波增益下降,系统闭环不稳定。后来改用Tustin变换并加预畸变,才把谐振频率精确对准50Hz。
如果你的控制器是嵌入式C代码,PR谐振器也可以不用解析式离散化,直接用二阶广义积分器结构,状态方程里直接积分正弦与余弦分量,天然能锁定频率。这种实现方法在Park变换群里叫正交信号发生器,本质就是谐振器,对采样频率变化不太敏感,适合工程部署。
调试PR失稳还有一个笨但有效的方法:把Kr设成0,只保留Kp比例控制。这时系统一定稳定,但会有稳态误差。然后慢慢增加Kr,每加一点跑一次阶跃,观察电流波形是否出现高频毛刺。一旦看到毛刺,就退回上一个稳定值。我用这个办法整定了好几组参数,比解析公式更快更可靠,因为解析公式往往忽略了采样延时和PWM非线性。
最后再分享一个小技巧:这套αβ坐标系下的功率控制器,后续可以直接扩展成虚拟同步机控制,只把功率外环换成虚拟惯量方程就行,电流内环和参考电流生成全都不用改。我后面就把同样的Simulink模块复制到一个虚拟同步机模型里,省了不少适应工作。如果你正在研究构网型逆变器或新能源并网,不妨先把这套P-Q控制基础吃透,再去折腾后面更复杂的算法。