ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

DSOGI-PLL锁相环:原理、离散化与并网变流器调试实战

DSOGI-PLL锁相环:原理、离散化与并网变流器调试实战 并网变流器的数字控制链路里锁相环PLL从来不是最花哨的模块却是最容易让整个系统翻车的地方。我做光伏并网逆变器控制这几年感触最深的是电网电压不会老老实实按教科书的三相对称50Hz正弦波来单相跌落、谐波污染、频率漂移都是家常便饭。传统的SRF-PLL同步旋转坐标系锁相环在理想电网下很稳可电网一不平衡它的输出角频率就带2倍频抖动相位也跟着漂严重时并网电流直接畸变甚至触发过流保护。后来我把方案换成DSOGI-PLL双二阶广义积分器锁相环核心思路是把三相电压先从abc转到αβ静止坐标系再用两个SOGI把正序和负序分量拆开只拿干净的正序分量去锁定50Hz基波的相位和频率。这篇文章是完整的复现和改进记录从原理、参数整定、离散化实现到调试中踩过的坑都会讲到给正在调电网同步算法的工程师和研究生做个参考。1. 为什么SRF-PLL扛不住DSOGI-PLL凭什么能扛1.1 传统SRF-PLL的原理和软肋SRF-PLL的原理其实一句话能说清把三相电压做Clarke变换得到αβ分量再做Park变换得到dq轴分量然后通过PI调节器控制q轴电压为0。当锁相环锁住之后d轴电压对应输入电压幅值q轴电压为0PI输出就是电网角频率对这个角频率积分得到相位角。问题是这个逻辑隐含了一个前提输入的三相电压是理想的正序平衡量。一旦电网电压不平衡负序分量会出现。负序分量在同步旋转坐标系里看起来是一个2倍频的交流信号所以q轴电压不再是一个干净趋近于0的直流误差而是一个叠着100Hz纹波的信号。这个100Hz纹波经过PI调节器作用最终反映到输出角频率和相位上就是明显的2倍频振荡。非线性负载带来的谐波就更麻烦了。5次谐波在dq坐标系里变成6倍频300Hz纹波7次谐波也是6倍频这些纹波统统混进q轴误差。SRF-PLL本质上是一个低通带宽很窄的跟踪环路面对这些交流扰动只能衰减没法彻底消除。我见过一些调得比较激进的PLL在电网不平衡度超过5%的时候输出频率能抖到±1Hz以上这种情况下并网电流的谐波根本压不住。1.2 DSOGI-PLL的整体思路和结构DSOGI-PLL的思路就是“别让脏东西进锁相环”。既然SRF-PLL最怕输入端混入负序和谐波那就先在外面把正序分量单独提出来再用一个干净的SRF-PLL去锁相。整个链路的信号流是这样的三相电压abc经过Clarke变换得到vα和vβ然后把vα送入一个SOGI二阶广义积分器vβ送入另一个SOGI。每个SOGI输出两路信号一路是与输入同相位的带通输出另一路是与输入正交滞后90°的低通输出。这样我们就有了四路信号vα、qvα、vβ、qvβ。利用这四路信号通过瞬时对称分量法就能实时算出正序分量vα和vβ负序分量也同时得到。最后把正序分量做Park变换交给标准SRF-PLL锁相同时把PLL输出的角频率反馈回两个SOGI作为它们的谐振角频率实现频率自适应。这套结构与SRF-PLL相比多出来的两个SOGI和正负序分离计算就是关键所在。负序分量在进入PLL之前已经被剥离了谐波也被SOGI的带通特性滤掉大半。PLL的输入端是一个相对干净的50Hz正序正弦波自然不会再出现2倍频抖动。有朋友可能会问为什么不用更简单的陷波器或者带通滤波器陷波器能滤特定频率但电网谐波频率成分不定而且陷波器相位特性在基频附近变化剧烈容易把锁相环的稳定裕度吃掉。SOGI的优势在于它围绕基波频率做带通既能滤谐波又能在谐振频率处保持明确的幅相特性还方便用锁相环的输出做频率自适应三者兼顾。2. SOGI的核心原理与参数选择2.1 SOGI两个输出端子的物理意义SOGI的传递函数是很多人刚开始接触时最容易懵的地方。一个输入两个输出各自数学表达式是同相输出带通特性 D(s) (k ω s) / (s² k ω s ω²)正交输出低通特性 Q(s) (k ω²) / (s² k ω s ω²)其中ω是SOGI的谐振角频率k是阻尼因子。在谐振频率ω处D(s)的幅值增益为1相移为0Q(s)的幅值增益也是1相移为-90°。也就是说当输入信号正好是50Hz时同相输出就是输入的“干净版”正交输出是滞后90°的版本。这个“滞后90°”不是简单的一阶移相而是经过二阶谐振结构得到的所以在谐振点附近的频率选择性很好。用一个生活化的类比SOGI相当于一个只对50Hz成分“敞门”的窄带门卫。门卫放行的信号保持原样通过同时旁边有一个兄弟把同一个信号延迟了四分之一个周期送出来。偏离50Hz的成分比如100Hz负序、250Hz五次谐波都会被门卫大幅衰减根本进不了主通道。2.2 k值怎么取k值代表SOGI的带宽收敛程度。从传递函数可以推出来SOGI的半带宽大约等于kω/2品质因数Q1/k。k越大通带越宽动态响应越快但是对谐波的抑制能力越差k越小滤波越干净但信号建立的过渡过程变长。工程上k取√2是比较经典的选择也就是1.414左右。我在仿真里先用1.414做初版测下来相位误差和谐波抑制都满足要求。如果想加快动态响应可以适当往上调到1.5到1.8代价是谐波抑制能力略微下降如果输入电压谐波含量特别高想把谐波压得更狠就往回调到1.2附近。这里有个容易踩的误区k调大确实能加快SOGI的响应但锁相环的整体动态性能并不完全由SOGI决定后面SRF-PLL的PI参数同样重要。两个环节是串联的一个慢了整体就慢不能只盯着SOGI调。2.3 频率自适应不把ω写死很多初版实现会把SOGI的谐振角频率固定成2π×50314.16 rad/s。这在电网频率稳定时没问题但电网频率一旦从50Hz漂到50.5HzSOGI的谐振点就偏了。偏了之后基波分量不再正好落在谐振频率上带通输出的幅值不再是1相移也不再是0从SOGI出来的信号本身就有幅值和相位误差后面正负序分离和锁相环全跟着错。解决办法是把PLL输出的角频率估计值反馈回SOGI作为谐振角频率ω。这样电网频率一变SOGI的谐振点自动跟着变始终保持对基波的最佳选择性。在实际实现上频率反馈通道需要加一个一阶低通滤波时间常数取5ms左右避免PLL输出频率中残留的纹波直接耦合进SOGI。如果不加这个低通频率反馈信号里带100Hz纹波SOGI的谐振频率就会以100Hz的频率抖动反而把扰动引入原本干净的信号通道。这个坑我在第一次做自适应频率反馈时踩过后面会专门讲。3. 正负序分离的数学过程和实用公式3.1 为什么延时1/4周期就能分开正负序三相电压经过Clarke变换到αβ坐标系后零序分量在无中线系统里自然消失剩下的就是正序分量和负序分量。正序和负序都是基波频率但旋转方向相反正序从α轴向β轴正方向旋转负序则反向旋转。对称分量法的传统做法需要对三相电压取一段时间的采样窗口做傅里叶分解这显然不适合实时控制。DSOGI-PLL用的是“瞬时对称分量法”核心工具就是90°相移算子q。q算子对αβ电压做滞后90°的相移这个相移正好能把正序和负序区分开。可以这么理解如果把vα、vβ看成两个旋转矢量的叠加正序旋转向量在q算子作用下会转成与自己正交且方向匹配的向量负序旋转向量则恰好相反。通过简单的加减组合就能挑出我们想要的那一个旋转向量。3.2 实用公式和Simulink实现正负序分离的具体公式如下vα 0.5 × (vα - qvβ) vβ 0.5 × (vβ qvα) vα- 0.5 × (vα qvβ) vβ- 0.5 × (vβ - qvα)注意这里的qvα和qvβ指的是SOGI的正交输出即qvα和qvβ。在Simulink里可以用Fcn模块或MATLAB Function模块直接写这组公式输入接两个SOGI的四路输出输出选vα和vβ送给后面的Park变换。负序分量vα-和vβ-在锁相环里用不到但可以引出来做其他用途比如实时监测不平衡度。3.3 正序到dq接下来就是标准SRF-PLL拿到vα和vβ之后后续处理与标准SRF-PLL完全一样。对正序分量做Park变换得到Vd和VqVq是相位误差信号送入PI调节器PI输出是角频率估计值再对角频率积分得到相位θ。整条链路下来PLL看到的输入几乎是理想的正序基波正弦量已经不存在负序分量了。所以Vq在稳态下是一个很干净的直流信号不像传统SRF-PLL那样叠着100Hz纹波。这也是DSOGI-PLL在不平衡电网下依然能精确锁定50Hz基波频率的根本原因。一个重要的实现细节是PI积分器的初始值要设置成2π×50314.16 rad/s也就是电网额定角频率。不然PLL启动时需要从0开始把积分器充到50Hz一段过渡时间会看到输出频率从0快速爬升容易触发限幅。4. 工程实现从仿真到DSP代码4.1 仿真搭建和测试环境我用的Matlab 2022b的Simulink环境整个测试模型可以拆成几个模块三相电压源模块用可控电压源或自定义函数方便注入不平衡和谐波Clarke变换模块abc到αβ系数是2/3等幅变换DSOGI子系统两个SOGI的离散实现最好封装成子系统方便复用正负序计算子系统按3.2的公式实现SRF-PLL子系统Park变换、PI调节器、积分器测量模块Scope记录相位、频率、dq轴电压对于电压源我建议用可控的数学表达式直接生成而不是用示波器实测量。这样测试工况可以精确控制比如A相跌落20%、叠加10%五次谐波、频率从50Hz跳到50.5Hz等等方便和仿真空想对比。采样时间我取Ts100μs也就是10kHz的采样率。对于50Hz基波10kHz采样率足够宽裕SOGI在数字域用双线性变换离散化后性能也足够好。如果上到20kHz采样也完全没有问题只是计算量稍大。4.2 SOGI离散化和差分方程SOGI在连续域很好理解但要落进DSP或者FPGA必须离散化。我用的是Tustin双线性变换离散化后的数字滤波器是二阶IIR结构。令C2/Ts则带通SOGI的离散传递函数为D(z) (kωC × (1 - z⁻²)) / ((C² kωC ω²) 2(ω² - C²)z⁻¹ (C² - kωC ω²)z⁻²)低通SOGI的离散传递函数为Q(z) (kω² × (1 2z⁻¹ z⁻²)) / ((C² kωC ω²) 2(ω² - C²)z⁻¹ (C² - kωC ω²)z⁻²)把这组系数归一化到a01之后直接用二阶IIR的差分方程就能实现。写一段Python计算系数也很方便我当时的做法是先在Python里算好系数填进Simulink的Discrete Transfer Fcn模块验证通过后再移植到C代码。以Ts100μs、k1.414、ω314.16为例归一化后的系数大致是带通b00.02172b10b2-0.02172a1-1.9557a20.9566 低通b00.000341b10.000682b20.000341a1-1.9557a20.9566需要特别留神的是低通分支的b系数比带通分支小了两个数量级在定点DSP上做的时候必须小心缩放否则精度会被量化噪声吃掉。我的意见是直接用浮点实现目前主流的DSP和MCU浮点性能都够没必要在这个环节抠性能。4.3 PLL的PI参数设计PLL的PI参数设计有现成公式。在输入幅值归一化成1p.u.的前提下锁相环闭环可以近似为一个二阶系统θ_pll(s)/θ_real(s) (Kp s Ki) / (s² Kp s Ki)这样自然角频率ωn²Ki阻尼比ζKp/(2√Ki)。反过来给定自然频率和阻尼比PI参数就是Kp 2ζωn Ki ωn²我取ζ0.707自然频率fn30Hz即ωn2π×30≈188.5 rad/s。计算出Kp≈266.6Ki≈35530。这是基于输入信号幅值归一化到1p.u.的结果。如果实际输入正序幅值是V则Kp和Ki都要乘上1/V的增益补偿。实际调试时不能直接把算出来的参数往系统里灌。我的做法是先给一组小参数大概计算值的三分之一看PLL从启动到稳锁的阶跃响应再逐步加大直到相位误差和动态时间都满足要求。另外频率限幅一定要加我把输出角频率限在2π×(49~51)≈307.9~320.4 rad/s防止启动或故障瞬间频率积分失控。4.4 仿真工况设计与验收指标仿真不能只测一个理想工况就完事要把复杂电压情况拆成可控的单因子和多因子叠加场景。我设计的典型工况如下工况1三相平衡50Hz验证稳态锁定精度。测量相位误差和频率输出的稳态波动。工况2A相电压跌落20%验证不平衡下负序抑制效果。重点观察频率输出是否还有100Hz纹波。工况3在电压中注入10%的5次谐波验证SOGI带通滤谐波的能力。工况4频率从50Hz突变到50.5Hz验证频率自适应跟踪的动态性能。每个工况下我关注的指标有四个稳态相位误差、频率波动范围、动态调节时间、锁相是否失效。把这四栏数据放在一张表里对比比看波形直观得多。5. 复现过程中踩过的坑与排查办法5.1 SOGI初始瞬态导致PLL锁相跳变第一次跑仿真时PLL启动瞬间相位输出会先冲一下再回落看起来像是一个短暂的失锁。这个问题出在SOGI的初始状态上。SOGI的两个积分器初始状态默认是0输入端突然加电压输出会经历一个从0到稳态的过渡过程。在这个过渡期内正负序分离的结果也不准PLL收到的是一个幅值和相位都在变化的信号自然会跳。解决思路有几个一个是让PLL使能信号延迟0.1s再投入给SOGI留出稳定时间另一个是在SOGI内部把积分器初始状态预置为额定值。对于仿真研究前者足够对于实际工程建议把SOGI初始状态预热逻辑做进去或者让变流器在PLL稳定后再发脉冲。5.2 直流偏置把SOGI输出拉偏实际电网电压可能存在直流偏置比如故障态或者测量调理电路引入的偏置。SOGI的低通分支对直流分量的增益是k不是0也就是说直流偏置会直接进入正交输出导致SOGI输出的相位信息就不准。我在仿真里注入2%直流偏置相位误差都到了好几度完全不能接受。解决办法是在SOGI输入端前面加一个一阶高通滤波器把直流踢掉。高通时间常数取0.1到0.5s折中直流抑制能力和基波相位偏移。更讲究的做法是加一个直流偏移消除器DOC专门估计并减去直流分量。对于锁相环应用简单的一阶高通往往就够用没必要上DOC增加结构复杂度。5.3 自适应频率回馈抖动把PLL输出频率直接反馈给SOGI之后我发现频率输出反而比固定50Hz时更抖了。原因很直接PLL输出的频率估计值本身带有微小纹波这个纹波反馈回SOGI改变了谐振频率导致SOGI输出相位出现额外的动态偏差。我给的方案是频率反馈通道加一阶低通滤波器截止频率取20Hz左右。这样频率反馈是“缓慢跟随”的趋势而不是高频抖动地影响SOGI。实际效果是频率反馈的纹波明显被平滑相位输出也稳定下来了。时间常数并不是越大越好太大则频率自适应变慢电网频率突然变化时SOGI来不及跟上。5ms的低通时间常数在50Hz系统里算一个比较折中的选择。5.4 离散化带来的相位滞后连续域仿真一切正常但把SOGI改成离散传递函数后高倍频处出现了额外的相位偏差。原因是双线性变换在高频处有频率畸变而且数字系统的计算延迟会让整个信号链路的相位滞后变大。尤其异步采样或者采样率恰好是某些谐波频率的整数倍时问题更明显。解决办法是给SOGI离散化做预畸变双线性变换或者在PLL相位输出上加一个与采样延迟对应的固定补偿角。如果把整个链路的总延迟折算出来比如一拍延迟Ts对应50Hz下的相位滞后为2π×50×Ts用补偿角加进去就能消除大部分误差。这个方法我在做并网锁相时验证过补偿之后相位误差从接近1°降到0.1°以内。5.5 常见问题速查表现象可能原因排查方向解决方案启动相位跳变SOGI初始状态为0过渡过程干扰观察启动段波形延迟使能PLL或者预置SOGI状态频率输出有100Hz纹波SOGI未正确分离负序分量检查正负序分离公式确认qv极性是否正确查看vα是否含负序相位误差恒定偏大SOGI离散化产生相位滞后对比连续域和离散域波形加采样延迟补偿角或预畸变设计电网频率突变后跟踪慢频率反馈低通时间常数过大查看频率反馈通道适当减小低通时间常数加入直流偏置后相位漂移SOGI低通分支对直流增益不为零测量SOGI输出偏置输入端加高通滤波器满载谐波消除效果差k值过大导致带宽过宽看SOGI输出频谱降低k至1.2~1.4这张表是我调参过程中反复用到的自查清单。遇到问题先检查波形特征再对照表里找方向比盲目改参数高效得多。6. 改进方向与后续玩法6.1 从DSOGI-PLL到MSOGI和多谱波抑制DSOGI-PLL处理空量不平衡和少量谐波很有效但电网谐波特别重的时候一个SOGI只有两个谐振点α轴那个频点、β轴那个频点能衰减的高次谐波有限。如果要做电能质量要求很高的应用可以升级成MSOGI结构也就是把多个谐振频率不同的SOGI并联同时跟踪基波和选定的谐波频率。这样既能更好地滤谐波还能顺便把特定次谐波的幅值和相位算出来用作有源滤波器的参考指令。MSOGI的代价是计算量成倍增加而且各SOGI之间需要协调频率自适应。对于普通并网逆变器DSOGI-PLL的滤波能力通常已经足够MSOGI更多是用在APF有源电力滤波器这类对谐波检测精度要求极高的场合。6.2 从PLL变种到FLL版本DSOGI-PLL的频率自适应是通过锁相环的输出频率回馈实现的本质上还是一个带频率估计的跟踪环路。如果电网频率变化频繁且剧烈PLL回馈链路容易把噪声引入SOGI。另一种方案是DSOGI-FLL频率锁定环用FLL代替PLL做频率估计。FLL的输出是一个连续的角频率估计信号结构上比PLL少了相位积分闭环频率跟踪的平滑性更好。这两种方案我都在仿真里试过。如果目标是“锁定50Hz基波频率并且输出相位角给电流控制”DSOGI-PLL更合适因为它直接给出相位和频率如果主要目标是快速、平滑地估计电网频率DSOGI-FLL的优势更明显。工程选型时别盲目追新看自己需要的是频率量还是相位量。6.3 应用场景DSOGI-PLL最常见的落地场景是并网逆变器和PWM整流器的电网同步。光伏逆变器、储能变流器并网前必须确认电网电压的相位和频率电网恶劣时锁相环的稳定性直接决定了变流器能否不脱网。微电网和UPS系统在孤岛/并网切换时也用得上因为切换瞬间电压幅值和相位都可能突变DSOGI-PLL比SRF-PLL更容易重新稳锁。电网质量分析仪和孤岛检测算法也经常用到这种结构。前者需要从畸变电压中准确提取基波幅值、相位和频率后者需要区分电网正常和孤岛状态下的频率差异。DSOGI的负序输出还能同时给出不平衡度信息对电能质量监测设备来说是有价值的额外产出。最后说点个人体会调DSOGI-PLL这种结构最大的感觉是环节多、参数互相耦合不像SRF-PLL只调一个PI那么简单。SOGI的k值影响滤波和动态PI参数影响锁相响应频率反馈低通影响自适应平滑度三者要一起调才能达到理想状态。我建议先把SOGI参数定下来再调PI最后加入频率反馈每一步都单独验证不要一上来就整套参数全改。按这个顺序走大部分问题都能在仿真阶段排查干净。这个结构看起来比传统锁相环复杂但它在复杂电网条件下的“稳”是实打实的尤其对并网设备来说多算几次二阶滤波的代价换回的是电网故障时不脱网不跳闸的可靠性我个人觉得非常值得。
返回列表