☰
两电平VSC实时P/Q控制:αβ变换与PR电流内环的Simulink实现
2026/10/5 4:04:38 网站建设 项目流程

做电力电子仿真这几年,两电平电压源变流器加实时有功无功控制这个组合,我前后搭建的次数已经数不清了。标题里这串“带电流控制的两级VSC、αβ变换电流反馈、实时P/Q控制器”,乍一看有点论文腔,实际上落到Simulink里,就是一套非常标准的电流内环加功率外环结构。区别在于,整套控制不落在dq旋转坐标系,而是用αβ静止坐标系完成,换来的是锁相环节可以大幅简化,仿真结构更直观,后期往dSPACE、Speedgoat这类实时仿真器上移植也少一层坐标旋转的麻烦。

这套方案能做什么?你给它一个有功功率目标Pref和一个无功功率目标Qref,它实时计算三相电流参考,再由电流内环驱动VSC桥臂开关,让变流器和电网之间交换的功率稳定跟踪你的指令。谁适合看这篇东西?一类是刚接触变流器算法验证的研究生,一类是做并网逆变器、静止无功发生器、储能变流器前期仿真验证的工程师,还有一类是Simulink模型怎么调都不收敛、想找一整套可参照思路直接抄作业的人。下面我把控制原理、参数整定、建模步骤和踩过的坑一次讲清楚。

1. 方案全局:控制目标怎么拆解

1.1 两电平VSC的拓扑与仿真建模边界

两电平VSC是整个系统里最基础也最典型的电力电子结构:三个桥臂,六个开关管,每个开关管带反并联二极管,直流侧是电容母线,交流侧通过滤波电感接到电网上。“两电平”的意思很直白,就是交流侧相电压在任意时刻要么是正母线电位,要么是负母线电位,不存在中间电平,所有波形全靠PWM在正负两个电平之间高速切换拼出来。

仿真里搭建主电路时,我习惯用Universal Bridge模块,它内部自动处理死区、开关管导通压降和反并联二极管续流,省很多事。如果只做控制算法验证,一般用带开关管损耗的理想模型就够了,不需要把IGBT的结电容、拖尾电流建模得很细。真要评估损耗和热,再去换器件级模型,那计算量会大很多,离线仿真速度也会明显变慢。

有一点必须提前说清楚,如果你的模型打算跑实时仿真或者硬件在环,别一上来就用超精细的器件模型,实时机上跑不动。我做过一个版本,全部用理想开关加上最小脉冲宽度约束,在500微秒步长下依然能和离线结果对得上。这个边界一开始不划清楚,后面所有工作都会变得很痛苦。

1.2 控制分层:功率外环、电流内环

实时P/Q控制的目标是让有功和无功各自独立跟踪设定值。要是直接用一个调节器输出PWM占空比,电压、电流、功率全搅和在一起,系统非线性和耦合问题会把你整崩溃。所以工程上几乎统一采用分层结构:外环管功率或者直流电压,内环管电流。

外环的作用是根据Pref和Qref的偏差,换算成电流参考值;内环则根据实际电流和参考电流的误差,计算调制电压参考,再送给PWM发生器。分层的根本原因在于,电流内环需要足够高的带宽,才能把变流器输出电流牢牢钉在指令值上,而功率外环带宽可以放低,响应慢一点问题不大。内环做快、外环做稳,这是变流器控制里雷打不动的原则。

这个项目里我用了更简洁的做法:功率外环不做成PI闭环,而是直接用瞬时电压和参考功率反推电流参考。原因后面会详细讲。先记住一个结论:外环负责算“我要多少电流”,内环负责“把电流真给我拉到这个数”,两层职责分开,调试时候也方便单独验证。

1.3 αβ坐标变换带来的控制结构变化

为什么要用αβ变换,而不是主流教材更常写的dq?这是整个方案最值得想清楚的地方。

三相交流量abc之间是耦合的,三相对称时每相相差120度,直接处理起来非常绕。αβ变换(也叫Clarke变换)把三相静止坐标系映射成两相静止坐标系,去掉冗余的一相,让控制从3×3的矩阵变回2×2,结构一目了然。和dq相比,αβ变换最核心的优势是它不需要旋转角度信息,因此可以不依赖锁相环。dq变换需要知道电网电压相位θ,才能把正弦量变成直流量,一旦锁相环相位估计有偏差,dq轴上的电压电流就会出现误差,控制质量直接下降。αβ坐标系里电压电流依然是正弦量,控制算法完全用瞬时值计算,锁相环变成可选件而非必需品,这在电网畸变、电压不平衡比较严重的场合,是一个实实在在的工程优势。

当然,代价也清楚:αβ坐标系里被控量是正弦量,普通PI调节器对正弦参考信号存在稳态跟踪误差。解决方式是配上谐振型调节器,也就是比例谐振PR控制。你只要记住一句话:dq坐标配PI,αβ坐标配PR,两者都能把正弦电流跟住。后面第3节专门讲这个坑。

2. 关键算法:瞬时功率计算与电流参考生成

2.1 Clarke变换公式与等幅值约定

abc到αβ的变换公式是:

Fα = 2/3 × (Fa − 1/2 × Fb − 1/2 × Fc) Fβ = 2/3 × (√3/2 × Fb − √3/2 × Fc)

这里系数取2/3,是等幅值变换。什么意思呢?就是变换后的αβ分量幅值与原三相量的相电压幅值相等,好处是电压电流幅值不用再乘系数,PI参数计算、电流限幅设定都直来直去。如果你看到有人用√(2/3),那是等功率变换,幅值会比三相幅值小√(3/2)倍,控制器参数对不上的时候先检查一下用的是哪种约定。

逆变换公式我在这儿也写出来,建模型时直接用:

Fa = Fα Fb = −1/2 × Fα + √3/2 × Fβ Fc = −1/2 × Fα − √3/2 × Fβ

在Simulink里用Gain、Sum和Add几个模块就能搭一个自己的Clarke变换块。我习惯把三个电压和三个电流分别封装成两个子系统,输入是abc三相,输出是αβ两相,这样控制面板里清爽很多。

2.2 瞬时无功功率理论求P和Q

αβ坐标系下最大的好处就是瞬时功率计算极其简单。按照瞬时无功功率理论,三相系统的瞬时有功功率和无功功率可以直接用αβ电压电流瞬时值算出来:

p = vα × iα + vβ × iβ q = vα × iβ − vβ × iα

这两个公式里p就是流入变流器的瞬时有功功率,单位是瓦,q是瞬时无功功率,单位是乏。注意第二个式子很多教材符号写法不完全一致,如果你用q = vβ×iα − vα×iβ,那q的符号会和我的方案相反。我建议在做仿真前先把符号约定固定下来,否则后面看波形会莫名其妙发现自己“反着给无功”。

因为公式用的是瞬时值,所以不需要锁相环,不需要判断电网电压过零点,也不需要等待角度计算,每个控制周期直接拿测量值算就行。这在实时控制里是很大的简化,也是这套方案比dq方案更“直接”的地方。

瞬时功率波形在仿真里多少会带一些开关纹波,这是正常的。如果只看功率响应曲线,可以用一个截止频率在200到500赫兹的低通滤波器做平滑,但滤波会带来相位延迟,会让动态响应看起来变慢。我一般不在反馈通路里加这种滤波,只看Scope里的原始波形,把纹波平均一下心里估算就行。

2.3 直接用Pref和Qref反推电流参考

既然瞬时功率和电压是已知的,那么电流参考就能直接算出来,而不必用功率外环PI慢慢积分。公式如下:

iα_ref = (Pref × vα − Qref × vβ) / (vα² + vβ²) iβ_ref = (Pref × vβ + Qref × vα) / (vα² + vβ²)

这是把功率计算公式反解出来的结果。分母是电压幅值的平方,正常情况下电网电压不会为零,所以公式在正常运行范围里是稳定的。万一模拟出现电压过零的极端工况,我给这个除法器的分母上加了一个很小的保护常数,比如1e-4,防止仿真中出现除零警告。

这个做法的好处是功率响应极快,相当于前馈控制。功率指令一变,电流参考立刻更新,剩下的事情交给电流内环去执行。相比用PI功率环层层积分,这种直接反推的方式阶跃响应能在几个毫秒内完成,符合“实时”这个标题的诉求。如果后面想增加功率误差补偿,也可以在反推参考电流的基础上叠加一个慢速PI,处理前馈模型不精确带来的小偏差。

3. 电流内环设计:PI不够用,上PR谐振控制器

3.1 αβ静止坐标系里PI控制器的局限性

很多人第一次搭αβ控制时,顺手就放两个PI控制器去跟踪iα、iβ,结果发现电流跟踪总差一口,波形又矮又钝,还带着明显相位滞后,而且怎么调参数都消不掉静差。这不是PI参数调得不好,是方法本身用错了。

原因很简单:PI控制器在频率为零处增益无穷大,这是它能把直流量跟到无静差的理论基础。可αβ坐标系里的电流是50赫兹的正弦量,PI在这个频点的增益是有限的,没有无穷增益,自然就抹不掉静态误差。误差大小跟电感、增益有关系,电感越大、Kp越小时,误差越明显。

三条路可以选。第一条,改成dq坐标系,把正弦量变直流量再用PI控制,这是最常见的做法;第二条,在αβ坐标系下用PR控制器,在两倍电网频率那个点注入谐振增益,让正弦跟踪也能做到无静差;第三条,在αβ里用PI然后用坐标旋转补偿,但实现起来等于半套Park变换,逻辑反而复杂。本文既然锁定了αβ变换,推荐的做法就是上PR控制器。

3.2 非理想PR谐振控制器的实现

PR控制器的理想传递函数是:

G_PR(s) = Kp + Ki × s / (s² + ω0²)

其中ω0是电网角频率,等于2π×50。理想形式的问题在于它对应的是无穷高品质因数的谐振回路,实际数字实现时对频率偏差和模型误差极度敏感,鲁棒性很差。工程上几乎都用非理想形式:

G_PR(s) = Kp + 2 × Ki × ωc × s / (s² + 2 × ωc × s + ω0²)

这里的ωc是谐振项带宽,通常取2π×2到2π×5弧度每秒,也就是2到5赫兹。带宽太小,电网频率从50赫兹漂一点,增益就掉下去了;带宽太大,谐振增益会被拉低,反而起不到抑制作用,同时会放大附近的低次谐波干扰。

在Simulink里实现时不用自己写传递函数去化简,直接用Transfer Fcn模块,把Kp支路和谐振支路并联起来。我实盘的实现是这样拆的:一路是比例增益Kp,输入直接乘过去;另一路是二阶谐振环节,输出再加到一起,得到最终的调制电压参考值。两个支路各自独立,参数好调,波形看花了也知道是哪一个支路的问题。

3.3 电流环参数整定

电流环的被控对象是一阶的滤波电感,写出来就是G_plant = 1/(Ls + R),其中L是电感,R是电感内阻加线路电阻。我仿真里给了个典型参数:L = 3毫亨、R = 0.15欧。开关频率我按10千赫来设计,电流环带宽取开关频率的1/20,也就是500赫兹左右,换算成角频率ωc_i = 2π×500 = 3141弧度每秒。

Kp的计算可以先按Kp ≈ L × ωc_i / 2来估算,代入算一下:3毫亨 × 3141 / 2 ≈ 4.7。这出来的Kp是个无量纲电压增益,再找Ki,一般让Ki ≈ Kp × R / L,代入就是4.7 × 0.15 / 0.003 ≈ 235。这套初步参数大概率是能稳定跟上的,然后再根据实际仿真波形微调:Kp影响电流阶跃的快速性和阻尼,太大会让电流毛刺大甚至振荡;Ki影响低频谐波抑制和稳态误差,太大容易让谐振点在阶跃时引起振荡。

电流指令必须有限幅保护。我一般把电流参考限幅设定在额定电流的1.5倍,限制器放在电流参考生成之后、PR控制器之前。没有限幅的话,电网电压跌落瞬间电流参考可能飙到几十倍额定值,仿真直接发散,真实设备早就跳闸了。

4. Simulink建模实操:主电路到控制子系统

4.1 主电路参数与搭建顺序

我用的系统参数先列成一张表,方便你直接照着搭:

项目参数
电网线电压380伏,50赫兹
直流母线电压750伏
交流滤波电感L3毫亨
电感内阻R0.15欧
开关频率10千赫
直流侧电容4000微法
控制周期50微秒
仿真步长1e-5秒(离散求解器)

