1. 程式人生 > >Pid控制演算法-專家PID與模糊PID的C++實現

Pid控制演算法-專家PID與模糊PID的C++實現

PID控制演算法的C語言實現

八 專家PID與模糊PID的C語言實現

   本節是PID控制演算法的C++語言實現系列的最後一節,前面7節中,已經分別從PID的實現到深入的過程進行了一個簡要的講解,從前面的講解中不難看出,PID的控制思想非常簡單,其主要問題點和難點在於比例、積分、微分環節上的引數整定過程,對於執行器控制模型確定或者控制模型簡單的系統而言,引數的整定可以通過計算獲得,對於一般精度要求不是很高的執行器系統,可以採用拼湊的方法進行實驗型的整定。

   然而,在實際的控制系統中,線性系統畢竟是少數,大部分的系統屬於非線性系統,或者說是系統模型不確定的系統,如果控制精度要求較高的話,那麼對於引數的整定過程是有難度的。專家PID和模糊PID就是為滿足這方面的需求而設計的。專家演算法和模糊演算法都歸屬於智慧演算法的範疇,智慧演算法最大的優點就是在控制模型未知的情況下,可以對模型進行控制。這裡需要注意的是,專家PID也好,模糊PID也罷,絕對不是專家系統或模糊演算法與PID控制演算法的簡單加和,他是專家系統或者模糊演算法在PID控制器引數整定上的應用

。也就是說,智慧演算法是輔助PID進行引數整定的手段。

   其實在前面幾節的講述中,已經用到了專家PID的一些特例行為了,從第五節到第七節都是專家系統一些特列化的演算法,對某些條件進行了區域性的判定,比如如果偏差太大的話,就去除積分項,這本身就是含有經驗的專家系統。

   專家系統、模糊演算法,需要引數整定就一定要有整定的依據,也就是說什麼情況下整定什麼值是要有依據的,這個依據是一些邏輯的組合,只要找出其中的邏輯組合關係來,這些依據就再明顯不過了。下面先說一下專家PID的C語言實現。正如前面所說,需要找到一些依據,還得從PID係數本身說起。

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

   2.積分作用係數Ki的作用是消除系統的穩態誤差。Ki越大,系統的靜態誤差消除的越快,但是Ki過大,在響應過程的初期會產生積分飽和的現象,從而引起響應過程的較大超調。若Ki過小,將使系統靜態誤差難以消除,影響系統的調節精度;

   3.微分系數Kd的作用是改善系統的動態特性,其作用主要是在響應過程中抑制偏差向任何方向的變化,對偏差變化進行提前預報。但是kd過大,會使響應過程提前制動,從而延長調節時間,而且會降低系統的抗干擾性。

   反應系統性能的兩個引數是系統誤差e誤差變化律ec,這點還是好理解的:

    首先我們規定一個誤差的極限值,假設為Mmax;規定一個誤差的比較大的值,假設為Mmid;規定一個誤差的較小值,假設為Mmin;

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

   當e*ec>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時,說明誤差絕對值很小,此時加入積分,減小靜態誤差。

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