1. 程式人生 > ># Arduino小車PID調速——整定引數初試水

# Arduino小車PID調速——整定引數初試水

Arduino小車PID調速——整定引數初試水

在實現了小車較為可靠的測速基礎上,便可以正式開展PID調速實驗了。本文是基於使用Arduino平臺上由Brett Beauregard大神寫的PID庫進行引數整定的,側重於在對PID演算法有基本瞭解下,通過實驗自己動手整定引數,觀察不同的引數值對小車調速效果的影響,從而對PID演算法產生感性的認知。

PID基本知識

所謂PID演算法,是一種在工程應用領域被使用最為廣泛的負反饋調節方法,通過PID演算法中比例、積分、微分三個部分的作用,達到使系統穩定的效果。有關PID的介紹在網路上已經非常多且詳細,本文不再展開論述。

公式

O
utput=Kpe(t)+KIe(t)dt+KDddte(t)

Where:e=SetpointInput
上面的公式是一種最為常見的PID演算法形式,由比例、積分、微分三個部分組成,在實際工作中三者相互配合作用於控制系統

P就是比例作用,是把調節器的輸入偏差乘以一個係數,作為調節器的輸出,它能夠使系統趨於穩定,但卻不能有效地使系統達到設定值
I就是積分作用,它的作用使如果系統存在輸入偏差,那麼積分作用將使系統按照一定的速度向一個方向累加下去,它的作用在於可以消除系統靜態偏差,讓系統達到設定值
D就是微分作用,能夠起到超前調節的作用,即如果被調量沒有變化,則微分作用不產生變化,一旦發生變化,則微分作用可以很快的做出響應。

以上是PID的公式和各個引數的意義的簡單陳述,目的在於產生一個基本的認識,而對於真正進行PID引數整定的實際工作來說,還是遠遠不夠的,需要不斷地深入理解各個引數對系統的影響以及多個引數之間的關係。

引數整定口訣

這裡筆者比較推崇由白志剛編著的《自動調節系統解析與PID整定》一書中的趨勢讀定法整定口訣

自動調節並不難,複雜系統化簡單

整定要練硬功夫,圖形特徵看熟練

趨勢讀定三要素,設定被調和輸出

三個曲線放一起,然後曲線能判讀

積分微分先去掉,死區暫時也不要

比例曲線最簡單,被調輸出一般般

頂點谷底同時刻,升降同時同拐點

波動週期都一樣,靜態偏差沒辦法

比例從弱漸調強,階躍響應記時間

時間放大十來倍,調節週期約在內

然後比例再加強,沒有周期才算對

靜差消除靠積分,能消靜差就算穩

不管被調升或降,輸出直觀偏差存

輸入偏差等於零,輸出才會不積分

積分不可加太強,干擾調節成擾因

被調拐點零點間,輸出拐點仔細辨

積分拐點再靠前,既消靜差又不亂

微分分辨最容易,輸入偏差多注意

偏差不動微分死,偏差一動就積極

跳動之後自動回,微分時間管迴歸

系統若有大延遲,微分超前最合適

風壓水位易波動,微分作用要丟棄

比例積分和微分,曲線判讀特徵真

如果不會看曲線,多看杖策行吟文

綜合比較靈活用,盛極衰來扼殺因

引數整定

首先需要將PID庫運用到自己已能實現測速功能的程式中,接下來只需調節Kp、Ki、Kd三個引數即可。

第一步:純比例作用整定

由於是第一次進行PID引數整定,筆者先以把小車速度整定到250mm/s為目標,在程式中輸入設定值。根據上面的口訣,先把系統設定為純比例作用,即只有比例增益Kp不為0,積分增益Ki和微分增益Kd都暫時設定為0.因為是這個小車第一次整定引數,筆者也不知道什麼比例增益比較好。根據口訣所說比例作用從弱到強調節,因此筆者就隨便寫了個自認為不大的值2,然後觀察小車執行情況。實際的執行結果令我大吃一驚,小車電機以一定的週期在轉和不轉之間震盪。根據口訣中“然後比例再加強,沒有周期才算對”得知,肯定是比例作用已經非常大了,因此趕緊將比例增益調整為0.2,小車的電機不再出現劇烈的“抽搐”,開始以一種比較緩慢的姿態轉動,但通過觀察輸出波形,還是存在較小的波動,而根據網上查閱資料得,比例作用過分小也會導致系統震盪,但與之前較大比例作用下的震盪相比,顯然“溫柔”多了。於是筆者繼續增加比例作用,直至Kp = 0.7時,輸出波形已經相較其他引數下穩定很多了。
這裡寫圖片描述

第二步:比例積分作用

