永磁同步電機(PMSM)的FOC閉環控制詳解以及SVPWM的原理及法則推導和控制算法

在學習FOC控制前,我對於FOC控制完全不懂,只知道中文叫做磁場定向控制,因公司產品開發需要用到對永磁同步電機(PMSM)進行精確的位置控制,纔開始從網上了解什麼是FOC,有哪些數學公式,控制的過程是怎麼樣的,但由於公司沒有人知道這一塊的知識,所以只能一個人慢慢找資料學習,網上有不少關於FOC的資料,不過講的都不全面,而且有的還會存在錯誤,但是不懂的時候也無法分辨對錯,所以走了不少彎路。所以將個人的學習心得記錄於此,與大家分享,由於需要對電機進行位置控制,所以使用了14位分辨率的磁編碼器。

      FOC主要是通過對電機電流的控制實現對電機轉矩(電流)、速度、位置的控制。通常是電流作爲最內環,速度是中間環,位置作爲最外環。

下圖是電流環(最內環)的控制框圖:

圖一:電流環

在圖一中,Iq_Ref是q軸(交軸)電流設定值,Id_Ref是d軸(直軸)電流設定值,關於交軸直軸不再介紹,大家自行百度。

      Ia, Ib, Ic分別是A相、B相、C相的採樣電流,是可以直接通過AD採樣得到的,通常直接採樣其中兩相,利用公式Ia+Ib+Ic=0計算得到第三相,電角度θ可以通過實時讀取磁編碼器的值計算得到。

      在得到三相電流和電角度後,即可以進行電流環的執行了:三相電流Ia, Ib, Ic經過Clark變換得到Iα, Iβ;然後經過Park變換得到Iq, Id;然後分別與他們的設定值Iq_Ref, Id_Ref計算誤差值;然後分別將q軸電流誤差值代入q軸電流PI環計算得到Vq,將d軸電流誤差值代入d軸電流PI環計算得到Vd;然後對Vq, Vd進行反Park變換得到Vα, Vβ;然後經過SVPWM算法得到Va, Vb, Vc,最後輸入到電機三相上。這樣就完成了一次電流環的控制。

 

當對PMSM進行速度控制時,需要在電流環外面加一個速度環,控制框圖如下:

圖二:速度電流雙環

在圖二中,Speed_Ref是速度設定值,ω是電機的轉速反饋,可以通過電機編碼器計算得到。

      將計算得到的電機速度ω與速度設定值Speed_Ref進行誤差值計算,代入速度PI環,計算的結果作爲電流環的輸入;比較圖二和圖一的電流環部分可以發現,圖二中d軸電流被設定爲零(Id_Ref=0),因爲d軸電流對於驅動電機的轉動不會產生輸出力,所以通常情況下都會將d軸電流設定爲零(但不是總是設定爲0的);當Id_Ref=0時,Iq_Ref就等於了速度環的輸出;再結合上面的電流環,就實現了速度電流的雙閉環控制。

 

當對PMSM進行位置控制時,需要在速度電流環外面加一個位置環,控制框圖如下:

圖三:位置速度電流三環

在圖三中,Position_Ref是位置設定值,Position(θ)是電機的當前位置,可以通過電機編碼器得知,位置控制可以分爲電角度位置控制和機械角度位置控制。

      將得到的當前位置Position(θ)和位置設定值Position_Ref計算誤差值代入P環,輸出作爲速度環的輸入Speed_Ref,在結合上面的速度電流環實現位置速度電流三閉環控制。

      在實際使用中,由於磁編碼器無法直接返回電機轉速ω,需要計算一定時間內的磁編碼值變化量來表示電機的轉速ω(M法測速),假設1ms的角度變化量爲δ個,則ω=δ/1ms=δ,(單位:個/ms),當電機轉速比較快的時候,這樣的方式是可以的;但是在位置控制的時候,電機的速度會很慢,1分鐘的轉速可能只有1、2轉,用M法測速會存在非常大的誤差,增大單位時間可以適當降低誤差,但隨之而來整個系統的延遲也會增大。

      所以爲了避免速度環節帶來的誤差以及系統延遲帶來的影響,只使用位置和電流組成的雙環進行控制,不過此時需要對位置環做一定的變化,控制框圖如下:

圖四:位置電流雙環

在圖四中,只使用了位置電流雙環實現位置控制。

      在位置控制中,會涉及到電機的啓動加速和剎車減速,所以只有P環肯定是不夠的,還需要加入I和D實現PID環進行控制;如果對於位置控制的精度要求不高,允許存在1、2度的誤差的話,可以只使用P和D實現PD環控制即可。

 

      以上簡單介紹了電機控制中的過程,不難發現,主要包括了PID控制器和FOC控制算法。PID控制器是自動控制中最常用的一種控制算法,應用非常廣泛,網上關於PID的資料也非常多,下面詳細講解FOC控制算法。

