最近帮一位做并网装置的朋友排查过流保护误动作,故障录波一打开,问题就清楚了:电网电压只出现了一次单相跌落,逆变器侧软件锁相环输出的同步角就开始以100Hz的频率来回摆动。这个现象在传统同步坐标系SPLL(SRF-PLL)里太典型了,三相电压一旦不平衡,负序分量混进dq轴,锁相角就会被二倍频扰动拽着走。后来把锁相环换成双二阶广义积分器结构的DSOGI-SPLL,同样的跌落工况,频率输出稳得几乎看不出波动。
这篇文章就把我从Simulink建模到对比仿真的完整过程写出来,重点放在两种结构的差异来源、正负序分离的实现细节,以及工程上真正需要注意的取舍。适合正在做并网逆变器、有源滤波器、动态电压恢复装置,或者刚接触锁相环想弄清楚SRF-PLL和DSOGI-SPLL到底差在哪的人。
1. 传统SPLL的"三板斧"结构,以及它在三相不平衡电网里吃的亏
1.1 从abc到dq:SPLL的开环链路
先说清楚传统SPLL的基本盘。三相电压经过Clark变换得到静止坐标系下的uα、uβ,再用锁相环输出的估计角度θ̂做Park变换,得到ud、uq。闭环控制的目标就是让uq等于0——因为当θ̂和真实电压矢量角度θ一致时,uq正好为零。PI调节器根据uq误差输出角频率修正量,再积分出θ̂,形成一个典型二阶闭环。
工作过程看起来顺理成章,但问题在于它假设了输入电压是理想对称的三相正弦量。只要电网稍微"不讲武德",这套结构就会露馅。
小信号分析一下,uq在锁相点附近近似等于Um×(θ-θ̂),其中Um是电压矢量的幅值。环路线性化之后是一个典型的二阶系统:PI参数Kp、Ki配合积分环节1/s,共同决定了锁相环的带宽和阻尼。
1.2 负序分量是怎么"混进"dq轴的:一倍频变两倍频
三相不平衡时,用对称分量法可以把电压分解成正序、负序、零序。负序分量在静止坐标系里以角频率-ω旋转,但Park变换是按正序方向+ω旋转的,所以负序分量进入dq坐标系后会以2ω的速度旋转。结果就是:uq不再是一个平稳的直流信号,而是被叠加了一个100Hz的正弦扰动。
这个扰动可不是个小问题。单相电压跌落30%的时候,通过对称分量法算下来,负序与正序幅值比大约在0.1到0.12之间。代入小信号关系,锁相角的稳态误差峰值大概有6到7度,角频率误差峰值按照2倍频关系折算,能达到每秒十弧度以上的波动——换算成工频等效跳变,就是将近10Hz的抖动。
我一开始以为这只是理论推导,结果Simulink里一跑,频率输出确实在50Hz附近以100Hz的频率大幅摆动。并网电流在这种锁相角下被迫跟着畸变,过流保护不误动才怪。
1.3 谐波进来时,SPLL只能用"带宽"硬扛
负序的问题还没解决,谐波又来了。5次、7次谐波经过Park变换之后,会在dq轴变成300Hz左右的扰动。理论上可以把PI带宽压低,把高频扰动滤掉,但带宽压低了,锁相环的响应速度也跟着变慢。并网设备在电网故障时往往要求锁相环尽快输出准确角度,这两者天然冲突。
我在实际项目中见过很多妥协方案:有的在PI输出后面串陷波器,专门滤2倍频或6倍频;有的把电压信号先过一个低通滤波器再进锁相环。这些方法在单一故障工况下有效,但工况一变(比如谐波频率偏移、多重故障叠加),参数就得重新调。
这也是DSOGI-SPLL出现的原因:它不是在SPLL外围打补丁,而是在源头上把正序分量给"提纯"出来。
2. SOGI的本质:在静止坐标轴里生成"干净且正交"的两相电压
2.1 二阶广义积分器的两个输出:一个带通,一个正交低通
SOGI的中文名容易把人吓住,其实它就是一组谐振器。它的传递函数有两条输出支路:
同相输出(d通道):
H_d(s) = k·ω'·s / (s² + k·ω'·s + ω'²)
正交输出(q通道):
H_q(s) = k·ω'² / (s² + k·ω'·s + ω'²)
其中ω'是SOGI的中心频率(或者说谐振频率),k是阻尼系数。在中心频率ω'处,d通道的输出幅值增益是1、相位偏移是0;q通道的输出幅值增益也是1,但相位滞后90度。是不是有点眼熟?对,它本质上是给静止坐标系下的单相信号配了一个正交分量。
d通道在中心频率附近是带通特性,偏离中心频率的信号会被衰减;q通道更接近低通特性,高频分量衰减更快。两个通道组合起来,就实现了"只认基波、滤掉干扰、同时构造正交信号"的效果。
2.2 DSOGI的正负序分离:四个信号如何凑出正序电压
DSOGI的全称是Dual Second Order Generalized Integrator,也就是在α轴和β轴各放一个SOGI。两个SOGI一共输出四个信号:v'α、q·vα、v'β、q·vβ。正负序分离的关键,就是这四个信号怎么交叉组合。
以滞后90度算子q的约定,正序分量提取公式如下:
vα+ = 0.5×(v'α - q·vβ) vβ+ = 0.5×(v'β + q·vα)
注意这里一定是交叉项:α轴的同相输出要和β轴的正交输出做差,β轴的同相输出要和α轴的正交输出做和。如果连错线,正序算出来是错的,负序更是提取不对。
验证逻辑也不复杂。对纯正序输入,q·vα约等于vβ,q·vβ约等于-vα,代入上式后正序原样保留、负序被抵消;对纯负序输入,q算子的关系反过来了,正序提取式自然输出0。这就是为什么DSOGI能分离正负序的根本原因。
2.3 k值到底取多少:一个阻尼系数背后的响应代价
SOGI里唯一可调的增益就是k。这个参数直接决定谐振器的带宽:
- k = √2是很多论文里的默认选择,幅频特性在基波附近有大约±10%的频率通带,兼顾动态响应和谐波抑制。
- k取小一些,比如0.5,谐波衰减更猛,但输入电压突跳后正交信号的建立时间明显变长。
- k取大一些,比如2,动态响应快了,但高次谐波也更容易漏进来。
我在仿真里对比过不同k值下的正交信号建立时间。k=√2时,阶跃扰动后大约两三个工频周期可以稳定;k=0.5时,需要五六个周期。这个差距在故障穿越这种对时间敏感的场合,会直接影响控制策略的切入时机。
还要特别注意一个细节:SOGI的中心频率ω'如果和电网实际频率不一致,d通道和q通道的幅值、相位关系都会失真,正负序分离也就不再准确。因此DSOGI-SPLL一定要把锁相环估计出的频率反馈给SOGI作为ω',形成完整的频率自适应闭环。这一条是很多初版仿真漏掉的。
3. Simulink里搭DSOGI-SPLL:模块划分、参数整定和最容易错的交叉连线
3.1 三相电压源直接用表达式生成,省去电力电子库的麻烦
做锁相环对比仿真,我的建议是不要一上来就用SimPowerSystems里的三相可编程电压源。虽然那个模块也能设不平衡和谐波,但毕竟要经过电气接口转换,而且电压波形受求解器影响,排查问题多一层干扰。
我在模型里直接用数学表达式搭建三相电压源:
ua = Um×cos(2πft) ub = Um×cos(2πft - 2π/3) uc = Um×cos(2πft + 2π/3)
不平衡工况就把某一相幅值改成0.7倍;谐波工况直接在表达式里叠加5次、7次分量,比如加一项0.15×Um×cos(2π×250t)。这样每个分量的幅值、相位都清清楚楚,想调哪个调哪个。
唯一要注意的是仿真步长。正弦表达式用固定步长求解时,如果步长设得太大,波形会呈阶梯状,谐波分析结果就不准。我建议用固定步长10微秒,配合ode4求解器,50Hz下每个工频周期有2000个采样点,足够支撑锁相环和谐波对比的精度。
3.2 SOGI用状态方程搭,方便把锁相环频率实时反馈回来
为什么不用现成的传递函数模块?因为Simulink的Transfer Fcn模块参数是固定常数,而DSOGI-SPLL需要把锁相环输出的频率估计值实时反馈给SOGI,让ω'跟着电网频率走。这时候用状态方程手动搭建最灵活。
SOGI的状态方程写法如下,输入为u,输出为v_d和v_q:
x1_dot = x2 x2_dot = -ω'²×x1 - k×ω'×x2 + u v_d = k×ω'×x2 v_q = k×ω'²×x1
这里面x1、x2是两个积分器的状态量,ω'是外部输入端口。用Simulink积分器加增益模块就能搭出来,两个SOGI分别接uα和uβ就行。
有一个仿真中很实际的坑:ω'在启动瞬间如果从0开始,SOGI的谐振频率会从0慢慢爬升,锁相环启动时间会被拉长。我习惯把ω'反馈的初值直接设成2π×50,这样一开机就在额定频率附近,省去启动阶段的频率搜索过程。
3.3 正负序分离模块的符号坑:滞后90度算子的交叉项别接反
这是整个模型里最容易接错的地方,务必单独拎出来说。SOGI的q输出是滞后90度,这一点定下来之后,正序提取公式就是前面给的:
vα+ = 0.5×(v'α - q·vβ) vβ+ = 0.5×(v'β + q·vα)
有些资料里用的是"超前90度"的定义,公式里的加减号会全部反过来。如果你参考了一篇文献搭模型,一定先确认它的q算子到底哪个方向,不然仿真波形会莫名其妙地出现正负序无法分离的现象。
我在模型里把四个SOGI输出分别引出,然后通过增益0.5和求和模块组合。连线时心里默念:α轴的同相分量跟β轴的正交分量做差,β轴的同相分量跟α轴的正交分量做和。接完之后用纯正序输入测一下输出,如果vα+等于vα且vβ+等于vβ,说明连线正确。
3.4 锁相环PI参数整定:从二阶闭环直接算Kp和Ki
SPLL和DSOGI-SPLL后面的PLL部分在结构上没有区别,PI参数也可以沿用同一套。为了方便设计,建议把电压进行标幺化处理,送入锁相环的电压矢量为1的时候,推导最简单。
闭环特征方程近似为:
s² + Kp×s + Ki = 0
所以有:
ζ = Kp / (2√Ki) ωn = √Ki
如果希望阻尼比ζ=0.707,自然频率ωn=2π×40≈251rad/s,那么Ki直接是ωn²,约63000左右;Kp等于2ζωn,约355。这个参数下,锁相环的闭环带宽大约40Hz,对100Hz负序扰动有一定衰减,但压不住,对外正好能体现出DSOGI的优势。
注意,如果不用标幺化而是直接用实际电压幅值输入,公式里要额外乘一个幅值增益。我在仿真里统一除以电压峰值做归一化,一条链路下来不需要来回换算,少踩一个坑。
下表是我在模型里用到的核心参数:
| 项目 | 参数值 | 说明 |
|---|---|---|
| 额定频率 | 50Hz | 电网基频 |
| 电压幅值(标幺) | 1.0 | Park变换前归一化 |
| SOGI阻尼系数k | √2 | 默认折衷取值 |
| SOGI中心频率初值 | 2π×50 | 启动即额定 |
| PLL自然频率 | 2π×40 | 对应ωn≈251 |
| PLL阻尼比 | 0.707 | 二阶最优阻尼 |
| 仿真步长 | 10μs | ode4固定步长 |
杆这个参数组合跑下来,稳定性和响应速度都比较均衡。
4. 四组对比仿真:DSOGI的优势和代价都是量化的
4.1 理想平衡电网:PLL部分的响应差异
先做基准工况:三相平衡、电压幅值标幺1.0、频率50Hz,0.2秒时把初始相位加入一个30度的跳变,看锁相环动态跟踪过程。
传统SPLL的相位响应很快,超调量也就10%左右,大约两三个工频周期进入稳态;DSOGI-SPLL的相位响应会慢一些,因为输入到PLL之前多了一级SOGI加正负序分离,等效于在环外增加了一个滤波环节,阶跃响应要多出几十毫秒的过渡时间。
这个差距在平衡电网下看起来是缺点,但换来的是非理想工况下更干净的正序电压。做锁相环对比研究,一定不能只看平衡工况下的响应速度,那是SPLL的主场。
4.2 单相跌落30%:频率波动从十几赫兹压到0.5赫兹以内
然后是重头戏。在0.3秒时把A相电压幅值从1.0瞬间降到0.69(即跌落31%),持续0.2秒后恢复。
传统SPLL在这个工况下的频率输出直接"发疯"了:以50Hz为中心,叠加了一个接近100Hz的波动,峰值偏差大约正负6到8Hz,锁相角误差也在正负6度左右摆动。这个结果和前面的对称分量分析基本吻合。
换成DSOGI-SPLL之后,频率输出在跌落瞬间有短暂的过渡过程,之后基本稳定在50Hz附近,残余波动压在0.5Hz以下,锁相角纹波小于0.5度。原因很直接:负序电压在进入Park变换前就被正负序分离模块剔除了,PLL看到的始终是干净的正序电压。
坦率地说,DSOGI并非瞬间"稳住"——在跌落发生后的第一个20毫秒内,SOGI需要建立新的正交信号,频率输出还是有一个小台阶,但这和SPLL那种持续振荡完全是两个量级。
4.3 谐波污染下的稳态相位纹波
再叠加谐波工况:电压在基波基础上加入15%的五次谐波和10%的七次谐波,模拟非线性负载占比很高的电网环境。
传统SPLL的θ输出会出现明显的六倍频纹波,也就是300Hz,峰峰值大概2到3度。这已经会影响并网电流的THD,做高精度并网的话基本不可接受。
DSOGI-SPLL在这个工况下的纹波取决于SOGI的k值。k=√2时,纹波能压到0.5度左右;把k降到0.707,纹波更小,但动态响应又慢一截。如果你想在强谐波环境下用DSOGI,建议在动态响应和稳态精度之间选一个k,而不是无脑采用√2。
4.4 频率阶跃工况:动态速度与平滑度不可兼得
最后一组工况模拟弱电网下频率漂移:在0.3秒时电网频率从49.5Hz瞬时跳到50.5Hz。
传统SPLL因为环路带宽高,能在大约三到四个工频周期内把估计频率调整到50.5Hz,但有10%到20%的超调;DSOGI-SPLL因为SOGI的自适应频率反馈有一个重新收敛的过程,整体调节时间更长,大约五到六个工频周期,不过过渡曲线非常平滑,几乎没有超调。
这对微电网和弱电网场景其实是个优点:频率估计不超调,意味着逆变器输出功率不会跟着锁相环一起来回冲。
四组工况的量化汇总如下:
| 工况 | 传统SPLL | DSOGI-SPLL |
|---|---|---|
| 平衡电网相位跳变 | 2~3个周期锁定,有超调 | 锁定更慢,约多20~30ms |
| 单相跌落30% | 相位纹波±6°,频率波动±6~8Hz@100Hz | 相位纹波<0.5°,频率波动<0.5Hz |
| 5次15%+7次10%谐波 | θ纹波2~3°@300Hz | θ纹波0.3~0.5°(k=√2) |
| 频率阶跃1Hz | 3~4个周期收敛,有超调 | 5~6个周期收敛,无超调 |
仿真下来对DSOGI的定位很清楚了:它不是"更快的锁相环",而是一个"在畸变环境下依然干净的锁相环"。
5. 我的几点实践体会:这个方案不是万能的,用之前先看清楚工况
5.1 DSOGI-SPLL的适用边界
用DSOGI-SPLL两年多,一个最深的感受是:方案选型要对着工况来,别逢人就推荐DSOGI。
如果你的设备接入的是强电网,电压畸变率很低,三相基本平衡,传统SPLL结构简单、参数好调、动态响应快,完全够用。强电网环境下硬上DSOGI,反而是给自己找麻烦——多了一堆参数要调,动态响应还变慢了。
但如果你做的是弱电网设备、微电网逆变器、有源滤波器这类东西,电网里什么妖魔鬼怪都可能出现,DSOGI的价值就体现出来了。它最大的贡献不是把锁相精度从1度提到0.01度,而是把负序、谐波这些让人头疼的扰动挡在PLL环路之外,让后面整条控制链路不用跟着锁相环一起遭殃。
5.2 从Simulink到嵌入式实现的两个提醒
最后说两个把仿真模型搬到嵌入式平台时容易踩的坑。
第一个坑是离散化。Simulink里用连续积分器搭的SOGI,到了DSP上必须写成递推方程。如果用双线性变换离散化,注意谐振频率会发生偏移,通常需要做预畸变校正。如果不校正,SOGI的中心频率会偏几个赫兹,正负序分离效果直接打折。
第二个坑是状态量数值尺度。我在前面给的SOGI状态方程里,v_q = k×ω'²×x1,x1这个状态量在电压标幺化之后数值很小。用浮点MCU还好,如果你用的是定点处理器,一定要提前做Q格式转换,否则低通支路会出现严重的量化噪声。
还有一个启动细节:频率反馈ω'的初值务必给到接近50Hz的位置,同时把SOGI的两个积分器初值设成0。这样冷启动时不会出现频率搜索过程,锁相环能快速进入跟踪状态。实际测试中,这个初值设置能把启动时间缩短三分之一以上。
这套模型我至今还留着,每次遇到电网同步的新问题就拿出来跑一遍对比。DSOGI-SPLL和SPLL的本质差异,不在于谁更先进,而在于它们对电网畸变的耐受方式完全不同——一个靠外部滤波硬扛,一个靠内部结构消化。想明白这一点,你再看任何锁相环的改进方案,都会觉得清晰很多。