2014年8月4日 星期一

PID控制動手玩玩看



PID三個參數到底該怎麼調才好,真的是一門藝術。

雖然在Marlin韌體內有提供自動測量的功能,但是測得的結果,不見得能令人滿意,還是需要調整。可是到底該怎麼調整?從哪個參數開始動手?數值該增加還是該減小?會不會調整了這個,又需要回頭調整上一個?整個調整過程實在是亂七八糟,不容易理出頭緒。在加上實驗需要時間,可是有一直找不出最佳參數,實在有夠累人。

今天我不曉得是哪根筋不對,突然想說可以用excel模擬PID溫度控制,這樣就可以很快得得到實驗結果,增加調整PID參數的經驗。雖然沒辦法直接透過模擬獲得擠出頭加熱需要的PID參數,但是至少可以熟悉調整PID參數對溫度控制的影響。

下載excel並且開啟後,可以看到左上角有可調整的參數,中間是模擬過程,右邊有兩個模擬結果的圖表。模擬參數分成兩組,前面幾項是環境變數,最後三項是PID值。

受熱物比熱:每公克的受熱物值,需要多少卡的熱量,能上升1℃。水的比熱為1(卡/公克-℃)
受熱物質量:(這不用解釋吧...)
初始溫度:(這不用解釋吧...)
環境溫度:(這不用解釋吧...)
目標溫度:(這不用解釋吧...)
散熱常數:跟受熱物散熱速度相關的常數。系統散失的熱量,我這邊用 (當下溫度 - 環境溫度 ) x 散熱常數來模擬計算。散熱常數越大,系統散失熱量的速度就越快;系統溫度跟環境溫度差異越大,散失熱量也越快。

PID:分別是比例控制常數、機分控制常數、微分控制常數。
系統熱量供應:這邊相對應於加熱棒輸出多少百分比的功率。這邊"系統熱量供應"的模擬計算公式如下:

"這次的"系統熱量供應 =
        P x 這次取樣的溫度誤差 +
        I x 從系統開始以來每次取樣的溫度誤差總和 +
        D x (上次取樣的溫度誤差 - 這次取樣的溫度誤差)

P:比例控制常數。誤差值乘上P值,再加回系統熱量供應。

如果只有P,I跟D都設為零時,我覺得可以把他比喻成開車的時候,油門只會"直接"踩到某個定值,或是完全放掉。不會微調油門的力道。理論上只用比例控制,仍然可以讓溫度控制在目標溫度附近,但是震盪的狀況會比較嚴重。就像司機開車,總是猛踩油門,又猛踩剎車,車子會跑,速度也有,只是乘客會暈到死...


D:微分控制常數。溫度誤差對時間的曲線圖,是一個二維曲線。而對二維曲線微分的幾何意義,則是斜率。所以微分控制,實做上是取上一次採樣與這一次採樣的溫度誤差相減,再除以兩次採樣的時間間隔,算出斜率。用斜率乘上D,再加回系統熱量供應。

D值的效果,我會把他比喻成"提早減速"。當車子的速度接近司機想要維持的速度,速度還沒超過之前,有經驗的司機就會開始預先減小油門。不要等速度衝過頭再來踩剎車,減少車子加速減速的震盪,讓乘客舒適不暈車。不過該提早多少時間開始減速、該減多少速度不要減過頭或是減太少,就要靠D值的大小來調整了。

 加入D "微分控制",可以讓系統較快穩定得達到目標溫度。

 合適的D值,能讓溫度快速又穩定得恆定在目標溫度,而且沒有衝過頭的問題。

 D值過大,提早剎車煞的力道多了,反而會讓系統不穩定得震盪。


再繼續加大D值,甚至會讓控制結果發散不能收斂到目標溫度。



I:積分控制常數。積分在這邊的概念,是把過去所有的誤差加總起來。積分控制當然就是拿積分控制常數乘以過去所有誤差的加總,,再加回系統熱量供應。

積分控制多用來校正穩態誤差。當溫度穩定下來之後,溫度離目標溫度仍然有些微的誤差,這就是"穩態誤差"。如果為了穩態誤差而調整P值,整個系統的穩定度會大受影響。積分控制靠累積穩態誤差,讓這個誤差的效應因累積而放大,再乘以機分控制常數,就可以消彌穩態誤差。

以上是我對PID控制的一些想法。特別注意我介紹的時候,順序是PDI,用意就是建議大家調整的時候,可以先來回調整P、D這兩個常數(I歸零),覺得系統穩定、滿意了,再針對"穩態誤差"來調整 I 積分控制常數。

修改受熱物的質量、比熱,可以觀察受熱系統熱含對PID控制的影響。修改散熱常數,則可以觀察系統散熱情況(多加了風扇吹喉管),對系統穩定的影響。透過模擬實驗,多改幾組環境,並且調出相對應的PID值,應該可以更熟悉PID控制這門藝術~

參考資料

關於PID的認識與討論?