1. 程式人生 > >PID之專家PID和模糊PID

PID之專家PID和模糊PID

PID本身的控制思想不難理解,在閉環系統中通過不斷地負反饋調整來取得最優的解。難點在於對比例,積分,微分的引數調整。

在實際的控制系統中,線性系統是少數的,大部分的系統屬於非線性系統或者說是模型不確定的。在這種情況下,如果對控制精度要求高的話,那麼對引數的整定是有難度的。專家PID和模糊PID就是為滿足這一方面的需求而設計的。專家演算法和模糊演算法屬於智慧演算法中的一種。

專家PID和模糊PID和PID控制演算法的關係不是簡單的加和。專家PID和模糊PID是在PID控制演算法中進行引數整定時的輔助。

靜態誤差:調節比例後,一直達不到預定的值,這就是靜態誤差。

Kp:比例係數 Kp 的作用是加快系統的響應速度,提高系統的調節精度。Kp 越        大,系統的響應速度越快,系統的調節精度越高,但是容易產生超調,甚至會使        系統不穩定。Kp 取值過小,則會降低調節精度,使響應速度緩慢,從而延長調        節時間,是系統靜態、動態特性變差

Ki:只要有偏差,就有調節作用,直到偏差為零,因此它能消除偏差。但積分作用過強,又會使調節作用過強,引起被調引數超     調,甚至產生振盪。

Kd:微分系數的作用是加快系統的響應,對偏差量的變化做出響應,按偏差量趨向進行控制,把偏差消滅在萌芽狀態之中,使超調小,穩定性增加,但對擾動的抑制能力減弱。

當同時採用這三種調節規律時,三種調節作用都應適當減弱,且微分時間一般取積分時間的1/4~1/3。

反應系統性能的兩個引數是系統誤差e和誤差變化率ec。

專家系統

規定誤差中的最大值為Nmax,最小值為Nmin。(參考實際獲取值和預定值的差)

當abs(e)>Nmax,說明誤差的絕對值已經很大了,不論誤差變化趨勢如何,都應考控制器的輸入應按最大(或最小)輸出,以達到迅速調整誤差的大小的效果,使誤差以最大的速度減小。此時,相當於開環控制。

當 e*ec>0 時(誤差變化率大於0.說明誤差絕對值在增大),說明誤差在朝向誤差絕對值增大的方向變化,此時,如果abs(e)>Mmid,說明誤差也較大,可考慮由控制器實施較強的控制作用,以達到扭轉誤差絕對值向減小的方向變化,並迅速減小誤差的絕對值。此時如果 abs(e)<Mmid,說明儘管誤差是向絕對值增大的方向變化,但是誤差絕對值本身並不是很大,可以考慮控制器實施一般的控制作用,只需要扭轉誤差的變化趨勢,使其向誤差絕對值減小的方向變化即可。

當 e*err<0 且 e*err(k-1)>0 或者 e=0 時,說明誤差的絕對值向減小的方向變化,或者已經達到平衡狀態,此時保持控制器輸出不變即可。

當 e*err<0 且 e*err(k-1)<0 時,說明誤差處於極限狀態。如果此時誤差的絕對值較大,大於 Mmin,可以考慮實施較強控制作用。如果此時誤差絕對值較小,可以考慮實施較弱控制作用。

當 abs(e)<Mmin 時,說明誤差絕對值很小,此時加入積分,減小靜態誤差。

上面的邏輯判斷過程,實際上就是對於控制系統的一個專家判斷過程。

模糊演算法

實際上模糊演算法是智慧演算法。智慧演算法也叫做非模型演算法。大部分的系統在一定的條件和範圍下能夠抽象成線性系統。關鍵是,當我們系統設計的範圍超出了線性的範圍時,我們又該如何處理?智慧演算法包括了模糊演算法,遺傳演算法,專家系統,神經網路演算法,這其中的演算法都可以和PID結合。模糊演算法也是逐次求精的過程。

舉例子:

我們設計一個倒立擺系統,假如擺針偏差<5°,我們說它的偏差比較“小”;擺針偏差在 5°和 10°之間,我們說它的偏差處於“中”的狀態;當擺針偏差>10°的時候,我們說它的偏差有點兒“大”了。對於“小”、“中”、“大”這樣的詞彙來講,他們是精確的表述,可問題是如果擺針偏差是 3°呢,那麼這是一種什麼樣的狀態呢。我們可以用“很小”來表述它。如果是 7°呢,可以說它是“中”偏“小”。那麼如果到了 80°呢,它的偏差可以說“非常大”。而我們調節的過程實際上就是讓系統的偏差由非常“大”逐漸向非常“小”過度的過程。當然,我們系統這個調節過程是快速穩定的。通過上面的說明,可以認識到,其實對於每一種狀態都可以劃分到大、中、小三個狀態當中去,只不過他們隸屬的程度不太一樣,比如 6°隸屬於小的程度可能是 0.3,隸屬於中的程度是0.7,隸屬於大的程度是 0。這裡實際上是有一個問題的,就是這個隸屬的程度怎麼確定?這就要求我們去設計一個隸屬函式。

隸屬函式:

理解隸屬度:

我們控制的目的就是讓倒立擺從隸屬“大”的程度為 1 的狀態,調節到隸屬“小”的程度為 1 的狀態。當隸屬大多一 些的時候,我們就加快調節的速度,當隸屬小多一些的時候,我們就減慢調節的速度,進行微調。可問題是,大、中、小的狀態是漢字,怎麼用數字表示,進而用程式程式碼表示呢?其實我們可以給大、中、小三個狀態設定三個數字來表示,比如大表示用 3 表示,中用 2 表示,小用 1 表示。那麼我們完全可以用1*0.3+2*0.7+3*0.0=1.7 來表示它,當然這個公式也不一定是這樣的,這個公式 的設計是系統模糊化和精確化的一個過程,讀者也可參見相關文獻理解。但就1.7 這個數字而言,可以說明,目前 6°的角度偏差處於小和中之間,但是更偏向於中。我們就可以根據這個數字來調節電機的轉動速度和時間了。