控制系統常用算法之PID

1.PID控制算法的基本思想

  PID算法是一種具有預見性的控制算法,其核心思想是:

  1) PID算法不但考慮控制對象的當前狀態值(現在狀態),而且還考慮控制對象過去一段時間的狀態值(歷史狀態)和最近一段時間的狀態值變化(預期),由這3方面共同決定當前的輸出控制信號;

  2)PID控制算法的運算結果是一個數,利用這個數來控制被控對象在多種工作狀態(比如加熱器的多種功率,閥門的多種開度等)工作,一般輸出形式爲PWM,基本上滿足了按需輸出控制信號,根據情況隨時改變輸出的目的。

2.PID算法分析:

設某控制系統:用戶設定值爲SV(也就是希望通過PID控制算法使被控制對象的狀態值保持在SV的附近)。

1)從系統投入運行開始,控制算法每隔一段時間對被控制對象的狀態值進行採樣。由此,可得到開機以來由各個採樣時間點被控制對象的狀態值所形成的數據序列:

X1, X2,  X3,  X4,  ....  Xk-2, Xk-1, Xk

說明:

X1:開機以來的第一次採樣值

Xk:  目前的採樣值(最近一次的採樣值)

2)從這個採樣值序列中提取出三方面信息:

當前採樣值Xk與用戶設定值SV之間的差值:Ek

Ek =Sv-Xk

分析Ek:

Ek>0:說明當前狀態值未達標

Ek=0:說明當前控制狀態值正好滿足要求

Ek<0:說明當前狀態值已經超標

結論:Ek反應了控制對象當前值與設定值的偏差程度,可以根據Ek的大小對輸出信號OUT進行調整:偏差程度大OUT增大,偏差程度小OUT減小。即輸出信號的強弱與當前偏差程度的大小成比例,所以根據Ek的大小來給出控制信號OUT的當前值的算法稱爲比例控制(Proportion)。

用數學模型可以表示爲:

Pout=(Kp*Ek)+Out0

Kp:一般稱之爲比例係數,可以理解爲硬件上的放大器(或衰減器),適當選取Kp將當前誤差值Ek,按一定的增益放大或縮小,以提高控制算法的相應速度。

Out0:是一個常數,目的是爲了當Ek爲0時,確保輸出信號不爲0,以不至於在當前值與設定值相等時控制器輸出信號OUT爲0,系統處於無控制信號的失控狀態。

將投入運行以來的各個採樣值都與設定值相減,可得到開機以來每個採樣時刻的偏差序列數據:

   E1,E2,E3 .....Ek-2, Ek-1, Ek

說明:

   E1:開機的第一個採樣點與設定值的偏差

       E1=SV-X1;

       E2=SV-X2;

       ......

       Ek-2=SV-Xk-2;

       Ek-1=SV-Xk-1;

   Ek:  當前的採樣值與設定值的偏差

       Ek=SV-Xk

分析開機以來的誤差序列:

每個偏差值可能有:>0,<0,=0這三種可能的值,因爲從開機到現在,控制算法不斷輸出控制信號對被控對象進行控制,導致了過去這段時間有時候超標(Ek<0),有些時候未達標(Ek>0),有時候正好滿足要求(Ek=0);如果將這些偏差值進行累加求代數和得到Sk,即:

Sk=E1+E2+E3+.........+Ek-2+Ek-1+Ek

分析Sk:

Sk>0:過去大多數時候未達標

Sk=0:過去控制效果較理想

Sk<0:過去大多數時候已經超標

結論:

1.通過對Sk的分析,可以對控制算法過去的控制效果進行綜合評估。體現了控制算法按照原來的方式輸出的控制信號導致了現在的控制結果,所以應該利用這個值來對當前要輸出的控制信號OUT進行修正,以確保控制對象會在將來的一小段時間儘快達到用戶設定的值。

