本人想做做之前的電賽題--滾球平衡,但這涉及到了一些自動控制的東西,比如PID。

對PID之前只是略有耳聞,為了復現滾球平衡,只能來現學PID了。

本系列內容是看了MATLAB的教學視頻後寫的,視頻鏈接在此

PID的公式在此

看著是不是覺得挺複雜,不過放心,讓我們先拋棄公式,從PID是什麼以及為什麼要有PID開始講起

這裡有這麼一個我們需要控制的設備,我們需要使用驅動信號(actuating signal)取控制它,同時,我們可以獲得設備的當前信息,也就是受控變數(controlled variable)

這個驅動信號由一個控制器產生,控制器的作用是使得系統的error為0,error則是控制變數減去受控變數的值。控制變數(commanded variable)是我們對這個系統的需求,比如將烙鐵加熱到xx度;受控變數是從設備獲得的信息,比如當前烙鐵xx度。

接下來就將這個PID模型具象化,以球場上一個人走向半場的過程為例

如圖所示,假設這個人離半場的距離有50m,那麼控制變數為50m,設定控制器的值為0.1,那麼初始速度為5m/s,人接收到速度的指令後行走,反饋迴路將當前位置返回累計器,從而調整走路速度,隨著人離中場越近,人的速度越慢,直到走到中場,速度為0

右下角的兩張圖分別是路程/時間走路速度/時間的關係圖,體現了控制器不同的值時的區別

看起來似乎一個比例就可以解決控制器的問題了,那還要積分和微分器幹嘛,下面換一個無人機的例子來說明

如的圖所示,有這麼個無人機,想懸停在50m的空中

無人機無法像上面人走路一樣簡單的比例就可以完成了,因為無人機會因為重力的作用下墜,如果到了50m的空中電機就定製轉動,無人機會直接下墜

我們假定無人機的懸停需要100rpm的電機速度

通過增加增益,無人機電機轉速會增加,然後上升,反饋使得誤差減小,轉速降低,降到100rpm時保持懸浮。只有繼續增大增益,無人機才會繼續上升

但是無論增益怎麼增加,都沒辦法懸浮在50m處,如圖中表格所示,最終會有誤差無法消除,管這種誤差叫做穩態誤差(steady state error)

為了消除這種穩態誤差,可以請積分器出場了

如圖所示,一個常數值經過積分器後得到一個增大的函數,會使得轉速增加,從而使得無人機上升減小誤差

當誤差為0時,只有積分器的輸出100rpm,而比例輸出為0

但是現實中並不是這麼理想的,當誤差E比較小的時候積分器的輸出會大於100rpm,而比例的輸出大於0,會使得總輸出大於100rpm,會使得無人機突然超越50m的高度。這種情況叫做超調

為了減小這種超調的問題,就需要使用微分器了

對函數的求導可以得到它的斜率。誤差函數由於是下降的趨勢,微分得到的斜率是小於0的,並且隨著下降的速度增大,誤差函數斜率的絕對值也增大,這個負值的斜率輸出到電機時會減慢電機的速度,這樣就可以減小超調量

比例、微分、積分組合起來就是我們常說的PID控制器了,通過調整Kp Ki Kd權重因子,還可以只使用PI PD P等等

下一篇會講到積分器的保護或者說抗飽和積分問題


個人博客

公眾號:greedyhao


推薦閱讀:
相關文章