http://blog.sina.com.cn/s/blog_531237a90101j7uw.html
https://blog.csdn.net/qq_27158179/article/details/82981229
相信做过电动机矢量控制或者直接转矩控制的朋友们肯定会对park,clark,ipark变换再熟悉不过了,肯定有人认为没有必要写这个东西。其实我写这个东西只是为了加深自己对上面三种变化的理解,因为今天我在调程序的时候,这三个变换把我弄糊涂了。
好,下面先来介绍这三个变换。
Clark变换。为什么会有这三个变换呢,从宏观上来讲,三相异步电动机是三相对称的交流供电,那么既然三相对称,我们可以用两相交流电来产生和三相交流相同的磁场效应,这样一来,我们只剩下了两相。经过变换之后,以前三相对称,相隔120o ,而经过变换之后,变成了两相想间隔90o的交流供电。计算过程如下:
变换过程如图1.1所示。
我们看到Ia,Ib和Ic都三相对称的交流,而Iq和Id是两相间隔90°的交流电。那么变换之后的效果如下图1.2所示。
在控制电动的过程中,clark变换的输入输出为图1.3所示。
图1.3 clark变换模块图
这里As和Bs是想间隔120°的输入正弦信号,而Alpha和Beta是想间隔90°的输出正弦信号。所以这的As和Bs分别对应上面的Ia和Ib,而Alpha和Beta分别对应上面的Id和Iq。
Park变换。我们知道,我们现在讨论的坐标都是在定子角度来看的,也就是静止坐标。我们知道,三相异步电动机是高耦合,非线性,多变量的系统,控制起来非常困难。矢量控制的思想就是要实现三相电动机的解耦控制,什么意思呢,就是要像控制直流电动机那样去控制三相电动机,可以分别对励磁电流和转矩电流分别控制,有人问,怎么实现,我回答:马上就可以实现。我们上面说了,clark变换就是将三相变成两相,但这时候还是静止的,但是相对转子是旋转的 ,我们要实现解耦控制,就要实现坐标相对转子静止,park变换这个时候可以派上用场了。Park变换的输入输出如图1.4所示。
图1.4 park变换模块图
上面Alpha和Beta是相对定子静止的两相正弦信号,想间隔90°,而Angle是转子相对定子的角度。通过这三个变量,可以将相对定子静止的坐标变成相对转子静止的坐标。变换过程如图1.5所示。
图1.5 park变换过程
上图中,Id和Iq分别对应输入的Alpha和 Beta,而ID和IQ分别对应Ds和Qs,经过这个变换之后,输出的 变量就变成了相对转子静止的两个变量了,这两个变量,ID对应励磁电流,IQ对应转矩电流,注意,这两个变量不再是正弦信号,而是直流分量了,因为要想直流电动机那样控制嘛。这样我们可以通过改变这两个变量来分别控制电动机的励磁和转矩,就是控制直流电动机那样。从上图可以退出Park变化公式如下:
其实话说回来了,这是从三相(相对定子静止)—>两相(相对定子静止)—>两相(相对转子静止)这个推导过程,那么我们在控制电动机的时候,肯定是倒着来的,也就是先设定励磁电流和转矩电流,然后变换到相对定子静止的两相,然后变换到相对定子静止的三相。我们来看逆推过程。
Ipark变换。从相对转子静止两相到相对定子静止的两相的变换就是ipark变换。该模块的输入输出如图1.6所示。
图1.6 ipark变换模块
大家看,上上面的park变换多么相似,其实就是park的逆变换。这里我就不想多说了。Ipark的变换公式如下:
再次看出和park变换之间的关系。上面的Ds和Qs分别是设定的励磁电流和转矩电流,是直流分量,而输出的是相间隔90°的正弦信号。那么怎么使相隔90°的信号变成相间隔120°的信号呢,这里要利用AVGEN_DQ模块,该模块的输入输出模型 如图1.6所示。
图1.6 SVGEN_DQ 模块
经过变换之后,生成Ta,Tb和Tc,这三个变量时PWM全比较单元的开关比例,说道这里应该很明白了吧,即使这三个数值乘上定时器的周期,就可以得出每个比较单元的比较数值了。
今天做了一个实验来验证这几个变换之间的关系,发现了很多问题,来和大家分享一下。
既然clark变换是将三相正弦信号变成两相信号,那么我们给它一个间隔120°的信号,输出应该是一个相间隔为90°的信号。我加上的相隔120°的信号时这样的:
clark1.As = _IQmpy(_IQcosPU(rampgen1.Out),_IQ(0.5)); //clark变换
clark1.Bs = _IQmpy(_IQdiv(clark1.As,_IQcosPU(rampgen1.Out)),_IQcosPU(rampgen1.Out - _IQdiv(_IQ(1.0),_IQ(3.0))));
上面是IQ格式,比较难理解,我们直观的写成如下格式:
Clark1.As = cos(ɵ)
Clark1.Bs = cos(ɵ + 2pi/3)
这两个相间隔120°问谁都说没错。我们加上这个信号后,clark输出信号如图1.7所示。
图1.7 clark变换输出
输出相间隔90°的信号没错。那么我们加到park变换上,输出应该是两个直流分量了。但是不是我想象中的那样子。如图1.8所示。
图1.8 park 变换输出
这是什么原因呢?为什么不是想我输入的那样子呢,为什么一个分量的数值几乎为零 ,另一个分量的数值却很大。为了验证程序的正确定,我直接将ipark变换的输出,加到park的输入,这样,又反变换回去,应该输出的是我之前设定的Ds和Qs的数值。加入park信号和park输出信号如图1.9和1.10所示。
图1.9 加入park信号
图1.10 park输出信号
这和我之前设定的Ds和Qs的数值几乎一样,我就纳闷了,为什么两次输入到park变换的波形一模一样,为什么会有不同的输出呢,后来我就用公式来推导导致这种结果的原因。推导如下:我加入的信号是这样的:
Clark1.As = cos(ɵ)
Clark1.Bs = cos(ɵ + 2pi/3);
参照上面的clark变换公式,我的clark输出的两个信号为:
Clark1.Alpha = cos(ɵ)
Clark1.Beta = sin(ɵ)
上面两个信号要输入到park中,在经过park变换之后,park的输出为:
Ds = 0.5(之前设定的幅值就是 0.5)
Qs = 0
我明白了为什么我的park输出为零了。那在看看从ipark中输出的信号为什么可以转变成之前设定的Ds和Qs,这两次信号的差异到底在哪里?直流分量经过ipark变换之后的输出为 :
Ipark1.Alpha = 0.2cos(ɵ) – 0.3sin(ɵ) = Acos(ɵ + B)
Ipark1.Beta = 0.2sin(ɵ) + 0.3cos(ɵ) = Asin(ɵ + B)
上面两个信号要输入到park中,注意,这里和我自己设定的信号有一个不同的地方,那就是相位不同,这里有一个差值B,这个差值也许就是导致park输出不同的原因吧。经过park变换,输出为:
Ds = 0.2
Qs = 0.3
我这之后突然明白,其实Ds和Qs的数值不只是决定了正弦信号的幅值,也同时决定了正弦信号的相位偏移,而我输入的信号,默认相位偏移为0,所以就得出,一个数值为0.5,而另一个为0。这样我把信号增加了一个偏移后,得出的信号如图1.11.
图1.11 增加偏移后park输出
经过这两个实验,我深刻理解了park,clark和ipark变换之间的关系,希望该文章能给大家带来帮助。