[电赛电力电子方向]基于DQ坐标系的锁相环

参考

(51条消息) Clark变换与Park(派克)变换_park变换_feiyingzaishi的博客-CSDN博客
B站木修于淋 彻底搞懂电力电子中的坐标变换
【电力电子】坐标变换的可视化及其解释_哔哩哔哩_bilibili
基于SOGI的锁相环的代码实现-CSDN博客

电力电子坐标变换

如果系统输出是三相平衡(每相相差120°),那么可以用坐标变换将原本的三相的坐标系(三相正弦是按时间变化的),变换成两相,且值是稳定的。

三相静止坐标系

在这里插入图片描述
A=Umcos(wt)
B=Um
cos(wt-2/3pi)
C=Um
cos(wt+2/3*pi)
上面是三相静止坐标系,每个轴上的是对应相的值(按时间变化)。
三相可以合成一个向量,随着时间它可以在上面的坐标系里旋转。
合成向量可以用下面式子表示
V = A + B ∗ e j 2 π 3 + C ∗ e j 4 π 3 V = A+B*e^{j \frac{2\pi}{3}}+C*e^{j\frac{4\pi}{3} } V=A+Bej32π+Cej34π
利用欧拉公式
= A + B ( c o s ( 2 π 3 ) + j s i n ( 2 π 3 ) ) + C ( c o s ( 4 π 3 ) + j s i n ( 4 π 3 ) ) = A + B ( − 1 2 + j 3 2 ) + C ( − 1 2 − j 3 2 ) = ( A − 1 2 B − 1 2 C ) + j ( 3 2 B − 3 2 C ) =A+B(cos(\frac{2\pi}{3}) + jsin(\frac{2\pi}{3})) +C(cos(\frac{4\pi}{3})+jsin(\frac{4\pi}{3})) \\=A+B(-\frac{1}{2}+j\frac{\sqrt{3}}{2})+C(-\frac{1}{2}-j\frac{\sqrt{3}}{2}) \\=(A-\frac{1}{2}B-\frac{1}{2}C)+j(\frac{\sqrt{3}}{2}B-\frac{\sqrt{3}}{2}C) =A+B(cos(32π)+jsin(32π))+C(cos(34π)+jsin(34π))=A+B(21+j23 )+C21j23 =(A21B21C)+j(23 B23 C)
V = V α + j V β V=V\alpha+jV\beta V=Vα+jVβ
在这里插入图片描述
V α = A − 1 2 B − 1 2 C V β = 3 2 B − 3 2 C V\alpha = A-\frac{1}{2}B-\frac{1}{2}C \\V\beta=\frac{\sqrt{3}}{2}B-\frac{\sqrt{3}}{2}C Vα=A21B21CVβ=23 B23 C

这里的Vα Vβ就是克拉克变化后的坐标。

clark变换(ABC->αβ)

clark变换就是像上面,把三相分到两相。本质都是在描述那个合成矢量。
把式子整理成矩阵形式,如下
( α β ) = ( 1 − 1 2 − 1 2 0 3 2 − 3 2 ) ∗ ( A B C ) \begin{pmatrix} \alpha \\ \beta \\ \end{pmatrix}= \begin{pmatrix} 1 &-\frac{1}{2} &-\frac{1}{2} \\ 0 &\frac{\sqrt[]{3} }{2} &-\frac{\sqrt[]{3} }{2} \end{pmatrix}*\begin{pmatrix} A \\ B \\ C \end{pmatrix} (αβ)=(102123 2123 ) ABC
但一般你看到的并不是上面的式子,而是
( α β ) = 2 3 ∗ ( 1 − 1 2 − 1 2 0 3 2 − 3 2 ) ∗ ( A B C ) \begin{pmatrix} \alpha \\ \beta \\ \end{pmatrix}= \frac{2}{3}* \begin{pmatrix} 1 &-\frac{1}{2} &-\frac{1}{2} \\ 0 &\frac{\sqrt[]{3} }{2} &-\frac{\sqrt[]{3} }{2} \end{pmatrix}* \begin{pmatrix} A \\ B \\ C \end{pmatrix} (αβ)=32(102123 2123 ) ABC
把A B C三相的余弦表达式带入第一个克拉克变换式子可以得到
V α = 3 2 U m ∗ cos ⁡ ( w t ) V\alpha = \frac{3}{2}Um*\cos(wt) Vα=23Umcos(wt)
V β = 3 2 U m ∗ cos ⁡ ( w t − π 2 ) V\beta=\frac{3}{2}Um*\cos(wt-\frac{\pi}{2}) Vβ=23Umcos(wt2π)
可以看到上面有个系数3/2.
所以在第一个克拉克变换式子前面乘一个2/3把系数消去。
这也就是克拉克等幅值变换。
虽然克拉克变化可以把三相转换到两相垂直,但那个向量是旋转的,也就是说两相上的值都是一直在变化的。下面将介绍另一种变化能够静止描述合成向量。

