永磁同步电机FOC控制之坐标变换:Clarke,Park,IPark,IClarke及算法实现流程

01.坐标变换与坐标系

引入不同的坐标系,对交流电动机的数学模型进行化简,将某些物理量在不同的坐标系之间进行变换,即坐标变换。变换遵守的原则是:不同坐标系上的绕组产生的总磁动势不变。在电机矢量控制中,主要有三相定子坐标系abc,等效的两相正交定子坐标系αβ,都是静止坐标系;还有就是两相正交转子坐标系dq,是旋转坐标系。。

abc三相静止坐标系(3s坐标系):

如图所示,由电机的三相绕组组成三个坐标轴,坐标轴两两相差120°,这里取a轴水平向右。
在这里插入图片描述

αβ两相静止坐标系(2s坐标系):

如图所示,α轴和abc坐标系中的a轴重合,β轴超前α轴90°,α轴和β轴正交。
kbd

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(ia21ib21ic)iβ=32(iasin0+ibsin32π+icsin34π)=32(0+23 ib23 ic)

即有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[102123 2123 ]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(ia21ib21ic)=32ia31ia31ia=ia31(ia+ib+ic)=iaiβ=32(0+23 ib+23 ic)=33 (ibic)=0.57735026918963(ibic)=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=12121023 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=12121023 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αejθ+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αejθ+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=IaIzero,ib=IbIzero,ic=IcIzero
经过上面的初步处理后的三相电流,满足矢量和为零即 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[102123 2123 ]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(ia21ib21ic)=32ia31ia31ia=ia31(ia+ib+ic)=iaiβ=32(0+23 ib+23 ic)=33 (ibic)=0.57735026918963(ibic)=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=12121023 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后面再出相应的专栏做详细介绍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值