對於一般的PID控制系統來說,當設定值發生較大的突變時,很容易產生超調而使系統不穩定。為了解決這種階躍變化造成的不利影響,人們發明了步進式PID控制算法。
1、步進式PID的基本思想
所謂步進式PID算法,實際就是在設定值發生階躍變化時,不直接對階躍信號進行響應,而是在一定的時間內逐步改變設定值,直至使設定值達到目標值。這種逐步改變設定值的辦法使得對象運行平穩。適用於高精度伺服系統的位置跟蹤。
佷顯然,這一方法並未改變PID控制器本身,而是對設定值做了前期處理。所以其結構框圖與控制方程與其他的PID控制算法是一致的。
為了對設定值做必要處理,以使其不知快速變化,有多種方法。比較常用的是建立線性變化函數的辦法。我們可以規定設定值從0-100%的變化時間為T,則可以確定設定值變化的斜率絕對值,或者說是步長。知道補償后,我們就可以根據不常來不斷修改設定值,直到目標值。可用公式描述為:
其中SPt為設定值目標值,SPs為設定值的起始值,sl為步長,k為步長的變化系數:
而控制器本身的位置型和增量型表達式都保持不變。
2、算法實現
步進式PID的實質是將設定值的突變修改為平緩的變化,這一處理方式在控制中有大量應用。處理設定值變化過程的流程如下所示:
根據這一流程我們可變寫處理函數如下:
1 /*步進式PID控制設定值步進處理函數*/ 2 float StepInProcessing(CLASSICPID vPID,float sp) 3 { 4 float stepIn=(vPID->maximum-vPID->minimum))*0.1; 5 float kFactor=0.0; 6 7 if(fabs(vPID->setpoint-sp)<=stepIn) 8 { 9 vPID->setpoint=sp; 10 } 11 else 12 { 13 if(vPID->setpoint-sp>0) 14 { 15 kFactor=-1.0; 16 } 17 else if(vPID->setpoint-sp<0) 18 { 19 kFactor=1.0; 20 } 21 else 22 { 23 kFactor=0.0; 24 } 25 vPID->setpoint=vPID->setpoint+k*stepIn; 26 } 27 28 return vPID->setpoint; 29 30 }
有了這一處理函數后,在調用PID控制器前,先對設定值進行判斷,然后將該函數的結果作為設定值給PID控制器。至於PID控制器才用前面講述的哪種形式,根據具體應用需求和使用方便去年而定。
3、總結
所謂步進式實質是對設定值進行平緩變化處理,防止因為設定值的跳變而引起系統的波動。這一辦法雖然能夠減少階躍跳變的干擾,但也會讓系統的響應速度變慢,當然這要根據需要來處理,因為步長的選擇決定了作用大小,補償越小約平緩,相應的響應速度也越慢。
歡迎關注: