【PMSM】二. 经典电流环、速度环设计(下)
上一篇文章討論了永磁無刷電機(jī)電流環(huán)、速度環(huán)的建模和控制器的參數(shù)整定,這篇文章會討論前饋、濾波、抗飽和算法以及其他一些要注意的細(xì)節(jié),且包含了大量工程經(jīng)驗。結(jié)合這兩篇文章的內(nèi)容,我們可以完整地使用經(jīng)典 PI 控制器實現(xiàn)電機(jī)轉(zhuǎn)速的控制。
一. 前饋
不考慮功率變換器和純延時環(huán)節(jié),系統(tǒng)雙環(huán)傳遞函數(shù)如下:
永磁無刷電機(jī)的 DQ 軸電壓方程如下:
{ud=Rid+Lddiddt?ωeLqiquq=Riq+Lqdiqdt+ωe(Ldid+?f)\begin{cases} u_d=Ri_d+L_d\frac{di_d}{dt}-\omega_eL_qi_q\\ u_q=Ri_q+L_q\frac{di_q}{dt}+\omega_e\left( L_di_d+\phi _f \right)\\ \end{cases} {ud?=Rid?+Ld?dtdid???ωe?Lq?iq?uq?=Riq?+Lq?dtdiq??+ωe?(Ld?id?+?f?)?
可以看到,udu_dud? 不僅和 idi_did? 有關(guān),同時還和 iqi_qiq? 有關(guān);uqu_quq? 不僅和 iqi_qiq? 有關(guān),還和 idi_did? 有關(guān)。換句話說,DQ 軸之間存在耦合。如果我們簡單地使用兩個 PI 控制器去分別控制 DQ 軸,那么耦合一定會影響控制器的性能,但幸運的是,在任何一個時刻 ?ωeLqiq-\omega_eL_qi_q?ωe?Lq?iq? 以及 ωe(Ldid+?f)\omega_e(L_di_d+\phi_f)ωe?(Ld?id?+?f?) 是確定的,與偏差無關(guān),故我們可以使用前饋進(jìn)行直接補(bǔ)償,在 Q 軸控制器的輸出上加上 ωe(Ldid+?f)\omega_e(L_di_d+\phi_f)ωe?(Ld?id?+?f?),在 D 軸控制器的輸出上加上?ωeLqiq-\omega_eL_qi_q?ωe?Lq?iq? 。
理想情況下,通過這樣的方法,我們可以完美地補(bǔ)償?shù)舴措妱觿輲淼挠绊?#xff0c;實現(xiàn) DQ 軸的完全解耦。但事實上卻并不是這樣,一方面,我們在進(jìn)行前饋補(bǔ)償時需要用到 iq,id,ωei_q,\,i_d,\,\omega_eiq?,id?,ωe?,但采樣得到的電流和轉(zhuǎn)速通常有比較大的噪聲;而另一方面,前饋中還包含 Ld,Lq,?fL_d,\,L_q,\,\phi_fLd?,Lq?,?f? 等電機(jī)參數(shù),我們獲取到的電機(jī)參數(shù)很可能不準(zhǔn)確,并且電機(jī)在高速旋轉(zhuǎn)時,自身的參數(shù)也會發(fā)生攝動。
把一個沒有那么準(zhǔn)確且包含噪聲的前饋直接加到控制器的輸出上作為 DQ 軸電壓的一部分,帶來的負(fù)面作用很可能高于 DQ 軸解耦的正面作用,嚴(yán)重時甚至可能導(dǎo)致系統(tǒng)失穩(wěn)。
所以,是否使用前饋需要根據(jù)典型工況、性能指標(biāo)、軟硬件性能等因素綜合考慮。如果引入前饋會帶來正面效果,那么就使用前饋。
前饋的使用在工程上非常靈活。在大部分情況下,采樣得到的 id,iqi_d,\,i_qid?,iq? 中包含的噪聲要大于 ωe\omega_eωe? 中的噪聲,那么我們完全可以只補(bǔ)償 ωe?f\omega_e\phi_fωe??f?,實現(xiàn) DQ 軸的部分解耦。
除此之外,在工程上還可以使用各種低通濾波器濾除掉 iq,id,ωei_q,\,i_d,\,\omega_eiq?,id?,ωe? 中的噪聲,再進(jìn)行前饋補(bǔ)償,但濾波器也會引入滯后,實際效果的好壞需要權(quán)衡。
最后,就算不存在模型攝動,我們獲取到的電機(jī)參數(shù)以及電流轉(zhuǎn)速都 100% 準(zhǔn)確,我們?nèi)匀徊豢赡苓M(jìn)行 DQ 軸的完全解耦,因為系統(tǒng)中存在很多延時環(huán)節(jié),這些延時環(huán)節(jié)導(dǎo)致我們的前饋作用到被控對象上時,被控對象的狀態(tài)已經(jīng)發(fā)生了變化,我們補(bǔ)償?shù)钠鋵嵤窍到y(tǒng)之前的狀態(tài)。
如果能準(zhǔn)確預(yù)測到延時之后系統(tǒng)的狀態(tài),我們可以直接使用該狀態(tài)進(jìn)行前饋補(bǔ)償,而這通常是很難做到的,所以在工程上我們可以引入前饋系數(shù) Kf∈(0,1)K_f\in(0,1)Kf?∈(0,1),將前饋乘以 KfK_fKf? 再加入到控制器中,通過調(diào)節(jié) KfK_fKf? 的大小,可以有效地降低前饋帶來的負(fù)面影響,同時盡可能保留前饋解耦的正面作用。
二. 濾波
電流環(huán)使用一個一階低通濾波器進(jìn)行反饋濾波和指令濾波,其傳遞函數(shù)為一個一階慣性環(huán)節(jié):
Gf(s)=Y(s)R(s)=11+1wbsG_f\left( s \right) =\frac{Y\left( s \right)}{R\left( s \right)}=\frac{1}{1+\frac{1}{w_b}s} Gf?(s)=R(s)Y(s)?=1+wb?1?s1?
其中 wbw_bwb? 為低通濾波器的截止頻率。我們用后向積分法進(jìn)行 Z 變換,有:
s=z?1TzGf(z)=Y(z)R(z)=wbTwbT+1?z?1R(z)wbT=Y(z)(wbT+1)?Y(z)z?1Y(n)=TwbTwb+1R(n)+1Twb+1Y(n?1)s=\frac{z-1}{Tz} \\ G_f\left( z \right) =\frac{Y\left( z \right)}{R\left( z \right)}=\frac{w_bT}{w_bT+1-z^{-1}} \\ R\left( z \right) w_bT=Y\left( z \right) \left( w_bT+1 \right) -Y\left( z \right) z^{-1} \\ Y\left( n \right) =\frac{Tw_b}{Tw_b+1}R\left( n \right) +\frac{1}{Tw_b+1}Y\left( n-1 \right) s=Tzz?1?Gf?(z)=R(z)Y(z)?=wb?T+1?z?1wb?T?R(z)wb?T=Y(z)(wb?T+1)?Y(z)z?1Y(n)=Twb?+1Twb??R(n)+Twb?+11?Y(n?1)
得到離散后的時域表達(dá)式我們就可以在程序中實現(xiàn)濾波器了。
我們在上一篇文章的建模中考慮了速度環(huán)使用的一階低通濾波器,故其參數(shù)可以通過電流環(huán)帶寬 wbcrtw_{b}^{crt}wbcrt? 和電流環(huán)幀率 fff 計算得到。而速度環(huán)的濾波器并沒有在建模時考慮,相反,我們把它視為一種擾動,它的參數(shù)是需要手動整定的。我們希望它在濾除掉噪聲的同時,給系統(tǒng)帶來的相位滯后最小,即濾波器對系統(tǒng)帶來的擾動最小。
為了減小濾波器對速度環(huán)產(chǎn)生的擾動,我們使用二階巴特沃斯濾波器進(jìn)行濾波,使用高階濾波器可以在保證濾波效果的同時引入更小的相位滯后。在這篇文章中我簡單對比過不同濾波器的性能:【ADRC】一. 線性跟蹤微分器,這里就不詳細(xì)地對濾波器進(jìn)行介紹了。
二階巴特沃斯濾波器的核心代碼如下,詳細(xì)的代碼可以查看 PX4 飛控源碼中的 LowPassFilter2p.hpp 文件,濾波器的推導(dǎo)可以參考這篇文章。
// init const float fr = _sample_freq / _cutoff_freq; const float ohm = tanf(M_PI_F / fr); const float c = 1.f + 2.f * cosf(M_PI_F / 4.f) * ohm + ohm * ohm;_b0 = ohm * ohm / c; _b1 = 2.f * _b0; _b2 = _b0;_a1 = 2.f * (ohm * ohm - 1.f) / c; _a2 = (1.f - 2.f * cosf(M_PI_F / 4.f) * ohm + ohm * ohm) / c;// apply T delay_element_0{sample - _delay_element_1 *_a1 - _delay_element_2 * _a2};const T output{delay_element_0 *_b0 + _delay_element_1 *_b1 + _delay_element_2 * _b2};_delay_element_2 = _delay_element_1; _delay_element_1 = delay_element_0;值得一提的是,速度環(huán)的幀率要顯著低于電流環(huán),在速度環(huán)運行計算量稍大的二階濾波器不會占用太多算力。
三. 抗飽和(Anti-Windup)
在實際的控制系統(tǒng)中,電機(jī)和驅(qū)動器都有最大功率限制。比如,電流環(huán)的輸出為 Q 軸和 D 軸的相電壓,其最大值受到調(diào)制方法和母線電壓的限制,對于 SVPWM 來說,Uqmax=Udmax=3/3?Ubusmax?U_{q}^{max}=U_ze8trgl8bvbq^{max}=\sqrt{3}/3*U_{bus}^{\max}Uqmax?=Udmax?=3?/3?Ubusmax?。速度環(huán)的輸出為 Q 軸電流,其最大值為電機(jī)最大電流和驅(qū)動器最大電流中的最小值,即 Uvelt_loopmax=min?{Imotormax,Iescmax}U^{max}_{velt\_loop} = \min \left\{ I_{motor}^{max},\, I_{esc}^{max} \right\}Uvelt_loopmax?=min{Imotormax?,Iescmax?}。
當(dāng)控制器的輸出達(dá)到執(zhí)行器的極限時,反饋回路失效,系統(tǒng)將運行于開環(huán)狀態(tài),此時我們說執(zhí)行器處于飽和狀態(tài),系統(tǒng)長時間飽和很可能造成系統(tǒng)失穩(wěn),故我們在進(jìn)行控制器設(shè)計時要做抗飽和(Anti-Windup)處理,考慮執(zhí)行器的物理約束。
設(shè) PI 控制器中比例項的輸出為 UpU_pUp?,積分項的輸出為 UiU_iUi?,總輸出為 UUU,其最大值為 UmaxU^{max}Umax。
我們可以簡單的令 Uimax=Umax=?Uimax{U_i}^{max}=U^{max}=-{U_i}^{max}Ui?max=Umax=?Ui?max,這是最簡單的抗飽和處理。除此之外,我們還可以用積分分離、變速積分等方法進(jìn)行抗飽和,不過這兩種方法在電流環(huán)控制中都存在局限性:積分分離法在偏差較小時不使用積分控制,在偏差大于某個值時啟用積分控制,其不適合應(yīng)用在扭矩不斷變化的場合,因為積分反復(fù)開關(guān)可能會造成電流的突變。變速積分法通過引入一個變化的增益,做到大偏差時積分較慢,小偏差時積分較快,其本質(zhì)上是通過引入非線性環(huán)節(jié)來獲得更好的控制效果,但這樣做會影響到我們前面的建模分析,即通過帶寬整定 Kpcrt,KicrtK_{p}^{crt},\, K_{i}^{crt}Kpcrt?,Kicrt? 的公式可能不再適用,且變積分的參數(shù)整定也較為困難,所以我們接下來還是在最簡單的抗飽和方法之上進(jìn)行拓展。
回到 Uimax=Umax=?Uimax{U_i}^{max}=U^{max}=-{U_i}^{max}Ui?max=Umax=?Ui?max 上,當(dāng) UpU_pUp? 較大時,積分效應(yīng)仍然可能導(dǎo)致控制器的總輸出 UUU 達(dá)到飽和,即 U=Ui+Up>UmaxU=U_{i}+U_p>U^{max}U=Ui?+Up?>Umax。我們抗飽和的根本目標(biāo)是通過限制積分器的輸出來保證控制器不飽和且擁有最大輸出能力,即通過限制 UimaxU_{i}^{max}Uimax? 和 UiminU_{i}^{min}Uimin? 來保證 ?Umin<U<Umax-U^{min}<U<U^{max}?Umin<U<Umax 。
所以,考慮到比例項的輸出,我們可以使用積分器的動態(tài)限幅,即 Uimax=Umax?Up,Uimin=?Umax?UpU_{i}^{max}=U^{max}-U_p,\, U_{i}^{min}=-U^{max}-U_pUimax?=Umax?Up?,Uimin?=?Umax?Up?,每個時刻的積分限幅是動態(tài)變化的,和當(dāng)前比例項的輸出有關(guān)。這樣可以保證總輸出限幅一定,在偏差較大時可以起到類似變速積分的效果。
考慮到前饋項,我們還需要對前饋的輸出進(jìn)行處理,由于前饋項的形式比較靈活,在這里就不舉例了,我們只需要保證積分項 UiU_iUi? 不會使得控制器輸出 UUU 的絕對值超過 UmaxU^{max}Umax 即可。
四. 其他細(xì)節(jié)
1. 單位
兩篇文章中提到的所有頻率,如 wb,wc,wnw_b,\,w_c,\,w_nwb?,wc?,wn? 等,單位都為 rad/srad/srad/s。其余物理量的單位均為國際單位制,如電流單位為安培 (A),電壓單位為伏特 (V),等等。
2. Z 變換中的時間
很多人使用 PID 時,都沒有考慮代碼的執(zhí)行周期 TTT ,積分項直接使用 Ui += error * Ki,如果是手動調(diào)節(jié)參數(shù)的話這樣做并沒有什么問題,但我們直接使用理論計算出的 PI 參數(shù),就必須在所有的環(huán)節(jié)都符合公式推導(dǎo),代碼中應(yīng)該使用 Ui += error * Ki * dt。dt 對應(yīng) Z 變換 s=(z?1)/Tzs=(z-1)/Tzs=(z?1)/Tz 中的 TTT。
3. 放縮
雖然現(xiàn)在大部分微處理器中都集成了浮點計算單元(FPU,floating-point unit),但浮點數(shù)的計算還是比定點數(shù)的計算要慢得多,為了提高運算速度,我們可以把所有浮點數(shù)放縮為定點數(shù)進(jìn)行計算,在最后使用的時候再放縮回來,這通常是使用數(shù)學(xué)庫來實現(xiàn)的,比如 TI 的 IQmath Library,CMSIS 的 DSP Software Library 等。
在通信中也要考慮數(shù)據(jù)溢出的問題,為了在有限長的字節(jié)內(nèi)傳遞全部信息,通常也要對數(shù)據(jù)進(jìn)行放縮處理。
4. 指令預(yù)處理
在程序中需要根據(jù)物理約束對輸入控制器的指令進(jìn)行限幅,比如速度環(huán)的目標(biāo)值不應(yīng)超過電機(jī)的最高轉(zhuǎn)速,電流環(huán)的目標(biāo)值不應(yīng)該超過電機(jī)和驅(qū)動器所允許的最大電流。
其次根據(jù)驅(qū)動系統(tǒng)的性能,可能還需要對指令的變化率進(jìn)行限制,直接給電流環(huán)非常大的電流階躍會給控制帶來較大壓力,可以對指令額外進(jìn)行低通濾波,或者簡單地使用斜坡信號代替階躍。
5. 運行速率
電流環(huán)的幀率對控制器的性能有顯著影響,至少要保證電流環(huán)幀率在 10K 以上,一般 10K~40K 之間比較合適,幀率超過 40K 之后,再提高幀率所帶來的收益較小。
使能 FPU、使用定點數(shù)運算、使用查表法計算 sin?\sinsin 和 cos?\coscos、開啟編譯器 -O1/-O2 優(yōu)化可以顯著提高運行速率,除此之外,將反復(fù)調(diào)用的函數(shù)定義為內(nèi)聯(lián)函數(shù)、將浮點數(shù)除法改為浮點數(shù)乘法等方法也可以幫助提高代碼的執(zhí)行速度。
總結(jié)
以上是生活随笔為你收集整理的【PMSM】二. 经典电流环、速度环设计(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Entity Relation Fusi
- 下一篇: 互联网的工作原理