park变换(αβ->dq)

既然合成向量旋转的,那么我们可以建立一个坐标系也旋转,只要坐标系旋转的速度与向量的速度相等,那么这个向量在这个坐标系里就是静止的了。
在这里插入图片描述
如上,dq坐标系是一个旋转的坐标系。
d = α ∗ cos ⁡ ( w t ) + β ∗ sin ⁡ ( w t ) q = − α ∗ sin ⁡ ( w t ) + β ∗ cos ⁡ ( w t ) d=\alpha*\cos(wt) + \beta*\sin(wt) \\ q=-\alpha*\sin(wt)+\beta*\cos(wt) d=αcos(wt)+βsin(wt)q=αsin(wt)+βcos(wt)
( d q ) = ( c o s ( w t ) s i n ( w t ) − s i n ( w t ) c o s ( w t ) ) ∗ ( α β ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} cos(wt) &sin(wt) \\ -sin(wt) &cos(wt) \end{pmatrix} * \begin{pmatrix} \alpha\\ \beta \end{pmatrix} (dq)=(cos(wt)sin(wt)sin(wt)cos(wt))(αβ)
带入克拉克变化等幅值变换形式
( d q ) = ( c o s ( w t ) s i n ( w t ) − s i n ( w t ) c o s ( w t ) ) ∗ 2 3 ∗ ( 1 − 1 2 − 1 2 0 3 2 − 3 2 ) ∗ ( A B C ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} cos(wt) &sin(wt) \\ -sin(wt) &cos(wt) \end{pmatrix} * \frac{2}{3}* \begin{pmatrix} 1 &-\frac{1}{2} &-\frac{1}{2} \\ 0 &\frac{\sqrt[]{3} }{2} &-\frac{\sqrt[]{3} }{2} \end{pmatrix}* \begin{pmatrix} A \\ B \\ C \end{pmatrix} (dq)=(cos(wt)sin(wt)sin(wt)cos(wt))32(102123 2123 ) ABC
( d q ) = ( c o s ( w t ) c o s ( w t − 2 π 3 ) c o s ( w t + 2 π 3 ) − s i n ( w t ) − s i n ( w t − 2 π 3 ) − s i n ( w t + 2 π 3 ) ) ∗ ( A B C ) \begin{pmatrix} d\\ q \end{pmatrix}=\begin{pmatrix} cos(wt) &cos(wt-\frac{2\pi}{3}) &cos(wt+\frac{2\pi}{3}) \\ -sin(wt) &-sin(wt-\frac{2\pi}{3}) &-sin(wt+\frac{2\pi}{3}) \end{pmatrix}* \begin{pmatrix} A \\ B \\ C \end{pmatrix} (dq)=(cos(wt)sin(wt)cos(wt32π)sin(wt32π)cos(wt+32π)sin(wt+32π)) ABC
在使用matlab时发现,park变换有两种形式
在这里插入图片描述
其实这是由于dq坐标系旋转起始位置不同导致的。上面的dq坐标系是与α轴也就是A轴对齐的。还有一种就是q轴与A轴对齐,也就是d轴滞后90°,如下
在这里插入图片描述
( d q ) = ( s i n ( w t ) − c o s ( w t ) c o s ( w t ) s i n ( w t ) ) ∗ ( α β ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} sin(wt) &-cos(wt) \\ cos(wt) &sin(wt) \end{pmatrix} * \begin{pmatrix} \alpha\\ \beta \end{pmatrix} (dq)=(sin(wt)cos(wt)cos(wt)sin(wt))(αβ)
( d q ) = ( s i n ( w t ) s i n ( w t − 2 π 3 ) s i n ( w t + 2 π 3 ) c o s ( w t ) c o s ( w t − 2 π 3 ) c o s ( w t + 2 π 3 ) ) ∗ ( A B C ) \begin{pmatrix} d\\ q \end{pmatrix}=\begin{pmatrix} sin(wt) &sin(wt-\frac{2\pi}{3}) &sin(wt+\frac{2\pi}{3}) \\ cos(wt) &cos(wt-\frac{2\pi}{3}) &cos(wt+\frac{2\pi}{3}) \end{pmatrix}* \begin{pmatrix} A \\ B \\ C \end{pmatrix} (dq)=(sin(wt)cos(wt)sin(wt32π)cos(wt32π)sin(wt+32π)cos(wt+32π)) ABC
上面的第一个dq也叫cos型,第二个叫sin型.
假如你需要你的dq坐标系的d轴与合成向量重合(这是常用的情况,比如FOC控制中需要把q轴分量闭环成0)。
将A B C三相(幅值为1)带入cos型
( d q ) = ( c o s ( w t ) s i n ( w t ) − s i n ( w t ) c o s ( w t ) ) ∗ 2 3 ∗ ( 1 − 1 2 − 1 2 0 3 2 − 3 2 ) ∗ ( c o s ( w t ) c o s ( w t − 2 π 3 ) c o s ( w t + 2 π 3 ) ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} cos(wt) &sin(wt) \\ -sin(wt) &cos(wt) \end{pmatrix} * \frac{2}{3}* \begin{pmatrix} 1 &-\frac{1}{2} &-\frac{1}{2} \\ 0 &\frac{\sqrt[]{3} }{2} &-\frac{\sqrt[]{3} }{2} \end{pmatrix}* \begin{pmatrix} cos(wt) \\ cos(wt-\frac{2\pi}{3}) \\ cos(wt+\frac{2\pi}{3}) \end{pmatrix} (dq)=(cos(wt)sin(wt)sin(wt)cos(wt))32(102123 2123 ) cos(wt)cos(wt32π)cos(wt+32π)
这里dq坐标系和ABC都取wt,也就是说向量与d轴重合。
计算后得到
( d q ) = ( 1 0 ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} 1\\ 0 \end{pmatrix} (dq)=(10)
刚好满足d轴值与向量幅值相等。而带入sin型得到
( d q ) = ( 0 1 ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} 0\\ 1 \end{pmatrix} (dq)=(01)
所以使用cos型帕克变换要ABC都为cos型的。这里你可能不能理解,后面说锁相环会提到这个的。
同理将sin型的ABC三相分别带入cos型帕克变换有,
( d q ) = ( 0 − 1 ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} 0\\ -1 \end{pmatrix} (dq)=(01)
带入sin型帕克变换有
( d q ) = ( 1 0 ) \begin{pmatrix} d\\ q \end{pmatrix}= \begin{pmatrix} 1\\ 0 \end{pmatrix} (dq)=(10)

