有源电力滤波器专题做到下半,DSOGI-PLL的核心问题已经不是“能不能锁相”,而是“在电网不平衡、畸变和频率偏移同时出现时,锁出来的角度还能不能稳定地用于指令提取”。常规 SRF-PLL 在电压不平衡时,dq 轴上会出现二倍频振荡,相位输出也会带着低频抖动;DSOGI-PLL 的思路是先用两个 SOGI-QSG 构造正交信号,再把正序、负序分开,最后只把正序分量交给锁相环。对做 APF 样机调试和仿真建模的人来说,这一部分真正要补的不是框图,而是正负序分离之后的数学模型、每个参数怎么选、离散化后有哪些坑。
下面按实际落地顺序拆开讲。前半部分更偏结构推导,我会把后半段重点放在“从模型到参数再到验证”这件事上。
1. 先对齐:DSOGI-PLL 在 APF 里到底要解决什么问题
1.1 前半部分推到哪一步了
如果是按常见专题顺序阅读,前半部分通常会先解释一个核心矛盾:电网电压一旦不平衡,三相电压在静止坐标系下不再是一个纯正序圆,而是正序圆和负序圆的叠加。只用单一 PLL 去锁整体电压,锁出来的是一个“平均值”,并不是纯净的基波正序角度。
DSOGI-PLL 在这个基础上引入两个正交信号发生器。一个给 α 轴用,一个给 β 轴用。每个 SOGI 接收电压分量,输出一个经过带通特性的原相信号 v′,以及一个滞后 90° 的 qv′。有了 α、β 两个轴的正交信号,就可以用代数运算把正序、负序拆开。
到这里,后续分析才能继续:正序分量送给 SRF-PLL,负序分量可以用于检测不对称程度,也可以不参与锁相。对有源电力滤波器来说,这个“先分离再锁相”的顺序非常重要,因为 APF 的补偿电流最终要用基波正序角度做坐标变换。如果角度本身被负序污染,后面所有 dq 轴谐波提取都会跟着错。
1.2 APF 场景不能只靠过零检测
很多刚接触 APF 的人会问一个问题:电网是三相正弦波,为什么不直接测量线电压过零点,或者直接用软件锁相环锁 A 相相位?
实际电网不会那么干净。APF 往往装在负载附近,电压可能已经出现畸变,也可能因为不平衡负载导致三相电压不对称。若是用 A 相过零点,一旦 A 相电压叠加谐波或短时跌落,零点就会来回移动。更麻烦的是,三相不平衡时,只锁单相再通过 120° 移相,得到的 B、C 相角度和实际电网可能存在系统性偏差。
DSOGI-PLL 解决的就是这个问题:它把三相电压先变换到 αβ 坐标系,再用两个 SOGI 分别提取正交信号,最终输出正序电压的相位。这样锁出来的角度对不平衡具备天然免疫能力,对高频谐波也有一定过滤作用。正因如此,它在 APF 样机里经常被放在“检测起点”的位置。
2. 从双 SOGI 到正负序分离的完整模型
2.1 每个 SOGI-QSG 的实际状态方程
DSOGI-PLL 里最基础的单位是 SOGI-QSG,而不是简单的一个二阶滤波器。它的特点是不只输出一个滤波后的信号,还同时输出一个频率相关、相位滞后 90° 的正交分量。
按照最常见的一组两积分器结构,单个 SOGI 连续域状态方程可以写成:
e = vin - v' dv' / dt = k * ω0 * e - ω0 * qv' dqv' / dt = ω0 * v'其中 v′ 是带通输出,qv′ 是正交输出,k 是阻尼系数,ω0 是 SOGI 的中心频率。这个结构的好处是:中心频率 ω0 可以随 PLL 的估计频率更新,从而适应电网频率偏移。
由这个状态方程可以推出两个核心传递函数:
D(s) = v'(s) / vin(s) = k * ω0 * s / (s² + k * ω0 * s + ω0²) Q(s) = qv'(s) / vin(s) = k * ω0² / (s² + k * ω0 * s + ω0²)D(s) 具有带通特性,输入信号在 ω0 附近时幅值增益接近 1;Q(s) 提供正交分量。这个公式在建模时非常有用,因为很多仿真软件里可以直接按传递函数建模块,也可以按状态方程搭积分器结构。我更推荐后者,因为后续要把估计频率 ω0 反馈回来时,状态方程改起来更直接。
2.2 αβ 轴的正负序分离计算
有源电力滤波器里用的是三相系统,所以需要把单相 SOGI 扩展到两个轴:α 轴和 β 轴。
先做 Clarke 变换,把三相电压变换到静止坐标系:
vα = (2/3) * (va - 0.5 * vb - 0.5 * vc) vβ = (2/3) * (0.866 * vb - 0.866 * vc)然后分别送入两个 SOGI-QSG。注意,α 轴 SOGI 的输入是 vα,β 轴 SOGI 的输入是 vβ。每个 SOGI 都输出原相信号和正交信号,因此一共得到四个量:
- v′α:α 轴滤波后的原相输出
- qv′α:α 轴滤波后的正交输出
- v′β:β 轴滤波后的原相输出
- qv′β:β 轴滤波后的正交输出
正序和负序分离时,用的不是原始电压 vα、vβ,而是经过 SOGI 处理后的 v′α、v′β 和 qv′α、qv′β。这一步不要省略,否则后面正负序分离公式不成立。
常用计算式如下:
vα+ = 0.5 * (v'α - qv'β) vβ+ = 0.5 * (v'β + qv'α) vα- = 0.5 * (v'α + qv'β) vβ- = 0.5 * (v'β - qv'α)其中 vα+、vβ+ 是基波正序分量,vα-、vβ- 是基波负序分量。这个计算看着简单,但很多建模错误都出在符号上。正序公式里 qv′β 是减号,负序公式里是加号;如果你的内部坐标系定义方向相反,符号要跟着调整,不能照抄完就认为一定正确。
2.3 后级 SRF-PLL 的锁相结构
正序分量出来后,接下来就是一个标准的同步旋转坐标系 PLL,也就是 SRF-PLL。
把 vα+、vβ+ 变换到以估计角度 θ 为基准的 dq 坐标系。常用的 Park 变换形式是:
vd = vα+ * cosθ + vβ+ * sinθ vq = -vα+ * sinθ + vβ+ * cosθ当估计角度 θ 接近真实电网正序角度时,vq 的平均值会趋近于零,vd 则对应正序电压幅值。锁相错误是 vq 不为零,PI 调节器根据 vq 误差输出角频率修正量,再积分得到 θ。
整个 DSOGI-PLL 的闭环是:
电网电压 → Clarke → 两个SOGI-QSG → 正负序分离 → SRF-PLL → θ如果要做频率自适应,还要把 PLL 估计出来的角频率 ω 反馈回两个 SOGI-QSG 的中心频率,而不是固定用 100π。这一条反馈是把 DSOGI 和普通 SOGI + PLL 区分开的关键。频率不反馈时,电网频率偏移到 50.5Hz,SOGI 的中心频率还在 50Hz,输出的正交信号会出现相位和幅值偏差,锁相结果也会产生稳态误差。
3. 参数设计:先定 SOGI 带宽,再定 PLL 响应
3.1 SOGI 增益 k 怎么选
DSOGI-PLL 调试时,第一个要动的参数是 k。这个参数同时影响两个 SOGI-QSG 的带宽、动态响应和滤波强度。
从传递函数的分母可以看出,SOGI 的阻尼比近似等于 k/2。常见取 k = √2,也就是阻尼比约为 0.707,这时超调量适中,响应速度和滤波效果比较均衡。实际 APF 项目中,k 通常不会离这个值太远。
如果 k 取得偏小,比如 0.5,SOGI 的选频特性会变得很窄,对谐波抑制好,但动态响应慢,正序分离过程需要更长时间才能稳定。若电网电压发生短时跌落,锁相角度可能需要几十毫秒才能恢复。
如果 k 取得偏大,比如 3,SOGI 的响应会变快,但带通宽度变大,谐波更容易漏进来,导致正序输出里仍混有明显的高次分量。PLL 如果设计带宽也比较高,角度输出就可能出现毛刺。
我的建议是:第一次仿真先使用 k = 1.0 到 1.5 之间,不要同时调 k 和 PLL 参数。先把波形跑顺,再根据启动时间和稳态滤波效果微调。
3.2 PLL 的 PI 参数从哪开始取
后级 SRF-PLL 本质上是一个二阶闭环系统。忽略高次谐波和数字延迟时,PI 参数和闭环自然频率、阻尼比有一定关系。工程上常用近似关系:
Kp ≈ 2 * ζ * ωn Ki ≈ ωn²其中 ωn 是锁相环的自然频率,ζ 是阻尼比。
选择 ωn 时需要权衡。如果 APF 需要快速恢复同步,可以把 ωn 取高一些,比如 40Hz 对应的弧度数,但 DSOGI 本身的滤波作用会被 PLL 的快速响应削弱。如果电网环境比较差,谐波多,可以把 ωn 降到 20Hz 到 30Hz,让锁相环对外部噪声更迟钝,代价是动态响应变慢。
举个例子说明取参过程:
如果希望在仿真里把闭环自然频率取在 25Hz 附近: ωn = 2π * 25 ≈ 157 rad/s ζ = 0.7 Kp ≈ 2 * 0.7 * 157 ≈ 220 Ki ≈ 157² ≈ 24650这里给的是标幺化建模场景下的起始值,实际样机要根据 dq 轴电压标幺值、采样周期和控制周期调整,不能直接当最终值。真正调试时,我习惯先把 PLL 的两个积分器初值设置为 50Hz 对应的角频率,再用一个小幅频率突变验证响应速度。
3.3 频率自适应回路为什么会振荡
DSOGI-PLL 里最容易被忽视的是频率反馈回路的稳定性。
PLL 输出频率 ω 进入 SOGI-QSG 的中心频率后,相当于在原有锁相环里又加了一条惯性路径。如果 SOGI 自身响应偏慢,PLL 又在高频段给了较高增益,整个回路就可能出现低频振荡。
调试时遇到角度来回摆动,不要只把锅甩给 PI 参数。可以先断开 SOGI 的频率反馈,把中心频率固定在 100π 上跑一次,看看 PLL 本身是否稳定。若固定频率后没问题,加上反馈就振荡,说明 SOGI 和 PLL 的总带宽匹配不合理,要么降低 PLL 带宽,要么增大 SOGI 的 k 值让它响应更快一些。
频率反馈还有一个工程细节:反馈量最好经过限幅,比如限制在 48Hz 到 52Hz 对应范围,避免启动瞬间因为角度误差过大,把估计频率冲到异常值。限幅不是为了限制结果,而是防止积分器饱和后恢复太慢。
| 参数 | 作用 | 常见起始范围 | 调试原则 |
|---|---|---|---|
| SOGI 的 k | 决定正交信号带宽和动态 | 0.5 ~ 2.0 | 先固定,再调 PLL |
| PLL 自然频率 ωn | 决定锁相响应速度 | 20Hz ~ 50Hz | 谐波多取低,动态快取高 |
| PLL 阻尼 ζ | 决定超调和稳定性 | 0.5 ~ 0.8 | 不能过低 |
| 频率反馈限幅 | 防止启动时频率过冲 | 48Hz ~ 52Hz | 根据地区电网频率调整 |
4. 离散实现与仿真建模的落地细节
4.1 用两积分器结构写离散代码
连续域模型看着清楚,但放到实际控制器里,必须转成离散算法。DSOGI-PLL 最推荐的不是直接对传递函数做 Z 变换,而是保留两积分器结构,在每个采样周期内更新积分器状态。
单个 SOGI 的离散伪代码可以这样写:
errAlpha = vAlpha - vAlphaOut; vAlphaOut += Ts * (kSo * freq * errAlpha - freq * qvAlpha); qvAlpha += Ts * freq * vAlphaOut; errBeta = vBeta - vBetaOut; vBetaOut += Ts * (kSo * freq * errBeta - freq * qvBeta); qvBeta += Ts * freq * vBetaOut;这段是欧拉法的离散示意。实际工程中,如果采样周期比较大,建议使用二阶离散方法或者 Tustin 变换,否则在高中心频率或较大 k 下可能出现数值误差。上面写法里,每次更新要用上一次循环的 vAlphaOut、qvAlpha 等旧值,不要在同一个周期里用刚更新完的值再去计算 qvAlpha,否则会产生隐式耦合,使离散模型和连续模型偏差变大。
初值也需要注意。所有 SOGI 的积分器初始值设为 0,PLL 的相位 θ 初始值如果和真实相位相差接近 180°,启动瞬间正序分离可能出现明显振荡。更稳妥的做法是在启动前先估算一次初始相位,或者把 PLL 的初始角频率设置为 100π,并让 θ 从 0 开始,同时接受一小段启动过渡过程。
4.2 离散化误差体现在哪里
离散化误差并不会让 DSOGI 完全失效,而是会让正交信号的幅值和相位产生偏差,尤其是在频率偏移或低采样率下。
假如系统采样周期是 1ms,50Hz 信号一个周期只有 20 个采样点,欧拉法带来的相位误差会比较明显。如果 SOGI 和 PLL 都建立在离散误差上,最终角度和真实电网正序角度之间会有系统性相位差。对于 APF 来说,这个相位差会直接影响谐波提取的准确性,表现为补偿后残余电流偏大。
因此,当仿真结果和理论看起来都正常,但 APF 补偿效果不理想时,要回头检查采样频率和离散化方式。常见选择是 10kHz 以上采样,这样每个 50Hz 周期有 200 个点,欧拉法勉强可用;如果有条件,用 Tustin 变换或更高精度积分会更稳。
4.3 最小可验证模型怎么建
不管是用 Simulink 还是自己的程序验证,我都建议把 DSOGI-PLL 模型拆成层级清晰的小模块:
- 电网电压源模块:输出可设置三相不平衡和 5、7 次谐波。
- Clarke 变换模块。
- 两个独立的 SOGI-QSG 模块。
- 正负序分离模块。
- SRF-PLL 模块。
- 频率反馈模块。
第一次验证不要加太多信号。先用三相平衡、无谐波的电网跑通,确认 PLL 输出角度跟随实际电压正序角度;再把 A、B、C 三相电压设置成不平衡,比如 A 相跌落 20%,观察 vq 是否仍然能收敛到 0;最后再加入谐波和频率偏移。
这样一层层往上加,出现问题时才能定位到具体模块。如果一上来就把所有非理想情况都加上,波形不对时很难判断是 SOGI 参数问题、PLL 参数问题,还是正负序分离公式的符号问题。
5. 有源电力滤波器场景下的验证与扩展
5.1 三类典型验证工况
APF 里用 DSOGI-PLL,不能只看它在理想电网下能不能锁相,要看它在电网异常时能不能扛住。建议至少验证以下三类工况。
第一类是不平衡电压跌落。模拟 A 相电压跌落 20%,持续时间 0.5 秒。观察 DSOGI-PLL 输出的 θ 在跌落瞬间是否出现明显阶跃。若角度只是短暂平滑过渡,dq 轴 q 分量在动态后回到零,说明正负序分离在起作用。
第二类是电压谐波。加入 5 次和 7 次谐波,谐波含量可以按 5% 左右设置。此时重点观察 PLL 输出角频率中是否含有明显的高频波动。如果波动过大,应该降低 PLL 带宽或增强前级滤波,而不是盲目增大 PI 增益。
第三类是频率偏移。把电网频率从 50Hz 缓慢变到 50.3Hz。这个工况用来验证频率自适应回路是否正确。好的 DSOGI-PLL 应该能跟踪频率变化,SOGI-QSG 的中心频率也会跟着移动,最终锁相误差不随时间累积。
5.2 如何用输出角度做补偿指令提取
有源电力滤波器的最终目标是把负载谐波电流补偿掉。DSOGI-PLL 给出的 θ 和 sinθ、cosθ,通常要送到负载电流的同步坐标系变换中。
一个常见的 dq 谐波提取结构可以这样理解:
先采集负载电流,做 Clarke 变换得到 iα、iβ。再使用 DSOGI-PLL 输出的 θ 做 Park 变换,得到 id、iq。在这个旋转坐标系下,基波正序有功、无功电流变成直流量,谐波电流变成交流分量。把交流分量提取出来,反变换后就是补偿指令电流。
这个过程里,θ 的准确性直接决定基波和谐波能不能被正确分类。如果 θ 滞后真实相位 2°,那么本应是直流的基波正序电流在 dq 轴上会出现低频波动,导致低通滤波器无法干净滤除,最终谐波提取不准确。
所以验证 DSOGI-PLL 时,不要只看锁相波形美观,还要把它和整个 AP