参考
(51条消息) Clark变换与Park(派克)变换_park变换_feiyingzaishi的博客-CSDN博客
B站木修于淋 彻底搞懂电力电子中的坐标变换
【电力电子】坐标变换的可视化及其解释_哔哩哔哩_bilibili
基于SOGI的锁相环的代码实现-CSDN博客
电力电子坐标变换
如果系统输出是三相平衡(每相相差120°),那么可以用坐标变换将原本的三相的坐标系(三相正弦是按时间变化的),变换成两相,且值是稳定的。
三相静止坐标系
A=Umcos(wt)
B=Umcos(wt-2/3pi)
C=Umcos(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+B∗ej32π+C∗ej34π
利用欧拉公式
=
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)+C(−21−j23)=(A−21B−21C)+j(23B−23C)
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α=A−21B−21CVβ=23B−23C
这里的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}
(αβ)=(10−2123−21−23)∗
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∗(10−2123−21−23)∗
ABC
把A B C三相的余弦表达式带入第一个克拉克变换式子可以得到
V
α
=
3
2
U
m
∗
cos
(
w
t
)
V\alpha = \frac{3}{2}Um*\cos(wt)
Vα=23Um∗cos(wt)
V
β
=
3
2
U
m
∗
cos
(
w
t
−
π
2
)
V\beta=\frac{3}{2}Um*\cos(wt-\frac{\pi}{2})
Vβ=23Um∗cos(wt−2π)
可以看到上面有个系数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∗(10−2123−21−23)∗
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(wt−32π)−sin(wt−32π)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(wt−32π)cos(wt−32π)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∗(10−2123−21−23)∗
cos(wt)cos(wt−32π)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)=(0−1)
带入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)之间的关系。
具体的传递函数形式如下:
- 输入信号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+kωs+ω′2kω′s - 正交分量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+kω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重新计数
}
具体使用如下,
- 采样:定时器触发ADC采样(保证采样周期) DMA搬运数据 DMA中断处理采样信号
- 确定定时器频率,计算周期.
- 在DMA中断里调用dq_pll(wt更新的t就是采样周期).
- 调制,基波=cos(wt).因为这里使用的是cos型帕克板换.
调制部分我后面会再写文章说明的。
注意:如果你采样周期是20k(周期50us),那么在50us里就要完成dq_ppl,这里面有很多三角函数,如果你使用C库的三角函数大概率是算不完的(除非你主频足够牛逼).那么就需要使用STM32的DSP库.使用可以参考我之前的文章.
【电赛电力电子方向】STM32F4DSP库添加与问题记录
欢迎加入扣扣交流群,群号:807477521