ARTICLE DETAIL

资讯详情

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

DDSRF-PLL双同步坐标系锁相环原理与Simulink建模详解

DDSRF-PLL双同步坐标系锁相环原理与Simulink建模详解 你调试并网逆变器的时候肯定遇到过这种情况电网电压稍微不平衡或者带了点谐波传统的单同步锁相环SRF-PLL输出的角度就开始抖dq轴电压上全是二倍频纹波电流波形也跟着畸变。这时候很多人第一反应是去调PI参数但调到极限也压不住那100Hz的纹波因为问题根本不在PI带宽而在锁相环的结构本身。DDSRF-PLL双同步坐标系锁相环就是为了解决这个问题出现的。它的核心思路很直接既然不平衡电压里既有正序分量又有负序分量那就同时建两个旋转坐标系分别去跟再通过交叉解耦把两个坐标系之间的耦合干扰消掉。这篇文章就从这个思路出发把DDSRF-PLL的原理、参数设计和Matlab Simulink建模过程完整拆开讲一遍包括我实测踩过的坑和解耦参数整定的经验。适合正在做并网逆变器控制、PWM整流器或者SVG/APF这类装置被不平衡电网工况折磨得想骂人的同行参考。1. 整体设计与思路拆解1.1 传统SRF-PLL在非理想电网下的失效机理要理解DDSRF-PLL的巧妙之处得先搞清楚传统SRF-PLL到底死在哪儿。常规的SRF-PLL把一个静止坐标系下的三相电压做Clark变换得到αβ分量然后派克变换转到dq同步旋转坐标系让PI调节器把q轴分量压到零从而锁定电压矢量相位。这个结构在电网电压三相对称、波形干净的情况下非常好用PI输出就是准确的电网角频率和相位。但问题是一旦电网电压出现不平衡负序分量就会以二倍工频100Hz的频率出现在dq坐标系里。生活里打个比方你骑自行车追前面一个人如果那个人匀速直线走你调整方向就能稳稳跟上但如果他左右晃着走你就得不断疯狂扭车把结果还是歪歪扭扭的。具体到数学上假设不平衡电压的负序部分幅值是Vn它在正序dq旋转坐标系中会表现为角频率-2ω的扰动分量。PI调节器为了压制这个扰动必然会输出包含100Hz纹波的频率信息锁相环输出角度就带上了二倍频波动。更麻烦的是不平衡度越严重这个纹波越大。我实测过负序分量占正序5%时锁相角就有差不多2-3度的周期偏差电网电压跌落或者单相故障时更夸张锁相环基本就废了。1.2 DDSRF-PLL的双坐标系构型与解耦思想DDSRF-PLL的思路说白了就是“既然一个坐标系跟不上两个旋转方向的分量那就用两个坐标系分开跟”。它在原来的正序dq旋转坐标系基础上额外增加一个以负序角速度-ω旋转的dq坐标系。正序dq坐标系用来锁定正序电压相位负序dq坐标系用来跟踪负序分量大小。但只加坐标系还不够。数学上分析会发现正序坐标系的dq轴电压里除了直流正序分量还混入了负序分量的二倍频交流成分同时负序坐标系里的dq轴电压也混入了正序分量的二倍频交流成分。两个坐标系之间存在交叉耦合这就像两个人互相干扰一个人慢了会拖累另一个如果不做解耦处理两个环都会震荡。DDSRF-PLL的交叉解耦网络就是来处理这个问题的。它把两个坐标系的d轴和q轴输出交叉反馈通过低通滤波后的负序分量来估计正序环里混入的扰动幅值再从测量值里减掉。这样一来正序环的输出就只剩下纯净的正序分量了锁相角不再受不平衡度影响。整个结构看似比SRF-PLL多了一大块但其实就是加了半个坐标变换、一个解耦矩阵和几个低通滤波器在Simulink里搭建并不复杂。1.3 为什么选Simulink而不手写C代码验证我最早是先在Matlab脚本里写了完整的状态方程验证解耦逻辑正确后才去Simulink里搭模型的。但你要只是做工程验证我建议直接Simulink原因是这套结构中坐标变换、低通滤波器、PI调节器都是Simulink现成的基础库模块搭起来直观且不容易出错。尤其是调试阶段你可以直接把Scope挂到解耦网络的每个节点上看波形哪一环出了问题一眼就能定位比在脚本里print中间变量直观太多。Simulink模型验证完了之后还可以用Simulink Coder直接生成嵌入式C代码把PI参数、滤波器截止频率直接带到DSP工程里改改就能用。这也是为什么DDSRF-PLL的论文里几乎清一色是基于Simulink做仿真验证——它从算法验证到代码落地的路是通的没有断点。2. 核心细节解析与实操要点2.1 电压不平衡的瞬时值分解与两种序列分量DDSRF-PLL的所有公式都建立在不平衡电压可以分解为正序、负序和零序分量的基础上。三相三线制系统里零序不存在没有中线回路所以我们只关心正序和负序。设正序角速度为ω负序角速度为-ω三相不平衡电压可以写成[ v_{abc} V_p \begin{bmatrix} \cos(\omega t) \ \cos(\omega t - 2\pi/3) \ \cos(\omega t 2\pi/3) \end{bmatrix} V_n \begin{bmatrix} \cos(-\omega t \varphi_n) \ \cos(-\omega t 2\pi/3 \varphi_n) \ \cos(-\omega t - 2\pi/3 \varphi_n) \end{bmatrix} ]这里的Vp是正序电压幅值Vn是负序电压幅值φn是负序初始相位角。经过Clark变换到αβ坐标系后电压矢量变成了正序圆轨迹和负序圆轨迹的叠加。之前提到过这个叠加结果在静止坐标系里看是一个椭圆轨迹在正序dq坐标系里看就是直流加100Hz纹波。理解了这个分解你对DDSRF-PLL里所有模块的功能就清晰了。正序dq坐标系的作用是把Vp变成直流分量方便PI调节器锁定相位负序dq坐标系的作用是把Vn变成直流分量方便解耦网络估计它的幅值解耦网络则是把两个坐标系里对方的扰动项完全消除。2.2 交叉解耦网络的数学本质与模块级拆解交叉解耦网络的核心公式是这样的。正序d轴电压、正序q轴电压、负序d轴电压、负序q轴电压之间存在以下关系假设正序坐标系的相角是θ负序坐标系的相角是-θ那么经过低通滤波后得到的估计值(\bar{v}{dq}^p)和(\bar{v}{dq}^n)满足正序dq轴的电压测量值中混入的负序扰动为 [ v_{dq}^{p} \bar{v}{dq}^{p} \bar{v}{dq}^{n} \cdot e^{-j2\theta} ]负序dq轴的电压测量值中混入的正序扰动为 [ v_{dq}^{n} \bar{v}{dq}^{n} \bar{v}{dq}^{p} \cdot e^{j2\theta} ]写成矩阵形式就是教科书上常见的那个交叉解耦表达式。其中e^{-j2θ}和e^{j2θ}项就是把另一个坐标系里的直流估计值调制到当前坐标系的二倍频交流扰动。Simulink里实现解耦网络需要做以下几步把负序dq轴经低通滤波后的d轴和q轴估计值分别乘以cos(2θ)和sin(2θ)做坐标回旋得到要在正序d轴和q轴减掉的补偿量把正序dq轴经低通滤波后的d轴和q轴估计值分别乘以cos(2θ)和-sin(2θ)得到要在负序d轴和q轴减掉的补偿量物理上注意符号正序环里减掉的补偿项和负序环里减掉的补偿项它们的交叉符号是反的搞错了负负为正整个解耦就失效了。我见过很多人在这一步把符号搞反结果仿真波形跟SRF-PLL一样还是有纹波还以为解耦算法没用。实际上不是算法没用是反馈补偿的极性接反了。2.3 锁相角反馈路劲与坐标变换的高频细节DDSRF-PLL里的两个坐标系它们的角度一个来自锁相环输出θ另一个是-θ。你会在建模时看到坐标变换模块里分别用sin/cos(θ)和sin/cos(-θ)构造旋转矩阵。很多人容易忽略的是Simulink里的Trigonometric Function模块默认输入是弧度还是度单位一定要搞对。如果模型里PI输出的角频率积分量是弧度但三角函数模块设置的是degree模式输出坐标变换矩阵就全乱了锁相环输出会以极其诡异的方式发散。另外还有一个细节正序坐标系的Park变换矩阵我用的是等幅值变换也就是系数2/3那个版本。如果你之前做功率计算用的是等功率变换系数√(2/3)注意PI参数可能需要重新整定因为dq轴电压幅值差了√3倍同样的PI参数动态响应会不一样。仿真模型内部自洽就行但别混用两种变换系数否则调试时你找半天都找不出纹波是哪儿来的。3. 参数设计与Simulink模型搭建实录3.1 连续域与离散化一阶低通滤波器的截止频率整定参数设计是整个DDSRF-PLL建模里最玄学的部分但也是最有规律可循的。我直接把我实测下来比较稳的一套值分享给你。首先是解耦网络里的低通滤波器截止频率。这个滤波器的作用是仅让正序/负序分量各自对应的直流项通过滤掉坐标变换后残余的二倍频交流量。截止频率选高了滤波不够彻底解耦效果打折选低了动态响应变慢电网频率跳变后锁相环要很久才能重新锁定。我常用的经验公式是解耦低通滤波器的截止频率取锁相环PI带宽的1/5到1/10。举个例子如果电网额定频率50Hz你希望锁相环的PI带宽大概20-30Hz这个带宽对并网逆变器足够了那么解耦滤波器的截止频率选2-5Hz就合适。这个数值带来的时间常数是0.05秒级别对于电网故障后重新同步这种工况完全够用不会让人觉得锁相环反应迟钝。Simulink里我不用Continuous的Transfer Fcn做低通而是直接用一个一阶低通滤波器模块参数写2pifs。如果用离散化模型把连续域传递函数转成z域采样时间取10kHz用双线性变换离散化完全没有问题。滤波器的阶数就用一阶不要觉得一阶滤波效果不够解耦网络里重点是把直流项估计出来一级滤波就够了阶数升高只会增加相位延迟。3.2 PI调节器带宽设计及与解耦滤波器的参数配合锁相环的PI调节器决定了整个环路的动态特性。我设计PI参数的方法是先把环路近似成一个一阶系统来算再用仿真调一次。锁相环的等效被控对象在低频段是积分环节开环传递函数大约为[ G_{ol}(s) \frac{K_p K_v (s K_i/K_p)}{s^2} ]式中Kv是电压幅值相关的增益。把零点放在穿越频率的1/5到1/10处然后根据要求的相位裕度一般45度以上确定Kp。实际工程里我一般直接按表格选参考值再微调比如额定电压幅值归一化为1pu时Kp取200-400Ki取2000-5000这样锁相环带宽大部分落在20-50Hz范围。这里有一个配合关系很多人不知道解耦低通滤波器的截止频率要和PI带宽拉开差距至少5倍以上。否则解耦网络输出的补偿量本身就有动态延迟反而会在正序环里引入新的扰动源导致锁相角出现低频振荡。我的经验是PI带宽定在20-30Hz解耦滤波器定在2-3Hz模板稳定且动态可接受。3.3 Simulink模型搭建Step-by-Step实操步骤下面我按实际建模顺序把步骤走一遍你可以直接照抄着搭。第一步搭三相电压源与不平衡工况模拟用Three-Phase Source模块或直接用三个Sinusoid相加构造。我建议用信号源构造因为可以精确控制正序幅值、负序幅值、相角方便对比实验。三相电压表达式按前面的分解公式用几个增益、加法器和三角函数模块搭出来。把正序幅值设1.0pu负序幅值设0.05pu初始相角随便给一个非零值验证算法的不平衡适应能力。第二步Clark变换从abc到αβ直接用增益模块搭矩阵就行。输出两个信号Vα和Vβ。第三步正序Park变换和负序Park变换用两个坐标变换子系统分别以θ和-θ为旋转角。正序变换矩阵是[cosθ sinθ; -sinθ cosθ]作用于[Vα; Vβ]负序变换则是[cos(-θ) sin(-θ); -sin(-θ) cos(-θ)]注意这里不是简单的把-θ代进去算一遍就行而是要把旋转方向反过来本质上是坐标系的旋转方向不同。第四步交叉解耦网络在正序环里把负序d轴、q轴的估计值经过一个旋转矩阵变化作为补偿量减掉在负序环里把正序d轴、q轴的估计值经过相反的旋转矩阵变化作为补偿量减掉。这个旋转矩阵的角度就是2θ。第五步锁相环核心拿解耦后的正序q轴电压进PI调节器PI输出加前馈角频率2πf0积分输出就是锁相角θ和角频率ω。注意积分器初始值设成和A相电压初始相角一致的弧度值不然上电瞬间锁相环要额外花时间拉同步。第六步加测量与观察在正序dq轴输出、负序dq轴输出、锁相角θ、角频率ω这几个节点各挂一个Scope便于调试。θ的测量建议用Sawtooth模块搭个锯齿波清零逻辑看周期对不对。3.4 仿真参数设置与离散化注意事项仿真步长我建议用固定步长定在1e-5秒左右模拟电网50Hz周期0.02秒一个工频周期2000个仿真点足够看清波形细节。如果你要离散化到实际DSP的频率10kHz那仿真步长也设1e-4秒和控制器频率对齐。离散化时锁相环积分器需要换成离散积分器PI调节器用离散传递函数低通滤波器用离散一阶低通。这些Simulink库里都有现成模块但注意离散积分器的初值设置和你之前连续域一样要给初始相位否则结果完全不同。4. 常见问题与排查技巧实录4.1 解耦后锁相角还是带纹波三个最隐蔽的原因仿真跑完发现波形不理想别急着怀疑算法理论先按下面三个方向排查。我个人的经验是90%的情况都出在这些地方。第一个原因是补偿量符号接反了。交叉解耦补偿项在正序环和负序环里的符号方向是相反的你从公式推导一遍就知道正序环里减掉的是负序分量产生的二倍频扰动负序环里减掉的是正序分量产生的二倍频扰动如果两边都用同样的加减号补偿就变成了叠加纹波反而变大。判断方法很简单把负序幅值设成0如果解耦前后波形不一致说明符号有问题。第二个原因是低通滤波器相频特性带来的相位滞后。截止频率选得太靠近PI带宽时解耦补偿量本身存在相位滞后导致抵消不干净残留纹波表现为特定频率的低幅值波动。把截止频率再降低一些或者改用二阶低通通常能缓解。但代价是瞬态响应变慢要自己权衡。第三个原因是仿真步长过大导致采样混叠。很多人习惯性用auto步长结果Simulink在快速动态段自动放大步长坐标变换的高频分量被混叠成低频扰动看起来就像解耦不完全。改用固定步长1e-5秒后所有奇怪纹波都消失了。这个坑最隐蔽我建议你第一步先查仿真步长。4.2 电网频率跳变时DDSRF-PLL失锁恢复慢的处理电网频率不是恒定的50Hz故障或负荷突变时频率可能跳到49.5Hz甚至更低。DDSRF-PLL在频率跳变瞬间由于内部两个坐标系的旋转角速度都要重新适应解耦网络的低通滤波器会让估计值短暂偏离真值锁相环可能出现明显的相位冲击。我实测过的做法是给PI调节器输出加一个频率前馈把额定角频率2π×50直接加进去这样频率小范围偏移时PI只需做修正不需要从零开始追。这是标准做法Simulink里就是加一个常数加法器的事。另外把解耦低通滤波器的截止频率从2Hz稍微提高到3-4Hz也能加快解耦估计值的收敛速度。但你得接受正序dq轴上的残余纹波略微变大这就是动态和稳态的博弈。遇到电网电压幅值骤降比如跌落到0.5pu锁相环的PI增益还按正常运行工况设计的话动态响应会变慢。这时可以考虑按电压幅值归一化让PI增益除以电压幅值保证环路增益恒定。不过这是后话先跑通DDSRF-PLL基础模型再说。4.3 负序分量估计值稳态偏差校正技巧理论上DDSRF-PLL的负序dq轴估计值应该等于实际负序分量的幅值这样解耦补偿才准确。但低通滤波器毕竟是有限带宽实际估计值会存在幅度衰减和相位延迟。如果你在系统里需要精确的负序幅值比如做负序电流抑制这个偏差就不能忽略。最简单的修正方法对估计值做增益补偿补偿系数是低通滤波器在直流处的幅频响应。一阶低通在直流处增益准确为1但如果你用的不是理想的低通而是在离散域用双线性变换离散的注意检查离散化后的直流增益是否仍然是1。如果用的是二阶巴特沃斯直流增益也是1不需要补偿用其他结构就要小心了。另外还有一个工程细节负序dq轴估计值在进行解耦补偿时应该在低通滤波之后、补偿之前先把dq轴旋转角度的参考值锁到和电网频率一致。很多模型里直接拿锁相环输出的θ去算e^{-j2θ}当θ存在微小纹波时这个旋转因子会把纹波放大到补偿量里形成正反馈。这正是新手调DDSRF-PLL时最容易忽略的细节。4.4 锁相环PI参数与解耦滤波器的协同整定速查表我按多年调试经验整理一个参数配对的参考表针对50Hz系统、采样10kHz、归一化电压幅值1pu的工况。不同电压等级直接按标幺值用就行。PI带宽Hz解耦滤波器截止频率HzKp范围Ki范围适用场景10-201-2100-2001000-2500弱电网、电压畸变大要求稳态精度极高20-302-4200-4002000-5000常规并网逆变器、PWM整流器30-504-8400-8004000-10000对动态响应要求高的SVG/APF调参步骤建议按这个顺序先定PI带宽按经验设Kp和Ki然后按PI带宽的1/10左右设定解耦滤波器截止频率跑仿真看正序dq轴纹波残余和锁相角动态响应如果动态慢但稳态有纹波把解耦滤波器截止频率调高一点如果动态快但锁相角超调太大把PI带宽降低。反复两三次就能收敛到满意的参数组合。5. 模型扩展与工程落地价值5.1 从正负序分离到正负序电流控制DDSRF-PLL搭好之后你实际上等于免费获得了一个正负序电压分量实时估计器。这个价值比单纯锁相大得多。在并网逆变器控制里负序电流抑制是一个经典难题传统PI控制器只能控制正序电流负序电流会导致并网电流不平衡。用DDSRF-PLL输出的负序dq轴估计值你可以构造负序电流内环先把并网电流也做Clark/Park变换到正负序dq坐标系正序电流环用PI控制负序电流环也用PI控制然后把负序电压补偿量加到调制波上。这样逆变器在电网不平衡时也能输出三相对称并网电流。Simulink模型里只需复制电流环两个副本控制和调制逻辑完全复用。5.2 弱电网下的自适应频率跟踪改进分布式发电接入弱电网时电网阻抗较大电压畸变和谐波都很严重。DDSRF-PLL解耦网络能处理不平衡但对5、7次谐波无能为力因为它们会以6倍频纹波出现在dq坐标系中。这时可以扩展成多同步坐标系结构对5次谐波再建一个-6ω旋转坐标系对7次谐波建一个6ω旋转坐标系用同样的解耦思想处理。代价是模型复杂度和参数数量大幅上升。如果不想加那么多坐标系工程上更务实的方法是在DDSRF-PLL输出后级再串一个自适应陷波器或重复控制器滤除特定次谐波分量。比如锁相角输出前加一个中心频率100Hz的陷波器可以有效压制不平衡引起的残余纹波再加一个300Hz陷波器压制5/7次谐波影响。这两种组合在工业变频器里很常见且对参数漂移的鲁棒性比多坐标系结构好。5.3 从Simulink模型到嵌入式代码迁移的注意点最后说下模型落地。Simulink里调好的DDSRF-PLL要用在DSP或ARM上建议采用定步长离散模型采样频率和控制周期保持一致。生成的C代码里三角函数模块会被替换成查表或数学库调用运算量会有小幅上升。我个人的经验是DDSRF-PLL的交叉解耦网络在代码实现时务必把所有中间变量写上明确的物理单位注释否则三个月后回来看代码那些cos2θ乘来乘去的东西根本分不清是哪个补偿支路。另外低通滤波器离散化后的差分方程系数直接以定点数或浮点常量的形式写死在代码里不要用除法实时算既省DSP运算周期又避免数值截断误差。6. 写在最后的调试心得我前前后后搭过三版DDSRF-PLL模型。第一版在负序幅值设0.1pu时锁相角居然比传统SRF-PLL抖得更厉害折腾了一整天才发现是负序Park变换的旋转方向搞反了。第二版解耦效果好但频率跳变时老失锁后来加上频率前馈就好了。第三版总算能一次通过所有工况测试包括三相电压跌落、相位跳变、频率斜坡。这个过程的体会是DDSRF-PLL这种控制算法理论推导很重要但更关键的是每个中间节点的波形都要亲眼看过。Simulink比写C代码调试的优势就在这里你可以把解耦网络的每个估计值都拖到Scope里盯着它看动态下的收敛过程所有算法内部工作状态都是透明的。如果你也在搭这个模型建议你把正序和负序dq轴的四个估计值波形同时打开在电网电压从不平衡突变为平衡的瞬间观察它们如何平滑过渡。看到四个波形稳定交汇的那一刻你对DQ坐标变换和解耦的理解会比读十篇论文都深刻。
返回列表