锁相环

基本原理

在这里插入图片描述
上面是一张网上找到的锁相环示意图。
主要就是参考信号,鉴相器,压控振荡器(调节输出频率的),下面程序分频器是采回来做闭环的。
在这里插入图片描述
锁相环基本思路就是判断相位偏差,然后加快频率或者减少频率去追。比如参考信号超前实际信号,那么可以控制w增加,接近相位后逐渐减小直道同频同相。
dq坐标系有个角度wt,它可以用作输出正弦波输出的相位。也就是上面的A相,BC相就是在它的基础上加减2π/3.而如果你是用了dq坐标系的wt那么就是说,你输出的正弦波合成矢量是与d轴对齐的.然后再根据上面推导的,如果是使用cos型帕克变换就要用cos型三相分量.
现在你的输出向量就是d轴,那么在dq坐标系下,参考信号向量与d轴的偏差相位就是他们实际差的相位.而为了同频同相,那么就要使得参考信号在q轴上的分量为0.
在这里插入图片描述

SOGI

上面是针对三相信号的,那么如果是单相信号,相当于只有一个A相,那么怎么使用上述的锁相环呢?
可以想到,你把单相信号相位加(π/2)就是beta轴了.也就得到了alpha和beta分量,后面就和三相处理方式一样了.
得到bete轴可以用延时方式,也可以用SOGI.
因为SOGI可以对参考信号(一般为电网,谐波含量大)进行滤波,所以更推荐使用SOGI.
广义二阶积分器(Second-Order General Integrator,SOGI)的传递函数在描述其频率响应和动态特性方面起着关键作用。它通常包含两个关键的传递函数:一个是与输入信号v(s)和输出信号v’(s)之间的关系,另一个是与正交分量q和输出信号v’(s)之间的关系。

