|
|
這幾天稍微看了一點點的PID,今天有了小小頭緒,于是,就想把自己的想法寫出來,歡迎拍磚。
最開始的時候,是先了解什么是PID。PID實指“比例proportional”、“積分integral”、“微分derivative”,如果我們要求被控制的對象最終趨于一個穩(wěn)定的結(jié)果,一般就可以使用PID算法。假設(shè)說,有一輛速度為1m/s的小車,我們要求他的速度改變?yōu)?m/s,要完成這樣的一件事,我們必須要有,1.小車驅(qū)動裝置(用程序控制它輸出多大的電壓,電壓決定驅(qū)動的馬力),2.被驅(qū)動器控制的部分(即小車),3.檢測當(dāng)前速度的裝置(當(dāng)前速度與目標(biāo)速度的差稱為誤差)。本來,我們可以給小車一個驅(qū)動力讓小車加速,直到檢測到小車速度達到5m/s,撤去驅(qū)動力。然而,這樣做會帶來幾個問題。1,當(dāng)小車速度達到5m/s時,從裝置檢測到這個速度,通知控制器,讓控制器改變輸出的電壓,這一個過程需要耗費一定時間,在這個時間里面,小車速度可能增加了不少。2,撤去驅(qū)動力后,外界條件如摩擦?xí)屝≤囁俣冗M一步改變。PID算法可以在一定誤差內(nèi)解決這些問題。 使用PID算法時,大致是這樣的。每一個采樣周期,通過速度檢測裝置獲得當(dāng)前速度,傳入程序,通過程序計算得到電壓控制小車得到新速度。下一個采樣周期又把新速度傳入,獲得新電壓,再傳入速度,再獲得電壓,如此反復(fù)。 PID算法的關(guān)鍵,是如何根據(jù)當(dāng)前得到的速度值,輸出一個“恰當(dāng)”的電壓,以致小車最終能夠趨于穩(wěn)定。 PID算法采用比例,積分,微分三種方法進行控制。三種方法都有自己對應(yīng)的一個常量(pconst,iconst,dconst)。這三個變量都需要在實驗中多次嘗試得出。 一般地,先把與算法相關(guān)的量放入一個結(jié)構(gòu)體,方便調(diào)用。 srtuct PID { double pconst, //比例控制常量 iconst, //積分控制常量 dconst; //微分控制常量 double ErrorSum; //誤差累計 double iMax,iMin; //積分上下限 double Vnew; //當(dāng)前速度 }; 比例: Vnew = GetV(); //獲得當(dāng)前速度 error = aim - Vnew; //誤差=目標(biāo)速度 - 當(dāng)前速度 pTerm = error*pconst; //比例項的值就是誤差乘上比例常量 Motor(pTerm); //讓電機根據(jù)得出的值工作 有時候,我們增大比例常數(shù)可以讓小車更快的到達目標(biāo)速度,但是過大的比例常數(shù)又容易產(chǎn)生過沖,即速度超過目標(biāo)速度5m/s,然后再減速,再加速,在減速。這樣,系統(tǒng)產(chǎn)生振蕩,然而,振蕩的結(jié)果不一定能趨于穩(wěn)定。
積分: Vnew = GetV(); //獲得當(dāng)前速度 ErrorSum += (aim - Vnew); //每一次的誤差累計起來 if(ErrorSum > iMax)ErrorSum = iMax; else if(ErrorSum < iMin)ErrorSum = iMin; iTerm = ErrorSum *iconst; //誤差和乘上積分常量 Motor(iTerm); //讓電機根據(jù)得出的值工作 一般我們都讓比例配合積分一起使用,即PI算法,類似上面的程序,得出pTerm和iTerm,然后Motor(pTerm+iTerm)。PI控制一般會比純比例控制花費更少時間使小車到達目標(biāo)值,但是我們必須避免積分飽和,通常的做法是像上面程序一樣設(shè)定iMax和iMin。它們和積分常量的大小相關(guān)。 微分: 我們用比例控制或者PI控制,都不能保證任何系統(tǒng)一定能趨于穩(wěn)定。比例控制根據(jù)現(xiàn)在來控制。積分控制根據(jù)過去來控制。而微分能夠根據(jù)將來來控制,非常強大,能使被控設(shè)備更好地趨于穩(wěn)定。 Vnew = GetV(); //獲得當(dāng)前速度 dTerm = (Vnew - Vlast)*dconst; //當(dāng)前速度 - 上次速度,再乘微分常數(shù) Vlast = Vnew ; //保留本次速度,下次當(dāng)成上次速度使用 Motor(dTerm); //讓電機根據(jù)得出的值工作 同樣,微分控制也是與比例,積分一起使用,形成PID算法,Motor(pTerm+iTerm+dTerm)。 微分控制相當(dāng)強大,然而也很容易出問題。具體調(diào)控和整定我想等到實際應(yīng)用時再學(xué)習(xí)。
交流地址:http://bbs.21ic.com/icview-189462-1-1.html |
|