控制演算法:PID控制
(一):前言
PID控制是一種簡單但是可靠的控制演算法,但是市面上大部分講自動控制的書對這個問題講的過於複雜了。一上來就是一大堆數學公式正常人都受不了啊,這篇文章我希望使用一種較為簡單的方法來解釋PID控制。
(二):比例係數P
假如說我要控制一個燒烤爐,我要控制爐內的溫度維持在100攝氏度,控制方法是加煤或者減煤。那麼我們很容易就想到,如果溫度低了就要加煤,如果溫度高了就要減煤。我們也很容易想到,如果溫度太低,加煤就要多加一點,如果溫度太高,減煤也要多減一點。我們還可以很容易想到,如果爐子的溫度不高不低剛剛好是100°時,我們既不用加煤也不用減煤。將以上三點用一個式子來表達就是:加煤的量=一個數*溫度差
這裡說的一個數指的就是PID控制力的比例係數P,這個係數是根據實際系統調優調出來的,用燒烤爐的例子來說,如果小爐子,可以選擇每差一度加一塊煤,如果是像燒製瓷器的大爐子,完全可以選擇每差一度加一噸煤,這都是具體情況具體分析的。
(三):微分系數D
然而對於一個系統而言,只有比例係數P是不夠的。因為燒烤爐很可能存在這樣一種情況,現在的溫度是99℃,然後我加了一斤煤,結果加完以後溫度就跑到了101℃,按照P常數,我又從裡面減了一斤煤,結果溫度又變回了99℃,這樣的結果就是我的溫度在99和101之間來回跳動就是達不到我要的100,這種情況用專業術語叫做不收斂。顯然在這種情況下僅僅只有一個比例係數P已經不能滿足我們的控制需要了。這時候我們可以引入一個微分系數D。
積分系數D主要解決系統的不收斂問題。怎麼解決不收斂問題呢,很簡單,只要保證系統單位時間內的變化量越來越小就好,如果某一時刻加的煤太多了導致溫度上升很快,下一時刻就少加點。由微分系統控制的輸入量=一個數*控制變數的變化率。這個數就是微分系數D。
繼續講燒烤爐的例子,最開始溫度是99℃,我加了一斤煤,溫度到了101℃,按照P控制,我們接下來應該減去一斤煤,同時控制變數的變化率是2,假設D是0.25,那麼該時刻對煤的變化量是-1+2*0.25=-0.5,也就是減去半斤煤,然後下一時刻,爐子的溫度就可以到100℃了。
(四):積分系數I
在燒烤爐中還可能存在這樣一種情況,就是現在爐子的溫度是99℃,然後我加了一斤煤,但是這時候爐子內有一斤煤剛好燒完,這就相當於我這一斤煤沒有加,然後下一時刻爐子的溫度還是99℃,然後我又加了一斤煤,然後又有一斤煤正好燒完......這樣的結果是我的爐子永遠就到不了100℃了。為了解決這種問題,我們又引入了積分系數I。
積分系數I主要解決的是系統的系統誤差問題。就是說由於某些原因,我的爐子使用PD控制最後溫度不發生變化的時候(專業上叫穩態),我的溫度其實是達不到我需要的100℃,這時候存在的誤差是無法修正的,而且這個誤差會隨著時間的推移一直存在。如果我們將這個誤差按照時間累加起來,隨著時間推移它會變成一個很大的數,這個很大的數就代表著系統誤差。我們用一個常數I乘以這個很大的數,最後得到的結果就是我們需要的解決系統誤差的輸入量。
繼續回到燒烤爐的例子,現在是99℃,我加了一斤煤,溫度沒變,溫度誤差是1,誤差累加是1;我又加了一斤煤,溫度還是沒變,溫度誤差還是1,但是誤差累加變成了2;我加了十次以後,溫度還是沒變,但是這時候的誤差累加已經到了10,這個時候我就知道,哦原來煤加少了,接下來就要多加點煤,所以第十一次,我加的煤就是1+1=2斤煤,第一個1是PD控制得到的量,第二個1是由誤差累加我才知道要多加的量。第十一次加完煤之後,爐子的溫度終於到了100℃。在這種情況下,我才真正實現了一個好的控制。