從上面的控制框圖中可以看出,FOC主要包含了電流採樣、座標變換(Clark, Park, 反Park)、SVPWM。

前面講過,三相電流Ia, Ib, Ic是可以通過採樣和公式Ia+Ib+Ic=0得到的,並三相電流的相位差是120°,如下圖:

圖五:三相電流

圖五中Ia, Ib, Ic分別是三相電流。

然後經過Clark變換得到Iα, Iβ,如下圖:

圖六:Clark變換

      Clark變換是將靜止的三相a, b, c變換成靜止的兩相α, β,由於不知道如何在編輯器中輸入矩陣,所以選擇在word中寫好截圖過來,公式如下:

 

於是可以推導出:

將Ia+Ib+Ic=0代入上面的公式,可以得到:

我們需要關心的是Iα和Iβ,所以Clark變化最後的公式就是:

Iα = Ia ;

Iβ = (Ia + 2*Ib) / √3 ;

然後經過Park變換得到Iq, Id,他們是相互垂直的並且同時跟隨着磁場方向在旋轉,如下圖:

圖七:Park變換

如圖七所示,Park變換是將靜止的α,β電流變換成旋轉的q軸和d軸電流,θ是旋轉的角度,也稱爲電角度。

以電角度θ爲夾角,分別對Iα,Iβ進行矢量分解,計算投影到q軸和d軸上的電流分量,可以得到以下公式:

Iq = Iβ*cosθ - Iα*sinθ

Id = Iα*cosθ + Iβ*sinθ

在計算得到Iq,Id之後,需要分別跟他們的設定值計算誤差,然後分別做PI控制,得到Vq,Vd。

然後對Vq,Vd進行反Park變換,如下圖:

圖八:反Park變換

在圖八中,將Vq,Vd反向變換成Vα,Vβ,變換方式與Park變換類似,以電角度θ爲夾角,分別對Vq,Vd進行矢量分解,計算投影到α軸和β軸上的電壓分量,可以得到如下公式:

Vα = Vd*cosθ - Vq*sinθ;

Vβ = Vq*cosθ + Vd*sinθ;

 

在得到Vα和Vβ之後,需要通過SVPWM算法計算Va,Vb,Vc,關於SVPWM算法,網上有篇文章講解的非常好,叫做《SVPWM的原理及法則推導和控制算法詳解》,詳細的內容可以去看這篇文章,下面就根據這篇文章做一些總結性的講解。

SVPWM的全稱是空間矢量脈寬調製(Space Vector Pulse Width Modulation),是由三相功率逆變器的六個功率開關元件組成的特定開關模式產生的脈寬調製波,能夠使輸出電流波形儘可能接近於理想的正弦波形。理論基礎是平均值等效原理,即在一個開關週期內通過對基本電壓矢量加 以組合,使其平均值與給定電壓矢量相等。

假設直流母線電壓爲Udc,三相相電壓分別爲UA,UB,UC,且相互之間的相位差爲120°;假設Um爲相電壓有效值,f爲電源頻率,則有:

則三相電壓空間矢量相加的合成空間矢量U(t)就可以表示爲:

      U(t)是一個旋轉的空間矢量,幅值不變,爲相電壓峯值,且以角頻率ω=2πf按逆時針方向均勻旋轉,而空間矢量U(t)在三相座標軸(a,b,c)上的投影就是對稱的三相正弦量。

 

下面討論一下電壓空間矢量:

圖九:三相逆變電路

圖九是一個三相逆變電路,每一相在同一時刻只有一個橋會導通,定義這樣一個開關函數Sx(x=a、b、c):

上橋臂導通時,Sx=1;下橋臂導通時,Sx=0。舉個例子:假設a相上橋導通,b和c相下橋導通,那麼三相的結果就是a=1,b=0,c=0,組合的結果就是U4(100)。

      在同一時刻,如果不同相的上下橋同時存在導通的橋,那麼就會有相電流產生,屬於非零矢量;如果同一時刻,三相的上橋同時導通或者三相的下橋同時導通,此時並不會有相電流產生,屬於零矢量。所以總共存在6個非零矢量:U1(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110);以及兩個零矢量:U0(000)、U7(111)。電壓矢量的座標如下圖所示:

圖十:電壓空間矢量圖

在圖十中,顯示了8個電壓空間矢量U0~U7,以及六個扇區Ⅰ~Ⅵ。

