【年度重磅】永磁同步電機的MPC控制

【年度重磅】永磁同步電機的MPC控制

來自專欄 機械/電機/控制學拾遺

剛剛完成自己的碩士畢業論文。先前答應了一個同道,要把自己畢業論文的MPC控制這部分寫成知乎文章貼出來。現在我來執行啦。(關心EMPC的請稍等,我會儘快更新的)

嚴正聲明:本文是基於我個人的畢業論文的部分內容縮寫的。謹供同行朋友們學習參考,本人保有對此文包括知識產權和著作權在內的一切權利。如發現有人抄襲,必將嚴究到底。以及,看過這篇答案沒點贊的朋友們,不用找我問PMSM控制問題了,會被我拖黑的。

預測控制簡單來說到底什麼意思??

www.zhihu.com圖標蘇小蛇Arrogance:Explicit MPC簡介(一) 問題的轉化?

zhuanlan.zhihu.com圖標不用Matlab MPC工具箱怎麼編寫MPC??

www.zhihu.com圖標

在開講以前,希望沒有基礎的朋友們可以先好好地看一下我的這幾篇文章,這幾篇文章若有沒有看懂的地方,敬請及時提問。

在先前的內容里,我們簡單介紹了什麼是MPC,如何將MPC轉化成一個二次規劃問題,以及如何將這個過程用MATLAB寫出來。今天我們將介紹如何將以上三點,運用於永磁同步電機(PMSM)的控制中。

首先,我們先寫出PMSM的三個基礎公式:

frac{mathrm{d}Psi_mathrm{d}}{mathrm{d}t}=U_mathrm{d}-R_mathrm{d}I_mathrm{d}+omega_mathrm{L}Psi_mathrm{q}\ frac{mathrm{d}Psi_mathrm{q}}{mathrm{d}t}=U_mathrm{q}-R_mathrm{q}I_mathrm{q}-omega_mathrm{L}Psi_mathrm{d}\ M_{el}=frac{3}{2}z_mathrm{P}(Psi_mathrm{d}I_mathrm{q}-Psi_mathrm{q}I_mathrm{d})

以及根據這三個公式,我們得出的PMSM的非線性動態方程:

L_mathrm{d}frac{mathrm{d}I_mathrm{d}}{mathrm{d}t}=U_mathrm{d}-R_mathrm{d}I_mathrm{d}+L_mathrm{q}omega_mathrm{L}I_mathrm{q}\ L_mathrm{q}frac{mathrm{d}I_mathrm{q}}{mathrm{d}t}=U_mathrm{q}-R_mathrm{q}I_mathrm{q}-L_mathrm{d}omega_mathrm{L}I_mathrm{d}-Psi_{mathrm{PM}}omega_mathrm{L}\ frac{mathrm{d}omega_mathrm{L}}{mathrm{d}t}=frac{3z_mathrm{P}^2}{2J}(Psi_{mathrm{PM}}I_mathrm{q}+(L_mathrm{d}-L_mathrm{q})I_mathrm{d}I_mathrm{q})-frac{z_mathrm{P}}{J}M_mathrm{L}

u=left(egin{array}{c} u_1\ u_2 end{array} 
ight)=left( egin{array}{c} U_mathrm{d}\ U_mathrm{q} end{array}
ight)\ x=left(egin{array}{c} x_1\ x_2\ x_3 end{array} 
ight)=left( egin{array}{c} I_mathrm{d}\ I_mathrm{q}\ omega_mathrm{L} end{array}
ight) ,有

