ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于αβ变换的VSC双闭环有功无功控制与Simulink实现

基于αβ变换的VSC双闭环有功无功控制与Simulink实现 做电力电子仿真这些年VSC电压源型变流器相关的控制模型我调了不少这次分享的是一个用Simulink搭的实时无功-有功控制器动态性能测试项目。控制对象是两级两电平电压源变流器核心思路是电流内环加功率外环电流反馈经过αβ变换后给到控制器实现对有功和无功的解耦控制。这套结构在光伏逆变器、储能变流器、有源滤波器里几乎处处能看到影子对正在做电力电子课程设计、研究生课题或者刚入门并网变流器控制的朋友来说是一个很典型的参考模板。整篇文章我会从控制策略拆解、αβ变换原理、电流环与功率环的设计配合、Simulink建模实操一直讲到动态性能评估和调试排坑尽量把能落地的细节都摊开说。1. 项目理解与控制策略拆解1.1 为什么选择两级VSC来做功率控制先交代一下“两级电压源变流器”这个说法。电力电子领域常说的两级VSC不是指整流加逆变的两级级联而是指变流器桥臂的电平数——两电平也就是每个桥臂只能输出正直流母线电压、负直流母线电压两个电平。这是目前工业里用得最广泛的低压变流器拓扑模块化程度高、控制算法成熟、器件选型资料多所以用它来验证实时功率控制算法是最经济、最稳妥的做法。两级VSC的直流侧通常接一个电压源或大电容交流侧通过滤波电感并入电网或接到负载。从控制的角度看变流器本质上是一个可控的电压源只要改变它输出的基波电压幅值和相位就能控制交流侧电流的大小和方向进而控制有功和无功功率的流动。这个“电压—电流—功率”的因果链是整个控制器的底层逻辑。选两电平VSC还有一个现实原因动态性能评估需要排除拓扑本身带来的干扰。三电平、模块化多电平拓扑虽然在高电压大功率场合更常见但它们的调制策略和均压问题会引入额外的控制复杂度不利于把注意力集中在“实时无功-有功控制”这个核心议题上。先用两电平把控制环调通再往复杂拓扑迁移是效率最高的路径。1.2 双闭环架构电流内环与功率外环如何分工实时无功-有功控制器的标准架构是“外环定功率、内环定电流”。外环接收有功功率指令Pref和无功功率指令Qref将它们与实测功率比较后通过PI调节器输出电流指令内环再把电流指令与实测电流比较同样通过调节器输出调制电压指令最终由PWM环节生成开关信号。两层环路各有分工外环负责稳态精度内环负责动态响应和系统保护。为什么要多套一层电流环答案很简单VSC是一个电压源如果直接开环控制输出电压交流侧电流会随电网电压波动、负载变化而漂移无法精确控制功率。电流内环的加入把“电压驱动变成了电流跟踪”系统对外呈现出一个受控电流源特性这样功率外环面对的是一个线性化、低阶的对象设计难度大大降低。这套系统里特别值得注意的是前向通道和反馈通道都建立在αβ静止坐标系下。标题里强调“采用αβ转换进行电流反馈”这种做法的优势在于三相正弦量变换成两相正交量后反馈信号依然是50Hz的正弦波不需要像dq同步旋转坐标系那样依赖锁相环去获取实时相位控制器对电网频率偏移的容忍度更高结构上也省掉了一个Park变换环节。1.3 系统框图与信号流梳理整个控制系统的信号链可以梳理成五个环节主电路采集环节、坐标变换环节、功率计算环节、功率外环、电流内环与调制环节。主电路部分由三相交流源、滤波电感、VSC桥臂和直流母线组成采集环节测量三相电压和三相电流再经过Clarke变换得到αβ轴分量。功率计算环节利用αβ轴电压电流瞬时值计算出有功和无功这一步是整个系统的“测量仪表”其准确性直接决定闭环控制的上限。功率外环输出的是d轴和q轴电流参考值在αβ坐标系下需要进一步转换成αβ轴电流指令。这里有一个容易混淆的点功率环通常在同步旋转坐标系下设计输出的是dq电流指令而电流内环在αβ坐标系下工作所以需要把dq指令通过反Park变换转成αβ指令——这又需要一个相位角通常是锁相环给出的电网电压相位。不过在我搭建的这个模型里为了验证“αβ电流反馈”这条主线功率环和电流环都统一在αβ静止坐标系里处理功率外环直接输出有功电流指令和无功电流指令再结合电网电压αβ分量的单位方向矢量生成αβ轴电流指令。这样做不需要锁相环也方便单独观察坐标变换对动态性能的影响。2. αβ变换与瞬时功率计算的原理2.1 Clarke变换的数学本质与两种常见形式αβ变换学术上通常叫Clarke变换作用是把三相静止坐标系下的量映射到两相静止坐标系。三相系统里a、b、c三个相量之间存在120°相位差在数学上存在冗余变换到αβ轴后原来三个耦合的交流量变成两个正交的交流量控制层面从一个三输入问题降成一个两输入问题这是坐标变换最大的价值。常见实现有两种归一化形式等幅值变换和等功率变换。等幅值变换矩阵是[ \begin{bmatrix} u_{\alpha} \ u_{\beta} \end{bmatrix}\begin{bmatrix} 1 -\frac{1}{2} -\frac{1}{2} \ 0 \frac{\sqrt{3}}{2} -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} u_a \ u_b \ u_c \end{bmatrix} ]等功率变换则是在前面乘一个 (\sqrt{\frac{2}{3}}) 的系数。区别在于等幅值变换下αβ量的幅值与原三相相电压幅值一致物理概念直观等功率变换下功率表达式里没有1.5倍系数数学上更紧凑。Simulink自带的Clarke变换模块默认采用等功率形式但我在工程里习惯自己用增益矩阵搭变换就是为了避免系数不一致导致功率计算错误这种低级问题。这个系数问题绝不是小事。我见过不少初学者在Simulink里同一套系统混用了两种变换形式结果功率反馈值偏了50%控制器怎么整定都不对。项目里务必统一变换形式并且在功率计算公式里配上对应的系数。2.2 用αβ电压电流算实时无功-有功功率有了αβ坐标系的电压电流分量瞬时功率可以这样算[ p \frac{3}{2}(u_{\alpha} i_{\alpha} u_{\beta} i_{\beta}) ] [ q \frac{3}{2}(u_{\beta} i_{\alpha} - u_{\alpha} i_{\beta}) ]这里采用的是等幅值变换对应的功率表达式1.5倍来自三相系统的总功率等于单相功率的三倍再考虑幅值折算。两个公式的物理含义也很直观有功功率对应αβ轴电压与电流同方向分量的乘积之和无功功率则对应电压与电流正交分量的叉乘。这其实是瞬时无功理论的简化表达适用于三相三线制系统。用αβ分量计算功率有两个显著好处。第一它是基于瞬时值的计算不需要对电压电流做周期平均所以功率反馈的动态响应快能真实反映瞬态过程。第二计算过程只用乘法和加减法在数字控制器里实现极其简单每个采样周期都能刷一次功率值实时性有保障。实际操作时我会把功率计算封装成一个Simulink的Fcn模块或者MATLAB Function模块。以MATLAB Function为例输入是四个量uα、uβ、iα、iβ输出是p和q核心代码就两行。Simulink里也可以直接用乘法器和加法器搭出来但模块数量多、连线容易出错。我更推荐用Fcn模块写数学表达式尤其是带系数调整时改起来非常方便。2.3 功率反馈滤波的必要性与带宽权衡αβ变换和瞬时功率计算本身没有问题但实际电路测量环节会带来开关频率附近的谐波。VSC采用PWM调制时电流里不可避免含有载波频率及其倍频附近的纹波这些纹波会通过功率计算公式进入功率反馈通道。如果不做滤波功率环PI调节器会对高频分量产生响应导致电流指令抖动甚至引发谐振。我习惯在功率反馈后加一阶低通滤波截止频率取功率环带宽的5到10倍。比如功率环带宽打算设计在100 Hz那么滤波器截止频率取500到1000 Hz比较合适。滤波器的加入会让功率反馈产生相位滞后所以实际整定时要把这个滞后算进相位裕度里。滤波器和功率环带宽的配合是一个经典权衡问题滤得太狠动态响应慢滤得不够稳态纹波大。这个度需要在仿真里反复试。3. 电流内环与功率外环的设计配合3.1 静止坐标系下的电流调节器PR控制的思路电流内环是整个控制器动态性能的核心。在dq同步旋转坐标系下电流指令和反馈都是直流量用PI就能做到无静差跟踪而在αβ静止坐标系下电流是50Hz正弦量常规PI对正弦指令做不到零稳态误差。所以要么把αβ电流再变换到dq用PI要么在αβ域直接使用PR比例谐振控制器。PR控制器的传递函数可以写成[ G_{PR}(s) K_p \frac{2 K_r \omega_c s}{s^2 2 \omega_c s \omega_0^2} ]这个形式里ω0是谐振频率工频对应约314 rad/sωc是谐振项带宽Kr是谐振增益。PR控制器的特点是在谐振频率处具有很高的增益因此能对工频正弦指令实现近似无静差跟踪同时又不影响其他频率处的响应相当于把dq旋转坐标系下PI的积分作用翻译到了静止坐标系。参数整定上Kp主要决定带宽和动态响应速度可以先按电感模型估算。电流环被控对象近似为电感加电阻即 ( G(s) 1/(LsR) )Kp取 L 乘以期望电流环带宽rad/s然后再微调。Kr决定谐振点的增益和稳态误差太小了低频增益不够太大了容易在谐振频率附近引入振荡。我常用的初始化方法是先只加Kp让系统稳定且有一定动态再加入Kr并逐渐增大观察工频处稳态误差的收敛速度。用PR控制器的一个实际好处是αβ两轴控制结构完全对称两个轴的控制器参数一模一样降低了整定工作量。而且即使电网频率有小幅偏移只要ωc取得合适比如5到10 rad/s仍然能保持较高增益动态性能劣化不明显。在Simulink里我用二阶积分器结构实现PR避免直接用传递函数模块时可能出现的数值饱和问题。3.2 功率外环的PI设计与电流指令生成功率外环的设计目标是让实际有功和无功功率快速、准确地跟踪给定值。由于内环电流环的存在功率外环看到的对象近似是一个一阶惯性环节时间常数约等于电流环带宽的倒数。功率环PI参数可以按典型一阶系统来整定比例系数决定响应速度积分系数消除稳态误差。功率环带宽一般取电流环带宽的1/10到1/20。举例来说若电流环带宽设计为1000 rad/s功率环带宽取50到100 rad/s。这样内外环频率拉开一个数量级避免环路之间相互作用导致系统振荡。带宽比值过小动态响应太慢比值过近可能出现内外环耦合出现低频振荡。功率外环输出的是电流指令。这里需要特别说明指令生成方式。常见的做法是有功功率环输出d轴电流指令id_ref无功功率环输出q轴电流指令iq_ref然后配合锁相角反变换为αβ坐标系电流指令。而我的模型为了完整验证αβ反馈这条链路采用了一种不需要锁相环的方法用电网电压αβ分量的单位矢量对电流指令进行定向。具体来说先把功率环输出的有功电流指令和无功电流指令组合成幅值形式的合成电流参考再根据电压矢量方向将其投影到αβ轴。公式上可以写作将 ( i_p ) 乘上电压单位矢量将 ( i_q ) 乘上正交的单位矢量两者相加得到最终电流指令。这样做绕开了锁相环的相位滞后问题在电网电压畸变较小的场合动态性能甚至比带锁相环的方案更快。3.3 电流反馈通道中的αβ转换实现电流反馈通道的坐标变换是整个系统的信号源头直接影响控制精度。在Simulink里我使用Three-Phase V-I Measurement模块测量三相电流然后经过一个自定义的增益矩阵实现Clarke变换。为什么不直接用Simulink自带的Clarke变换模块因为自带的模块默认系数可能与我功率计算公式里的系数不一致统一用自定义矩阵可以确保全链路闭环一致。变换后的iα和iβ信号会各接一个二阶低通滤波器用来滤除PWM引起的开关纹波。滤波器截止频率的选择需要兼顾两个目标滤除高频噪声同时保持基波增益为1且相位延迟可接受。我通常把滤波截止频率放在2 kHz到5 kHz对50Hz基波信号造成的相移小于5度对动态性能影响可以忽略。这里还有一个小细节测量模块出来的电流信号在仿真离散步长下会有量化效应如果控制周期和PWM载波周期不同步反馈电流容易出现差拍现象。我的经验是让控制器的采样周期等于PWM载波周期或者在每个载波周期中间点采样这样能显著减少差拍和采样子周期引起的纹波。4. Simulink建模实操全流程4.1 主电路搭建与参数选择打开Simulink新建设计模型先搭主电路。我用的是Simscape Electrical原SimPowerSystems元件库。三相交流源用Three-Phase Source模块线电压380V、频率50Hz、内阻设小一点模拟电网。滤波环节用三相串联RLC支路R选0.1ΩL选2mH这个电感值按电流纹波和动态指标综合选取。VSC用Universal Bridge桥臂数设3功率开关选IGBT二极管反并联直流侧接一个理想直流电压源电压设700V。负载侧我用了三相并联RLC负载初始状态设为不接入方便后续做功率阶跃响应测试。电网侧加了三相电压和电流测量模块测量信号通过Goto/From方式送到控制子系统避免主电路带太长连线。仿真参数方面求解器选ode23tb最大步长设为2e-6秒仿真时长设0.5秒保证PWM开关细节能观察到。主电路参数不是随手写的。L选2mH的理由是在700V直流电压、10kHz开关频率下电感纹波电流约为输出电流的15%左右比较适中。如果电感太小纹波大电流环采样噪声大电感太大电流环响应变慢电压降也大。直流电压选700V是因为三相380V交流系统经过不控整流后的直流母线约540V逆变器要输出幅值311V的相电压考虑调制裕度700V留了充足空间。4.2 控制子系统内部接线与核心模块控制子系统是整个模型的灵魂。我把整个控制逻辑放进一个原子子系统里内部主要分为四块坐标变换与功率计算模块、功率环PI模块、电流指令生成模块、电流环PR与PWM调制模块。坐标变换与功率计算我用一个MATLAB Function模块完成输入是测量得到的Uabc和Iabc六个量输出是p、q、iα、iβ、uα、uβ六个量。函数内部先做Clarke变换再算功率。这样集中处理的好处是信号流向清晰系数调整时只改一个地方。功率环PI模块用Simulink的PID Controller模块两个环分别配置P和I参数通过模型外部变量控制这样我不需要进模块内部就能在m脚本里批量跑参数扫描。电流指令生成模块也是一个MATLAB Function输入是功率环输出的指令以及uα、uβ经过单位矢量投影得到iα_ref和iβ_ref。电流环PR控制器我用自定义的二阶子系统实现避免PID Controller模块对交流量无能为力的问题。最后电流环输出vα_ref和vβ_ref送进PWM调制模块。PWM调制部分我用的是PWM Generator载波型载波频率设10kHz。调制波是电流环输出的电压参考信号经过坐标反变换得到的abc三相指令与三角载波比较后生成六路PWM脉冲。注意Universal Bridge的触发信号需要的是脉冲序列而不是单个开关信号PWM Generator模块的输出端口要选择[g1,g2,g3,g4,g5,g6]模式每组信号对应桥臂的上下管互补驱动。4.3 核心算法的MATLAB Function代码参考在MATLAB Function里我写了一段非常紧凑的代码来完成坐标变换和功率计算。代码本身不复杂但系数和变量对应关系必须与主电路一一对上。这里放一个我常用的模板function [p, q, ialpha, ibeta, ualpha, ubeta] pqCalc(uabc, iabc) % 输入为三相电压电流行向量格式 [ua; ub; uc], [ia; ib; ic] % Clarke变换 - 等幅值形式 ualpha uabc(1) - 0.5*uabc(2) - 0.5*uabc(3); ubeta (sqrt(3)/2)*(uabc(2) - uabc(3)); ialpha iabc(1) - 0.5*iabc(2) - 0.5*iabc(3); ibeta (sqrt(3)/2)*(iabc(2) - iabc(3)); % 瞬时功率计算对应等幅值变换带1.5系数 p 1.5*(ualpha*ialpha ubeta*ibeta); q 1.5*(ubeta*ialpha - ualpha*ibeta); end这段代码放在MATLAB Function模块里输入接三相电压信号和三相电流信号注意信号维度必须是3维向量。用这个函数之后功率计算就和坐标变换捆绑在一起避免在模型图里拉一堆乘法器。实际运行时Simulink会自动处理连续采样不需要额外加Unit Delay因为在MATLAB Function内部是纯组合逻辑。功率环PI输出到电流指令的函数我放在另一个MATLAB Function里。这个函数的输入是有功功率指令Pref、无功功率指令Qref、实测p、q、以及uα、uβ内部先调用一个子函数计算PI输出。由于MATLAB Function模块内部不建议写太复杂的控制状态我通常把PI控制器放在Simulink的PID Controller模块里再把输出指令传到功能函数里生成电流参考值。这样做的好处是PI的积分状态由Simulink求解器管理不容易出现代数环。4.4 仿真配置与整定参数的初始化仿真跑起来之前我习惯先写一个初始化脚本把主电路参数和控制参数全部定义为工作区变量。这样模型里每个模块的参数都填变量名调参数时只需要改脚本头部的一段不需要在模型图里到处找。以下是我常用的参数表参数名称符号数值单位交流线电压有效值Uline380V电网频率f50Hz滤波电感L2mH滤波电阻R0.1Ω直流母线电压Vdc700VPWM载波频率fsw10000Hz电流环带宽ωi942rad/s功率环带宽ωp94.2rad/s有功功率指令Pref5000W无功功率指令Qref2000Var功率反馈滤波截止频率ff1000Hz仿真最大步长Tmax2e-6s电流环带宽选942 rad/s对应150Hz这个数值对10kHz载波来说大约是载波频率的1/66留足了PWM调制产生的延迟带来的相位裕度。功率环带宽选94.2 rad/s约15Hz这样功率环响应速度适中动态性能测试时能清楚看到功率阶跃的变化过程。初始化脚本里还会设置控制器的具体PI参数。电流环PR的Kp按 ( K_p \omega_i \times L ) 估算约 942 × 0.002 ≈ 1.884。Kr取 100 到 300 之间。功率环PI参数先按典型一阶系统整定Kp_power 电流环闭环带宽 / 1.5 × 额定电压幅值算出来大概在0.1到0.5的数量级Ki_power取 Kp_power × 功率环带宽 的0.5倍再在仿真中微调。5. 动态性能评估与常见问题调试5.1 如何从仿真曲线中评估动态性能模型正常启动后先把有功和无功指令设成阶跃跳变观察功率反馈曲线的上升时间、超调量和调节时间。我通常让Pref从0阶跃到5000WQref从0阶跃到2000Var用示波器同时显示p、q指令和实际值。判断三个指标功率首次达到目标值的90%需要多少毫秒是否出现超过目标值10%以上的超调调节到稳态±5%范围需要多长时间。实测下来这套αβ电流反馈结构的动态响应非常快功率环带宽在15Hz时有功功率从阶跃到进入稳态大约需要35到45毫秒超调量在5%到10%之间。如果超调偏大或振荡明显优先降低功率环的Kp然后适当增加Ki。要特别注意电流内环的响应曲线电流阶跃时如果出现明显振荡说明电流环Kr偏大或者电流环带宽离功率环带宽不够远。除了时域指标我还习惯用FFT工具对比PWM调制前后的电流波形质量。动态性能不仅看响应快慢还要看稳态时电流畸变率。THD控制在5%以下是底线好的情况下能做到2%左右。如果THD偏大检查电流反馈滤波和PWM载波频率设置。5.2 代数环与仿真发散问题的排查实录Simulink仿真最常见的两个坑一个是代数环一个是发散。代数环通常出现在控制信号从测量到计算再到调制再到主电路中间如果某些模块是纯直通路径Simulink会报“Algebraic loop”警告。我的模型里功率计算和电流指令生成都是组合逻辑模块确实容易触发代数环。解决办法是在电流反馈支路加一个Unit Delay模块控制周期内延时一拍或者在MATLAB Function输出端加Memory模块。加了一拍延迟后相当于引入了数字控制的零阶保持器效应这才是实际DSP控制器里的真实情况。发散问题大多来自参数初始化不合理。最常见的情况是PWM调制波初始值过大或者控制积分器初始状态不稳。我在启动仿真前把功率环PI模块的初始输出设为0电流环PR模块的初始状态也设为0直流母线电压源直接给定700V不设斜坡这样可以避免启动瞬间的巨大电流冲击。如果在仿真最开始几个微秒就出现NaN错误检查主电路电流测量模块的输出方向是否接反。还有一个隐蔽问题是采样时间和PWM载波不同步带来的拍频振荡。当控制采样频率与整数倍载波频率不一致时电流反馈波形上会出现低频包络脉动功率阶跃响应看起来像在抖动。要解决这个问题把控制采样周期严格设为PWM载波的周期整数分之一我直接将控制器采样步长设为载波周期10kHz对应0.0001s用离散求解器跑控制部分主电路仍然用连续时间步长仿真。5.3 功率解耦与无功阶跃的动态响应观察这套系统里有功和无功在理论上是可以解耦控制的因为αβ功率计算本身就是解耦的。但实际动态过程中有功阶跃可能引起无功短暂波动无功阶跃也可能拖拽有功。这个现象的原因在于电流环不是理想的无穷带宽电流指令跟踪存在动态偏差导致功率瞬时值耦合。我在做动态性能测试时专门叠加了无功阶跃试验保持Pref不变让Qref从0跳到3000Var观察P的实际值是否出现超过100W的波动。实测中使用独立的αβ电流PR控制时有功功率在被拖动态中的波动可以控制到原来额定功率的2%以内。如果波动过大建议检查电流指令生成环节中单位矢量的计算精度特别是uα和uβ经过滤波后的相位偏移一定要一致。这里有一个非常好用的调试技巧把功率计算模块捕获到的uα、uβ和这两个量的滤波输出同时在示波器里对比如果两条曲线的相位差超过5度电流指令定向就会出现偏差导致功率环之间动态耦合。把电压反馈滤波器的截止频率调高或者换成Bessel型滤波器线性相位特性更好通常能显著改善解耦效果。5.4 个人调试心得与可以继续扩展的方向整套模型从零搭到现在这个状态前前后后花了不少时间。我最大的体会是αβ静止坐标系下的双闭环控制确实在结构简洁性和动态响应上很有优势不需要锁相环也让电流环天然具备对电网畸变的鲁棒性。但代价是要接受PR控制器不如PI控制器直观谐振项的参数整定需要一定的经验积累。建议刚开始做的朋友先把电流环PR调稳再叠加上功率环一步一步来别指望一次到位。这个模型后面还可以扩展很多方向。比如把直流侧电压源换成电容加入直流母线电压外环就变成单位功率因数PWM整流器模糊化处理功率给定值就能模拟光伏或者储能系统的功率调度曲线电流环改成模型预测控制动态性能还能进一步提升。想做并网研究的朋友还可以在交流源后面串联谐波源或者做不对称故障发生器检验这套控制器在畸变和故障工况下的表现。这些都是从这个基础模型出发的扩展课题后续有进展我会继续分享。
返回列表