2.Sk實際上是過去每個時間點的誤差相加,與數學上的定積分運算類似,因此根據Sk對輸出信號進行調節的算法稱積分(integral)算法。所以積分控制的數學模型爲:

Iout=(kp* ((1/Ti) \int Ekdt))+Out0

Kp是一常數,其目的類似硬件上的放大器,用於將Sk放大或衰減;

Out0是一常數,爲了在歷史積分偏差值爲0時確保系統有一個輸出值,避免失控;

Ti  是積分時間常數,取值越大會導致輸出量OUT會越小,可理解爲歷史上已經很久的誤差值都影響了當前的輸出信號。取值越小,輸出OUT會越大,可理解爲積分只考慮了最近一段時間的誤差。

實際中,如果系統已經運行“很長”一段時間了,那些早期採樣的偏差值可以忽略他們對當前控制的影響,所以應該根據情況選擇合理的Ti值方能得到良好的控制效果。

最近兩次的偏差之差 Dk

Dk=Ek-Ek-1

說明:

Ek:當前的偏差

Ek-1: 基於當前的前一個採樣時刻的偏差值(即上一次的偏差值)

分析Dk:

Dk>0:說明從上一採樣時刻到當前誤差有增大趨勢

Dk=0:說明從上一採樣時刻到當前誤差平穩

Dk<0:說明從上一採樣時刻到當前誤差有減小趨勢

結論:

 1. Dk能夠說明從上次採樣到當前採樣的這段時間被控制對象的狀態變化趨勢,這種變化的趨勢很可能會在一定程度上延續到下一個採樣時間點,所以可以根據這個變化趨勢(Dk的值)對輸出信號OUT進行調整,達到提前控制的目的。

 2. Dk形如數學上的微分運算,反應了控制對象在最近一段時間內的變化趨勢及變化量,所以利用Dk對控制器輸出信號進行調節的算法稱爲微分(differential)算法。可以用數學模型表達爲:

Dout=Kp*(Td(dEk/dt))+Out0

Kp:爲一常數,可理解爲硬件上的放大器或衰減器,用於對輸出信號OUT的增益進行調整;

Out0:爲一常數,爲了在Dk爲0時確保OUT都有一個穩定的控制值,避免失控。

Td:叫微分時間常數,(猶如硬件上電感器的自感係數)Td越大導致OUT增大,對輸出信號產生強烈的影響。

3)PID算法的形成

比例、積分、微分三種算法的優缺點分析:

比例算法:Pout=(Kp*Ek)+Out0

只考慮控制對象當前誤差,當前有誤差才輸出控制信號,當前沒有誤差就不輸出控制信號,也就是說只要偏差已經產生了比例算法才採取措施進行調整,所以單獨的比例算法不可能將控制對象的狀態值控制在設定值上,始終在設定值上下波動;但是比例控制反應靈敏,有誤差馬上就反應到輸出。

積分算法:Iout=(kp* ((1/Ti) \int Ekdt))+Out0

考慮了被控制對象的歷史誤差情況,過去的誤差狀況參與了當前的輸出控制,但是在系統還沒有達到目標期間,往往會因爲這些歷史的誤差對當前的控制產生了干擾(即拖後腿),使用不當反而攪亂當前的輸出。但是在系統進入穩定狀態後,特別是當前值與設定值沒有偏差時,積分算法可以根據過去的偏差值輸出一個相對穩定的控制信號,以防止產生偏離目標,起到打預防針的效果。

微分算法:Dout=Kp*(Td(dEk/dt))+Out0

單純的考慮了近期的變化率,當系統的偏差趨近於某一個固定值時(變化率爲0),微分算法不輸出信號對其偏差進行調整,所以微分算法不能單獨使用,它只關心偏差的變化速度,不考慮是否有偏差(偏差變化率爲0時偏差不一定是0).但是微分算法能獲得控制對象近期的變化趨勢,它可以協助輸出信號儘早的抑制控制對象的變化。可以理解爲將要有劇烈變化時就大幅度調整輸出信號進行抑制,避免了控制對象的大幅度變化。

