和有源电力滤波器打过交道的工程师,大概率都有过这种经历:仿真里 DSOGI-PLL 能完美锁相,波形干净得可以直接放进论文;可一旦换到畸变电网、不平衡电网,或者把算法移进 DSP,之前“照着文献搭”的模型就开始出各种奇怪问题——相位抖动、二倍频纹波、启动锁不住,甚至正负序分离出来的结果和理论方向相反。
这篇文章是这个专题的下半篇。上半篇通常已经把二阶广义积分器(SOGI)的传递函数、正交信号发生器(QSG)的原理、以及 DSOGI 的基本结构讲清楚了;这一篇我们重点解决下半程的问题:DSOGI-PLL 闭环小信号模型怎么建、PI 参数怎么整定、正负序分离在离散化以后怎么落地、在有源电力滤波器(APF)里怎么和后面的谐波提取环节衔接。
先说结论:对 APF 来说,DSOGI-PLL 最大的价值不是“把相位锁住”,而是它在你做谐波提取之前,先给系统提供了一个干净、正交、且能区分正负序的电压坐标系。理解这一点,比背十个锁相环结构都管用。
1. 从上半到下半:DSOGI-PLL 在 APF 控制链中的真实位置
先看有源电力滤波器的典型控制框架。APF 不是简单地把电网电压锁个相就完事,它需要完成四件事:同步、检测、补偿、并网。同步环节提供电网电压的相位和频率;检测环节从负载电流中分离出需要补偿的谐波和无功分量;补偿环节由电流环生成 PWM;并网环节负责直流母线电压控制和软启动。
DSOGI-PLL 在 APF 里通常横跨前两个环节。它的 αβ 正交输出一方面送给锁相环,决定 dq 坐标系的旋转角;另一方面,它分离出的正序基波电压,是后续谐波检测算法中判断“基波方向”的重要参考。
很多人容易犯一个错误:把 DSOGI-PLL 当成普通三相 SRF-PLL(同步旋转坐标系锁相环)的简单替代。普通 SRF-PLL 在三相电压平衡且无畸变时表现很好,环路子模型很简单,用一个 Park 变换加一个 PI 就能工作。但 APF 面对的是非线性负载污染后的电网,这时候三相电压往往不平衡,还带着 5、7、11、13 次等谐波。普通 SRF-PLL 在这种工况下锁出来的相位里会混入二倍频和六倍频分量,轻则影响补偿效果,重则让电流环参考值出现周期性振荡。
DSOGI-PLL 的价值就是在 Park 变换之前,先把电网电压里的正序基波分量提取出来。它不是锁相环本身变强了,而是给锁相环的输入信号提前做了“清洗”。这个设计思路要从系统层面看,才不容易在参数整定时犯糊涂。
2. 上半篇结论速览:构建 DSOGI 的最小理解
为了不让只翻到这一篇的读者断片,我们把上半篇的结论压缩成几个最小单元。
二阶广义积分器(SOGI)的核心是一个谐振于 ω 的二阶系统。典型结构里,它从输入信号中产生两个输出:一个带通输出 v′,一个正交输出 qv′。
在基波角频率 ω 处,两个输出的幅值增益都等于 1,但相位关系是正交的:
- v′(t) 跟随输入 v(t),幅值不变、相位不变。
- qv′(t) 幅值不变,相位相对输入滞后 90°。
写成传递函数形式:
$$ H_d(s) = \frac{k\omega s}{s^2 + k\omega s + \omega^2} $$
$$ H_q(s) = \frac{k\omega^2}{s^2 + k\omega s + \omega^2} $$
系数 k 决定了 SOGI 的选频带宽。k 越小,滤波越尖锐,但动态响应越慢;k 越大,动态越快,但对外围频率噪声的抑制能力越差。工程上经常采用 k = √2,这是一个兼顾带宽和动态的选择。
所谓 DSOGI,就是把两个 SOGI 分别放在 α 轴和 β 轴上。对三相电网电压做 Clarke 变换后得到 uα、uβ,再将它们分别送入各自的 SOGI-QSG,于是得到四个信号:
- uα′:α 轴基波带通输出;
- quα′:α 轴基波正交输出;
- uβ′:β 轴基波带通输出;
- quβ′:β 轴基波正交输出。
有了这组正交信号,再利用瞬时对称分量法,就能把正序、负序电压分离出来。我们要记住的最终结果是:
$$ \begin{bmatrix} u_{\alpha p} \ u_{\beta p} \end{bmatrix} = \frac{1}{2} \begin{bmatrix} 1 & -q \ q & 1 \end{bmatrix} \begin{bmatrix} u_{\alpha}' \ u_{\beta}' \end{bmatrix} $$
$$ \begin{bmatrix} u_{\alpha n} \ u_{\beta n} \end{bmatrix} = \frac{1}{2} \begin{bmatrix} 1 & q \ -q & 1 \end{bmatrix} \begin{bmatrix} u_{\alpha}' \ u_{\beta}' \end{bmatrix} $$
这里 q 表示“滞后 90° 算子”,也就是 quα′、quβ′ 的位置。符号方向很容易写反,建议在仿真里通过不平衡电压工况专门验证一次,后面第 5 节会给出一个可直接用的函数。
从“上半篇”到“下半篇”的转折点就在这里:上半篇停留在“如何通过 SOGI 产生正交信号和分离正负序”,下半篇则要进入“这些信号如何组成闭环锁相环,参数怎么设计,离散化会引入什么问题”。
3. 下半篇的核心:DSOGI-PLL 闭环模型怎么建
很多人一看到 DSOGI-PLL 就以为它是“两个 SOGI + 一个锁相环”的简单拼接。如果只是拼接,模型当然能跑,但反馈路径上到底是谁在起主导作用、为什么电压畸变时 DSOGI-PLL 比普通 SRF-PLL 干净,这些如果不建模是说不清楚的。
DSOGI-PLL 的闭环结构可以分成两级:
第一级:DSOGI 正序计算。电网电压经过 Clarke 变换、SOGI 滤波、正负序计算后,输出正序电压 uαp、uβp。
第二级:SRF-PLL。uαp、uβp 经过 Park 变换,得到 dq 轴分量。q 轴分量 uq 作为锁相误差送入 PI 调节器,PI 输出与频率前馈 ωff 相加后,通过积分得到相位 θ̂。
把两级放在一起看,DSOGI 这一级相当于一个“预滤波器”,它工作在比锁相环带宽高得多的频率尺度上。SOGI 的动态时间尺度由 k 和中心频率决定,而锁相环的动态时间尺度由 PI 参数决定。因此,做小信号模型时通常可以采用分离时间尺度近似:分析锁相环带宽时,把 SOGI 看成在基波频率附近近似透明的环节。
推导锁相环内部模型时,设正序电压幅值为 Vp,实际电网相位为 θ,锁相环输出相位为 θ̂。Park 变换定义为将 αβ 电压变换到以 θ̂ 旋转的 dq 坐标系:
$$ u_q = -u_{\alpha p}\sin\hat{\theta} + u_{\beta p}\cos\hat{\theta} $$
当 θ̂ 跟得上 θ 时,把上式在 θ̂ ≈ θ 附近线性化,可得到:
$$ u_q \approx V_p(\theta - \hat{\theta}) $$
这个线性化公式是整个 PLL 参数设计的基石。它说明:q 轴电压在稳态附近就是一个相位误差检测器,比例系数是正序电压幅值 Vp。
于是锁相环的闭环框图可以简化成:
- 误差 θ - θ̂ → 增益 Vp → PI 调节器 → 积分器 1/s → θ̂
开环传递函数为:
$$ L(s) = V_p \left( K_p + \frac{K_i}{s} \right) \frac{1}{s} $$
闭环特征方程为:
$$ s^2 + V_p K_p s + V_p K_i = 0 $$
如果 PI 输出不是直接作为角速度,而是与频率前馈相加,那么前馈不影响小信号闭环极点,只影响稳态跟踪能力和电网频率偏移时的响应。
看到这里应该明白:DSOGI-PLL 的锁相部分本质和普通 SRF-PLL 完全一样,它的特殊优势全部集中在输入信号预处理上。这带来一个非常重要的工程推论——在调试时,如果发现锁相环抖动,先不要急着调 PI,而是先看 DSOGI 输出的正序电压是否干净。
4. DSOGI-PLL 的环路滤波器设计与 PI 参数计算
把特征方程和标准二阶系统对比:
$$ s^2 + 2\zeta\omega_n s + \omega_n^2 = 0 $$
可以得到:
$$ K_p = \frac{2\zeta\omega_n}{V_p} $$
$$ K_i = \frac{\omega_n^2}{V_p} $$
这里有两个关键点。
第一,PI 参数和 Vp 成反比。而 Vp 又随电网电压幅值变化。如果电网电压跌落 20%,同样的 PI 参数会让实际环路带宽下降约 10%。对锁相环来说,这种变化通常可以接受,因为锁相环带宽本身留有裕量;但如果电压跌落后还要保证快速响应,就应该做电压归一化,或者根据正序电压幅值在线增益补偿。
第二,锁相环带宽不能取太高。APF 的同步信号里承载着补偿电流的相位基准,如果锁相环带宽过高,电网电压里残余的高次谐波会通过锁相环进入相位输出,最终叠加到电流参考上。以 50Hz 电网为例,工程中锁相环自然频率一般取 20~35Hz 这个量级。阻尼比 ζ 取 0.707 附近,可以在超调量和响应速度之间取得较好平衡。
为了验证上述设计公式,这里提供一个 Python 脚本,可以直接计算参数,并查看相位阶跃响应的近似行为。运行前先安装依赖:
pip install numpy scipy matplotlibimport numpy as np from scipy import signal import matplotlib.pyplot as plt # 设计目标 fn_pll = 25.0 # 锁相环自然频率,单位 Hz zeta = 0.707 # 阻尼比 Vp = 311.0 # 正序相电压幅值,单位 V # 换算到角频率 wn = 2.0 * np.pi * fn_pll # PI 参数 Kp = 2.0 * zeta * wn / Vp Ki = wn * wn / Vp print("设计结果") print("wn =", round(wn, 4), "rad/s") print("Kp =", round(Kp, 6)) print("Ki =", round(Ki, 6)) # 锁相环小信号闭环:theta_hat / theta # H(s) = (2*zeta*wn*s + wn^2) / (s^2 + 2*zeta*wn*s + wn^2) num = [2.0 * zeta * wn, wn * wn] den = [1.0, 2.0 * zeta * wn, wn * wn] sys_cl = signal.TransferFunction(num, den) t, y = signal.step(sys_cl) # 以 30 度相位阶跃为例,观察锁相环输出的跟踪过程 phase_step_deg = 30.0 plt.figure(figsize=(8, 4.5)) plt.plot(t, phase_step_deg * y) plt.xlabel("time / s") plt.ylabel("estimated phase / deg") plt.title("DSOGI-PLL small-signal phase tracking") plt.grid(True) plt.show()需要提醒的是,这个脚本验证的是“锁相环本级”的小信号闭环特性。它假设 DSOGI 已经提供了理想的正序基波电压,而且相位误差比较小。如果仿真里做 90° 的大相位跳变,Vp·sin(Δθ) 的非线性会让实际响应和线性模型出现偏差,这是正常现象。
参数计算完成后,在 Simulink 里搭建的模型初始脚本可以这样写:
%% DSOGI-PLL 参数 Vp = 311.0; % 正序相电压幅值(V) fn_pll = 25.0; % 锁相环自然频率(Hz) zeta = 0.707; % 阻尼比 wn = 2*pi*fn_pll; Kp_pll = 2*zeta*wn/Vp; Ki_pll = wn^2/Vp; w0 = 2*pi*50; % 电网角频率前馈 %% SOGI 参数 k_sogi = sqrt(2); % SOGI 阻尼系数 fs = 20000; % 仿真与采样频率(Hz) Ts = 1/fs;在实际控制板代码里,Kp、Ki 往往不是浮点数,而是经过定点或标幺化处理后的整型量。但这里更建议先用浮点模型把算法逻辑跑通,再考虑定标。API 或芯片寄存器相关细节不在本文展开,先确保原理层不出错。
5. DSOGI 与正负序分离的离散实现方式
从连续域模型进入数字控制,第一个问题就是 SOGI 如何离散化。
SOGI 本质上是谐振频率在 ω 的带通/低通组合。谐振环节对离散化方法非常敏感。如果只用简单的前向欧拉法,当采样频率不够高时,离散后的谐振点会偏移,甚至出现稳定性问题。工程上至少采用双线性变换(Tustin)或零极点匹配法来离散 SOGI。
在 Simulink 中,可以借助 c2d 命令生成离散 SOGI 的状态空间模型,而不必手工推导复杂的差分方程:
% 以 Tustin 方法离散连续域 SOGI 环节 H_d = tf([k_sogi*w0, 0], [1, k_sogi*w0, w0^2]); H_d_d = c2d(H_d, Ts, 'tustin'); H_q = tf([0, k_sogi*w0^2], [1, k_sogi*w0, w0^2]); H_q_d = c2d(H_q, Ts, 'tustin');得到离散传递函数后,可以提取分子分母系数,放入 Simulink 的 Discrete Transfer Fcn 模块,或者导出成 C 代码。这里的关键不是记下某一组差分方程,而是理解离散化对 SOGI 相位特性的影响:采样频率越低,离散化造成的相位偏差越大。设计采样频率时,至少要保证基波频率和谐波提取的最高频率都远低于 Nyquist 频率。对 APF 常用的 50Hz 电网系统,如果补偿到 25 次谐波,采样频率往往要选到 20kHz 以上。
正负序分离的离散实现并不需要额外状态,它只是代数运算。给 Simulink 的 MATLAB Function 模块写如下函数即可:
function [valpha_p, vbeta_p, valpha_n, vbeta_n] = pnsc(valpha, vbeta, qvalpha, qvbeta) % 基于 DSOGI 正交输出的正负序分离 % 输入: % valpha : alpha 轴 DSOGI 带通输出 % vbeta : beta 轴 DSOGI 带通输出 % qvalpha : alpha 轴 DSOGI 正交输出(滞后 90 度) % qvbeta : beta 轴 DSOGI 正交输出(滞后 90 度) % 输出: % valpha_p, vbeta_p : 正序分量 % valpha_n, vbeta_n : 负序分量 % % 注意:符号约定以“正交输出滞后 90 度”为准, % 如果实际模型中 q 环节是超前 90 度,符号需要反相。 valpha_p = 0.5 * (valpha - qvbeta); vbeta_p = 0.5 * (vbeta + qvalpha); valpha_n = 0.5 * (valpha + qvbeta); vbeta_n = 0.5 * (vbeta - qvalpha); end这个函数很短,但它常常是模型里唯一容易写错的地方。很多工程师在仿真里发现正负序分离结果不对,第一反应是改 SOGI 参数,实际上只要把输入的正交信号方向搞反,或者把 Clarke 变换中 β 轴的滞后/超前方向搞反,就会产生看起来像“滤波器没调好”的异常波形。
验证正负序分离是否正确,推荐直接在 αβ 静止坐标系下检查。给系统加入一个不平衡电压,比如 A 相幅值偏小、B 相相位偏移,然后观察:
- 正序 αβ 分量应该是一个旋转方向固定的圆,半径约等于正序电压幅值;
- 负序 αβ 分量应该是一个旋转方向相反的圆,半径约等于负序电压幅值;
- 如果 α 轴和 β 轴的波形相位关系错误,圆的旋转方向会反,或者出现明显椭圆。
6. 在 Simulink 中搭建 DSOGI-PLL 电压同步链路
下面给出一套可以在 Simulink 中操作的搭建顺序。这里不依赖 Simscape 电气模型,而是直接使用三相电压源信号,便于把注意力集中在锁相算法本身。
6.1 电网电压输入与 Clarke 变换
首先建立三相电压源:
- A 相:Va = Vm·sin(ωt)
- B 相:Vb = Vm·sin(ωt - 2π/3)
- C 相:Vc = Vm·sin(ωt + 2π/3)
这里 Vm 是相电压幅值,比如 311V 对应 220V 有效值。
三相电压经过 Clarke 变换,得到 αβ 分量:
u_alpha = 2/3 * (Va - 0.5*Vb - 0.5*Vc); u_beta = 2/3 * (sqrt(3)/2 * Vb - sqrt(3)/2 * Vc);在 Simulink 里可以直接用 Fcn 模块或 MATLAB Function 实现该公式。需要注意,不同文献里 Clarke 变换存在等幅值和等功率两种约定。DSOGI-PLL 的参数设计不受等幅值/等功率影响,因为 Vp 是实际正序电压幅值,PI 参数会按这个幅值折算;但建模时一定要统一标幺基准,否则后面调试时会多出“凭空出现”的增益误差。
6.2 DSOGI 滤波层
α 轴电压和 β 轴电压分别送入 SOGI-QSG。每个 QSG 模块的输出有两个:带通输出 v′ 和正交输出 qv′。
在 Simulink 中,最直接的做法是使用连续域传递函数模块。以 α 轴为例,设置两个 Transfer Fcn:
- vα′ 对应的传递函数按 H_d(s) 设置;
- qvα′ 对应的传递函数按 H_q(s) 设置。
β 轴完全相同,只是输入改成 uβ。
如果担心连续域仿真和离散控制器不匹配,可以在仿真中把整个 DSOGI-PLL 算法层全部离散化。Simulink 中把 solver 设为固定步长,比如 1e-5s,再在算法内部按 Ts 运行离散模块。这样更接近控制板行为。
6.3 正负序分离层
把 DSOGI 输出的 uα′、uβ′、quα′、quβ′ 接入第 5 节给出的 MATLAB Function。正序输出 uαp、uβp 送往后级锁相环;负序输出 uαn、uβn 暂时可以用于监控或故障检测,比如判断电网不平衡度。
6.4 SRF-PLL 锁相层
Park 变换采用如下公式:
ud = cos(theta_hat) * u_alpha_p + sin(theta_hat) * u_beta_p; uq = -sin(theta_hat) * u_alpha_p + cos(theta_hat) * u_beta_p;将 uq 作为误差送入 PI 调节器。PI 输出是角频率修正量,与 ωff(电网频率前馈)相加后,经过积分得到 theta_hat:
omega_hat = omega_ff + PI_out; theta_hat = mod(theta_hat + omega_hat*Ts, 2*pi);积分器需要能够处理角度越界。工程上通常对角度做取模,但由于 Park 变换中 cos 和 sin 天然具有周期性,可以不对角度取模也能继续运行,只是数值会持续增长,不方便记录波形。为了调试方便,建议在 theta_hat 输出点加上取模模块。
6.5 模型层级组织
建议在 Simulink 中按照以下层级组织 block:
| 层级 | 内容 | 说明 |
|---|---|---|
| 顶层 | 三相电源、DSOGI-PLL 模块、示波器 | 方便快速切换工况 |
| Level1_SogiAlpha | α 轴 SOGI | 内部两个传递函数模块 |
| Level1_SogiBeta | β 轴 SOGI | 与 α 轴对称 |
| Level2_PNSC | 正负序计算 | MATLAB Function |
| Level2_SRF_PLL | Park + PI + 积分 | 输出 theta_hat |
这样做的好处是:调试时可以用 scope 观察每一层的中间变量,快速定位是 DSOGI 层的问题还是锁相层的问题。
6.6 仿真工况设置
为了验证 DSOGI-PLL 的效果,建议至少跑三个工况:
- 工况一:三相对称电压,频率 50Hz,观察锁相动态。
- 工况二:三相电压不平衡,加入负序分量,观察 DSOGI-PLL 输出是否还能保持平滑。
- 工况三:三相电压含 5、7 次谐波,观察锁相环相位输出是否有明显谐波。
每个工况运行 0.5~1s 即可,重点看波形上升沿和稳态小信号波动。
7. 运行结果与验证:怎么判断建模和参数正确
这一步常被忽略。很多人在 Simulink 里搭完模型,看到 theta_hat 能跟随角度就认为完工,实际上 DSOGI-PLL 的验证需要看几个不同位置的信号。
7.1 需要观察的信号
| 信号 | 作用 | 预期现象 |
|---|---|---|
| uα′、quα′ | 验证 SOGI 正交输出 | 两路波形幅值接近,相位差 90° |
| uαp、uβp | 验证正序分离 | 不平衡工况下为平滑旋转圆 |
| uαn、uβn | 验证负序分离 | 不平衡工况下幅度非零,平衡时接近零 |
| theta_hat | 锁相输出 | 在 0~2π 或 -π~π 范围内持续增长 |
| uq | 锁相误差 | 稳态时接近 0,动态时有短暂波动 |
7.2 判断标准
启动过程:给定一个 30°~60° 的相位阶跃,theta_hat 应在若干毫秒内跟上输入相位,过程没有持续振荡。具体调节时间取决于锁相环带宽;按 25Hz 自然频率设计,大约会在一百毫秒量级收敛,这符合常见 APF 同步要求。
正序分离:在不对称电压工况下,uαp 和 uβp 构成的矢量轨迹应接近圆形;如果出现明显椭圆,通常意味着 SOGI 中心频率和实际电网频率不匹配,或者正序计算符号有误。
谐波抑制:在电压中叠加谐波后,uq 波形可能出现轻微高次纹波,但 theta_hat 不应出现明显的高频抖动。如果 theta_hat 抖动明显,优先降低锁相环带宽,再检查 DSOGI 的 k 值是否偏大。
7.3 参数变化后的敏感性
为了检查参数设计是否合理,可以做一个简单扫描:把 fn_pll 从 20 调到 40Hz,观察锁相环响应。响应会变快,但 uq 中的高次分量也会变大。若发现 fn_pll 上升后相位输出出现明显谐波,说明原设计里 DSOGI 滤波仍不够干净,需要减小 k_sogi 或增加额外滤波。
如果出现启动缓慢、甚至锁不住相,不要急着把 fn_pll 往上调。先检查 uq 稳态是否为 0。如果 uq 在 0 附近来回震荡但 theta_hat 不收敛,多半是 SOGI 中心频率 w0 与实际电网频率相差太远,或 PI 输出没有和频率前馈正确相加。
8. 常见问题与排查思路
下面把 DSOGI-PLL 建模和调试最常见的几类问题整理成表,方便直接对照排错。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| theta_hat 锁不住,波形发散 | PI 参数符号错误或 Kp 过大 | 查看 uq 波形,确认误差方向 | 检查 Park 变换符号,降低 Kp 后重新验证 |
| theta_hat 能锁相,但存在二倍频波动 | 输入锁相环的信号仍含负序分量 | 观察 uαp、uβp 是否为正序圆形 | 确认正负序分离函数符号,确认 uαp/uβp 接入 Park 变换 |
| theta_hat 存在六倍频波动 | 电网电压含 5、7 次谐波,且 PLL 带宽过高 | 减小 fn_pll 或观察 uq 谐波 | 重新整定 PI 参数,或在 PLL 输入端适当滤波 |
| SOGI 输出幅值不等于输入电压幅值 | SOGI 中心频率与实际电网频率偏差 | 查看 uα′ 与 uα 的幅值和相位差 | 将 SOGI 中心频率改为实际电网基波频率 |
| 正负序分离结果与理论相反 | Clarke 变换或 q 方向定义不一致 | 在不平衡工况观察负序旋转方向 | 对比公式约定,修正 q 输出符号 |
| 离散化后相位滞后明显 | 采样频率过低或离散方法不适合谐振环节 | 对比连续域和离散域 Bode 图 | 提高采样频率,改用 Tustin 或零极点匹配 |
| 实际控制板运行结果与仿真不一致 | 离散步长、浮点精度或中断时序不同 | 在 PC 上先做离散化仿真 | 统一模型 Ts 与控制板实际采样时间 |
在实际项目里,最耗费时间的往往不是参数整定,而是“现象定位”。比如一个锁相环输出带 100Hz 纹波,可能是因为 DSOGI 正序分离没做好,也可能是 Park 变换过程中采样时间差导致。调试时不要直接调 PLL 的 PI,先看 DSOGI 输出的中间量是否干净,能省下很多无用功。
9. 从 DSOGI-PLL 到 APF 谐波提取与工程建议
当 DSOGI-PLL 在 αβ 坐标系下建立了稳定的正序基波电压后,它可以继续派生多种有价值的信号处理链路。
9.1 与瞬时无功功率法配合
APF 常用的谐波检测方法是瞬时无功功率理论(pq 法)。pq 法在 αβ 坐标系下计算瞬时功率 p、q,然后通过低通滤波器提取直流分量,再反变换得到基波有功/无功电流,最终用负载电流减去基波分量,得到谐波补偿参考。
在这个流程里,DSOGI 提供了两个好处:
第一,如果 pq 法中的电压信号直接使用原始电网电压,那么电网电压畸变时功率计算结果里会混入谐波分量,导致谐波检测出现误差。先经过 DSOGI 提取正序基波电压,相当于把电压通道“净化”,pq 法更容易工作在线性区间。
第二,DSOGI 的正交输出 qvα′、qvβ′ 可以直接用来构造 90° 延时的电流分量,这对单相 APF 或三相不平衡负载的谐波检测都有帮助。
9.2 改进方向:SOGI-FLL 与自适应频率
固定中心频率的 SOGI 有一个内在缺陷:当电网频率偏移时,SOGI 的谐振点不再准确,输出幅值和相位都会出现偏差。APF 用在弱电网或带柴油发电机等非理想供电系统时,频率可能波动超过 ±0.5Hz,这时候固定 w0 的 DSOGI-PLL 会牺牲一部分精度。
一种常见改进是 SOGI-FLL(Frequency Locked Loop),在 SOGI 结构外再增加一个频率锁定环,让 SOGI 中心频率自动跟踪电网频率。FLL 不需要相位信息,只依靠频率误差信号来调整 w0,在一定意义上比锁相环更直接。DSOGI-FLL 则在三相系统中同时解决频率适应和正负序分离。
但这不等于项目里一定要用 FLL。如果系统只工作在固定频率电网,额外引入 FLL 会带来新的稳定性和参数整定问题。先把固定频率下的 DSOGI-PLL 吃透,再考虑频率自适应,是更稳妥的学习路径。
9.3 工程建议
结合前面所有内容,下面给