主电路搭建顺序是:三相交流电源 → 三相电压电流测量模块 → 三个串联RLC支路(只用电感,电容参数置为int或inf) → Universal Bridge → 直流母线。直流侧如果只是想验证功率跟踪,可以先用理想直流电压源,把直流电压固定在750伏,这样有功功率指令不受直流电压波动影响,观察功率响应最干净。如果要做直流电压外环或者储能应用,再把直流源换成一堆电容加负载,但要额外加一个直流电压控制环,复杂度高不少。

有一点要提醒,Universal Bridge模块里要正确选好“Measurements”项,把开关管电压电流测量勾上,不然取反馈信号时会报错。滤波电感三个支路的初始电流我会全部设成0,避免仿真一开始就因为初始条件不一致而在第一个采样点跳变,控制很容易跟着抖动。

4.2 控制子系统搭建步骤

控制部分我按以下步骤搭,每步都是独立子系统,方便单独调试。

第一步,做Clarke变换子系统。输入a、b、c三相电压和三相电流,输出vα、vβ、iα、iβ。实现就用Gain和Sum,不需要什么高级模块。

第二步,做瞬时功率计算。把vα、iα乘起来、加在一起得到p;把vα和iβ乘起来,再减去vβ和iα的乘积,得到q。这里符号约定千万看仔细,按照第2节的公式来。

第三步,做电流参考生成。用参考功率Pref、Qref和当前vα、vβ算出iα_ref和iβ_ref。在Simulink里就是若干个乘法器、加法器和减法器,再加上一个除法模块。分母是vα²+vβ²,在计算平方和之前可以先给两个平方值都加一个小的常数,防止瞬时过零。

第四步,放PR控制器。用两个传递函数块分别实现Kp支路和谐振支路,然后将结果相加,得到vα_ref和vβ_ref。注意做离散仿真的时候要把传递函数块也离散化,可以用tustin变换,离散步长跟控制周期一致取50微秒。

第五步,把αβ的调制电压参考变回abc。用逆Clarke变换公式,然后接到PWM发生器模块的调制波输入。如果用的是Universal Bridge加PWM Generator两电平模块,调制波是三相标幺化电压信号,幅值范围要归一化到±1之间,所以控制输出口常常要加一个增益或者除以直流电压的一半,千万别漏掉。

4.3 PWM驱动与离散化配置

PWM发生器设置里,我选择两电平PWM、载波频率10千赫,并且启用了最小脉冲宽度限制,典型值设成2微秒。这个设置影响最大的是IGBT最小导通过程,实际设备都有最小开关脉宽约束,仿真模型提前约束能避免生成过于窄小的脉冲,后续代码生成也少一个坑。

控制周期和PWM载波周期最好同步。我的做法是让控制中断频率等于开关频率,一个开关周期更新一次调制波,这也和实际DSP程序的设计习惯一致。如果控制频率远高于开关频率,反而容易因为占空比更新频率不匹配产生拍频现象;如果不加同步,电流波形里会出现低频毛刺,乍一看以为是振荡,其实是控制更新错频。

求解器方面,我开的模型是离散仿真,固定步长1e-5秒,用的是discrete求解器。这种设置和真实的数字控制器行为最接近,也最容易后续移植到C代码。如果你用变步长模拟器和连续PWM模型去仿真开关过程,速度会非常慢,而且结果还未必更适合算法验证。

5. 动态性能实测与阶跃响应分析

5.1 动态性能指标怎么定

“动态性能”不能停留在嘴上说说,要有可量化的指标。我做这个方案时给自己定的验收标准是:

指标目标值
电流内环带宽500赫兹左右
有功功率阶跃响应上升时间小于20毫秒
无功功率阶跃响应上升时间小于20毫秒
功率阶跃超调量小于10%
有功无功耦合度功率稳态波动不超过额定值5%

这里所谓“实时”,在离线Simulink仿真里体现为用户在运行过程中在线切换Pref和Qref,系统能在一个很短时间窗内跟踪到新指令。真要谈工程意义的实时,那是dSPACE或HIL设备上以微秒级采样周期跑模型的事情,离线仿真更多是在算法层面先把这个速响应心理预期建起来。