以上三種算法綜合起來產生一個當前的控制量對控制對象進行控制,它們的優缺點互補,即形成經典的PID算法。

PID算法數學模型   OUT=Pout+Iout+Dout

即:OUT = Kp*Ek + (kp* ((1/Ti) \int Ekdt)) +Kp*(Td(dEk/dt))+Out0 

PID算法實現

1)改寫積分和微分項

用過去一段時間的採樣點的偏差值的代數和的代替積分,積分項可以改寫成:

Iout =1/Ti \sum_{k=0}^{n}Ek*T

T是採樣週期,也叫控制週期,每隔T時間段進行一次PID計算。

微分項可改寫成: D=Td*((Ek-Ek-1)/T)

Ek:本次偏差,Ek-1上次的偏差值

2)得到位置式PID算法模型

OUT = Kp*E_{k} + (kp* ((1/Ti) \sum_{k=0}^{n}Ek*T)) +Kp*(Td(E_{k}-E_{k-1}))+Out0

利用程序可以方便實現這個計算公式。OUT即爲本次運算的結果,利用OUT可以去驅動執行機構輸出對應的控制信號,例如溫度控制就可以控制PWM的寬度,電磁閥就可以改變電磁線圈電流以改變閥門開度,或者是可控硅的導通角度等。

這種PID算法計算出的結果(OUT值)表示當前控制器應該輸出的控制量,所以稱爲位置式(直接輸出了執行機構應該達到的狀態值)。

位置式PID算法計算量較大,比較消耗處理器的資源。在有些控制系統中,執行機構本身沒有記憶功能,比如MOS管是否導通完全取決於控制極電壓,可控硅是否導通取決於觸發信號,繼電器是否接通取決於線圈電流等,只要控制信號丟失,執行機構就停止,在這些應用中應該採用位置式PID。

3)增量式PID算法模型

有一些執行機構本身具有記憶功能,比如步進電機,即使控制信號丟失,由於其自身的機械結構會保持在原來的位置等,在這些控制系統中,PID算法沒有必要輸出本次應該到達的真實位置,只需要說明應該在上次的基礎上對輸出信號做多大的修正(可正可負)即可,這就是增量式PID算法。

增量式PID計算出的是應該在當前控制信號上的調整值,如果計算出爲正,則增強輸出信號;如果計算出爲負則減弱輸出信號。

增量式PID算法數學模型:

如果用OUTk-1表示上次的輸出控制信號值,那麼當前的輸出值應該爲OUTk,這兩者之間的關係爲:

OUTk=OUTk-1+  △OUT

△OUT即爲應該輸出的增量值

△OUT= OUTk- OUTk-1 = k_{p}*(E_{k}-E_{k-1}) + ((k_{p}*T)/Ti)*E_{k} +((k_{p}*T_{d})/T)*(E_{k}-2*E_{k-1}+E_{k-2}))

可見增量式PID的計算只需要最近3次的偏差(本次偏差,上次偏差,上上次偏差),不需要處理器存儲大量的歷史偏差值,計算量也相對較少,容易實現。

4)對積分時間常數Ti 和微分時間常數 Td的解釋

在PID控制算法中,當前的輸出信號由比例項,積分項,微分項共同作用形成。

當比例項輸出不爲0時,如果積分項對運算輸出的貢獻作用與比例項對運算對輸出的貢獻一樣時(即同爲正或同爲負時),積分項相當於重複了一次比例項產生作用的時間,這個時間就可以理解爲積分時間。

當比例項不爲0時,如果微分項在一段時間裏計算的結果與比例項對輸出的貢獻相同(即同爲正或同爲負)時,微分項相當於在一段時間裏重複了比例項的作用,這段時間可理解爲就是微分時間。

實際應用中應該合理選擇Kp,Ti,Td以確保三者對輸出的貢獻平衡,從而使控制對象在設定值的附近。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章