由上圖可看出,一個適合的比例作用可以使系統趨於穩定,但卻無法消除靜態偏差,因此需要引入積分作用,其最大的好處就是可以消除靜態偏差。筆者繼續採用由小逐漸加大積分增益的方式。當設定Ki = 0.3時,由圖可見
這裡寫圖片描述
靜態偏差逐漸減小,輸出的速度越來越接近設定的250mm/s的目標,不過調節速度太慢,還是不能滿足需求。
於是繼續加積分作用,當Ki = 5時,可以看出,系統反應速度已經很快,可以在0.1秒內
這裡寫圖片描述
由波形可以看出,此時速度已基本能夠快速準確地達到設定值,但仍然存在著些許波動。在比例積分作用下產生波動,可能是由於比例作用過大,也有可能是積分作用過強產生了積分干擾,因此可以適當降低比例或積分作用,來嘗試減弱波動。由於比例作用和積分作用是相對的,因此為了使系統穩定,降低其中一種作用時,另外一種作用也要隨之降低。故把引數設定為Kp = 0.65,Ki = 4.5,此時效果如圖
這裡寫圖片描述
可明顯看出,速度得到進一步的穩定,且系統反應迅速,在不到0.1秒的時間內便使速度達到穩定。考慮到測速中存在的干擾以及電機機械轉動的問題,剩餘的些許波動可以被忽略。

第三步:測試在其他速度下的效果

以上的實驗是建立在設定速度恆定為250mm/s的條件下進行的,能保證在250mm/s的速率下良好的調節效果,而這個引數是否適合在其他速率下工作,還需要進一步測試。

一、低速執行情況下

當筆者嘗試將速度設定為200mm/s時,再觀察波形,結果出現了非常頻繁的波動,極端情況下,達到設定速度附近一段時間後,系統居然開始出現越來越大的波動,越來越發散
這裡寫圖片描述
由此可得出,在引數不變的情況下,適合一個特定速度的調節方式不一定適合低速條件,在低速條件下會出現不穩定。
是什麼導致這樣波動的發生?比例作用可以使系統穩定,雖然積分可以消除靜態偏差,但如果比例設定的不合理,靜態偏差也難以被消除。而之前設定的引數是在250mm/s的情況下合適的,此時設定速度降低到200mm/s。比例作用是把調節器的輸入偏差乘以一個係數,作為調節器的輸出,因此可以設想此時比例作用相對於積分作用實際上偏向於減弱了。這就可能造成了積分作用過強,導致積分干擾。因此筆者嘗試降低積分作用, 並相應略微降低比例作用。將引數設定為Kp = 0.5,Ki = 2
這裡寫圖片描述
可以看出,波動已得到一定的抑制,同時在執行一段時間後,不再出現波動範圍越來越大,波動週期越來越明顯的“抽搐”發生,證明了高速條件下的引數運用到低速條件下會出現積分干擾的猜想。

二、高速執行情況下

筆者再次嘗試將適合250mm/s的引數運用到300mm/s,看看會有什麼情況發生。
這裡寫圖片描述
對比250mm/s下的波形可以觀察得,在300mm/s下工作,系統的快速性變弱,系統的穩定時間比250mm/s下要長了一點,同時波形出現了小幅度的有周期震盪。
系統穩定時間變長有兩方面的原因,第一可能是比例作用偏弱,會導致難以消除靜態偏差,第二是積分作用偏弱也會導致消除靜態偏差的過程變慢。比例作用偏強和偏弱都會導致一定的震盪,偏強時的曲線是週期性很強,基本呈正弦波形式的,而偏弱時候波動也會有一定的週期,但在一個波動週期內,往往摻雜著幾個小的波峰。由本圖可看出,此時的波動屬於比例作用偏小的情況。
當把引數調節到Kp = 0.75,Ki = 5.5時,得到的曲線如圖
這裡寫圖片描述
很明顯,波動得到了抑制,穩定時間也縮短了。

總結

通過以上實驗證明了pid調速過程中,一個特定的引數僅對一定的速度區間有比較好的調節效果。若比這個速度低,則會出現比例積分作用過強,從而出現震盪;若比這個速度高,則會出現比例作用不強,系統的穩定時間變長,且出現小幅度週期性波動的情況。

不足與改進

小車在實際工作中,不會一直只工作在一個恆定的速度下,因此在進行PID調速時不能在一個速度下調成功了就覺得萬事大吉了。為了能達到PID調速對更大的速度區間內有效,一個簡單的辦法就是在電機低速轉動的情況下進行調速,這樣基本可以實現從慢速到高速都能速度穩定的效果,但這樣的一個缺點在於高速情況下穩定時間變長,且會出現小幅度週期性波動。在這個基礎上的一個改進辦法是通過分別調節低速、中速、高速三種不同情況下適合的PID,可以設定速度區間,當速度設定值落在某個區間內,則啟用適合那個速度下的PID引數進行調速。進一步深挖,可以嘗試自動整定引數,達到最好的PID調速效果。
以上是本人的一點嘗試和經驗,難免有不足之處,還望各位多多指教!

參考

  1. 白志剛《自動調節系統解析與PID整定》化學工業出版社