做柔性交流输电系统(FACTS)仿真的朋友应该都有体会:UPFC(Unified Power Flow Controller,统一潮流控制器)是这一类装置里最不好啃的模型。它和SVC、STATCOM不一样,SVC本质上是并联阻抗补偿,STATCOM是并联电压源,SSSC是串联电压源,而UPFC把并联换流器和串联换流器通过直流母线背靠背耦合在一起,既能给母线提供电压支持,又能往线路上注入幅值和相角都可控的串联电压,从而独立调节线路的有功潮流和无功潮流。
这篇博文会用我在Matlab 2019a版本里搭建UPFC模型的完整经历,把模型架构、控制策略、仿真参数和调试中踩过的坑从头到尾捋一遍。如果你正在做电力系统稳定分析、柔性输电方向的研究,或者需要给论文补一个能跑出漂亮曲线的UPFC算例,这篇文章应该能帮你少走不少弯路。我会尽量把每一步的思路和参数选择逻辑讲清楚,而不是简单丢给你一个模型文件。
1. 为什么碰这个模型:UPFC的定位与建模前的思路梳理
1.1 UPFC到底解决什么问题
电力系统里有一个非常经典的问题:并联输电线路之间的潮流分布不均衡。两条线路阻抗不同,自然分配的潮流就不同,阻抗小的那条容易过载,阻抗大的那条又送不出电。传统手段无非是串联电容器、移相变压器、调压变压器这些,但每一种都只能解决某一方面的问题——串联电容主要改变线路等效电抗,移相器主要改变相位角,调压器主要改变电压幅值。
UPFC厉害的地方在于,它把这些功能全包了。从原理上看,UPFC可以等效成一个串联在线路中的可控电压源:电压的幅值可以任意调,相位可以在0到360度变化。只要这个注入电压存在,线路两端等效的电压幅值差和相位差都会被改变,于是有功潮流和无功潮流就能被独立控制。换句话说,UPFC能做三件事:调电压幅值、调相位角、调线路阻抗,而且是连续、快速、双向的。
做仿真研究时,我们通常关注两个层面的价值:一是稳态下把某条线路的功率精确控制到目标值,比如让双回线各送一半功率;二是动态过程中帮助系统快速恢复电压和功率平衡,比如负荷突变或者线路故障后UPFC能撑住母线电压。理解了这两个目标,模型怎么搭、控制器怎么设计就都有了方向。
1.2 为什么选择Matlab 2019a做这件事
我选用Matlab 2019a而不是更新的版本,原因其实很务实。2019a的Simscape Electrical(当时还叫SimPowerSystems/Specialized Power Systems)对UPFC这种背靠背换流器结构支持非常成熟,模块库里的VSC桥臂、耦合变压器、PLL、dq变换这些基础件都齐全,而且网上能找到大量基于这个版本的教学模型和论文算例可以直接对照。新版本功能更多,但模型封装方式和部分模块接口有变动,在一些旧代码上反而容易出现兼容问题。
另外一个原因是计算效率。Matlab 2019a在电力电子仿真上比较稳定,ODE求解器对这类含开关器件的刚性系统支持不错;而再早的版本比如2016、2017,某些VSC模块的初始化逻辑不够完善,容易在启动瞬间跳变。2019a这一代刚好处于一个成熟稳定的状态。如果你是学生或者研究所的工程师,拿2019a跑UPFC仿真基本不会因为平台本身浪费太多时间。
1.3 建模前需要想清楚的整体架构
在打开Simulink之前,整个模型的结构必须先在脑子里定下来。UPFC模型通常可以分成四块:电网与输电线路、UPFC主电路(两个VSC加直流电容)、并联侧控制系统、串联侧控制系统。
网格和线路是被控对象,它的参数决定了UPFC需要多大的容量和电压等级。UPFC主电路是执行机构,并联VSC通过耦合变压器接在母线上,主要负责维持直流母线电压稳定,同时可以对母线提供无功支持;串联VSC通过串联变压器注入线路,负责把线路潮流调节到参考值。控制系统的关系则是一外一内:外环给出功率和电压的参考指令,内环跟着指令调节电流。
我最初犯过一个错误,上来就把两个VSC的控制器混在一套逻辑里,结果直流电压飘得不忍直视。后来才意识到,UPFC能工作的核心前提是"背靠背"结构传递有功功率:并联侧从电网吸收有功给直流电容充电,串联侧从直流电容取有功注入线路。所以两个控制器必须各司其职:并联侧优先管住直流电压和交流母线电压,串联侧才去管潮流。这不是控制系统复杂不复杂的问题,而是装置物理特性决定的。
2. 模型拆解:从主电路到控制系统的三层递进
2.1 主电路拓扑的三种可选方案
建UPFC模型,主电路层级的选择直接决定了仿真速度和精度。我试过三种做法:
| 方案 | 结构形式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| A | 两个两电平VSC背靠背,用IGBT开关模型,PWM调制 | 波形真实,能看谐波和开关动态 | 仿真速度慢,控制器参数敏感 | 研究谐波特性、阀组应力、调制策略 |
| B | 两个受控电压源替代VSC,只保留直流电容动态 | 算得快,稳定性好 | 忽略开关谐波,动态精度略差 | 研究潮流控制、功率调节和系统级交互 |
| C | 在B的基础上把直流电容简化成常数电压源 | 速度最快 | 无法模拟直流电压波动对控制的影响 | 控制策略级快速验证和教学演示 |
我最终的模型选择是方案A和B结合:先用B方案验证控制策略和参数,确认逻辑没问题后再换成A方案跑精细结果。真正陷入麻烦的往往是方案A的启动阶段,这个后面在常见问题里详细说。
两条VSC的容量分配也值得注意。并联侧VSC的容量通常设计得比串联侧大一些,因为并联侧除了要提供串联侧所需的有功功率,还要支撑母线无功。常见的容量配比是并联侧容量等于系统额定容量的40%~50%,串联侧容量在20%左右。我的测试系统设定并联侧VSC容量为30MVA,串联侧为20MVA,这样既保证直流电压有足够的调节余量,又不至于让模型过于笨重。
2.2 并联侧控制:稳住直流电压和交流电压
并联侧控制器的目标有两个:维持直流母线电压恒定,以及维持并联母线交流电压恒定。这两个目标本质上对应着换流器与电网交换的有功和无功:交换有功控制直流电压,交换无功控制交流电压。
控制结构是典型的双环。外环是两个PI调节器:直流电压参考值与实测值的偏差经PI后,输出d轴电流参考值;交流电压参考值与实测值的偏差经PI后,输出q轴电流参考值。内环则是电流解耦控制,把d轴和q轴的电流误差经PI后生成调制电压指令,并且加上电网电压前馈和交叉耦合补偿项。最终得到的d、q轴调制电压经过反Park变换和PWM调制,生成VSC桥臂的开关信号。
整套控制在dq同步旋转坐标系下进行,基准角度来自PLL锁相环。这里有一个关键的参数选择逻辑:外环响应速度一定要慢于内环,通常内环带宽是外环的5到10倍。否则内环跟不上外环的指令变化,整个控制会震荡。我用的一组典型参数是以标幺值系统为基础的:内环Kp=5、Ki=500,直流电压外环Kp=0.8、Ki=40,交流电压外环Kp=1.2、Ki=60。这组参数在多数中等容量模型里都能稳定工作,需要微调时先调外环Kp再动Ki,不要一上来就乱改内环。
2.3 串联侧控制:独立调节有功与无功潮流
串联侧是UPFC最有特色的部分。它通过串联变压器向线路中注入一个可控的串联电压,改变线路潮流。现实中控制目标有两种实现思路:一种是直接控制注入电压的幅值和相角(开环式),另一种是功率闭环控制。
我推荐做功率闭环,因为更贴近实际工程需求。给定线路有功参考值Pref和无功参考值Qref,用线路实测的有功P和无功Q与之比较,两个偏差分别经过PI调节器,输出串联电压在d轴和q轴的参考分量。这个电压参考值再经过限幅、反变换和PWM调制,控制串联VSC的输出。
注意这里有个非常容易搞错的点:线路有功P和无功Q的测量位置选在哪里,直接决定了控制器的稳定性。如果测量点选在串联变压器之前,线路潮流中包含了UPFC注入的影响,控制会有一定滞后;如果选在串联变压器之后,则是纯线路本身的功率。我在实际调试中发现,测量点取在线路受端(远离UPFC一侧)效果最好,因为那才是电网调度真正关心的关口功率。测量位置一旦改变,PI参数也要跟着重调,不要指望一组参数走天下。
串联侧PI参数也给一个参考基准:有功外环Kp=0.02、Ki=1.0,无功外环Kp=0.02、Ki=1.0,内环电流参数与并联侧一致。这个参数的物理含义是:线路功率的稳态误差为零,但动态过程不允许太快,因为串联注入电压幅值有限。限幅器一般限制在额定注入电压的1.1倍左右,超过这个幅值不仅没有实际意义,还会让PWM过调制,波形严重畸变。
3. 实操过程:在Simulink里一步步搭出UPFC
3.1 全局环境与求解器设置
搭建的第一步,先建一个空的Simulink模型,配置仿真环境。用Matlab 2019a的Simscape Electrical模块库时,在Simulink模型窗口里打开Model Configuration Parameters,Solver选择ode23tb,最大步长设成0.5ms,相对容差设为1e-3。不要用默认的变步长ode45,那种求解器在含IGBT开关的模型里几乎必然卡死或者发散。
同样的原因,我建议在模型开发阶段先跑离散模式。选择discrete solver,固定步长50微秒,PWM载波频率设为2000Hz。离散模式速度快、结果确定性好,调试起来心智负担小。把控制策略验证得差不多了,需要精细谐波分析时再转回连续求解器ode23tb,把最大步长缩到10微秒以下,这样仿真结果更细腻但耗时明显增加。
还有一个细节是单位系统。模型里强烈建议使用标幺值(pu)系统。电源、变压器、线路都按pu设定,控制器里的PI参数也是基于pu的,这样参数整定才能有通用性。直接用国际单位制(V、A、Ω)搭建也不是不行,但每次换一个系统容量都要重新算PI参数,非常痛苦。我在第一次搭建时就用SI单位,结果从300MW系统换到500MW系统,整套控制器参数又要重新调,浪费了大量时间,后来全部改成pu才一劳永逸。
3.2 主电路搭建要点
电网部分我用Three-Phase Source模拟送端和受端系统:送端电源220kV、50Hz,受端电源220kV、50Hz,相位差30度。这个相位差代表线路传输约300MW的初始功率,给UPFC一个明确的调节空间。两条线路用PI Section Line模块,单回长度100km,正序电阻0.02Ω/km、电感1mH/km、电容10nF/km。
UPFC主电路按背靠背拓扑搭建:并联换流器通过耦合变压器接在送端母线,串联换流器通过串联变压器串入线路。两个VSC用Universal Bridge模块(三相桥,IGBT/Diodes选项),直流侧公用一个电容组。直流电压参考值我设定为40kV,直流侧电容选择3000μF。
电容值的选取不是拍脑袋的。经验公式大概是这样:电容需要支撑直流电压在功率阶跃时保持稳定,波动范围一般控制在5%以内。能量关系是0.5C(Vdc_max^2 - Vdc_min^2) = P_seΔt_step。以串联侧传输20MW、动态响应时间常数约50ms、直流电压允许跌落到38kV计算:0.5C*(40k^2 - 38k^2) = 20M*0.05,解出来C约为2600μF,取整选3000μF是合理的。电容太小动态压降大,控制容易失控;电容太大成本高且充电时间变长。
变压器参数上,耦合变压器(并联侧)和串联变压器都是220kV/35kV,漏抗0.1pu,接线组别D11/Yg。串联变压器的变比不能随便设,它决定了串联注入电压能达到的最大幅值,我按串联侧VSC直流电压40kV、采用SPWM最大调制比为1推算出35kV交流侧电压,留了20%的补偿裕量。
3.3 控制系统搭建与封装细节
控制系统我分别封装成两个子系统:Shunt Control和Series Control,然后在每个子系统内部再分内外环子模块。这样搭建的好处是便于调试,还能避免Simulink里信号线缠绕成蜘蛛网。
并联控制子系统的实现流程是:
- 用Three-Phase V-I Measurement测母线电压和VSC进线电流,先经Park变换转成d、q分量。
- PLL模块(Simscape Electrical自带的Three-Phase PLL)输出θ作为坐标变换基准角。
- 外环模块把Vdc_ref与Vdc实测的误差以及Vac_ref与Vac实测的误差分别送进两个PI调节器,得到id_ref和iq_ref。
- 内环模块计算Vd_mod = (id_ref - id)PI + Vd - ωLiq,Vq_mod = (iq_ref - iq)PI + Vq + ωLid,实现前馈解耦。
- Vd_mod和Vq_mod反Park变换成三相调制波,送Three-Phase PWM Generator,载波2000Hz,输出6路脉冲给并联VSC。
串联控制子系统的流程类似,区别在于外环输入是Pref和Qref与线路实测P和Q的误差,输出的是串联电压的Vd_se_ref和Vq_se_ref,然后再加上限幅器、反变换和PWM。这里有一个提示:串联侧PWM的调制波必须有合理的幅值限制,限幅器我设在1.1pu,超过就饱和,防止PI积分饱和导致控制发散。另外,串联侧的d、q轴基准也需要和PLL角度一致,但要注意串联电压参考坐标和线路电流坐标之间的相位关系,方向搞反了会出现正反馈。
% 下面是我在Matlab命令行里设定控制器参数时写的一段脚本,方便整体管理 Vdc_ref = 40e3; % 直流电压参考值 Vac_ref = 1.0; % 并联母线电压参考值(pu) Pref = 2.8e8; % 线路有功目标值 280MW Qref = 0; % 线路无功目标值 0Mvar Kp_idc = 5; Ki_idc = 500; % 并联内环电流PI Kp_vdc = 0.8; Ki_vdc = 40; % 直流电压外环PI Kp_vac = 1.2; Ki_vac = 60; % 交流电压外环PI Kp_ise = 5; Ki_ise = 500; % 串联内环电流PI Kp_pref = 0.02; Ki_pref = 1.0; % 有功功率外环PI Kp_qref = 0.02; Ki_qref = 1.0; % 无功功率外环PI3.4 跑出来的典型仿真结果
模型搭好后,仿真时间先设为1.0s,在t=0.2s投入并联侧控制,t=0.4s投入串联侧控制。这样分步投入的目的是避免两台换流器同时启动导致直流电压剧烈振荡。
投入并联侧控制后,直流电压在0.2s处开始上升,大约0.25s后稳定在40kV附近,稳态误差几乎为零。母线电压保持在1.0pu,说明并联侧的无功补偿功能正常。在t=0.4s投入串联侧控制后,线路有功从初始自然潮流约250MW爬升到参考值280MW,调节过程大约0.1s,没有明显超调。无功Q从初始约20Mvar被压到接近0Mvar,说明无功也实现了独立控制。
看波形时有一个值得注意的点:有功和无功并非完全解耦,有功阶跃瞬间无功也会跟着抖一下,这是由线路阻抗特性和dq轴耦合决定的,完全解耦在实际系统中不可能达到完美。曲线里有一点短暂的小波动很正常,只要在0.2秒内恢复到稳态即可,不必追求教科书式的理想解耦波形。
4. 仿真中的坑与排查方法
4.1 不收敛问题:一半以上的时间都耗在这了
UPFC仿真中遇到最多的就是数值不收敛。总结下来大概有四种典型表现:仿真直接报错停止、波形剧烈发散、直流电压初始化失败、或是PWM输出异常。
我遇到最典型的一次是模型在t=0处就报"Differential algebraic loop"检测错误。原因是我在测量电压电流后没有加延迟单元,又直接用于PWM调制,形成了代数环。解决方法是在测量信号和控制信号之间加一个Memory模块或者把离散求解器的采样时间设成固定值。
另一种常见情况是变压器和VSC开关组合产生数值突变,导致ode23tb被迫缩小步长到纳秒级,仿真几乎走不动。这时先检查并联变压器和串联变压器的激磁支路参数,把激磁电阻和电感设为默认的1e6和1e6即可,不要为了追求精确而设置过小,否则高频数值分量会让求解器崩溃。
直流电容的初始电压设置也极其重要。如果直流电压初始值为0,启动瞬间PWM调节器会试图瞬间建立40kV,产生的冲击电流可能让仿真直接发散。我在电容模块的Initial Voltage参数里直接设成0.9倍的参考值,也就是36kV,让控制器从比较接近工作点的地方开始跟踪,启动过程会平滑很多。
4.2 参数整定的经验流程
UPFC这么多PI调节器,参数怎么整定是个大问题。我的经验是从内环往外环,先电流环后电压/功率环,逐个投入而不是一次性全部加上。
先把所有外环的参考值设成常数,手动给id_ref和iq_ref一个测试值,观察电流内环能不能快速跟踪。电流环PI的整定可以用经典的对称最优法估算零点和极点位置,但实际在仿真里直接看阶跃响应更快:Kp调大到电流出现小幅振荡时再回调40%,Ki再慢慢加到稳态无差。
电流环稳定后再投入外环。直流电压外环整定时,给一个直流电压参考值阶跃,观察超调量,一般控制在10%以内,调节时间在0.1~0.2秒。如果直流电压振荡,优先降低外环Kp;如果稳态误差去不掉,再提高Ki。
串联功率外环是最难调的,因为它和被控的线路参数强相关。我这里提供一个实用的调参顺序:先开环手动设置一个串联注入电压,观察线路潮流对注入电压的响应;用这个响应的稳态增益来估算功率环的Kp初值,然后投入闭环,观察Pref阶跃响应微调。直接拍脑袋给参数往往会导致功率环发散。
4.3 常见故障现象速查表
| 故障现象 | 可能原因 | 处理办法 |
|---|---|---|
| 仿真一开始就代数环报错 | 测量信号与控制信号直接相连形成循环 | 加Memory或单位延迟模块 |
| 直流电压发散无法建立 | 电容初始电压为0、并联侧未先启动 | 设初始电压为参考值90%,分步投控制 |
| 直流电压振荡衰减不掉 | 直流电容偏小或电压外环Kp过大 | 增大电容值或降低Kp,Ki保持 |
| 线路有功跟踪不上参考值 | 串联注入电压到限幅值、功率外环PI不合适 | 检查限幅器是否饱和,按前述顺序重调PI |
| 有功阶跃时无功剧烈摆动 | 测量点位置不当或d轴q轴解耦不足 | 测量点改到线路受端,检查前馈项符号 |
| PWM波形明显削顶畸变 | 调制波幅值超过载波幅值 | 增加限幅,检查直流电压是否偏低 |
| 串联侧投入后反而送不出功率 | 串联变压器变比或同名端接线方向错误 | 核对注入电压极性和线路潮流的相位关系 |
| 模型运行极慢 | 连续求解器步长太小或开关数量过多 | 转离散50μs,低压器件用平均模型代替 |
这张表里的每一条都来自我实际踩过的坑,不是从文档里抄来的。特别是最后一项"串联侧投入后反而送不出功率",这个案例我印象很深:变压器接线同名端标错,串联电压反相180度,理论上应该助增潮流的注入电压反而变成了制动电压。排查时在波形里看到P大幅下降还以为控制器参数错了,后来逐相核对电压相量才发现是接线方向反了。搭模型时一定要把变压器同名端标识看仔细,对比设计图一步步核,别凭感觉接。
5. 后续还能往哪扩展
模型跑通之后,我建议你在这个基础模型上继续做一些扩展研究。比如把固定参考值改成动态参考值,模拟风电出力波动或者负荷突变时UPFC对潮流的实时调节效果;再比如叠加一个三相短路故障,观察UPFC在暂态过程中的响应特性;也可以进一步把两个VSC替换成MMC模块,研究模块化多电平结构下的UPFC控制策略。
我个人实际使用中最有价值的一个扩展,是把UPFC模型接入一个双馈风机并网系统,看它能不能压制风机出力波动引起的母线电压闪变和线路功率振荡。这个方向做起来工作量不小,但会极大提升模型的工程实用价值。如果你的时间有限,至少把两个VSC的控制器模块封装成可复用的库文件,这样后面任何项目要用UPFC都能直接拖进来改参数,不用再搭一遍。
另外,Matlab 2019a环境下的PWM发生器性能一般,如果你对波形质量有更高要求,可以自己写一个SVPWM模块替代默认的SPWM。我在对比实验中发现,SVPWM的直流电压利用率比SPWM高约15%,这意味着同样的直流电压能支撑更高的串联注入电压幅值,UPFC的功率调节范围会进一步扩大。这个改动带来的收益还是比较明显的。