5.2 P阶跃和Q阶跃的仿真结果解读

我习惯的测试方式是先从稳定工况开始,让Pref = 3千瓦、Qref = 0,等系统进入稳态后,把Pref阶跃到7千瓦,其他保持不变。正常工作的波形应该是这样:三相电流幅值明显变大,αβ电流的相位和电压相位基本一致,有功功率快速冲到7千瓦附近,没有明显超调,而Q仍然稳定在0附近,只在切换瞬间出现极小的尖峰然后立刻归零。

这个结果说明前馈电流参考方案加PR电流内环把有功无功解耦做得很好。解耦的本质原因在于电流参考公式里本身就包含了电压矢量方向,有功电流和无功电流是通过正交分解自然分开的,两个调节器独立控制两条电流分量,功率的耦合度就不明显。

再测Q阶跃,把Qref从0提升到2千乏。预期结果是电流幅值继续增大,但电流相位相对于电网电压相位会发生明显偏移,即功率因数改变,同时有功功率几乎不受影响。这里有个细节,如果看瞬时功率波形,会发现P和Q在切换瞬间会出现轻微波动,这是非常正常的,内部控制环对两个通道总需要几个微秒到毫秒级的交互时间,但稳态后一定要解耦。如果看到稳态下P也出现了几十瓦的持续偏移,就要怀疑电流参考公式里q/β项的符号是否搞反了。

5.3 动态响应和鲁棒性的取舍

调参数时总有一个权衡:把Kp和Ki往大了调,P阶跃响应确实会更快,但代价是电流波形对测量噪声和电网谐波更敏感,严重时电流会开始振荡。电流环带宽如果无限接近开关频率的1/10,你会看到数字控制的离散延迟开始起主导作用,系统相位裕度下降,阶跃响应开始出现欠阻尼振铃甚至发散的征兆。

想再往快推,必须处理数字控制的延迟。我的办法是在调制波输出前加一拍延迟补偿,让电流内环等效模型里多出来的那一拍被抵消掉一部分,这是实时控制里非常实用的技巧。如果只是离线仿真,很多人会忽略补偿,结果模型能跑,但搬到硬件或者实时仿真器上就整个发散,问题就出在这个延迟建模的差异。

我个人的经验是:动态性能不是越高越好,要结合电网实际情况定。电网弱、阻抗变化大时,电流内环带宽稍微降一点,反而整体更稳定。做实时P/Q控制器,稳定压倒一切,真要追求响应速度,不如先把电流内环调稳了再看功率外环。

6. 调试实录:常见问题速查与避坑

6.1 模型不收敛和初始化报错

这是一个高频问题。典型现象是一开始仿真就报错,提示初始条件求解失败或者代数变量不匹配。我排查下来主要原因有三类:一类是电感电流、电容电压的初始值和稳态解差太远,我直接把这三个量初始化为0,用软启动方式缓步抬升参考值,比如给Pref设定从0到目标的斜坡而不是阶跃,就能平稳起振;第二类是Universal Bridge没把三相电源接到地上或者测量模块端口方向反了,导致奇异点,这个要仔细对一遍回路,看看电流路径是不是完整的;第三类是仿真步长过大,开关切换瞬间的数值变化太快,我要么把步长降到5e-6秒,要么把模型里所有连续模块都离散化,按控制周期同步更新。

6.2 代数环与数值振荡

功率计算需要用到电压,电流参考生成又需要功率,电流内环输出再反过来影响电压电流,反馈回路里如果模块全用的是瞬时输入,Simulink就可能产生代数环,报出警告,仿真跑起来还会出现高频振荡。

解决代数环的方法很粗暴也有效:在电压测量进入计算之前,加一个Memory或者Unit Delay模块,把测量值延迟一拍。这是利用数字控制的天然离散化特性,本来控制器就是要采样保持的,加一拍延迟完全符合实际,还能杀死代数环。电流测量那一路我也加了一拍采样,用Zero-Order Hold把模拟测量变成采样离散信号,这也是后面做代码生成的标准形式。

6.3 电流谐波毛刺大