dot{x}=underbrace{left( egin{array}{ccc} -frac{R}{L_mathrm{d}}&0&0\ 0&-frac{R}{L_mathrm{q}}&-frac{Psi_{mathrm{PM}}}{L_mathrm{q}}\ 0&frac{3z_mathrm{P}^2}{2J}Psi_{mathrm{PM}}&0 end{array}
ight)}_{	ext{線性部分,$A_{mathrm{lin}}$}}x+underbrace{left( egin{array}{cc} frac{1}{L_mathrm{d}}&0\ 0&frac{1}{L_mathrm{q}}\ 0&0 end{array}
ight)}_{	ext{$B$}}u+underbrace{left( egin{array}{c} frac{L_mathrm{q}}{L_mathrm{d}}x_2x_3\ -frac{L_mathrm{d}}{L_mathrm{q}}x_1x_3\ frac{3z_mathrm{P}^2}{2J}(L_mathrm{d}-L_mathrm{q})x_1x_2 end{array}
ight)}_{	ext{非線性部分}}+underbrace{left( egin{array}{c} 0\ 0\ -frac{z_mathrm{P}}{J}M_mathrm{L} end{array}
ight)}_{	ext{常數}}(1)

根據線性化公式,對於 dot{x}=f(x,u) , f(x_0,u_0)=0 ,有

frac{delta x}{delta t}|_{left(ar{x}_0,ar{u}_0
ight)}=frac{delta f}{delta x}(ar{x}_0,ar{u}_0)delta x+ frac{delta f}{delta u}(ar{x}_0,ar{u}_0)delta u

若將 L_	extrm{d}L_	extrm{q} 視作常數,令 delta x=x-x_0,delta u =u-u_0 ,則對於公式(1)有如下線性化過程:

frac{delta x}{delta t}|_{left(ar{x}_0,ar{u}_0
ight)}=underbrace{left(egin{array}{ccc} -frac{R}{L_mathrm{d}}&frac{L_mathrm{q}}{L_mathrm{d}}ar{x}_{30}&frac{L_mathrm{q}}{L_mathrm{d}}ar{x}_{20}\ -frac{L_mathrm{d}}{L_mathrm{q}}ar{x}_{30}&-frac{R}{L_mathrm{q}}&-frac{L_mathrm{d}}{L_mathrm{q}}ar{x}_{10}-frac{Psi_{mathrm{PM}}}{L_mathrm{q}}\ frac{3z_mathrm{P}^2}{2J}(L_mathrm{d}-L_mathrm{q})ar{x}_{20}&frac{3z_mathrm{P}^2}{2J}[(L_mathrm{d}-L_mathrm{q})ar{x}_{10}+Psi_{mathrm{PM}}]&0 end{array}
ight)}_{	ext{線性化後的 $A$}}delta x
onumber+underbrace{left( egin{array}{cc} frac{1}{L_mathrm{d}}&0\ 0&frac{1}{L_mathrm{q}}\ 0&0 end{array}
ight)}_{	ext{$B$ 保持不變}}delta u   (2)

當然,若你能有 L=L(x) 的公式的話,完全可以代進去計算。相比於一般的線性化,MPC中的線性化存在這樣的一個問題。將線性化過程中的參考點視作兩個不同的點。在計算 delta x delta u 時,我們稱該點為穩定點,因為當系統到達該點時,將有 delta x=x-x_{	extrm{gw}}=0,delta u = u-u_{	extrm{gw}}=0 ,系統將不再運動;第二個點我們成為參考點,即計算A和B時所取的 x,u 的值。若參考點取在目標轉速上( omega_{	extrm{L,b}}=omega_{	extrm{L,g}} ),則對系統當前動態函數的計算將會很不準確;而若將穩定點取在當前的測得狀態量上,則系統將不再運動。

為此我畫了四張小圖來進行說明。

請大家忽略德語,我直接從自己的畢業論文里截圖了,Zielpunkt的意思是目標點,Systemdynamik是系統動態方程,Methode是方法,genommene是「採用的」的意思

因此,在PMSM的MPC控制中,線性化公式是這樣構造的:令 delta x=x-x_{	extrm{g}},delta u =u-u_	extrm{g} ,g下標表示目標,而公式(2)改寫為:

