DSOGI-PLL原理与建模:解决谐波畸变下APF电网同步的技术详解
发布时间:2026/9/4 4:02:26来源:尧图网络
我们有源电力滤波器专题先从同步环节讲起。谐波补偿做得好不好很大程度上取决于能不能在电网畸变、不平衡、频率波动的情况下拿到一个干净、稳定、可用的电网电压相位参考。三相不平衡和低次谐波会直接污染传统锁相环的输出导致后面电流环参考坐标全部偏移。DSOGI-PLL 就是在这种背景下被广泛使用的一种电网同步方案它用两个二阶广义积分器对静止坐标系下的电压做正交分解再提取基波正序分量最后交给同步旋转坐标系锁相环完成相位锁定。这篇文章把 DSOGI-PLL 的原理和建模过程拆开讲从 SOGI 单结构的传递函数到双 SOGI 的正负序分离再到整个 PLL 闭环搭建覆盖完整的数学基础和系统设计路径。这篇文章的重点是“搞懂为什么 DSOGI-PLL 能在有源电力滤波器里抗畸变、抗不平衡”而不是简单抄一段 Simulink 仿真图。所以内容会偏原理建模但每一个关键推导都会落到可以操作的控制结构上。适合正在做 APF 谐波抑制、SVG 无功补偿、微电网并网控制或者电力电子锁相环设计的工程师和学生。如果后续要继续做仿真波形验证、DSP 代码移植和实验台架调测上半部分把原理搞清楚会轻松很多。1. DSOGI-PLL 核心能力速览项目说明技术方向三相电网同步、基波正序提取、谐波畸变下锁相全称Dual Second Order Generalized Integrator - Phase Locked Loop典型应用场景有源电力滤波器、无功补偿装置、并网逆变器、微电网控制主要功能生成 αβ 轴正交电压、分离正序与负序分量、输出电网相位和频率对 APF 的作用为谐波检测和电流控制提供准确的同步旋转坐标系典型控制频段基频 50 Hz / 60 Hz具体跟所在电网制式有关建模工具MATLAB/Simulink、PLECS、PSIM 等通用仿真平台均可实现实现方式连续域传递函数建模或离散化后在 DSP / FPGA 中编程实现是否需要 GPU 或专用 AI 硬件不需要算法本身计算量不大重点在采样周期和实时性从硬件角度看DSOGI-PLL 不依赖大型计算资源。它需要的是一个固定的控制周期采样通常与控制电流环的 PWM 频率保持一致。真正影响性能的反而是采样频率、离散化方式、SOGI 中心频率跟踪速度以及 PI 调节器的带宽设计。后面文章会逐项说明。2. 为什么有源电力滤波器需要一个高性能同步环节先看有源电力滤波器的工作方式。APF 检测负载侧电流提取出需要补偿的谐波分量和无功分量然后通过变流器输出一个方向相反、幅值相等的补偿电流把电网侧电流“校正”成接近正弦。常用的检测方法基于瞬时无功功率理论或者基于同步旋转坐标系下的 d-q 变换。这两种方法都有一个共同前提必须知道电网电压或电流的实时相位。如果电网电压是标准三相对称正弦波传统 SRF-PLL 足够用。它的思路是把三相电压通过 Clarke 变换转到 αβ 静止坐标系再通过 Park 变换转到与电网电压矢量同步旋转的 d-q 坐标系。控制目标是把 q 轴电压分量调节到零这样锁相环输出的角度就能跟踪电网电压矢量方向。问题出在电网并不是理想源。当负载是非线性负载时公共连接点电压会产生畸变当电网发生单相接地、两相不平衡或者负荷不对称时三相电压幅值不再相等相位也不再严格相差 120°。这时如果还用标准 SRF-PLL谐波和不平衡分量会直接叠加到 d-q 轴电压上PI 调节器无法同时抑制多个频率的扰动锁相角度就会发生周期性波动。角度波动对 APF 的影响非常直接。谐波检测环节会把三相电流变到 d-q 坐标系如果 θ 本身带误差d-q 轴之间会出现耦合项基波分量不能完全被滤除谐波提取结果里会残留基波成分。补偿电流生成环节同样依赖 θθ 的波动会等效为调制信号的相位扰动最终导致补偿效果变差。更严重的是电网电压负序分量在 d-q 坐标系里是 100 Hz 的交流量如果不做处理它会让锁相环输出产生二倍工频的振荡。许多实验里出现的直流侧电压波动、补偿后并网电流仍有低频纹波根因并不在电流环而在同步相位已经不稳。DSOGI-PLL 要做的事情就是在电压发生不平衡和谐波畸变时先把电压里的基波正序分量提取出来再对这个干净的正序分量做锁相。这样进入 PLL 的信号不是原始电压而是经过 SOGI 滤波和对称分量分解后的正序基波电压。PLL 只需要跟踪一个近似三相对称、基本无谐波的正序电压矢量控制难度大幅下降。3. SOGI 单结构建模一个滤波器加一个正交信号生成器DSOGI-PLL 的最小单元是 SOGI即二阶广义积分器。它本质上是一个工作在特定频率附近的谐振器输入一个交流信号输出两个信号一个与原信号同相另一个滞后 90°。这个“正交信号生成”特性是解决单相系统和无中线三相系统中相位提取问题的关键。对于给定的中心频率 ω0SOGI 的典型结构可以用两个传递函数描述。同相输出D(s) v / v (k * ω0 * s) / (s² k * ω0 * s ω0²)正交输出Q(s) qv / v (k * ω0²) / (s² k * ω0 * s ω0²)其中v 是输入信号v 是与 v 同相的输出分量qv 是滞后 90° 的正交分量k 是阻尼系数决定滤波器带宽和动态响应速度ω0 是中心角频率。如果输入信号频率正好等于 ω0可以算出 D(s) 的增益接近 1相位接近 0Q(s) 在 ω0 处的相位滞后 90°且仍能保持一定幅值。频率偏离 ω0 越远D(s) 和 Q(s) 的输出幅值越小。SOGI 因此也具备带通滤波能力。它的优点是不需要设计高阶 FIR 或 IIR 滤波器只用了两个积分环节就能在基频附近形成选频特性特别适合在数字控制器里逐周期迭代计算。从 Simulink 建模的角度看SOGI 可以拆成三个基本运算块比例放大器、误差求和、两个积分器。典型实现方式是把式中的微分方程转写成积分形式在仿真中直接用 Integrator 模块搭出来。输入信号与同相输出做差得到误差信号误差乘上 k 后加到一个积分通道和中心频率负反馈通道构造出谐振结构。阻尼系数 k 的选择有明显工程含义。k 越大SOGI 的带宽越宽动态响应越快但滤波效果越差。k 越小带宽越窄对谐波的抑制能力越强但输入频率发生偏移时SOGI 的输出幅值和相位误差会变大。很多文献给出的折中范围在 k 1.2 ~ 1.8 之间。实际设计时不能单独盯着 SOGI 想问题还要考虑整个锁相环的带宽。如果 PLL 环路本身很慢SOGI 响应太快也没有意义如果 SOGI 选频太窄在电网频率波动明显的场合就容易出现相位误差。4. DSOGI 结构双通道正交分解与正负序分离三相系统做同步控制时第一步通常是把 abc 三相量变换到 αβ 静止坐标系。假设三相电网电压为 Va、Vb、Vc采用等幅值 Clarke 变换vα (2/3) * (Va - (1/2) * Vb - (1/2) * Vc) vβ (2/3) * ((√3/2) * Vb - (√3/2) * Vc)在没有零序分量的三相三线系统中αβ 轴上的电压仍然同时包含正序分量和负序分量。DSOGI 的做法是先对 vα 做一次 SOGI 滤波得到同相分量 vα 和正交分量 qvα再对 vβ 做一次 SOGI 滤波得到 vβ 和 qvβ。然后通过矩阵运算把正序和负序分量分离开。在标准推导中正序分量可以表示为vα 0.5 * (vα - qvβ) vβ 0.5 * (qvα vβ)负序分量可以表示为vα- 0.5 * (vα qvβ) vβ- 0.5 * (-qvα vβ)这里的 q 表示对信号施加 90° 滞后运算。在 SOGI 中实际输出的正交分量 qvα 和 qvβ 正好承担了这个功能。这组公式的意义在于它把原本混叠在 αβ 坐标系中的正序和负序信息解耦了。平衡正序电压经过 Clarke 变换后vβ 和 vα 之间存在固定相位关系不平衡电压加入负序后叠加在 vα、vβ 上的负序分量方向与正序相反。通过上述矩阵组合两个通道的输出一相加负序干扰被抵消正序被保留另一种组合方式则反过来保留负序抵消正序。对 APF 而言负序分量并不总是需要滤除。某些补偿目标要求同时补偿负序电流这时 DSOGI-PLL 提取负序分量的能力反而成了优势。比如不平衡负载补偿时可以用同样的结构把负序电流的幅值和相位算出来作为补偿指令的一部分。再把上述输出经过 Park 变换转到 d-q 旋转坐标系vd vα * cos(θ) vβ * sin(θ) vq -vα * sin(θ) vβ * cos(θ)理想情况下正序电压的 d 轴分量接近常数q 轴分量为零。实际中由于电网频率偏移、滤波器相位误差、采样延迟等因素q 轴不会严格为零这就是后面 PLL 闭环要处理的误差。从模块化角度看DSOGI 并不是特别复杂的结构。两个 SOGI 通道之间除了中心频率共享相互没有强耦合。这样带来的好处是在数字信号处理器里可以把两个通道写成一个通用子函数用同一套系数计算两次节省程序空间。坏处是如果两个通道的滤波参数不一致就会在正负序分离结果中引入额外的不对称所以实际工程中要保证两个 SOGI 使用完全相同的离散化系数。5. PLL 闭环建模从正交分量到相位输出DSOGI 的输出并不能直接当作相位信号。它得到的是 αβ 静止坐标系下的基波正序电压分量。要得到控制需要的电网相位 θ还要再经过一个同步旋转坐标系锁相环。整个 DSOGI-PLL 闭环可以划分为两个层级。第一层是 SOGI 谐振频率的调整。SOGI 的中心角频率 ω0 如果固定为 314.159 rad/s当电网频率偏离 50 Hz 时SOGI 输出就会出现幅值和相位误差。因此实际设计中通常把 PLL 估计出的角频率反馈到 SOGI 中心频率端口让 SOGI 始终跟随真实电网频率。这个功能可以单独做成一个锁频环 FLL也可以直接把 PLL 输出频率反馈回去。第二层是相位锁定。将正序电压 vα、vβ 经过 Park 变换后得到 vq。利用 vq 作为误差信号经过 PI 调节器修正角频率再对修正后的角频率积分得到相位 θω_est ω_ff Kp * vq Ki * ∫vq dt θ ∫ω_est dt其中 ω_ff 是前馈频率通常取电网额定角频率Kp 和 Ki 是 PI 调节器参数。把这三个部分画成信号流就是三相电压进入 Clarke 变换得到 vα、vβ两个 SOGI 分别滤波得到各自正交量DSOGI 矩阵运算得到正序分量Park 变换将正序电压转到 d-q 轴vq 送入 PIPI 输出校正频率频率积分得到 θθ 既作为 Park 变换的旋转角度也作为 APF 后级控制的同步角度。从控制理论角度看PLL 是一个非线性闭环系统因为 Park 变换里包含 sin 和 cos 项。但在锁相点附近sin 项可以近似为线性小信号因此可以把整个环路近似成二阶线性系统来设计 PI 参数。设计目标是让 vq 动态过程快速收敛同时要抑制谐波和负序残余造成的脉动。PI 带宽越高动态响应越快但对高次扰动的抑制能力越差带宽越低抗干扰能力越强但动态响应变慢。实际建模中需要特别注意的是不能只单独调 PI 参数。SOGI 的滤波效果、中心频率反馈路径、Park 变换里的计算延迟共同影响整个环路稳定性。如果离散化步长较大或者算法执行时有明显延迟需要引入延迟补偿否则在高带宽设计下容易震荡。6. 仿真建模与效果验证思路本文上半部分虽然以原理推导为主但原理必须落到仿真结构上才能验证。如果是在 MATLAB Simulink 中搭建 DSOGI-PLL建议按照下面几个步骤组织模型。第一步建立三相电源和负载。电源可以先用理想三相电压源并在电压源内部加入 5 次、7 次谐波和三相不平衡幅值设置用于模拟 APF 应用中的恶劣电网条件。负载部分则可以用三相不控整流桥加感性负载这样会产生典型的 6k±1 次谐波电流。第二步搭建 Clarke 变换和 Park 变换。使用 Simulink 标准库中的数学运算模块或者自己写 S-Function。如果使用 MATLAB 2019 之后的版本可以配合 Simscape Electrical 里的三相锁相环模块先做参照但自建模型能更清楚地看到内部变量。第三步搭建两个 SOGI 模块。可以把 SOGI 封装成子系统然后复制两次一个输入 vα一个输入 vβ。为了后续测试方便把 SOGI 中心频率端口引出方便接频率反馈。第四步加入正负序分离矩阵模块计算 vα、vβ。第五步将 vα、vβ 接到 Park 变换模块取出 vq再经 PI 调节器和积分环节输出 θ。为了便于批量测试不同的电网畸变条件可以将电源谐波参数和三相不平衡参数设置成 MATLAB 工作区变量然后用脚本循环仿真。一个最基础的批处理脚本模板如下% DSOGI-PLL 仿真批处理示例 % 将谐波含量、不平衡度放入工作区循环运行 Simulink 模型 modelName dsogi_pll_demo; harmonicCases [0.05, 0.1, 0.15]; % 5次谐波幅值占比 unbalanceCases [0.0, 0.1, 0.2]; % 不平衡程度 for m 1:length(harmonicCases) for n 1:length(unbalanceCases) h5 harmonicCases(m); ub unbalanceCases(n); simOut sim(modelName, StopTime, 0.5); vqData simOut.vq.Data; thetaData simOut.theta.Data; fprintf(h5%.2f ub%.2f vq波动%.2f V\n, ... h5, ub, max(abs(vqData)) - min(abs(vqData))); end end这样一个脚本能快速评估不同畸变程度下锁相环的稳态误差。如果不想用 Simulink想直接用代码验证原理可以用下面这个离散化版本的结构作为参考。它演示的是每个采样周期内 SOGI 子系统的更新方式并不是完整生产代码但可以帮助理解数字实现流程。function [v_alpha_1, qv_alpha_1, v_beta_1, qv_beta_1] dsogi_update(...) % 示意代码实际使用时需要按离散化方法和采样时间调整参数 % 输入为上一个周期的状态量和当前采样点 vAlpha, vBeta % 输出为 SOGI 滤波后的同相分量与正交分量 vAlpha 1; % 示例值替换为真实采样值 vBeta 0; % 示例值替换为真实采样值 Ts 1 / 10000; % 采样周期按实际控制频率设置 w0 2 * pi * 50; % 中心频率 % 这里需要写入你实际的 SOGI 离散方程组 % 不同离散化方式对应不同系数避免直接复用未验证的整型差分式 v_alpha_1 0; qv_alpha_1 0; v_beta_1 0; qv_beta_1 0; end这里刻意没有填充具体的离散差分系数。原因是 SOGI 的离散化跟采样频率、积分器实现方式、是否使用 Tustin 变换都有关。不同文献给出的系数格式并不统一如果直接抄某一个固定系数很容易在换系统后失效。真正规范的做法是先确定采样周期和离散化方法再得到差分方程然后写函数或生成嵌入式代码。7. 实时控制器实现采样频率、计算量与离散化DSOGI-PLL 最终要落到实际控制器里。常见实现平台是数字信号处理器或者 FPGA。与 Simulink 离线仿真不同实时控制里每个采样周期只能执行一次整套算法因此需要认真评估计算量和离散化误差。从计算量角度看每个采样周期需要完成一次 Clarke 变换约 3 到 4 次乘法两次 SOGI 离散差分约 8 到 12 次乘法正负序矩阵运算约 8 次乘法一次 Park 变换约 4 到 6 次乘法PI 调节和频率积分约 4 到 6 次乘法。整个算法加起来大约几十次乘加运算对现代 DSP 来说负载很低。但与算法本身相比真正影响结果的是采样点与 PWM 中断的时序关系。如果采样点靠近开关切换瞬间电压和电流信号里会混入大量开关毛刺SOGI 的滤波效果再好也无法完全消除采样误差造成的高频扰动。离散化方式也需要特别关注。同一套连续域传递函数用 Euler 法、Tustin 法和零极点匹配法离散化后在偏离中心频率处的频率响应会有差异。尤其当采样频率只比基频高几十倍时差异会更明显。高频采样条件下差异可以忽略当控制频率只有几 kHz 时就不能再拿连续域公式计算 SOGI 增益必须使用离散域设计。最好的做法是在仿真里把控制器部分也用离散模块搭建固定采样周期。这样可以暴露离散化带来的相位滞后提前评估这种滞后对 PLL 带宽的影响。DSOGI 中心频率反馈路径同样需要注意时序问题。如果 PLL 输出频率更新速度远低于 SOGI 执行速度会出现频率跟踪滞后。频率跟踪滞后在稳态下不影响最终相位但在电网频率突变时会增加动态调节时间。工程上通常让 PLL 环路带宽略低于 SOGI 中心频率跟踪环路的带宽避免两个环路互相激励。8. 常见问题与排查方法问题现象可能原因排查方式解决方案锁相角度存在二倍频波动电网电压负序分量未完全滤除查看 DSOGI 输出的 vα、vβ 波形中是否存在负序残留检查 SOGI 两路参数是否一致确认正负序分离矩阵接线正确电网频率偏移时相位误差明显SOGI 中心频率固定未跟随频率变化查看 SOGI 中心频率输入端是否接入 PLL 估计频率将 PLL 输出频率反馈到 SOGI 中心频率或改用 FLLSOGI 响应太慢动态过程拖长k 值取得过小对比不同 k 值下输出阶跃响应在滤波效果和动态速度之间重新调节 kPLL 环路震荡锁不住相位PI 参数带宽过高或算法延迟未补偿用小信号模型分析开环增益和相位裕量降低 PLL 带宽增加延迟补偿或减小仿真/控制周期仿真结果与离散化代码结果不一致仿真使用连续模块代码使用离散差分对比同一输入信号下两者的 SOGI 输出曲线将仿真模型改为离散模块使用与 DSP 一致的采样周期不平衡工况下正序结果仍含负序Clarke 变换或矩阵运算中符号错误单独输入已知正序和负序电压检查矩阵输出用平衡正序信号验证矩阵确认公式展开正确9. 参数设计与工程化建议DSOGI-PLL 的参数不是一个孤立的“调 PI”问题而是需要把 SOGI 系数、PLL 带宽、采样频率和负载特性放在一起考虑。先从 SOGI 阻尼系数 k 入手。建议先用 k 1.5 附近的值做初版仿真观察输出信号在电压跌落或者谐波突变后的恢复时间。如果输出振荡小但跟踪慢可以适当增大 k如果跟踪快但波形振荡明显则减小 k。然后是 PLL 的 PI 参数。可以先把 PLL 环路近似成线性系统根据期望的闭环带宽和阻尼比计算初始 PI。比如工程设计里常把 PLL 闭环带宽设定在 10 Hz 到 30 Hz 之间。带宽太低电网频率突变时角度恢复慢带宽太高谐波和不平衡扰动容易穿过 SOGI 滤波层进入角度输出。三是对着实际负载电流波形调节。APF 应用里 DSOGI-PLL 的输出不只是给锁相内部使用还要给谐波检测和电流环使用。建议在电流环闭环前先用 PLL 输出角度观察 d-q 轴电流波形。如果 d-q 轴电流里存在明显 100 Hz 波动即使锁相角度波形看起来很好也要怀疑是不是 PLL 与电流环之间存在采样延迟或离散化滞后。工程实现上建议分类保存参数。SOGI 参数、PLL 参数、采样控制周期、滤波系数分开写到配置头文件或 MATLAB 初始化脚本中。调参时只修改单一变量不要随手改公式内部常数。这样做的好处是当仿真波形异常时能快速还原出到底是参数漂了还是模型连接出错了。以下是一份最小可运行配置的初始脚本示例里面所有参数都可以放到模型初始化里集中管理。这个文件的结构比具体数值更重要实际数值需要结合你的采样频率和控制目标重新计算。% DSOGI-PLL 参数初始化脚本 % 按实际系统修改以下参数 fs 10000; % 采样/控制频率 Hz f0 50; % 额定基频 Hz w0 2 * pi * f0; % 中心角频率 rad/s k_sogi 1.5; % SOGI 阻尼系数先取 1.2~1.8 之间尝试 % PLL 初始 PI 参数带宽和阻尼比按小信号模型计算 Kp_pll 80; % 比例增益 Ki_pll 1500; % 积分增益 % 数据处理长度 N 1000; evalin(base, sprintf(fs %d;, fs)); evalin(base, sprintf(f0 %d;, f0)); evalin(base, sprintf(w0 %.6f;, w0)); evalin(base, sprintf(k_sogi %.3f;, k_sogi)); evalin(base, sprintf(Kp_pll %.3f;, Kp_pll)); evalin(base, sprintf(Ki_pll %.3f;, Ki_pll));代码里使用 evalin 写入基础工作区主要是为了方便 Simulink 模型里的变量直接可见。如果使用 Simulink 的 Data Dictionary也可以把参数放到.sldd文件中后续做批量仿真时用代码统一修改。10. 总结与下一步DSOGI-PLL 的价值在于它把“畸变电压下的正序基波提取”和“频率相位锁定”整合成了一个控制流程SOGI 负责选频和正交生成DSOGI 负责正负序分离PLL 负责最终锁相。三部分层层递进每一层都有明确的数学模型。对有源电力滤波器来说这套结构显著改善了不平衡和谐波工况下的同步质量也直接补偿了后面电流环和电压环的工作可靠性。这篇文章作为专题上半部分已经把原理和建模链条完整覆盖SOGI 的传递函数、q 运算的含义、双通道矩阵分离公式、PLL 闭环结构以及从 Simulink 到 DSP 实现的关键差异。下一步最值得做的事是先搭一个包含 5 次、7 次谐波和三相不平衡电源的仿真模型用平衡正序输入验证 SOGI 和 DSOGI 矩阵输出再加上 PLL 闭环观察不同畸变程度下 vq 波形和 θ 波形。最容易踩的坑也在前面提醒过了一是公式里的符号方向二是连续域与离散域的差异三是 SOGI 频率没有真正做到自适应。如果能先把这三个问题在仿真里验证清楚后面做硬件在环或者 DSP 实验时会少走很多弯路。建议先收藏这篇再按第三节到第六节把模型逐层搭起来。
网站建设高端定制企业官网