电流波形里谐波毛刺大的时候,第一步不是调PR参数,而是先看PWM和采样的同步。如果控制触发时刻和载波峰值不对齐,每个开关周期里的采样点位置不停变化,等效于在反馈信号里注入了一部分额外噪声,谐波就会很扎眼。我对齐采样和载波之后,毛刺会明显小一圈。

第二步检查死区时间。PWM发生器里的死区时间如果设得太长,会带来比较大的低次谐波和基波相位偏移。对10千赫开关频率,我一般在0.5到2微秒之间取一个值,超过2微秒谐波会显著增大。

第三步才是考虑控制器的问题。如果PR谐振支路的ωc带宽设得太大,它对电网谐波会有放大作用,这时把ωc从2π×5收窄到2π×2,同时提高一点Ki,谐波毛刺会降下来。我按照这个顺序排查,总能找到问题在哪一层。

6.4 功率静差消不掉

如果P或者Q在稳态下和设定值始终有一定偏差,用一个词形容就是“有静差”。静差出现的原因分两类。第一类是控制器选型不对,如果你用的是PI而不是PR,对于正弦量有静差是天经地义的事,换成PR或者改为dq坐标系就能解决。第二类是PR参数里Ki设得太小,谐振增益不足,静差缩小得很慢,看似一直压不下去,这时候把Ki增加两三倍重新看波形。

还有一种隐蔽情况是电流限幅起作用的。电流参考限幅设置过低,系统到达限幅之后功率明显达不到目标,看起来很像是静差。赶紧检查Scope里电流参考有没有撞到限幅器,如果撞到了,就要判断是限幅值不合理还是功率目标超出了这台VSC的能力范围。

6.5 参数综合速查表

我把上面建议的参数收敛成一张速查表,直接照着用可以少走很多弯路:

参数项推荐值调试方向
开关频率10千赫频率越高损耗越大,采样也越困难
控制周期50微秒与开关周期同步
滤波电感3毫亨越大谐波越小但动态越慢
Kp(电流环)4.7左右过大会毛刺振荡,过小跟踪迟钝
Ki(电流环)235左右过大会谐振抖动,过小静差大
PR谐振带宽ωc2π×2~2π×5过小对频率漂移敏感,过大放大谐波
电流限幅1.5倍额定电流必须加,防止失控
直流母线电压750伏比电网峰值应留足裕量

7. 移植经验与后续扩展想法

7.1 从离线仿真走向实时仿真器

离线模型跑通了,不等于实时仿真器上也能直接跑。我在把Simulink模型部署到dSPACE和Speedgoat上时,有几条硬性经验:第一,不要用Simscape里那些连续物理模型块做反馈测量,全部换成Simulink标准数学模块加采样保持器,实时机上最怕物理模型求解器拖时间;第二,所有控制器模块必须显式离散化,不要留连续时间模块,否则实时机上还要额外处理连续积分器的离散化,容易出时间步长不匹配的问题;第三,PWM发生器的载波频率必须和实时仿真器的定时器一致,最好用硬件定时器输出PWM。

7.2 这套结构的扩展空间

按这个思路往下走,你可以把单L滤波电感换成LCL滤波,但要注意LCL本身有个谐振峰,必须加有源阻尼或者无源阻尼,否则电流内环很难稳定。也可以在PR谐振支路上加多个谐振项,分别整定在3次、5次、7次谐波频率处,让控制器在畸变电网下依然保持较好的电流质量。

另一个扩展思路是处理电网电压不平衡。αβ坐标系下的瞬时功率理论本身就能拆出正序和负序分量,配合简单的谐振控制,可以实现负序电流抑制,对并网设备在弱电网下的运行质量很有帮助。

7.3 一点个人体会

这东西我反复搭过很多遍之后,最大的心得是:控制不能全靠经验瞎调,必须先想清楚自己到底是要在哪个坐标系里解耦。dq和αβ之争本质上就是直流量和正弦量之争,选好了坐标系,后面的控制器选型、参数整定、限幅策略全都顺理成章。很多人卡在αβ方案上,根子不是不会搭模型,而是没搞懂非理想PR控制器的谐振带宽和抗谐波能力之间的权衡。先把第3节那段吃透了,这套实时P/Q控制器对你来说基本就剩写模块连线的事了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询