FOC坐标变换
01.坐标变换与坐标系
引入不同的坐标系,对交流电动机的数学模型进行化简,将某些物理量在不同的坐标系之间进行变换,即坐标变换。变换遵守的原则是:不同坐标系上的绕组产生的总磁动势不变。在电机矢量控制中,主要有三相定子坐标系abc,等效的两相正交定子坐标系αβ,都是静止坐标系;还有就是两相正交转子坐标系dq,是旋转坐标系。。
abc三相静止坐标系(3s坐标系):
如图所示,由电机的三相绕组组成三个坐标轴,坐标轴两两相差120°,这里取a轴水平向右。
αβ两相静止坐标系(2s坐标系):
如图所示,α轴和abc坐标系中的a轴重合,β轴超前α轴90°,α轴和β轴正交。
dq两相旋转坐标系(2r坐标系):
如图所示,dq坐标系为转子坐标系,随着转子的转动,坐标系绕转轴转动,在转动过程中,d轴和q轴始终垂直,q轴超前d轴90°,记逆时针旋转为正方向,旋转的d轴与静止的α轴之间的夹角称为机械角度θ。
02.Clarke变换及其逆变换:
由三相静止坐标系abc到两相静止坐标系αβ的变换成为Clarke变换,一般指电流变换,即ia,ib,ic变换为iα,iβ。设三相abc坐标系中每相绕组匝数为N3,等效两相αβ坐标系中每相绕组匝数为N2。
在2s坐标系中,描述由3s坐标系绕组产生的总磁动势为:
f
3
s
2
s
=
N
3
(
i
a
+
i
b
e
j
2
π
3
+
i
c
e
j
4
π
3
)
f_{3s}^{2s} = {N_3}({i_a} + {i_b}{e^{j\frac{{2\pi }}{3}}} + {i_c}{e^{j\frac{{4\pi }}{3}}})
f3s2s=N3(ia+ibej32π+icej34π)
在2s坐标系中,描述由2s坐标系绕组产生的总磁动势为: f 2 s 2 s = N 2 ( i α + i β e j π 2 ) f_{2s}^{2s} = {N_2}({i_\alpha } + {i_\beta }{e^{j\frac{\pi }{2}}}) f2s2s=N2(iα+iβej2π)
由于在不同坐标系绕组产生的总磁动势相等,即 f 2 s 2 s = f 3 s 2 s f_{2s}^{2s} = f_{3s}^{2s} f2s2s=f3s2s
可以得到: N 3 ( i a + i b e j 2 π 3 + i c e j 4 π 3 ) = N 2 ( i α + i β e j π 2 ) ( i α + i β e j π 2 ) = N 3 N 2 ( i a + i b e j 2 π 3 + i c e j 4 π 3 ) \begin{array}{c} {N_3}({i_a} + {i_b}{e^{j\frac{{2\pi }}{3}}} + {i_c}{e^{j\frac{{4\pi }}{3}}}) = {N_2}({i_\alpha } + {i_\beta }{e^{j\frac{\pi }{2}}})\\ ({i_\alpha } + {i_\beta }{e^{j\frac{\pi }{2}}}) = \frac{{{N_3}}}{{{N_2}}}({i_a} + {i_b}{e^{j\frac{{2\pi }}{3}}} + {i_c}{e^{j\frac{{4\pi }}{3}}}) \end{array} N3(ia+ibej32π+icej34π)=N2(iα+iβej2π)(iα+iβej2π)=N2N3(ia+ibej32π+icej34π)
通常取匝数比 N3/N2=2/3,这样可以推出三相电流ia,ib,ic和两相电流iα,iβ的幅值是相等的(也可以取其他的匝数比,得到其他的变换系数,这里只是方便计算)。即三相坐标系绕组产生的磁动势在α和β轴的分量与α和β轴本身产生的磁动势相等。
即:
i
α
=
2
3
(
i
a
cos
0
+
i
b
cos
2
π
3
+
i
c
cos
4
π
3
)
=
2
3
(
i
a
−
1
2
i
b
−
1
2
i
c
)
i
β
=
2
3
(
i
a
sin
0
+
i
b
sin
2
π
3
+
i
c
sin
4
π
3
)
=
2
3
(
0
+
3
2
i
b
−
3
2
i
c
)
\begin{array}{l} {i_\alpha } = \frac{2}{3}({i_a}\cos 0 + {i_b}\cos \frac{{2\pi }}{3} + {i_c}\cos \frac{{4\pi }}{3}) = \frac{2}{3}({i_a} - \frac{1}{2}{i_b} - \frac{1}{2}{i_c})\\ {i_\beta } = \frac{2}{3}({i_a}\sin 0 + {i_b}\sin \frac{{2\pi }}{3} + {i_c}\sin \frac{{4\pi }}{3}) = \frac{2}{3}(0 + \frac{{\sqrt 3 }}{2}{i_b} - \frac{{\sqrt 3 }}{2}{i_c}) \end{array}
iα=32(iacos0+ibcos32π+iccos34π)=32(ia−21ib−21ic)iβ=32(iasin0+ibsin32π+icsin34π)=32(0+23ib−23ic)
即有Clarke变换矩阵: [ i α i β ] = 2 3 [ 1 − 1 2 − 1 2 0 3 2 − 3 2 ] ⋅ [ i a i b i c ] \left[ {\begin{matrix} {{i_\alpha }}\\ {{i_\beta }} \end{matrix}} \right] = \frac{2}{3}\left[ {\begin{matrix} 1&{ - \frac{1}{2}}&{ - \frac{1}{2}}\\ 0&{\frac{{\sqrt 3 }}{2}}&{ - \frac{{\sqrt 3 }}{2}} \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{i_a}}\\ {{i_b}}\\ {{i_c}} \end{matrix}} \right] [iαiβ]=32[10−2123−21−23]⋅⎣⎡iaibic⎦⎤
在永磁同步电机模型中,有三相电流的矢量和为零,即 i a + i b + i c = 0 {i_a} + {i_b} + {i_c} = 0 ia+ib+ic=0
故在程序中计算时,为减小计算复杂度,有:
i
α
=
2
3
(
i
a
−
1
2
i
b
−
1
2
i
c
)
=
2
3
i
a
−
1
3
i
a
−
1
3
i
a
=
i
a
−
1
3
(
i
a
+
i
b
+
i
c
)
=
i
a
i
β
=
2
3
(
0
+
3
2
i
b
+
3
2
i
c
)
=
3
3
(
i
b
−
i
c
)
=
0.57735026918963
(
i
b
−
i
c
)
=
3
3
(
i
b
+
i
a
+
i
b
)
=
3
3
(
i
a
+
2
i
b
)
=
0.57735026918963
(
i
a
+
2
i
b
)
\begin{array}{l} {i_\alpha } = \frac{2}{3}({i_a} - \frac{1}{2}{i_b} - \frac{1}{2}{i_c}) = \frac{2}{3}{i_a} - \frac{1}{3}{i_a} - \frac{1}{3}{i_a}\\ = {i_a} - \frac{1}{3}({i_a} + {i_b} + {i_c}) = {i_a}\\ {i_\beta } = \frac{2}{3}(0 + \frac{{\sqrt 3 }}{2}{i_b} + \frac{{\sqrt 3 }}{2}{i_c}) = \frac{{\sqrt 3 }}{3}({i_b} - {i_c}) = 0.57735026918963({i_b} - {i_c})\\ = \frac{{\sqrt 3 }}{3}({i_b} + {i_a} + {i_b}) = \frac{{\sqrt 3 }}{3}({i_a} + 2{i_b}) = 0.57735026918963({i_a} + 2{i_b}) \end{array}
iα=32(ia−21ib−21ic)=32ia−31ia−31ia=ia−31(ia+ib+ic)=iaiβ=32(0+23ib+23ic)=33(ib−ic)=0.57735026918963(ib−ic)=33(ib+ia+ib)=33(ia+2ib)=0.57735026918963(ia+2ib)
在实际的FOC算法应用中,由测量得到实际的三相电流ia,ib,ic。通过Clarke变换得到等效的电流iα,iβ。
Clarke逆变换(IClarke):
由两相静止坐标系αβ到三相静止坐标系abc的变换成为Clarke逆变换,一般是指电压变换。
由Clarke变换的推到关系式易得:
[
i
a
i
b
i
c
]
=
[
1
0
−
1
2
3
2
−
1
2
−
3
2
]
⋅
[
i
α
i
β
]
\left[ {\begin{matrix} {{i_a}}\\ {{i_b}}\\ {{i_c}} \end{matrix}} \right] = \left[ {\begin{matrix} 1&0\\ { - \frac{1}{2}}&{\frac{{\sqrt 3 }}{2}}\\ { - \frac{1}{2}}&{ - \frac{{\sqrt 3 }}{2}} \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{i_\alpha }}\\ {{i_\beta }} \end{matrix}} \right]
⎣⎡iaibic⎦⎤=⎣⎢⎡1−21−21023−23⎦⎥⎤⋅[iαiβ]
在实际FOC应用中一般为电压变换,所以常用变换矩阵为: [ U a U b U c ] = [ 1 0 − 1 2 3 2 − 1 2 − 3 2 ] ⋅ [ U α U β ] \left[ {\begin{matrix} {{U_a}}\\ {{U_b}}\\ {{U_c}} \end{matrix}} \right] = \left[ {\begin{matrix} 1&0\\ { - \frac{1}{2}}&{\frac{{\sqrt 3 }}{2}}\\ { - \frac{1}{2}}&{ - \frac{{\sqrt 3 }}{2}} \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{U_\alpha }}\\ {{U_\beta }} \end{matrix}} \right] ⎣⎡UaUbUc⎦⎤=⎣⎢⎡1−21−21023−23⎦⎥⎤⋅[UαUβ]
由等效的期望输出电压Uα和Uβ,通过Clarke逆变换,计算得到实际的三相输出电压Ua,Ub,Uc,最后通过SVPWM计算三相电压的作用时间计算H桥开关管的通断顺序和占空比。
03.Park变换及其逆变换:
由两相静止坐标系αβ到两相旋转坐标系dq的变换成为park变换,一般指电流变换,即iα,iβ变换为id,iq。变换遵守的原则同样是,不同坐标系上的绕组产生的总磁动势不变。
等效两相αβ坐标系中每相绕组匝数为N2,dq两相坐标系中每相绕组匝数也为N2(dq坐标系相当于是由αβ坐标系旋转一个θ角度来的)。
在2r坐标系中建立关系式,即把αβ轴的磁动势分解到dq轴。
在2r坐标系中,描述由2s坐标系绕组产生的总磁动势为: f 2 s 2 r = N 2 ( i α e − j θ + i β e π 2 − j θ ) f_{2s}^{2r} = {N_2}({i_\alpha }{e^{ - j\theta }} + {i_\beta }{e^{\frac{\pi }{2} - j\theta }}) f2s2r=N2(iαe−jθ+iβe2π−jθ)
在2r坐标系中,描述由2r坐标系绕组产生的总磁动势为: f 2 r 2 r = N 2 ( i d + i q e j π 2 ) f_{2{\rm{r}}}^{2r} = {N_2}({i_d} + {i_q}{e^{j\frac{\pi }{2}}}) f2r2r=N2(id+iqej2π)
由于在不同坐标系绕组产生的总磁动势相等,即 f 2 s 2 r = f 2 r 2 r f_{2s}^{2r} = f_{2r}^{2r} f2s2r=f2r2r,可得 i α e − j θ + i β e π 2 − j θ = i d + i q e j π 2 {i_\alpha }{e^{ - j\theta }} + {i_\beta }{e^{\frac{\pi }{2} - j\theta }} = {i_d} + {i_q}{e^{j\frac{\pi }{2}}} iαe−jθ+iβe2π−jθ=id+iqej2π
即αβ坐标系绕组产生的磁动势在d和q轴的分量与d和q轴本身产生的磁动势相等。
即有:
i
d
=
i
α
cos
(
−
θ
)
+
i
β
cos
(
π
2
−
θ
)
=
i
α
cos
θ
+
i
β
sin
θ
i
q
=
i
α
sin
(
−
θ
)
+
i
β
sin
(
π
2
−
θ
)
=
−
i
d
sin
θ
+
i
q
cos
θ
\begin{array}{l} {i_d} = {i_\alpha }\cos ( - \theta ) + {i_\beta }\cos (\frac{\pi }{2} - \theta ) = {i_\alpha }\cos \theta + {i_\beta }\sin \theta \\ {i_q} = {i_\alpha }\sin ( - \theta ) + {i_\beta }\sin (\frac{\pi }{2} - \theta ) = - {i_d}\sin \theta + {i_q}\cos \theta \end{array}
id=iαcos(−θ)+iβcos(2π−θ)=iαcosθ+iβsinθiq=iαsin(−θ)+iβsin(2π−θ)=−idsinθ+iqcosθ
即有park变换矩阵: [ i d i q ] = [ cos θ sin θ − sin θ cos θ ] ⋅ [ i α i β ] \left[ {\begin{matrix} {{i_d}}\\ {{i_q}} \end{matrix}} \right] = \left[ {\begin{matrix} {\cos \theta }&{\sin \theta }\\ { - \sin \theta }&{\cos \theta } \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{i_\alpha }}\\ {{i_\beta }} \end{matrix}} \right] [idiq]=[cosθ−sinθsinθcosθ]⋅[iαiβ]
由上一步计算得到的电流iα,iβ,和测量得到的机械角θ(机械角θ也可以由观测器估算得到),通过park变换得到等效的旋转坐标系中的电流iq,id。
速度环根据当前速度和期望速度,输出一个期望电流iq*;q轴电流环根据当前电流iq和期望电流iq*,计算输出一个期望电压Uq;d轴电流环根据当前电流id和期望电流id*(id*一般给定为0)输出一个期望电压Ud,然后进行逆变换计算输出电压。
Park逆变换(IPark):
由两相旋转坐标系dq到两相静止坐标系αβ的变换成为park逆变换,一般指电压变换
在2s坐标系中建立关系式,即把dq轴的磁动势分解到αβ轴。
在2s坐标系中,描述由2s坐标系绕组产生的总磁动势为: f 2 s 2 s = N 2 ( i α + i β e j π 2 ) f_{2s}^{2s} = {N_2}({i_\alpha } + {i_\beta }{e^{j\frac{\pi }{2}}}) f2s2s=N2(iα+iβej2π)
在2s坐标系中,描述由2r坐标系绕组产生的总磁动势为: f 2 r 2 s = N 2 ( i d e j θ + i q e j ( π 2 + θ ) ) = N 2 ( i d e j θ + i q e j π 2 ⋅ e j θ ) f_{2{\rm{r}}}^{2s} = {N_2}({i_d}{e^{j\theta }} + {i_q}{e^{j(\frac{\pi }{2} + \theta )}}) = {N_2}({i_d}{e^{j\theta }} + {i_q}{e^{j\frac{\pi }{2}}} \cdot {e^{j\theta }}) f2r2s=N2(idejθ+iqej(2π+θ))=N2(idejθ+iqej2π⋅ejθ)
由于在不同坐标系绕组产生的总磁动势相等,即 f 2 s 2 s = f 2 r 2 s f_{2s}^{2s} = f_{2r}^{2s} f2s2s=f2r2s,可得: i α + i β e j π 2 = i d e j θ + i q e j π 2 ⋅ e j θ {i_\alpha } + {i_\beta }{e^{j\frac{\pi }{2}}} = {i_d}{e^{j\theta }} + {i_q}{e^{j\frac{\pi }{2}}} \cdot {e^{j\theta }} iα+iβej2π=idejθ+iqej2π⋅ejθ
即dq坐标系绕组产生的磁动势在α和β轴的分量与α和β轴本身产生的磁动势相等。
即有:
i
α
=
i
d
cos
θ
+
i
q
cos
(
π
2
+
θ
)
=
i
d
cos
θ
−
i
q
sin
θ
i
β
=
i
d
sin
θ
+
i
q
sin
(
π
2
+
θ
)
=
i
d
sin
θ
+
i
q
cos
θ
\begin{array}{l} {i_\alpha } = {i_d}\cos \theta + {i_q}\cos (\frac{\pi }{2} + \theta ) = {i_d}\cos \theta - {i_q}\sin \theta \\ {i_\beta } = {i_d}\sin \theta + {i_q}\sin (\frac{\pi }{2} + \theta ) = {i_d}\sin \theta + {i_q}\cos \theta \end{array}
iα=idcosθ+iqcos(2π+θ)=idcosθ−iqsinθiβ=idsinθ+iqsin(2π+θ)=idsinθ+iqcosθ
即有park逆变换矩阵 [ i α i β ] = [ cos θ − sin θ sin θ cos θ ] ⋅ [ i d i q ] \left[ {\begin{matrix} {{i_\alpha }}\\ {{i_\beta }} \end{matrix}} \right] = \left[ {\begin{matrix} {\cos \theta }&{ - \sin \theta }\\ {\sin \theta }&{\cos \theta } \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{i_d}}\\ {{i_q}} \end{matrix}} \right] [iαiβ]=[cosθsinθ−sinθcosθ]⋅[idiq]
在FOC应用中一般是电压变换,故常用 [ U α U β ] = [ cos θ − sin θ sin θ cos θ ] ⋅ [ U d U q ] \left[ {\begin{matrix} {{U_\alpha }}\\ {{U_\beta }} \end{matrix}} \right] = \left[ {\begin{matrix} {\cos \theta }&{ - \sin \theta }\\ {\sin \theta }&{\cos \theta } \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{U_d}}\\ {{U_q}} \end{matrix}} \right] [UαUβ]=[cosθsinθ−sinθcosθ]⋅[UdUq]
由PI闭环控制器(一般为一个速度环和两个电流环)计算输出的Ud,Uq,通过park逆变换,得到等效的期望输出电压Uα和Uβ。
04.算法流程
step1:采集三相电流值并做初步处理
通过ADC采集三相电流值,实际采集的电流值由于误差或精度的影响,可能并不完全满足三相电流的矢量和等于0这一条件,故对实际采集的电流需要做初步处理后,再进行坐标变换,下面是处理方法。
设单片机的ADC采集到的实际三相电流值为
I
a
,
I
b
,
I
c
{I_a},{I_b},{I_c}
Ia,Ib,Ic,先计算测得三相电流的平均值
I
z
e
r
o
=
1
3
(
I
a
+
I
b
+
I
c
)
{I_{zero}} = \frac{1}{3}({I_a} + {I_b} + {I_c})
Izero=31(Ia+Ib+Ic),容易理解的是,如果测量精度和误差特别小,这里计算的平均值几乎等于零。然后计算用于参与坐标变换的三相电流值
i
a
,
i
b
,
i
c
{i_a},{i_b},{i_c}
ia,ib,ic,计算式为:
i
a
=
I
a
−
I
z
e
r
o
,
i
b
=
I
b
−
I
z
e
r
o
,
i
c
=
I
c
−
I
z
e
r
o
{i_a} = {I_a} - {I_{zero}},{i_b} = {I_b} - {I_{zero}},{i_c} = {I_c} - {I_{zero}}
ia=Ia−Izero,ib=Ib−Izero,ic=Ic−Izero
经过上面的初步处理后的三相电流,满足矢量和为零即
i
a
+
i
b
+
i
c
=
0
{i_a} + {i_b} + {i_c} = 0
ia+ib+ic=0,然后可用于后面的坐标变换。
C语言代码示例:
CurrAs = ((AdcMirror.ADCRESULT2 + AdcMirror.ADCRESULT3)*0.5*0.00024414 - OffsetA)*2;//U相电流
CurrBs = ((AdcMirror.ADCRESULT4 + AdcMirror.ADCRESULT5)*0.5*0.00024414 - OffsetB)*2;//V相电流
CurrCs = ((AdcMirror.ADCRESULT6 + AdcMirror.ADCRESULT7)*0.5*0.00024414 - OffsetC)*2;//W相电流
CurrZero = (CurrAs + CurrBs + CurrCs)/3;
Clarke1.As = CurrAs - CurrZero;
Clarke1.Bs = CurrBs - CurrZero;
Clarke1.Cs = CurrCs - CurrZero;
step2:Clarke变换
即由step1经过初步处理后的三相电流
i
a
,
i
b
,
i
c
{i_a},{i_b},{i_c}
ia,ib,ic
通过clarke变换得到
i
α
,
i
β
{i_\alpha },{i_\beta }
iα,iβ,变换式为:
[
i
α
i
β
]
=
2
3
[
1
−
1
2
−
1
2
0
3
2
−
3
2
]
⋅
[
i
a
i
b
i
c
]
\left[ {\begin{matrix} {{i_\alpha }}\\ {{i_\beta }} \end{matrix}} \right] = \frac{2}{3}\left[ {\begin{matrix} 1&{ - \frac{1}{2}}&{ - \frac{1}{2}}\\ 0&{\frac{{\sqrt 3 }}{2}}&{ - \frac{{\sqrt 3 }}{2}} \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{i_a}}\\ {{i_b}}\\ {{i_c}} \end{matrix}} \right]
[iαiβ]=32[10−2123−21−23]⋅⎣⎡iaibic⎦⎤
前面已经分析过,在程序中实际计算时,为减少计算量,该变换可以写为:
i
α
=
2
3
(
i
a
−
1
2
i
b
−
1
2
i
c
)
=
2
3
i
a
−
1
3
i
a
−
1
3
i
a
=
i
a
−
1
3
(
i
a
+
i
b
+
i
c
)
=
i
a
i
β
=
2
3
(
0
+
3
2
i
b
+
3
2
i
c
)
=
3
3
(
i
b
−
i
c
)
=
0.57735026918963
(
i
b
−
i
c
)
=
3
3
(
i
b
+
i
a
+
i
b
)
=
3
3
(
i
a
+
2
i
b
)
=
0.57735026918963
(
i
a
+
2
i
b
)
\begin{array}{l} {i_\alpha } = \frac{2}{3}({i_a} - \frac{1}{2}{i_b} - \frac{1}{2}{i_c}) = \frac{2}{3}{i_a} - \frac{1}{3}{i_a} - \frac{1}{3}{i_a} = {i_a} - \frac{1}{3}({i_a} + {i_b} + {i_c})\\ = {i_a}\\ {i_\beta } = \frac{2}{3}(0 + \frac{{\sqrt 3 }}{2}{i_b} + \frac{{\sqrt 3 }}{2}{i_c}) = \frac{{\sqrt 3 }}{3}({i_b} - {i_c}) = 0.57735026918963({i_b} - {i_c}) = \frac{{\sqrt 3 }}{3}({i_b} + {i_a} + {i_b}) = \frac{{\sqrt 3 }}{3}({i_a} + 2{i_b})\\ = 0.57735026918963({i_a} + 2{i_b}) \end{array}
iα=32(ia−21ib−21ic)=32ia−31ia−31ia=ia−31(ia+ib+ic)=iaiβ=32(0+23ib+23ic)=33(ib−ic)=0.57735026918963(ib−ic)=33(ib+ia+ib)=33(ia+2ib)=0.57735026918963(ia+2ib)
C语言代码示例:
//Clarke变换的宏函数
#define CLARKE_MACRO(v) \
v.Alpha = v.As; \
v.Beta = (v.As + 2*v.Bs)*0.57735026918963; \
CLARKE_MACRO(Clarke1);//调用clarke变换,传结构体参数就行
step3:Park变换
由step2变换得到的 i α , i β {i_\alpha },{i_\beta } iα,iβ和当前的电角度θ(该角度可以由编码器获得,也可以通过观测器估算[无感FOC,后面有机会我会再详细介绍])。
通过park变换得到 i d , i q {i_d},{i_q} id,iq,变换式为: [ i d i q ] = [ cos θ sin θ − sin θ cos θ ] ⋅ [ i α i β ] \left[ {\begin{matrix} {{i_d}}\\ {{i_q}} \end{matrix}} \right] = \left[ {\begin{matrix} {\cos \theta }&{\sin \theta }\\ { - \sin \theta }&{\cos \theta } \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{i_\alpha }}\\ {{i_\beta }} \end{matrix}} \right] [idiq]=[cosθ−sinθsinθcosθ]⋅[iαiβ]
C语言代码示例:
//Park变换的宏函数
#define PARK_MACRO(v) \
v.Id = v.Alpha*v.Cosine + v.Beta*v.Sine; \
v.Iq = v.Beta*v.Cosine - v.Alpha*v.Sine; \
//Park变换,输入I_alpha,I_beta,输出Id,Iq
Park1.Alpha = Clarke1.Alpha;
Park1.Beta = Clarke1.Beta;
Park1.Angle = Encoder1.Angle;
Park1.Sine = sin(Park1.Angle);
Park1.Cosine = cos(Park1.Angle);
PARK_MACRO(Park1);
step4:PI控制器计算
通过PI控制器计算输出量,进行闭环控制。对于简单的速度控制,一般有速度环、q轴电流环、d轴电流环三个闭环控制。对于整个控制系统,一般给定期望速度Speed_ref,由编码器测量或观测器估算当前速度Speed_fbk,通过速度环计算得到输出量iq*,iq便作为q轴电流环的期望值;给定期望d轴电流值id=0(“id*=0”的控制方式最为常用,即使电机电流全部用来产生转矩;此外还有“最大转矩电流比控制”、“弱磁控制”、“cosϕ=1控制”等,后面有机会再做介绍),step3经过park变换得到的iq,id即为当前电流值。q轴电流环和d轴电流环的输出为Uq,Ud。下面是一个简单的逻辑框图:
step5:Park逆变换
由step4控制器计算得到的期望输出电压Uq,Ud和当前的电角度θ,通过park逆变换得到Uα,Uβ,
变换式为:
[
U
α
U
β
]
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
⋅
[
U
d
U
q
]
\left[ {\begin{matrix} {{U_\alpha }}\\ {{U_\beta }} \end{matrix}} \right] = \left[ {\begin{matrix} {\cos \theta }&{ - \sin \theta }\\ {\sin \theta }&{\cos \theta } \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{U_d}}\\ {{U_q}} \end{matrix}} \right]
[UαUβ]=[cosθsinθ−sinθcosθ]⋅[UdUq]
C语言代码示例:
//iPark变换的宏函数
#define IPARK_MACRO(v) \
v.Alpha = v.Id*v.Cosine - v.Iq*v.Sine; \
v.Beta = v.Iq*v.Cosine + v.Id*v.Sine; \
iPark1.Id = PI_Id.Out; \\ Vd为d轴电流环输出
iPark1.Iq = PI_Iq.Out; \\ Vq为q轴电流环输出
iPark1.Angle = Encoder1.Angle;
iPark1.Sine = sin(iPark1.Angle);
iPark1.Cosine = cos(iPark1.Angle);
IPARK_MACRO(iPark1);
step6:Clarke逆变换
由step5得到的Uα,Uβ,通过clarke逆变换得到Ua,Ub,Uc,变换式为: [ U a U b U c ] = [ 1 0 − 1 2 3 2 − 1 2 − 3 2 ] ⋅ [ U α U β ] \left[ {\begin{matrix} {{U_a}}\\ {{U_b}}\\ {{U_c}} \end{matrix}} \right] = \left[ {\begin{matrix} 1&0\\ { - \frac{1}{2}}&{\frac{{\sqrt 3 }}{2}}\\ { - \frac{1}{2}}&{ - \frac{{\sqrt 3 }}{2}} \end{matrix}} \right] \cdot \left[ {\begin{matrix} {{U_\alpha }}\\ {{U_\beta }} \end{matrix}} \right] ⎣⎡UaUbUc⎦⎤=⎣⎢⎡1−21−21023−23⎦⎥⎤⋅[UαUβ]
变换得到的Ua,Ub,Uc即为期望加在电机三相绕组的电压。
C语言代码示例:
//iClarke变换的宏函数
#define IClarke_MACRO(v) \
v.Ua = v.Alpha; \
v.Ub = -0.5*v.Alpha + 0.8660254*v.Beta \
v.Uc = -0.5*v.Alpha - 0.8660254*v.Beta \
//下面是调用IClarke变换
Clarke1.Ualpha = iPark1.Alpha;
Clarke1.Ubeta = iPark1.Beta;
IClarke_MACRO(iClarke1);
step7:计算SVPWM
由step6得到的Ua,Ub,Uc,通过SVPWM 方法计算H桥开关管的通断顺序和作用时间,得到每路PWM的占空比和极性等参数,从而把电压实际加到绕组上。这篇主要讲的是坐标变换,关于SVPWM后面再出相应的专栏做详细介绍。