The Clarke transformation does a magnitude invariant translation from a three-phase system to a two orthogonal system.
In order to understand the Clarke transformation I will introduce the 3-phase induction motor.
![]() |
Figure 1. 3 phase induction motor windings |
Three windings are organized with 120° angle difference in the physical space between each other. On the right side of the figure they are illustrated in a simplified way, where a winding is represented with an inductor.
At a certain time point, for e.g. the currents in the three windings have the directions and values as shown in Figure 2, they could be summarized by using the vector addition. The result is as shown in the figure.
![]() | ||||||
Figure 2. |
Referring to Figure 2 we can calculate the sum of the current vectors as:
is=iu+ive2π3j+iwe4π3j
is=iu+ive2π3j+iwe4π3j
Using the Euler formula:
ejω=cos(ω)+jsin(ω)
We will get the following equation:
is=(iucos(0)+ivcos(2π3)+iwcos(4π3))+j(iusin(0)+ivsin(2π3)+iwsin(4π3))
is=(iu−12iv−12iw)+j(0+√32iv−√32iw)
In order to keep constant magnitude of the vectors during the transformation we put a $k_1$ coefficient.
is=k1is
The real and imaginary parts can be separated and rewritten as:
iα=Re(is)=k1(iu−12iv−12iw)iβ=Im(is)=k1(0+√32iv−√32iw)
Adding a zero-axis value
i0=k1k2(iu+iv+iw)
Using the $6$ and $7$ equation we can write the following transformation:
[iαiβi0]=k1[1−12−120√32−√32k2k2k2][iuiviw]
Where the $T$ transformation matrix is as follows
T=k1[1−12−120√32−√32k2k2k2]
and the inverse $T^{-1}$ transformation matrix is
T−1=k1[10k2−12√32k2−12−√32k2]
To determine the $k_1$ and $k_2$ we have to solve the following equation
T−1T=[100010001]
Using the $11^th$ equation we can write the following
k21[10k2−12√32k2−12−√32k2][1−12−120√32−√32k2k2k2]=[100010001]
Solving the $12^th$ equation the $k_1$ and $k_2$ value will be:
k1=√23
k2=1√2
Replacing $k_1$ and $k_2$ in the $T$ matrix, finally we will get the following transformation matrix
T=√23[1−12−120√32−√321√21√21√2]
No we can test the above transformation matrices, for this purpose I implemented the transformation matrices in python using numpy
Using the following relation
iu+iv+iw=0
so
iw=−iu−iv
Applying the $17^th$ relation on the $6^th$ equation the value of the $i_\alpha$ will be the following
iα=iu−12iv−12(−iu−iv)iα=32iu
applying this to the $i_\beta$ we get the following equation
iβ=√32iu+√3iv
The $18^th$ and $19^th$, applied on voltage and current, is not power invariant, because of this we have to solve the following equation
uuiu+uviv+uwiw=uαiα+uβiβ
uαiα+uβiβ=32uu32iu+(√32uu+√3ub)(√32iu+√3ib)=32(uuiu+uviv+uwiw)
So the $2\over3$ scaling factor guarantee the power invariance. Because of the symmetrical distribution of the scaling factor $2\over3$, following equations are used to transform the three-phase reference frame to two-phase reference frame.
iα=√2332iv=√32iv
and
iβ=√23(√32iu+√3iv)=1√2iu+√2iv
Writing the matrix form the equation above
T=[√3201√2√2]
and the inverse transformation
T−1=[√230−1√61√2−1√6−1√2]
The equation above can apply also for voltage transformation.
Python implementation:
The transformation matrices mentioned above are power invariant, but also it's possible to write the magnitude invariant transformation. If we replace the $k_1$ and $k_2$ in the $9^{th}$ equation with ${2\over3}$ and ${1\over3}$, the transformation and inverse transformation matrices are the following
T=23[1−12−120√32−√32121212]
T−1=32[23012−131√312−13−1√312]
Python implementation:
As you see on the $Figure 3.$, $Figure 4.$ the amplitude of the transformation is not invariant, comparing with the $Figure 5.$ where the amplitude is invariant.
You can find an example in the github under the T_CoorTrans.py
Sources:
[1] Fujitsu Coordinate transform
[2] BME - Villamos Hajtások, Villamos Energetika Tanszék
[3] Mircea Popescu - Induction motor modelling for vector control purpose
[4] Prof. Dr.-Ing. Ralph Kennel - Master course Power Electronics
ejω=cos(ω)+jsin(ω)
We will get the following equation:
is=(iucos(0)+ivcos(2π3)+iwcos(4π3))+j(iusin(0)+ivsin(2π3)+iwsin(4π3))
is=(iu−12iv−12iw)+j(0+√32iv−√32iw)
In order to keep constant magnitude of the vectors during the transformation we put a $k_1$ coefficient.
is=k1is
The real and imaginary parts can be separated and rewritten as:
iα=Re(is)=k1(iu−12iv−12iw)iβ=Im(is)=k1(0+√32iv−√32iw)
Adding a zero-axis value
i0=k1k2(iu+iv+iw)
Using the $6$ and $7$ equation we can write the following transformation:
[iαiβi0]=k1[1−12−120√32−√32k2k2k2][iuiviw]
Where the $T$ transformation matrix is as follows
T=k1[1−12−120√32−√32k2k2k2]
and the inverse $T^{-1}$ transformation matrix is
T−1=k1[10k2−12√32k2−12−√32k2]
To determine the $k_1$ and $k_2$ we have to solve the following equation
T−1T=[100010001]
Using the $11^th$ equation we can write the following
k21[10k2−12√32k2−12−√32k2][1−12−120√32−√32k2k2k2]=[100010001]
Solving the $12^th$ equation the $k_1$ and $k_2$ value will be:
k1=√23
k2=1√2
Replacing $k_1$ and $k_2$ in the $T$ matrix, finally we will get the following transformation matrix
T=√23[1−12−120√32−√321√21√21√2]
No we can test the above transformation matrices, for this purpose I implemented the transformation matrices in python using numpy
def clarke_p_i_i0(self,a,b,c): T = sqrt(2./3.)* array([ [1., -1./2., -1./2.], [0., sqrt(3.)/2., -sqrt(3.)/2.], [1./sqrt(2.), 1./sqrt(2.), 1./sqrt(2.)] ]) return dot(T, array([[a],[b],[c]])); def inv_clarke_p_i_i0(self,alpha, beta, Io=0): T = sqrt(2./3.)* array([ [1., 0., 1/sqrt(2.)], [-1./2., sqrt(3.)/2., 1./sqrt(2.)], [-1./2., -sqrt(3.)/2., 1./sqrt(2.)] ]) return dot(T, array([[alpha],[beta],[Io]]));The output of the transformation and inverse transformation is the following
![]() |
Figure 3. |
Using the following relation
iu+iv+iw=0
so
iw=−iu−iv
Applying the $17^th$ relation on the $6^th$ equation the value of the $i_\alpha$ will be the following
iα=iu−12iv−12(−iu−iv)iα=32iu
applying this to the $i_\beta$ we get the following equation
iβ=√32iu+√3iv
The $18^th$ and $19^th$, applied on voltage and current, is not power invariant, because of this we have to solve the following equation
uuiu+uviv+uwiw=uαiα+uβiβ
uαiα+uβiβ=32uu32iu+(√32uu+√3ub)(√32iu+√3ib)=32(uuiu+uviv+uwiw)
So the $2\over3$ scaling factor guarantee the power invariance. Because of the symmetrical distribution of the scaling factor $2\over3$, following equations are used to transform the three-phase reference frame to two-phase reference frame.
iα=√2332iv=√32iv
and
iβ=√23(√32iu+√3iv)=1√2iu+√2iv
Writing the matrix form the equation above
T=[√3201√2√2]
and the inverse transformation
T−1=[√230−1√61√2−1√6−1√2]
The equation above can apply also for voltage transformation.
Python implementation:
def clarke_p_i(self,a,b): """""" T = array([ [sqrt(3./2.), 0], [1./sqrt(2.), sqrt(2.)] ]) return dot(T, array([[a],[b]])); def inv_clarke_p_i(self,alpha, beta): T = array([ [sqrt(2./3.), 0], [-1./sqrt(6.), 1./sqrt(2.)], [-1./sqrt(6.), -1./sqrt(2.)], ]) return dot(T, array([[alpha],[beta]]))
![]() |
Figure 4. |
T=23[1−12−120√32−√32121212]
T−1=32[23012−131√312−13−1√312]
Python implementation:
def clarke_m_i(self,a,b,c): T = 2./3.* array([ [1., -1./2., -1./2.], [0., sqrt(3.)/2., -sqrt(3.)/2.], [1./2., 1./2., 1./2.] ]) return dot(T, array([[a],[b],[c]])); def inv_clarke_m_i(self,alpha, beta, Io): T = 3./2.* array([ [2./3., 0., 1./2.], [-1./3., 1/sqrt(3.), 1./2.], [-1./3., -1/sqrt(3.), 1./2.] ]) return dot(T, array([[alpha],[beta],[Io]]));
![]() |
Figure 5. |
As you see on the $Figure 3.$, $Figure 4.$ the amplitude of the transformation is not invariant, comparing with the $Figure 5.$ where the amplitude is invariant.
You can find an example in the github under the T_CoorTrans.py
Sources:
[1] Fujitsu Coordinate transform
[2] BME - Villamos Hajtások, Villamos Energetika Tanszék
[3] Mircea Popescu - Induction motor modelling for vector control purpose
[4] Prof. Dr.-Ing. Ralph Kennel - Master course Power Electronics
No comments:
Post a Comment