ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

两级VSC实时无功-有功控制:αβ坐标系与PR控制器动态性能解析

两级VSC实时无功-有功控制:αβ坐标系与PR控制器动态性能解析 做并网逆变器、静止无功补偿或者电机驱动的朋友看到“两级VSC实时无功-有功控制器”这个标题应该会有共鸣。这套项目本质上解决的问题是在Simulink仿真环境下用两级电压源型变流器作为功率级采用αβ坐标变换做电流反馈环节实现有功功率和无功功率的实时解耦控制并重点考察系统的动态性能——功率阶跃时电流和功率跟踪得快不快、超调大不大、能不能扛住电网扰动。我这次不是简单搭个能出波形的模型就收工而是把拓扑选型、控制结构、参数计算、离散化、PWM调制、阶跃实测整套流程完整走了一遍。文章里所有环节都是我自己建模、调试、测完之后的记录包含可以直接复现的模型结构、参数计算方法和几个实际踩过的坑。适合正在做新能源并网逆变器、SVG/STATCOM、储能PCS、APF的工程师和学生参考如果你对dq坐标系下的PI控制已经很熟想换一条更快的控制思路这篇应该能帮你少走不少弯路。1. 项目整体拆解两级VSC的动态性能从哪来1.1 两级VSC的拓扑需要先对齐两级电压源型变流器Two-Level VSC虽然是电力电子里最基础的拓扑但如果控制策略不同主电路的连接方式完全不同——有人是把它当整流器用有人是逆变器并网有人是带电机负载。做控制之前必须先把这块对齐否则后面所有参数讨论都是空谈。所谓“两级”不是说电路有两级级联结构而是指交流侧输出电压相对直流母线中点只有两种电平正半母线电平或者负半母线电平。六个IGBT加上各自反并联二极管构成三相桥桥臂中点通过滤波电感接到交流侧。三相中各相输出要么接到正母线、要么接到负母线这就是“两电平”说法的由来。相比三电平NPC或MMC拓扑两电平结构最简单、开关管最少、控制思路最直接特别适合拿来验证控制算法本身的效果。这次项目的场景是VSC交流侧通过三相滤波电感接入工频电网直流侧用一个理想电压源模拟稳定的直流母线。之所以不把直流电容动态引入进来是为了聚焦交流侧功率控制的动态性能。如果考虑直流侧馈入或者负载变化控制对象的阶数会升高功率外环多一个极点问题复杂度完全不同。仿真阶段先把交流侧动态调明白再去叠加直流侧是更清醒的推进方式。1.2 “动态性能”在实时无功-有功控制里的具体含义在无功-有功控制器里“动态性能”不是一句话能带过的评价指标。它至少包含四个可量化的维度功率阶跃时的上升时间、调节时间、超调量以及P轴和Q轴之间的解耦程度。上升时间决定了功率指令变化后系统多久能跟上调节时间决定了振荡多久能平息超调量则直接关系到电流应力——P阶跃时如果有功瞬间冲过目标值直流侧和电网都会受到冲击这在现场是要尽量避免的。还有一个经常被忽略的指标是“解耦度”。理想情况下有功功率阶跃不应引起无功功率波动反之亦然。但实际控制里由于电流内环带宽有限、采样延迟和电网电压扰动P和Q之间总会有短暂串扰。这个串扰在动态性能评估里很重要比如无功补偿装置在补偿阶跃时如果引起有功大幅波动说明解耦策略做得不够好。实时性这个概念也得说清楚。仿真里所说的“实时控制”并不是指代码跑在什么实时系统上而是指控制器的计算节奏每个控制周期比如100微秒内要完成一次从采样、计算到PWM更新的完整流程。Simulink中用离散控制器配合零阶保持器模拟的正是这个节奏。控制周期、开关频率、采样时刻之间的匹配关系对动态性能的影响非常直接后面建模章节会详细展开。1.3 为什么这次用αβ坐标系做电流反馈而不是dq这个问题问的人最多既然dq坐标系下电压电流都是直流量PI控制器就能实现无静差跟踪为什么还要绕一圈用αβ坐标关键在于动态性能的两个细节。第一dq变换离不开锁相环或者虚拟定向。无论哪种方式获得旋转角度的过程本质上是一个闭环滤波过程角度估计有延迟、有带宽限制。动态性能要求高时这个延迟会卡住整个控制链路的响应速度。而αβ变换是静止坐标系下的线性变换不需要角度信息直接把三相量变换成两个正交的正弦交流量。省掉锁相环这一步意味着控制通路里少了一个会拖慢响应的环节。第二dq坐标下的PI控制器虽然稳态精度好但这套控制思路的动态性能受限于旋转坐标系的耦合效应。电网频率波动时dq轴电流分量会相互串扰需要额外的解耦项和补偿项。而在αβ静止坐标系下两个轴是解耦的天然不存在旋转坐标耦合的问题。代价是变量变成50Hz交流量普通PI跟踪正弦信号会有稳态误差所以内环必须用PR谐振控制器。这个一进一出的取舍换来的是更干净、更快的动态响应。这套方案并不是要全盘否定dq-PI——如果并网点在强电网、动态要求一般dq-PI仍然是工程实现最简单的路子。但当目标明确是“实时性和动态性能”时αβPR的组合在理论上和实测中都有明显优势。2. 控制原理与参数设计αβ坐标系下的完整控制链2.1 Clarke变换与瞬时功率计算别让系数出错αβ变换的数学基础是Clarke变换但这里有个高频翻车点等幅值变换和等功率变换的系数不同后续功率公式系数也不同。我这次选用的是等幅值Clarke变换变换矩阵是C (2/3) * [ 1, -1/2, -1/2; 0, √3/2, -√3/2 ]等幅值变换的优点在于αβ轴上的电压电流幅值和三相相电压相电流幅值一致做波形对比、设置PI/PR参数时直观。代价是三相瞬时功率公式前面要乘3/2系数P 1.5 * (vα * iα vβ * iβ) Q 1.5 * (vβ * iα - vα * iβ)如果你选等功率变换系数变成√(2/3)功率公式不需要1.5倍但αβ轴变量幅值和相电压幅值不一致调试时很容易算错参考值。我个人强烈建议仿真和工程都用等幅值变换视觉直觉最重要多乘一个系数好过在坐标变换里失去幅值对应关系。功率计算公式还有一个实际注意点直接用瞬时值算出来的P和Q会包含开关频率纹波。控制外环如果直接用这个信号做反馈必须要把纹波过滤掉不然PI控制器会被高频噪声反复激励动态响应反而不稳。我的做法是在瞬时功率计算后加一个一阶低通滤波器截止频率取200Hz左右。这个频率远高于功率环带宽能滤掉纹波又不拖慢动态响应。2.2 电流内环PR控制器的整定思路在αβ静止坐标系下电流内环的参考值是50Hz正弦量。要实现对正弦信号的无静差跟踪最干净的方案是准PR控制器传递函数如下G_PR(s) Kp 2 * Kr * ωc * s / (s² 2 * ωc * s ω0²)其中ω0是电网角频率2π×50ωc是谐振带宽参数Kp决定系统带宽Kr决定谐振增益。这个控制器的思路可以这样理解普通PI是给直流信号提供一个无穷大的低频增益从而实现无静差准PR则是在50Hz这个特定的频率点上构造一个高增益峰让正弦信号经过环路的增益被抬到足够高实现无静差跟踪。额外加的ωc参数让增益峰不再是无限窄的理想谱线而是覆盖一个窄频带这样电网频率在49.5Hz到50.5Hz之间漂移时控制器依然有足够的增益不至于性能突变。电流环的参数计算以我这次的五毫亨滤波电感为例。被控对象近似为一阶惯性环节1/(LsR)其中R是电感等效串联电阻取0.1欧姆。设计时先确定电流环截止频率fc参考规则是取开关频率的1/20到1/10。开关频率10kHz时用100微秒控制周期考虑到一拍计算延迟和PWM零阶保持的相位损失fc取500Hz比较稳当如果把控制周期缩短到50微秒fc提到1kHz也没有问题。比例系数Kp按经典近似法计算Kp ≈ 2π * fc * L 2π * 500 * 0.005 15.7谐振增益Kr的经验取值在Kp的10到20倍之间我取300。谐振带宽ωc取2π×5也就是覆盖正负5Hz的频率偏移范围。整定完成后建议在Simulink里先跑一次电流参考阶跃观察α轴电流跟踪波形确认超调量和响应时间符合预期后再去调功率外环。2.3 功率外环与电流参考生成动态取舍的关键无功-有功控制的经典结构是外环算电流参考、内环执行电流跟踪。外环输入是功率误差输出是电流参考的幅值分量。但这里要特别想清楚一个问题外环输出的电流参考究竟是直流量还是交流量。我的方案是功率误差经过PI控制器后输出的是有功电流幅值指令id_ref和无功电流幅值指令iq_ref。这两个量本质上跟dq坐标系下的电流指令分量是一回事——分别代表电流矢量在有功方向和正交无功方向上的投影大小。这样一来功率外环的PI控制器处理的仍然是直流量稳态无静差而把这两个幅值指令变成αβ坐标系下的正弦指令时用的是电网电压矢量的瞬时方向而不是锁相环的估计角度。具体变换方法如下。先算出电压矢量幅值和方向余弦|V| sqrt(vα² vβ²) cosθ vα / |V| sinθ vβ / |V|电流参考生成iα_ref id_ref * cosθ - iq_ref * sinθ iβ_ref id_ref * sinθ iq_ref * cosθ为什么这套方法能提升动态性能因为方向信息直接取自当前电压瞬时值不需要角度估计环节的滤波延迟。电网电压一旦变化电流参考的方向立即跟随实际电压矢量调整这在电网幅值跌落、频率波动这种瞬时情况下响应速度比带锁相环的方案明显更快。功率外环的带宽选择要遵循一个原则外环比内环慢五倍以上。内环闭环带宽大约500Hz功率外环带宽我设定在100Hz左右。这样外环输出的电流参考变化速度不会超出内环的跟踪能力避免级联振荡。功率环PI参数我以标幺值环境调试功率基值10kW电流基值21.5A经过反复试凑最终Kp取0.3Ki取40响应速度和超调达到平衡。3. Simulink建模实操搭一套可复现的动态性能测试平台3.1 顶层模型与主电路参数选择我用的是Simulink配合Simscape Electrical模块库老版本叫SimPowerSystems。顶层模型分为主电路和控制子系统两大部分中间用电压电流测量模块连接。主电路从上到下依次是三相交流电压源、三相电压电流测量模块、RL滤波支路、VSC桥臂、直流电压源。主电路参数如下表这套参数是实验室小型并网逆变器的典型量级参数数值说明电网线电压380V RMS / 50Hz工业低压并网常用直流母线电压700V留足调制裕量滤波电感5mHL型滤波阻感0.1Ω开关频率10kHzIGBT典型范围控制周期100μs同步于开关频率额定功率10kW功率基值直流母线电压700V这个值不是随便拍的。等幅值Clarke变换下380V线电压对应的相电压幅值约为310V。如果用SVPWM最大不失真线性调制相电压幅值是VDC/√3对应404V余量足够。如果用SPWM最大线性相电压幅值是VDC/2也就是350V同样够用。如果直流母线电压低于这个临界值整流器低侧调制会自动进入过调制区电流波形立刻出现严重畸变这一块电路设计选型时就得先算清楚。主电路里我特意用了理想直流电压源而不是直流电容加负载的模型。原因是这个项目聚焦交流侧动态性能理想直流源把所有干扰都隔离在外让电流环和功率环的阶跃响应纯粹反映控制器本身的品质。如果一开始就把直流电容动态和前端馈入功率波动加进来波形出现问题后你很难判断是控制器的锅还是直流侧动态的锅。先理想化后逐步逼近现场是我一贯的建模习惯。3.2 控制子系统内部结构控制子系统是整个模型的大脑从输入到输出的信号流依次是三相电压电流采样 → Clarke变换 → 瞬时功率计算 → 低通滤波 → 功率外环PI → 电流参考生成 → 电流内环PR → 电网电压前馈叠加 → 逆Clarke变换得到三相调制波 → PWM发波。这套结构里电流内环的参考电压要在PR控制器输出上叠加前馈分量。前馈的直接来源就是测量得到的vα和vβ。这样做的道理在于滤波电感上除了电流变化产生的压降还有电网电压这个反电动势在起作用。如果控制器只靠PR的反馈增益去压制这个反电动势相当于让控制器对抗一个已知的扰动动态响应会慢而且扰动压制效果差。把电网电压前馈直接加进去控制器从原理上就不再需要承担这部分负担只需要专注于电流误差的消除响应速度明显提升。控制子系统内部大量使用离散模块。电流参考生成、外环PI、内环PR都是离散算法采样时间统一设置为100微秒。为了模拟真实数字控制的一拍延时我在测量信号进入控制器的通道上加了一个单位延迟模块Unit Delay。这一拍的延迟在仿真里不起眼但它会减小相位裕度如果不加仿真结果偏乐观到了实物平台上调试时就会吃大亏。我建议凡是做数字控制器仿真的务必把这一拍建模出来。3.3 PWM调制和数据类型转换的那些细节PWM调制我是先用逆Clarke变换把vα_ref、vβ_ref还原成三相调制波va_mod、vb_mod、vc_mod然后除以VDC/2进行归一化使调制波幅度落在±1范围内。归一化这个操作经常被漏掉如果不除以半母线电压调制度就等于几百伏的电压值和三角载波的幅度默认1完全没有可比性输出的PWM占空比会一直饱和。载波用频率10kHz的三角波和调制波一起送入关系运算模块Relational Operator进行比较。比较器的输出我设置的输出数据类型是boolean。为什么强调这一点Universal Bridge的门极输入在Simscape Electrical里虽然兼容多种信号类型但内部处理时boolean最明确避免出现隐式类型转换的问题。如果控制链路里后续还要做运算再用 Data Type Conversion 转回double不要图省事直接让整条链路都是double。死区时间没有在这个仿真里加因为死区会引入低次谐波和额外相位延迟动态性能测试时容易掩盖控制器本身的行为。我在实物调试时用2到3微秒死区但在Simulink模型里先把死区影响排除让控制算法的性能边界清晰可见。如果在模型里非要加死区可以在PWM上升沿插入On/Off Delay实现但那是另一个话题。3.4 求解器、离散化与仿真时间设置这是新手最容易翻车的一环模型里的Simscape Electrical部分使用powergui模块控制求解方式。如果你用的是连续模式Simulink必须用变步长求解器仿真速度慢且离散控制器的行为不够真实如果设置成离散模式主电路会按固定步长计算我设的是20微秒也就是每个开关周期内采20个点足够还原PWM纹波细节。控制子系统和主电路采用不同的采样周期完全不冲突控制周期100微秒仿真步长20微秒控制模块通过零阶保持器和单位延迟自然实现多速率。这个设置模拟的是真实DSP每100微秒才执行一次控制算法的节奏。仿真总时长设0.4秒为了让初始暂态先稳定阶跃信号放在0.05秒之后这样测试动态性能时的起始工作点是干净稳态。离散控制器参数我用MATLAB脚本算好再填入模块脚本如下避免手算出错Ts 1e-4; % 控制周期 100us w0 2*pi*50; % 电网基频 wc_res 2*pi*5; % 准PR谐振带宽参数 -5Hz Kp 15.7; % 电流环比例系数 Kr 300; % 电流环谐振增益 num_res [2*Kr*wc_res, 0]; den_res [1, 2*wc_res, w0^2]; H_res tf(num_res, den_res); H_pr tf([Kp, 0], 1) H_res; Hdz c2d(H_pr, Ts, prewarp, w0); [numd, dend] tfdata(Hdz, v);运行后把numd和dend填入离散传递函数模块的分子分母数组即可。用prewarp选项是为了让50Hz谐振点在离散化后仍然精确落在50Hz否则Tustin变换的频率翘曲会让谐振峰偏移稳态误差不达标。4. 动态性能实测阶跃响应数据分析4.1 有功阶跃与无功阶跃的实测波形解读模型搭完开始跑动态性能测试。第一组工况是有功功率阶跃初始P_ref为0在0.05秒时刻阶跃到10kWQ_ref始终为0。第二个工况反过来P_ref保持10kWQ_ref从0阶跃到5kVar。第三个工况做双轴同时阶跃P_ref从5kW跳到10kWQ_ref从2kVar跳到-2kVar考验两个通道同时动作时的解耦能力。判读波形时我主要看四个量瞬时功率P、Q波形αβ轴电流波形以及三相电流波形。以有功阶跃为例用Scope记录的数据导到MATLAB后用游标读出10%到90%的上升时间约4毫秒调节时间按进入稳态值±5%误差带计算约7毫秒超调量控制在百分之五以内。Q通道在整个P阶跃过程中的最大偏差不超过300Var解耦表现满足设计预期。为什么上升时间落在毫秒量级而不是微秒量级因为功率阶跃的响应由外环带宽决定功率环带宽100Hz对应的上升时间就是毫秒级别。内环再快外环也不可能超过自身的带宽极限。这个关系在设计时要心里有数不是你盲目提高Kp就能无限加速外环PI参数过大直接导致功率振荡。4.2 关键参数对动态性能的影响对比参数整定阶段我做了一组对比测试目的是验证理论计算方向是否正确。第一组把电流环Kp从15.7降到8其他不动结果电流阶跃响应时间从约1毫秒涨到约2毫秒功率波形出现轻微超调验证了Kp对带宽的直接贡献。Kp再继续往下调到4以下电流波形开始出现明显的跟踪滞后功率阶跃响应变得拖沓上升时间奔向20毫秒已经完全跟不上实时无功补偿的需求。第二组对比了谐振增益Kr。Kr从300降到50功率阶跃稳态看起来仍然能跟踪但P波形在阶跃后有一个低频衰减振荡尾巴拖得很长。这是因为50Hz处的开环增益不够正弦跟踪的误差虽然稳态为零但动态过程中谐振频率附近的低频分量没有被快速压下去。这说明Kr的选取不仅要保证稳态精度还要影响动态过程的振荡衰减速率。第三组对比是功率环PI参数。Kp_power从0.3调到1.2功率响应速度确实上去了但Q阶跃时P通道出现了明显的反向串扰解耦度劣化了。原因是过大的外环带宽让电流参考变化太快电流内环虽然能跟踪但电压前馈和PR控制器的相位滞后在这个频率上开始显现。这个现象再次印证了带宽必须分层外环带宽不能超过内环带宽的五分之一。4.3 电网扰动下的表现动态性能测试不能只做阶跃指令还要看电网扰动下的抗扰能力。我在仿真中把三相电压源幅值做了瞬时跌落10%的扰动测试类似电网故障时低压穿越的场景。观察到的结果是P和Q都在扰动瞬间出现了短暂的偏差但不到一个工频周期内就被拉回参考值。这个恢复速度得益于αβ坐标系下控制通路中没有锁相环的延迟环节前馈对电压跌落起了直接抵消作用。电网频率偏移测试也跑了在0.25秒时刻把频率从50Hz改为49.5Hz模拟弱电网的频偏。绝大多数dq-PI方案在这种情况下需要锁相环重新跟踪角度动态过程通常有几十毫秒的过渡。而αβ准PR方案由于谐振带宽覆盖了49.5到50.5Hz范围功率响应几乎察觉不到频率变化引起的波动。这是准PR控制器相对理想PR的工程优势——理想PR在频率偏移时增益会瞬间崩塌准PR用带宽换来了鲁棒性。5. 常见问题与调试实录5.1 代数环与一拍延迟问题第一次搭完模型运行时Simulink报出代数环提示这几乎是这个结构必然遇到的事。原因是控制链路中存在直通路径功率计算出来的信号经过PI和PR直接变成调制波再通过PWM立即影响下一次采样计算形成信号在同一仿真步内的循环依赖。不处理的话仿真会陷入迭代甚至不收敛。标准解法是在反馈信号进入控制器的路径上放一个Unit Delay模块把这一拍的延迟显式建出来。它不仅解决了代数环还让模型更接近真实DSP的行为。从动态性能角度看这一拍延迟消耗了大约二十七八度的相位裕度和理论计算吻合。如果你要求更高可以使用两步采样或把控制频率提升到20kHz把单拍延迟的时间占比再缩小。5.2 αβ内环的稳态误差与谐振器实现在αβ坐标系下如果用普通PI做电流内环你会观测到一个很典型的现象稳态时电流波形虽然形状对但幅值始终差一点点相位也有偏移。这就是普通PI无法对正弦参考提供无穷增益的直接表现。换成准PR后这个偏差消失。如果在调试中发现自己换用了PR但稳态误差不消除最可能的原因是离散化方式有问题——直接手写差分方程时谐振极点落在单位圆附近的数值精度不够建议用MATLAB的c2d函数生成高精度系数后填进离散传递函数模块。另一个容易踩的坑是准PR的谐振带宽设得太窄。有同学把ωc设成2π×1相当于正负1Hz带宽仿真用理想电网波形看起来没问题一旦电网频率微变20秒后能看到明显的功率漂移。弱电网环境下建议ωc不低于2π×5这是我在这个项目里验证过的下限。5.3 过调制与直流母线电压裕量有功功率阶跃到10kW时我曾经把直流母线电压从700V调到600V做对比结果三相电流在峰值附近出现明显削顶畸变P/Q波形出现高频毛刺。原因就是我前面算过的调制裕量问题300V的相电压峰值逼近SPWM在600V母线下的线性调制上限。这个现象在阶跃响应测试里很有迷惑性电流毛刺看起来像控制器振荡实际是过调制引起的非线性。处理办法是先把直流母线电压恢复到700V或者检查归一化环节是否除以了VDC/2。现场如果母线电压确实偏低就需要改用SVPWM它能将线性调制范围扩展到VDC/√3比SPWM提高了约15个百分点。我在这个仿真里用SPWM足够但如果你做的是三相无中线系统且母线电压紧张SVPWM不是可选项而是必选项。5.4 信号类型转换与数据记录陷阱Simscape Electrical和纯Simulink模块混用时常出现信号类型上的怪问题。Universal Bridge的Gate输入我建议做成boolean类型在Relational Operator里直接设置输出数据类型。后续如果需要把这个信号转回double做监控用Data Type Conversion模块显式转换。这样做的好处有两点第一避免模型编译时隐式转换导致的不透明行为第二在Simulink中将信号线颜色与数据类型对应调试时一眼就能看出链路哪里出了意外。记录波形的To Workspace模块注意选择“Array”格式便于后续用MATLAB脚本统一计算动态指标。我这里写了个简单的后处理脚本从数组中读出P波形并自动计算超调量和调节时间idx t 0.05; % 阶跃之后的数据 Pss P(end); % 稳态值 Pmax max(P(idx)); overshoot (Pmax - Pss) / (Pss - P(1)) * 100; ts_idx find(abs(P(idx) - Pss) 0.05 * abs(Pss), 1, first); ts t(idx) - 0.05; ts ts(ts_idx);这个脚本每次调完参数跑一遍动态性能的量化评估就自动化了不用每次拿游标去Scope里量读数。6. 个人经验与后续扩展建议这套带电流控制的两级VSC实时无功-有功控制器做完我最大的体会是动态性能从来不是单靠某个控制器参数调出来的而是整个控制链路里所有环节匹配出来的。锁相环带宽、电流环带宽、功率环带宽、采样延迟、调制方式任何一个环节成为短板整体响应都会被它拖住。αβ坐标加准PR的思路之所以能做出好结果不是因为它比dq-PI“高级”而是因为它在链路里拿掉了锁相环这个对动态性能最不利的瓶颈。如果你想把这套方案继续深入有几个方向值得试试。第一是在滤波电感基础上改成LCL滤波器并加入有源阻尼这时候电流环的谐振峰处理会成为新的动态性能瓶颈第二是加入正负序分离策略让控制器在电网电压不平衡时仍然能对称输出电流动态性能指标要扩展到负序分量上第三是把这个模型的控制算法导出成C代码配合实时仿真器做硬件在环测试观察模型到实物的差距。特别是第三点仿真里不建模的一拍延迟、PWM死区和采样噪声在实时环境里全都会现形。最后分享一个我在实物调试时验证过的经验先让模型在电流环阶跃下做到无超调、带宽达标再打开功率环。功率外环带宽宁可先保守确认了没有振荡再一步一步往上推。动态性能是“挤”出来的不是“调”出来的——每加一个环节都要重新评估整体相位裕度和稳定边界。这个过程很枯燥但也是最不容易翻车的路径。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进