2026/9/4 4:42:30

DSOGI-PLL原理建模与参数整定:有源电力滤波器锁相环设计

DSOGI-PLL原理建模与参数整定:有源电力滤波器锁相环设计 有源电力滤波器专题1-DSOGI-PLL原理建模分析下半接触有源电力滤波器APF控制的人最后几乎都要在锁相环上栽一次跟头。谐波补偿的逻辑本身不复杂检测出负载谐波再反向注入补偿电流。但只要电网电压的同步相位出现零点几毫秒漂移补偿电流的方向就偏了治理效果立刻打折。更麻烦的是实际台区电网很少是理想三相平衡电网负序分量会让传统 SRF-PLL 的输出角度带有 100Hz 波动这时 DSOGI-PLL 就成了绕不开的方案。在专题上半部分已经梳理了电网同步的基本需求、传统 SRF-PLL 的原理及其在不平衡电网下的不足也给出了 SOGI 和 DSOGI 的基本结构。下半部分要解决的是更“硬核”的问题SOGI 的数学模型到底怎么描述正负序分离如何从公式走到代码SRF-PLL 的 PI 参数如何通过计算得出而不是靠仿真试凑整个 DSOGI-PLL 环路在频域上如何做带宽匹配数字化实现时有哪些离散化坑以及在 APF 工程中DSOGI-PLL 的典型异常现象和排查思路又是什么。很多人以为 DSOGI-PLL 的难点在于“认结构”其实结构图闭着眼都能画出来。真正的难点在于闭环参数匹配和工况适应性。SOGI 的带宽、PLL 的带宽、频率自适应反馈的更新方式、离散化误差这些因素交织在一起决定了现场运行时系统稳不稳定、谐波补偿效果好不好。本文就把这些内容一次讲透。1. 上半部分回顾与本篇主线1.1 我们之前已经解决了什么问题上半部分讲到三相电网电压经过 Clarke 变换后在静止 αβ 坐标系下仍然存在正序、负序和零序分量。如果直接用传统 SRF-PLL 锁相负序分量会在同步旋转坐标系中表现为 2 倍工频的扰动锁相角的输出会有明显的 100Hz 纹波。这个纹波对 APF 的影响非常大因为 APF 的补偿电流参考值计算依赖锁相相位相位波动会直接转化为补偿电流中的低次谐波误差。为了解决这个问题DSOGI-PLL 的核心思路是做两步处理用两个 SOGI 分别对 α 轴和 β 轴电压做正交信号生成得到两路滞后 90° 的电压信号利用瞬时对称分量法从 αβ 轴的正交信号中分离出正序分量再进行 Park 变换和同步锁相。这样进入锁相环的电压不再包含负序分量锁相角也就不会因为三相不平衡而产生 2 倍频波动。1.2 下半部分要解决的四个问题结构清楚了不等于能落地。实际建模型和写控制代码时还会遇到下面这些问题参数怎么定SOGI 中的 k 取多少、PLL 的 PI 取多少是设计出来的不是仿真试出来的。频率自适应怎么做电网频率不是永远 50.00HzSOGI 的中心频率必须跟踪实际频率。离散化怎么实现连续域传递函数再漂亮写到 DSP/MCU 里也必须面对离散化误差。异常现象怎么排查仿真里看不到的符号错误、初始化问题、离散误差在实验台上都会暴露。本文的主线就是围绕这些工程问题展开。2. DSOGI-PLL 整体信号链路与模块职责2.1 从三相电压到锁相角的完整链路先站在系统层面看完整信号链路各模块的关系如下三相电压 ua, ub, uc ↓ Clarke 变换 静止 αβ 电压 uα, uβ ↓ 两个 SOGI频率由PLL反馈 正交信号生成 得到 uα′, quα′, uβ′, quβ′ ↓ 正负序分离 PNSC 得到正序分量 uα, uβ ↓ Park 变换 得到 dq 分量 ud, uq ↓ SRF-PLLPI 积分器 输出频率 ω 和相位 θ ↓ ω 反馈给两个SOGI作为中心频率每一个模块的任务都很单一Clarke 负责坐标变换SOGI 负责正交信号生成和滤波PNSC 负责把负序分量剥离出去Park PI 负责完成锁相。真正决定性能的是这些模块之间的参数匹配和动态耦合。2.2 “两个 SOGI”到底在干什么很多初学者会问既然已经有了 αβ 两相电压为什么不能直接做 Park 变换锁相因为三相不平衡时αβ 电压是正序和负序分量的叠加。负序分量会让 dq 轴电压产生二倍频波动。要消除这个波动就要把负序分量分离出来。而分离正负序分量需要构造“滞后 90°”的正交信号这就是 SOGI 的任务。所以这里的核心不是“滤波”而是“构造正交信号”。SOGI 一方面提供正交信号用于正负序分离另一方面本身也带有带通滤波特性能够削弱谐波干扰。这种“一物两用”的设计使得 DSOGI-PLL 比单纯在 dq 轴加低通滤波器的方案更自然。2.3 为什么中心频率必须由 PLL 提供SOGI 的正交性严格依赖于中心频率。当输入信号频率偏离 SOGI 中心频率时SOGI 输出信号的幅值和相位都会变化不再保持精确的 90° 正交关系正负序分离也就不准确了。因此必须把 SRF-PLL 输出的角频率反馈给 SOGI作为其中心频率。这就是 DSOGI-PLL 中“频率自适应”的含义。锁相环锁定电网频率后SOGI 的中心频率跟随电网频率变化才能保证在 49Hz、50Hz、51Hz 等不同工况下都保持稳定的正交特性。3. SOGI 数学模型与 k 值影响分析3.1 SOGI 的传递函数SOGI 的本质是一个二阶广义积分器。设输入为 v中心角频率为 ω阻尼系数为 k那么 SOGI 的两个输出可以表示为从输入 v 到同相输出 v 的传递函数是带通特性$$ H_{d}(s) \frac{v(s)}{v(s)} \frac{k \omega s}{s^{2} k \omega s \omega^{2}} $$从输入 v 到正交输出 qv 的传递函数是低通特性$$ H_{q}(s) \frac{qv(s)}{v(s)} \frac{k \omega^{2}}{s^{2} k \omega s \omega^{2}} $$在中心频率 ω 处Hd 的幅值增益为 1相位为 0Hq 的相位滞后 90°。这正是构造正交信号所需要的特性。3.2 为什么说 SOGI 不是单纯滤波器如果只看传函SOGI 很像一个带通滤波器。但它在锁相环中的作用不只是滤波更是“相位重构”它能够在输入电压畸变的情况下重构出基波频率下的电压信号和它的正交信号本质上是为一个通道生成两相信号供后续正负序分离使用。所以理解 SOGI 时要抓住两个层面幅频特性层面它对基波附近信号增益接近 1对高次谐波有衰减相频特性层面它保证在中心频率处输出信号与输入同相、正交信号滞后 90°。在工程分析中最常用的办法是先画出 SOGI 带通输出的 Bode 图查看不同 k 值下的带宽和相位特性再根据电网工况选取参数。3.3 参数 k 对性能的影响k 在 SOGI 中相当于阻尼系数直接决定带宽和动态响应速度。下面用一个表格总结在不同 k 值下的表现k 值带宽与选择性动态响应对频率偏差的敏感度谐波抑制能力k 较小0.1~0.3带宽窄选择性好响应慢振荡明显敏感频率偏移后正交性变差强能有效衰减谐波k 适中0.5~1带宽较合适响应较快基本无超调适中频率自适应后可接受较好工程常用区间k 较大2以上带宽宽选择性弱响应快不敏感弱谐波容易穿过在 APF 的 DSOGI-PLL 中k 并不是越大越好。如果 k 太大SOGI 的滤波作用变弱电压谐波会进入锁相环路造成相位波动如果 k 太小SOGI 响应变慢电网频率变化或相位跳变时正负序分离结果会滞后导致锁相环动态性能下降。实际项目一般先从 k 0.7 左右开始整定再结合电网背景谐波情况进行微调。谐波严重时向小调动态响应要求高时向大调。4. 正负序分离算法与数学基础4.1 为什么需要“瞬时”对称分量传统对称分量法是基于向量和复数运算的适合稳态分析。但 APF 控制需要实时获得补偿电流参考必须在每一个采样周期都能算出当前电压的正序分量。DSOGI-PLL 使用的方法是基于“延迟 90°”构造的瞬时对称分量法也叫延迟算子法。设 q 表示滞后 90° 的算子则 αβ 坐标系下的正序分量可以用下式计算$$ \begin{aligned} u_{\alpha } \frac{1}{2}\left( u_{\alpha} - q u_{\beta} \right) \ u_{\beta } \frac{1}{2}\left( q u_{\alpha} u_{\beta} \right) \end{aligned} $$负序分量可以用下式计算$$ \begin{aligned} u_{\alpha -} \frac{1}{2}\left( u_{\alpha} q u_{\beta} \right) \ u_{\beta -} \frac{1}{2}\left( -q u_{\alpha} u_{\beta} \right) \end{aligned} $$公式本身不复杂但符号约定非常容易出错。不同论文和工程代码对 q 的定义、对正序分量的定义可能不同。第 4 章最后的代码必须与实际使用的 q 方向一致否则正负序分离结果会颠倒。4.2 从公式推导到代码假设 q 表示滞后 90°并且在 αβ 通道的 SOGI 输出中v 为同相信号qv 为滞后 90° 信号那么实现时可以直接用 SOGI 输出替换公式中的 uα′、quα′、uβ′、quβ′。正序分量计算实现如下// 输入ua_falpha同相分量, qua_falpha正交分量 // ub_fbeta同相分量, qub_fbeta正交分量 // 输出ua_pos, ub_pos ua_pos 0.5f * (ua_f - qub_f); ub_pos 0.5f * (qua_f ub_f);负序分量计算实现如下ua_neg 0.5f * (ua_f qub_f); ub_neg 0.5f * (-qua_f ub_f);4.3 符号约定是最大的坑这里特别提醒如果代码中的 q 定义不是滞后 90°而是超前 90°那么正序和负序公式中的加减号会互换。仿真中如果发现分离出来的“正序分量”幅值不正确或者 dq 轴电压仍有二倍频波动优先检查 SOGI 正交输出的符号方向而不是怀疑控制参数。判断方法很简单输入一个理想的三相正序电压让系统运行后观察 uα 和 uβ。如果 uα 的幅值与输入相电压幅值接近同时 uβ 相位滞后 uα 约 90°说明符号正确如果结果是负序分量的形式则说明公式中某一处符号反了。5. SRF-PLL 小信号建模与 PI 参数设计5.1 Park 变换后的误差信号得到正序分量 uα 和 uβ 后可以将其旋转到 dq 坐标系。若锁相角为 θ则 q 轴分量为$$ u_{q} -\sin \theta \cdot u_{\alpha} \cos \theta \cdot u_{\beta} $$当 θ 接近电网正序电压相位时uq 近似等于正序电压幅值乘以相位误差$$ u_{q} \approx U_{m} \cdot \left( \theta_{grid} - \theta_{pll} \right) $$这就是 SRF-PLL 的“鉴相器”。uq 是相位误差信号PI 调节器把误差调节到零就完成了锁相。5.2 小信号模型与开环传函如果不考虑 SOGI 的动态影响只研究 SRF-PLL 本身那么锁相环的小信号模型可以简化为误差信号经过 PI 得到角频率增量角频率增量经过积分器得到相位输出输出相位与电网相位比较形成闭环。在电压幅值已归一化到 1.0 pu、且 uq 近似等于相位误差弧度时开环传递函数为$$ G_{ol}(s) \frac{k_p s k_i}{s^{2}} $$闭环传递函数为$$ H_{cl}(s) \frac{k_p s k_i}{s^{2} k_p s k_i} $$这是一个典型的二阶系统。设自然频率为 ωn阻尼比为 ζ则$$ \omega_n \sqrt{k_i}, \quad \zeta \frac{k_p}{2 \sqrt{k_i}} $$反推 PI 参数$$ k_i \omega_n^{2}, \quad k_p 2 \zeta \omega_n $$5.3 PI 参数设计示例锁相环设计时一般把阻尼比设置在 0.707 附近此时超调量和响应速度比较均衡。自然频率的选择需要权衡“动态响应速度”和“谐波抑制能力”。自然频率越高锁相响应越快但对电压谐波的抑制能力越差自然频率越低输出相位越平滑但动态响应越慢。假设电网额定频率为 50Hz希望锁相环的自然频率为 30Hz 左右取阻尼比 0.707则fn_pll 30; % Hz wn_pll 2 * pi * fn_pll; zeta 0.707; kp 2 * zeta * wn_pll; ki wn_pll^2;计算得到kp ≈ 266.5 ki ≈ 35530这里有一个前提uq 已经做过幅值归一化。如果直接使用实际电压幅值比如相电压峰值为 311V那么参数必须除以 311否则环路增益会放大 311 倍。在实际项目中推荐先把电压归一化再用归一化后的误差信号参与锁相。这样 PI 参数与电网电压幅值无关现场电压波动不会导致锁相动态特性发生明显变化。5.4 参数验证方式参数定完后可以用 Bode 图看开环与闭环特性。闭环带宽决定锁相环对电网频率突变的跟踪速度开环剪切频率附近的相位裕度决定稳定性。不要只依赖阶跃响应因为锁相环的输入是相位跳变阶跃响应无法覆盖电网频率变化的场景。更靠近工程的做法是在仿真中构造“频率阶跃”和“相位阶跃”两大类工况分别观察锁相误差和恢复时间。这个内容会在第 7 章展开。6. 全环路建模DSOGI 与 SRF-PLL 的带宽匹配6.1 为什么不能把 SOGI 当作理想环节前面设计 SRF-PLL 参数时都把 SOGI 的动态忽略了认为 SOGI 能瞬时输出正序分量。实际中SOGI 也是一个二阶动态系统它的响应速度会叠加到整个 DSOGI-PLL 环路中。如果 SOGI 的响应速度比 SRF-PLL 慢很多那么锁相环看到的“正序电压”会有明显滞后整个环路的相位裕度变小甚至出现振荡。如果 SOGI 的带宽太宽又会削弱谐波抑制能力。所以 DSOGI-PLL 的设计核心就是让 SOGI 的动态和 SRF-PLL 的动态在频域上分开。6.2 一个实用的参数设计顺序工程上不需要建立极其复杂的多输入多输出模型推荐按下面的顺序设计参数先设计 SRF-PLL 的 PI 参数确定闭环自然频率 fn_pll再选择 SOGI 的 k 值使 SOGI 的带宽明显高于 SRF-PLL 的带宽用仿真验证两者串联后是否还有足够的相位裕度如果发现动态变差优先降低 SRF-PLL 带宽而不是盲目提高 SOGI 的 k如果发现锁相输出含有大量谐波优先降低 SOGI 的 k或降低 SRF-PLL 带宽。这样做的好处是SRF-PLL 的带宽是“低频环”负责跟踪相位SOGI 的带宽是“中频环”负责滤除谐波和分离负序。两个环路的特征频率错开系统才是可设计的。6.3 频率自适应反馈的建模意义频率自适应反馈使 SOGI 成为一个参数随 PLL 输出变化的时变系统。静态分析时可以把它当作定参数系统处理但研究电网频率突变时必须注意到频率反馈带来的耦合。从工程经验来看频率自适应反馈不会破坏锁相环稳定性但会让动态过程更复杂。仿真时建议至少构造一次“电网频率从 50Hz 跳到 51Hz”的测试观察锁相角和 SOGI 输出幅值是否收敛。如果收敛时间过长说明 SOGI 带宽太窄如果出现明显振荡则需要检查 SOGI 的 k 和 PLL 带宽是否匹配。7. MATLAB 仿真模型搭建与验证方法7.1 Simulink 模型结构建议在 MATLAB/Simulink 中搭建 DSOGI-PLL 时不推荐把整个结构画成一个庞大子系统最好按模块拆分便于排错和后期移植。建议的模块划分是SOGI Alpha输入 uα输出 uα_f 和 quα_fSOGI Beta输入 uβ输出 uβ_f 和 quβ_fPNSC输入四路 SOGI 输出输出正序 uα、uβSRF-PLL输入正序 uα、uβ输出 θ、ω、以及反馈给 SOGI 的中心频率。测试源可以用简化的理想三相电压源额外叠加负序分量和谐波分量用于验证算法。电网模型不要一开始就接整流负载或 APF 主电路先单独验证锁相环再做系统级仿真。7.2 参数计算脚本下面这段 MATLAB 脚本用于计算 DSOGI-PLL 的主要参数并画出 SRF-PLL 闭环阶跃响应。它也可以作为项目里参数设计的第一步。%% DSOGI-PLL 参数计算示例 clearvars; clc; % 电网参数 f_grid 50; w_grid 2 * pi * f_grid; % 设计变量 zeta 0.707; % 阻尼比 fn_pll 30; % PLL 自然频率单位 Hz wn_pll 2 * pi * fn_pll; % 自然角频率 % 电压归一化后uq 近似等于相位误差 kp 2 * zeta * wn_pll; ki wn_pll^2; fprintf(kp %.2f\n, kp); fprintf(ki %.2f\n, ki); % SRF-PLL 闭环传递函数输入为相位输出为相位估计 s tf(s); G_open (kp * s ki) / s^2; H_close feedback(G_open, 1); figure; step(H_close); title(SRF-PLL 相位阶跃响应); grid on; % 查看 k 取不同值时 SOGI 带通输出 Bode 图 figure; hold on; k_list [0.3, 0.7, 1.0, 2.0]; for k k_list G_sogi k * w_grid * s / (s^2 k * w_grid * s w_grid^2); bode(G_sogi, {1, 1000}); end legend(k0.3, k0.7, k1.0, k2.0); grid on;脚本中的 k 列表用于对比 SOGI 带通特性。实际项目可以先跑这段脚本观察 Bode 图趋势再回到 Simulink 中做整体仿真验证。7.3 仿真工况设计只测理想电网下的锁相效果远远不够。DSOGI-PLL 在理想电网下的性能一定没问题真正考验它的是非理想工况。建议至少做下面几组仿真工况测试目的观察指标三相电压不平衡验证正负序分离效果dq 轴电压是否含 100Hz 分量电压含 5 次、7 次谐波验证 SOGI 谐波抑制能力锁相角是否有明显的 300Hz 纹波频率从 50Hz 跳变到 51Hz验证频率自适应跟踪效果锁相误差收敛时间电压相位跳变 40°验证 PLL 动态响应相位跳变后恢复时间与超调量电压幅值跌落 50%验证幅值归一化是否有效PI 输出是否变化、锁相是否失锁每组仿真都要记录波形方便定位问题。如果第五种工况下锁相性能发生了明显变化多半是幅值归一化没有做彻底。7.4 仿真运行结果的判断标准判断 DSOGI-PLL 是否正常主要看两点dq 轴电压是否平稳稳态时 uq 应该稳定在 0 附近没有明显的 2 倍频波动锁相角是否平滑θ 应该是以电网频率线性增长的斜坡信号微分后得到稳定的角频率 ω不能有明显的高频纹波。如果 uq 存在 100Hz 纹波基本可以断定正负序分离环节有问题如果 θ 波形有稳态相位偏差可能是 SOGI 中心频率没有精确跟踪电网频率或者离散化引入了误差。8. 离散化与嵌入式实现工程示例8.1 连续域模型到了控制器里必须离散化Simulink 中默认使用变步长连续求解器PI 和 SOGI 都按连续域计算。但 APF 控制核心通常是 DSP 或 MCU采样周期固定所有积分都必须离散化。很多同学在仿真中表现很好的环路下载到控制器里就不稳定原因之一就是离散化实现不正确。工程上常用三种离散化方法前向欧拉法实现简单适合采样率较高、控制对象动态不太快的场合双线性变换Tustin精度高不会把 s 平面左半平面映射到 z 平面单位圆外最常用带预畸变的双线性变换对特定频率点做精确匹配适合需要精确谐振频率的场合比如 SOGI 的中心频率。在实际产品代码中SOGI 一般采用双线性变换或带预畸变的双线性变换单纯使用前向欧拉在部分频段会引入较大相位误差。下面给出一个工程化的简化示例用于说明离散化实现思路。8.2 SOGI 离散化实现示例下面是一段基于欧拉法的简化 C 语言实现重点展示 SOGI 的状态更新过程。它便于理解但实际产品建议根据采样率选择更精细的离散化方法并做相位补偿验证。typedef struct { float k; // SOGI 阻尼系数 float w; // 中心角频率来自 PLL float x1; // 同相输出状态 float x2; // 正交输出状态 } sogi_t; void sogi_init(sogi_t *sogi, float k, float w) { sogi-k k; sogi-w w; sogi-x1 0.0f; sogi-x2 0.0f; } // 每周期调用一次v 为输入电压Ts 为控制周期 // 返回值是 SOGI 的同相输出 float sogi_update(sogi_t *sogi, float v, float Ts) { float err v - sogi-x1; // 频率自适应中心角频率 w 由 PLL 更新每次进入前已经更新 float tmp sogi-w * (sogi-k * err - sogi-x2); sogi-x1 Ts * tmp; sogi-x2 Ts * (sogi-w * sogi-x1); return sogi-x1; }调用时分别创建两个实例一个用于 α