假如Sx(x=a,b,c)=(100),則此時Ua=⅔Udc,Ub=-⅓Udc,Uc=-⅓Udc,同理可以得到其他各種組合下的空間電壓矢量,如下表:

圖十一:電壓空間矢量表

      結合圖十和圖十一可知,非零矢量的幅值相同,均爲⅔Udc,相鄰的矢量間隔60°,而兩個零矢量幅值爲0,位於中心。在每一個扇區,選擇相鄰兩個電壓矢量以及零矢量,按照伏秒平衡原則來合成每個扇區內的任意電壓矢量,即:

或者等效成下式:

其中,Uref爲期望電壓矢量,T爲週期,Tx、Ty、T0*分別對應兩個非零矢量Ux、Uy和零矢量U0*在一個週期T內的作用時間,其中U0*包括U0和U7兩個零矢量。由於最終要得到的是作用在三相半橋上的佔空比,也就是三個定時器通道的捕獲比較寄存器的值,所以我們只要能計算出Tx、Ty、T0*的值,就可以知道三個捕獲比較寄存器值。

先來看一下當Uref在第Ⅰ個扇區時的情況,見下圖:

圖十二:電壓空間矢量位於第Ⅰ扇區

如圖十二所示,Uref位於U4和U6之間,由正弦定理可得:

      得到以U4、U6、U7及U0合成的Uref的時間後,接下來就是如何產生實際的脈寬調製波形。在SVPWM調製方案中,零矢量的選擇是最具靈活性的適當選擇零矢量,可最大限度的減少開關次數,儘可能避免在負載電流較大的時刻的開關動作,最大限度的減少開關損耗。因此,我們以減少開關次數爲目標,將基本矢量作用順序的分配原則選定爲:在每次開關狀態轉換時,只改變其中一相的開關狀態,並且對零矢量在時間上進行了平均分配,以使產生的PWM對稱,從而有效的降低PWM的諧波分量。可以發現當U4(100)切換至U0(000)時,只需改變A相上下一對切換開關,若由U4(100)切換至U7(111)則需要改變B、C相上下兩對切換開關,增加了一杯的切換損失。因此要改變電壓矢量U4(100)、U2(010)、U1(001)的大小,需配合零電壓矢量U0(000),而要改變U6(110)、U3(011)、U5(101),需要配合零電壓矢量U7(111)。這樣通過在不同扇區內安排不同的開關切換順序,就可以獲得對稱的輸出波形,其他各扇區的開關切換順序下表:

      同樣以第Ⅰ扇區爲例,電壓矢量的先後順序爲U0、U4、U6、U7、U7、U6、U4、U0,將其畫成a,b,c三相的PWM波形的話就如圖十三所示:

圖十三:第1扇區三相PWM波形

      一般我們在控制PMSM的時候都會將PWM波形設定爲中央對齊模式,所以在圖十三中,對稱中心的兩邊各個電壓矢量所佔的時間都是該電壓矢量在整個週期中所佔時間的一半。

      要先實現SVPWM的實時調製,我們首先要知道Uref所在的扇區位置,然後才能利用所在扇區的相鄰電壓矢量和適當的零矢量來合成電壓矢量。由圖十二可以知道,電壓矢量Uref與α軸的夾角θ決定了Uref所在的扇區,所以我們只要判斷θ角的大小即可知道Uref所在的扇區。

由 tanθ=Uβ/Uα,可知 θ=arctan(Uβ/Uα),當Uref位於第Ⅰ扇區時,θ滿足0<θ<60°,此時,Uα>0,Uβ>0,tanθ滿足 0<tanθ<√3;所以Uref位於第Ⅰ扇區時的充要條件是:Uα>0,Uβ>0,√3Uα>Uβ。

同理可以得出Uref位於其他扇區時的等價條件,如下:

Uref位於第Ⅱ扇區時的充要條件是:Uβ>0,√3|Uα|<Uβ;

Uref位於第Ⅲ扇區時的充要條件是:Uα<0,Uβ>0,-√3Uα>Uβ;

Uref位於第Ⅳ扇區時的充要條件是:Uα<0,Uβ<0,√3Uα<Uβ;

Uref位於第Ⅴ扇區時的充要條件是:Uβ<0,√3|Uα|<-Uβ;

Uref位於第Ⅵ扇區時的充要條件是:Uα>0,Uβ<0,√3Uα>-Uβ;

進一步分析以上的條件就可以看出,電壓矢量Uref所在的扇區完全由Uβ,√3Uα-Uβ,-√3Uα-Uβ三式決定,

因此令:

再定義,若U1>0,則A=1,否則A=0;若U2>0,則B=1,否則B=0;若U3>0,則C=1,否則C=0。

再令N=4*C+2*B+A,則可以通過下標計算Uref所在的扇區。

接下來就要來計算合成Uref的相鄰電壓矢量的作用時間以及零矢量的作用時間。

      假設Uref位於第Ⅰ扇區時(參照圖十二),用到的電壓矢量是U4和U6,所以就需要計算T4和T6,以及零電壓矢量的T0和T7。計算過程如下:

Uα*Ts = |U4|*T4 + |U6|*T6*cos(π/3);

Uβ*Ts = |U4|*T4*0 + |U6|*T6*cos(π/6);

前面說過,|U4|=|U6|=⅔Udc,所以有:

Uα*Ts = ⅔Udc*T4 + ⅓Udc*T6; ①

Uβ*Ts = (Udc*T6) / √3; ②

解①,②組成的方程組,得:

T4 = (√3/Udc) * Ts * (√3Uα/2 - Uβ/2) = (√3/Udc) * Ts * U2;

T6 = (√3/Udc) * Ts * Uβ = (√3/Udc) * Ts * U1;

又因爲Ts=T0+T4+T6+T7,並且T0和T7的給定是靈活的,可以令T0=T7,那麼就有:

T0 = T7 = (Ts - T4 - T6) / 2;

這樣就計算出了Uref位於第Ⅰ扇區時各電壓矢量的時間了。同理可以計算出位於其他扇區時的各電壓矢量時間:

Uref位於第Ⅱ扇區時:

T2 = (-√3/Udc) * Ts * (√3Uα/2 - Uβ/2) = -(√3/Udc) * Ts * U2;

T6 = (-√3/Udc) * Ts * (-√3Uα/2 - Uβ/2) = -(√3/Udc) * Ts * U3;

T0 = T7 = (Ts - T2 - T6) / 2;

Uref位於第Ⅲ扇區時:

T2 = (√3/Udc) * Ts * Uβ = (√3/Udc) * Ts * U1;

T3 = (√3/Udc) * Ts * (-√3Uα/2 - Uβ/2) = (√3/Udc) * Ts * U3;

T0 = T7 = (Ts - T2 - T3) / 2;

Uref位於第Ⅳ扇區時:

T1 = (-√3/Udc) * Ts * Uβ = -(√3/Udc) * Ts * U1;

T3 = (-√3/Udc) * Ts * (√3Uα/2 - Uβ/2) = -(√3/Udc) * Ts * U2;

T0 = T7 = (Ts - T1 - T3) / 2;

Uref位於第Ⅴ扇區時:

T1 = (√3/Udc) * Ts * (-√3Uα/2 - Uβ/2) = (√3/Udc) * Ts * U3;

T5 = (√3/Udc) * Ts * (√3Uα/2 - Uβ/2) = (√3/Udc) * Ts * U2;

T0 = T7 = (Ts - T1 - T5) / 2;

Uref位於第Ⅵ扇區時:

T4 = (-√3/Udc) * Ts * (-√3Uα/2 - Uβ/2) = -(√3/Udc) * Ts * U3;

T5 = (-√3/Udc) * Ts * Uβ = -(√3/Udc) * Ts * U1;

T0 = T7 = (Ts - T4 - T5) / 2;

這樣就完成了Uref位於6個扇區時的各電壓矢量時間的計算,其中√3/Udc是SVPWM調製模式下的最大不失真電壓幅值,在計算定時器各通道的捕獲比較寄存器值時可以將√3/Udc直接去掉;Ts是PWM一個完整週期的時間,也就是定時器的計數週期。

在圖十三中,整個PWM週期中,最先發生的是T0,接下來依次是T4,T6,T7,其中T4,T6是兩個非零矢量,且T4先於T6發生,所以我們可以令先發生的非零矢量時間爲Tx,後發生的非零矢量時間爲Ty,並且T0=T7,那麼就可以得出加載到三個捕獲比較寄存器上的時間分別是:

T1 = (Ts - Tx - Ty) / 4;

T2 = T1 + Tx/2;

T3 = T2 + Ty/2;

只要根據Uref實際所在的扇區,確定Tx和Ty實際所對應的電壓矢量,就可以計算出T1,T2,T3的值;然後再根據Uref所在的扇區畫出類似圖十三的三相PWM波形,就可以確定T1,T2,T3分別對應到三相A,B,C的哪一個通道,再賦值給對應通道的捕獲比較寄存器,就完成了SVPWM算法。

 

至此,就完成了FOC控制,有哪裏講的不對的地方,希望可以指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章