frac{delta x}{delta t}|_{left(x_t,u_t
ight)}=underbrace{left(egin{array}{ccc} -frac{R}{L_mathrm{d}}&frac{L_mathrm{q}}{L_mathrm{d}}x_{3,t}&frac{L_mathrm{q}}{L_mathrm{d}}x_{2,t}\ -frac{L_mathrm{d}}{L_mathrm{q}}x_{3,t}&-frac{R}{L_mathrm{q}}&-frac{L_mathrm{d}}{L_mathrm{q}}x_{1,t}-frac{Psi_{mathrm{PM}}}{L_mathrm{q}}\ frac{3z_mathrm{P}^2}{2J}(L_mathrm{d}-L_mathrm{q})x_{2,t}&frac{3z_mathrm{P}^2}{2J}[(L_mathrm{d}-L_mathrm{q})x_{1,t}+Psi_{mathrm{PM}}]&0 end{array}
ight)}_{	ext{線性化後的 $A$}}delta x
onumber+underbrace{left( egin{array}{cc} frac{1}{L_mathrm{d}}&0\ 0&frac{1}{L_mathrm{q}}\ 0&0 end{array}
ight)}_{	ext{$B$ 保持不變}}delta u   (2)

而到這裡為止,就出現了一個問題:PMSM控制中,我們只有目標轉速,那麼所謂的完整的 x_	extrm{g},u_	extrm{g} 該如何求得呢?好問題。首先要注意到,目標點必須是均衡點,換言之, f(x_	extrm{g},u_	extrm{g})overset{!}{=}0 ,均衡點的計算與選擇,除非是在極限的滿負荷情況下,否則是有很多不同的criteria的,如MMPV,MMPA等等。這部分就留給大家自己研究了,有問題再個別來找我。

然後講講PMSM的參數約束及其線性化。

I_mathrm{d}^2+I_mathrm{q}^2leq I_{mathrm{max}}^2\ U_mathrm{d}^2+U_mathrm{q}^2leq frac{1}{3}U_{mathrm{Sp}}^2

如上式所示,PMSM的約束是兩個圓。我們用圓的內接N邊形來擬似它,格式和EMPC-問題的轉化中所提到的相似,寫作:

 A_xxleq b_x\ A_uuleq b_u

現在的問題是求這兩個不等式里的A和b。

首先我們作出第一個約束:

 underbrace{(0 ,1)}_{a_1}left(egin{array}c x_mathrm{d}\x_mathrm{q} end{array}
ight)leq underbrace{Rsin(frac{2pi}{2n})}_{b_1}

然後寫出轉置矩陣:

T=left(egin{array}{cc} cos(frac{2pi}{n})&-sin(frac{2pi}{n})\ sin(frac{2pi}{n})&cos(frac{2pi}{n}) end{array}
ight)

a_mathrm{i}=(T^{i-1}a_1^	op )^	op , b_mathrm{i}=b_1 ,我們可以得出整個內接n邊形,其中n任選,越大越精確,但計算量也會隨之增大,效率相對下降,自不多言。

在完成以上計算後, A_x 還得加上第三列,一般我們不會對轉速作什麼約束,所以通常設置為全部是0。如有必要增加約束,請額外增加幾行來寫。

最後簡單介紹一下代價函數的寫法。沒有特殊原因的情況下,通常將 R 矩陣規定為單位矩陣,然後將 Q 根據需要來設置,以調節電流、電壓和轉速互相之間的權重。在PMSM的問題中,建議將電流的權重設置為最大,而轉速的權重應相較於電流權重為小,因為其本身的絕對值很大。終末約束可設置為與之前相同的一般約束。終末代價函數往大里設置,直到系統穩定,然後可以考慮慢慢往下減。

我自己的論文中,終末代價函數 P 被我設置為了僅與電角速度相關的函數,而且值取的很大(相對於Q的1000,1000,10和R的1,1相比,P取的是0,0,100000)。預測步長取2-3步足矣,更長的話計算量太大,拖累運行效率。

這是用MPC控制PMSM的一個粗略框架。如閱讀完以後還有更具體的問題,歡迎提出。感謝閱讀。


推薦閱讀:

TAG:電機 | 電機控制 | 模型預測控制 |