ARTICLE DETAIL

资讯详情

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

DSOGI-PLL在有源电力滤波器中的闭环建模与参数整定

DSOGI-PLL在有源电力滤波器中的闭环建模与参数整定 和有源电力滤波器打过交道的工程师大概率都有过这种经历仿真里 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 Fcnvα′ 对应的传递函数按 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_hatomega_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 FunctionLevel2_SRF_PLLPark 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-FLLFrequency Locked Loop在 SOGI 结构外再增加一个频率锁定环让 SOGI 中心频率自动跟踪电网频率。FLL 不需要相位信息只依靠频率误差信号来调整 w0在一定意义上比锁相环更直接。DSOGI-FLL 则在三相系统中同时解决频率适应和正负序分离。但这不等于项目里一定要用 FLL。如果系统只工作在固定频率电网额外引入 FLL 会带来新的稳定性和参数整定问题。先把固定频率下的 DSOGI-PLL 吃透再考虑频率自适应是更稳妥的学习路径。9.3 工程建议结合前面所有内容下面给
返回列表