具体的传递函数形式如下:

  1. 输入信号v(s)与输出信号v’(s)之间的传递函数D(s)可以表示为:
    D ( s ) = v ′ ( s ) v ( s ) = k ω ′ s s 2 + k ω s + ω ′ 2 D(s) = \frac{v'(s)}{v(s)} = \frac{k\omega's}{s^2 + k\omega s + \omega'^2} D(s)=v(s)v(s)=s2+s+ω′2kωs
  2. 正交分量q与输出信号v’(s)之间的传递函数Q(s)可以表示为:
    Q ( s ) = q v ′ ( s ) v ( s ) = k ω ′ 2 s 2 + k ω s + ω ′ 2 Q(s) = \frac{qv'(s)}{v(s)} = \frac{k\omega'^2}{s^2 + k\omega s + \omega'^2} Q(s)=v(s)qv(s)=s2+s+ω′2kω′2
    在上述公式中,ω’代表系统的共振频率,ω代表输入信号的频率,而g是广义二阶积分器的控制参数。这些参数可以根据具体的应用需求进行调整,以实现所需的滤波或积分效果。
figure()
subplot(1,2,1)
sogi_k=0.1;sogi_w0=2*pi*50;sogi_Gs1=sogi_k*sogi_w0*s/(s*s+sogi_k*sogi_w0*s+sogi_w0*sogi_w0);bode(sogi_Gs1);hold on;
sogi_k=1;sogi_w0=2*pi*50;sogi_Gs1=sogi_k*sogi_w0*s/(s*s+sogi_k*sogi_w0*s+sogi_w0*sogi_w0);bode(sogi_Gs1);hold on;
sogi_k=10;sogi_w0=2*pi*50;sogi_Gs1=sogi_k*sogi_w0*s/(s*s+sogi_k*sogi_w0*s+sogi_w0*sogi_w0);bode(sogi_Gs1);hold on;
legend('K=0.1','K=1','K=10');title('变K,sogi-alpha')

subplot(1,2,2)
sogi_k=0.1;sogi_w0=2*pi*50;sogi_Gs2=sogi_k*sogi_w0*sogi_w0/(s*s+sogi_k*sogi_w0*s+sogi_w0*sogi_w0);bode(sogi_Gs2);hold on;
sogi_k=1;sogi_w0=2*pi*50;sogi_Gs2=sogi_k*sogi_w0*sogi_w0/(s*s+sogi_k*sogi_w0*s+sogi_w0*sogi_w0);bode(sogi_Gs2);hold on;
sogi_k=10;sogi_w0=2*pi*50;sogi_Gs2=sogi_k*sogi_w0*sogi_w0/(s*s+sogi_k*sogi_w0*s+sogi_w0*sogi_w0);bode(sogi_Gs2);hold on;
legend('K=0.1','K=1','K=10');title('变K,sogi-beta')

在这里插入图片描述

function [Ualpha, Ubeta] = sogi_fun(ugird, w0)  
    persistent  integral_2;
    persistent  integral_3;
    if isempty(integral_2)
       integral_2=0; 
    end
    if isempty(integral_3)
       integral_3=0; 
    end
    x_a=(ugird - integral_2)*1;
    integral_2=integral_2+w0*(x_a-integral_3)* 0.00005;
    Ualpha = integral_2;
    integral_3 = integral_3 + w0*integral_2* 0.00005;
    Ubeta = integral_3;
end

上面是matlab写的测试程序.SOGI需要参考信号与频率.频率的话直接用锁相环最后锁出来的W.
在这里插入图片描述
第一个波是输入信号,第二个是过sogi后的α分量,第三个β分量.可以看到过sogi后得到延时90°的向量.

附:单相逆变器锁相环部分代码

void Sogi_init(SOGI_t *SOGI_Struct, float t)
{
	SOGI_Struct->integral_2=0;
	SOGI_Struct->integral_3=0;
	SOGI_Struct->samp_t = t;
}

void Sogi_fun(SOGI_t *SOGI_Struct)
{

    float x_a;
    x_a=(SOGI_Struct->ualfa_0 - SOGI_Struct->integral_2)*k_sogi;
    SOGI_Struct->integral_2=SOGI_Struct->integral_2+SOGI_Struct->Ugird_W0*(x_a-SOGI_Struct->integral_3)*SOGI_Struct->samp_t;
    SOGI_Struct->SOGI_Ualfa = SOGI_Struct->integral_2;
    SOGI_Struct->integral_3 = SOGI_Struct->integral_3 + SOGI_Struct->Ugird_W0*SOGI_Struct->integral_2*SOGI_Struct->samp_t;
    SOGI_Struct->SOGI_Ubeta = SOGI_Struct->integral_3;
}
/**
 * @brief 基于dq的锁相环
 * 
 * @param ualfa_1 alpha
 * @param ualfa_q beta
 * @param t 采样时间
 */
void dq_pll(float ualfa_1, float ualfa_q,float t, float *wt, float *w0)
{
    uq = arm_cos_f32(*wt) * ualfa_q - arm_sin_f32(*wt) * ualfa_1;	//帕克变化
	con_increase = zl_pid_increase(-1*uq,&PLL_Pid);					//增量式pid
    *w0 = 2*pi*50 - con_increase;
    *wt += *w0 * t;
    if(*wt >= 2*pi) *wt = 0;                 //计到2*pi重新计数          
}

具体使用如下,

  1. 采样:定时器触发ADC采样(保证采样周期) DMA搬运数据 DMA中断处理采样信号
  2. 确定定时器频率,计算周期.
  3. 在DMA中断里调用dq_pll(wt更新的t就是采样周期).
  4. 调制,基波=cos(wt).因为这里使用的是cos型帕克板换.
    调制部分我后面会再写文章说明的。
    注意:如果你采样周期是20k(周期50us),那么在50us里就要完成dq_ppl,这里面有很多三角函数,如果你使用C库的三角函数大概率是算不完的(除非你主频足够牛逼).那么就需要使用STM32的DSP库.使用可以参考我之前的文章.
    【电赛电力电子方向】STM32F4DSP库添加与问题记录

欢迎加入扣扣交流群,群号:807477521

### dq变换锁算法在MATLAB Simulink中的实现 #### 背景介绍 dq变换是一种常用的坐标转换方法,在电力电子领域广泛应用于三系统的分析与控制。通过将三静止abc坐标系下的变量转化为两同步旋转dq坐标系下的变量,能够简化控制器设计并提高动态响应性能[^1]。 #### dq变换基本原理 dq变换的核心在于利用Clarke变换和Park变换完成从三静止坐标到两旋转坐标的映射。假设输入的三压分别为ua、ub、uc,则可以通过以下公式计算出d轴分量ud和q轴分量uq: \[ \begin{aligned} & u_\alpha = \frac{2}{3}(u_a - \frac{1}{2}u_b - \frac{1}{2}u_c), \\ & u_\beta = \frac{\sqrt{3}}{3}(u_b - u_c). \end{aligned} \] 随后应用Park变换获得最终的d-q分量: \[ \begin{aligned} & u_d = u_\alpha \cos(\theta) + u_\beta \sin(\theta), \\ & u_q = -u_\alpha \sin(\theta) + u_\beta \cos(\theta), \end{aligned} \] 其中θ表示当前网角度位置[^3]。 #### SRF-PLL工作流程 同步参考帧锁相环(Synchronous Reference Frame Phase-Locked Loop, SRF-PLL) 是一种高效的锁技术。它主要依赖于dq变换提取网的角度信息,并通过闭调节使估计值趋近真实值。具体过程如下: 1. 使用低通滤波器(LPF) 对 d 和 q 分量分别处理; 2. 利用反正切函数 arctan(q/d) 计算瞬时角度偏差 Δθ; 3. 将Δθ反馈至PI控制器调整ωest (估算角速度),从而更新 θest (估算角度)。 #### MATLAB/Simulink模型搭建指南 为了验证上述理论,可以在MATLAB/Simulink境中构建完整的仿真境。以下是关键模块的设计思路: - **网信号源**:创建一个带有噪声干扰的理想三对称源作为测试对象。 - **Clarke & Park Transforms Blocks**:调用内置功能块执行必要的数学运算。 - **Loop Control Section**:加入 PI 控制器以及积分节形成稳定的 PLL 结构。 - **Performance Monitor Tools**:附加示波器观察各阶段输出特性变化情况。 下面展示了一个简单的代码片段用于初始化部分参数设置: ```matlab % 初始化条件设定 fsample = 1e4; % Sampling frequency Hz Ts = 1/fsample; fgrid = 50; % Grid fundamental freqency Hz tspan = linspace(0,0.2,Ts*fsample); omega_estimated = zeros(size(tspan)); theta_estimated = cumsum(omega_estimated)*Ts; for k=2:length(tspan) % 假定已知实际网状态... % 更新 omega_estimated[k], theta_estimated(k) end ``` #### 性能评估指标 针对所建立的系统模型可以从以下几个方面进行全面评测: - 静态误差范围是否满足工程需求? - 动态跟踪能力如何?是否存在明显超调现象? - 抗噪能力和鲁棒性表现怎样? ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值