閑話: 作為一個(gè)控制專業(yè)的學(xué)生,說起PID,,真是讓我又愛又恨,。甚至有時(shí)候會覺得我可能這輩子都學(xué)不會pid了,但是經(jīng)過一段時(shí)間的反復(fù)琢磨,,pid也不是很復(fù)雜,。所以在看懂pid的基礎(chǔ)上,寫下這篇文章,,方便學(xué)習(xí)和交流,。 ================================================================== PID控制器是工業(yè)過程控制中廣泛采用的一種控制器,其中,,P,、I、D分別為比例(Proportion),、積分(Integral),、微分(Differential)的簡寫;將偏差的比例,、積分和微分通過線性組合構(gòu)成控制量,,用該控制量對受控對象進(jìn)行控制,稱為PID算法 ,。 其中KP,、KI、KD分別為比例系數(shù),、積分系數(shù),、微分系數(shù)。 比例系數(shù)KP :反應(yīng)系統(tǒng)當(dāng)前最基本的誤差,,系數(shù)大,,可以加快調(diào)節(jié),減小誤差,,但是過大的比例使系統(tǒng)穩(wěn)定性下降,,甚至造成系統(tǒng)的不穩(wěn)定。 積分系數(shù)KI :反應(yīng)系統(tǒng)的累計(jì)誤差,,使系統(tǒng)消除穩(wěn)態(tài)誤差,,提高無差度,,只要有誤差,積分調(diào)節(jié)就會起作用,。 微分系數(shù)KD :反應(yīng)系統(tǒng)誤差的變化率,,具有預(yù)見性,們可以預(yù)見偏差的變化趨勢,,產(chǎn)生超前的控制效果,。因此可以改善系統(tǒng)的動態(tài)性能。但是微分對噪聲有放大作用,,會減弱系統(tǒng)的抗干擾性,。 轉(zhuǎn)化為數(shù)學(xué)語言就是: 由上面的方框圖,可以知道其傳遞函數(shù)(拉式域表達(dá)式)為: 控制理論和數(shù)學(xué)分析中,,我們一般借助拉普拉斯變化和傅里葉變換來幫助我們分析系統(tǒng)的某些特性,比如暫態(tài)響應(yīng),、穩(wěn)態(tài)響應(yīng)等,。但是在程序中,我們只能根據(jù)時(shí)域中的離散化的表達(dá)式來編寫算法,。 所以將上式轉(zhuǎn)化為時(shí)域表達(dá)式為: 我們需要在計(jì)算機(jī)中通過編程實(shí)現(xiàn)這個(gè)式子,,而上式又是連續(xù)時(shí)間的表達(dá)式,所以只能先將其離散化,,推導(dǎo)出他的差分方程如下: .....................................(1) 這就是增量式pid算法的差分方程,。 其中 T 為PID的計(jì)算周期,就是 dt ,。其值由微控制器的定時(shí)器決定,,自己設(shè)置pid的運(yùn)算周期。 e(k) 為本次計(jì)算時(shí),,傳感器反饋的值和設(shè)定值之間的差,。 e(k-1) 為上次計(jì)算時(shí),傳感器反饋的值和設(shè)定值之間的差,。 e(k-2) 為上上次計(jì)算時(shí),,傳感器反饋的值和設(shè)定值之間的差。 有了pid算法的差分方程,,就可以通過編程來實(shí)現(xiàn)這個(gè)算法,。之所以得通過差分方程來實(shí)現(xiàn),是因?yàn)椴罘址匠痰囊话憬夥ㄊ堑?,而迭代法只需要知道初值和通?xiàng)公式就能計(jì)算出所有時(shí)刻的的值,。這是計(jì)算機(jī)最擅長的事情了。 這個(gè)式子就是最本質(zhì)的離散化PID表達(dá)式,。后面我將基于他推導(dǎo)出其他幾個(gè)常見的表達(dá)式,,但是實(shí)質(zhì)都是這個(gè)式子,。 在推導(dǎo)其他的表達(dá)式之前,請注意這幾個(gè)變量的 關(guān)系: 比例系數(shù):KP 積分系數(shù):KI = KP*T/Ti 其中Ti 為積分時(shí)間 微分系數(shù):KD = KP*Td/T 其中Td為微分時(shí)間 之所以叫時(shí)間,,是因?yàn)榭紤]了系統(tǒng)的量綱,。 因?yàn)閜id輸出的控制信號應(yīng)該和被控量或參考信號有同樣的物理單位。因?yàn)樵谖锢硐到y(tǒng)中他們是描述的同一種物理量,。假設(shè)被控量是位移,,單位是m, 時(shí)間單位是s,那么KI KD的單位應(yīng)該為單位1,,而根據(jù)上面的式子,,有一個(gè)運(yùn)算周期T,所以Ti Td 相應(yīng)的應(yīng)該也有與之倒數(shù)的時(shí)間單位,,來抵消T 的單位,。所以稱之為時(shí)間。 因?yàn)镵P 和 T 都是常數(shù),,所以積分系數(shù)和積分時(shí)間,、微分系數(shù)和微分時(shí)間都是成嚴(yán)格的比例關(guān)系的。他們的區(qū)別就是數(shù)值不一樣,,實(shí)質(zhì)都是積分項(xiàng)和微分項(xiàng)的系數(shù),。如果調(diào)節(jié)的時(shí)候,看到別人說增大積分時(shí)間,,而你的程序中只有積分系數(shù),。那么這時(shí),就應(yīng)該減小積分系數(shù),。其他類推,。 對于上面的(1)式,因?yàn)?nbsp; KD/T 是一個(gè)常數(shù),,KI * T也是常數(shù),,所以就有些人由于默認(rèn)pid運(yùn)算周期,就把 KD / T直接寫成 KD,,KI * T直接寫成 KI,, 其實(shí)嚴(yán)格來說,這樣寫是不嚴(yán)謹(jǐn)?shù)?。因?yàn)檎{(diào)節(jié)過程中,,運(yùn)算周期 T 也是一個(gè)很重要的參數(shù)。也需要對他進(jìn)行反復(fù)的調(diào)節(jié),。 所以能推導(dǎo)出這么幾個(gè)式子: 但是不管怎么變換,,他的本質(zhì)都是那個(gè)原式,在他的基礎(chǔ)上把常量統(tǒng)一了一下,,或者做了一下變量代換,。增量式pid的式子就一個(gè),,同樣的迭代式,同樣的項(xiàng),,不同的人在不同的程序中取不同的名字,,而初學(xué)者又容易吧相同名字的變量當(dāng)成一個(gè)東西,以為所有編寫代碼的人都像商量好一樣遵守同樣的原則,,但是現(xiàn)實(shí)中你看到的代碼往往事與愿違,。不規(guī)范的程序到處都是。容易讓人產(chǎn)生誤解,。 ===================================================================== 現(xiàn)在根據(jù)最初的原式來進(jìn)行pid算法的實(shí)現(xiàn),。 首先做一下變量代換,方便后面進(jìn)行調(diào)試: 所以差分方程就變成了 KP不能為0,,沒有ID或者單個(gè)I ,、 D的控制器 當(dāng)KD為0的時(shí)候,系統(tǒng)為PI控制器,。 當(dāng)KI為0的時(shí)候,,系統(tǒng)為PD控制器。 當(dāng)KD KI 都不為0的時(shí)候,,系統(tǒng)為PID控制器。 可以根據(jù)系統(tǒng)的情況選擇使用不同的控制器,。我使用的是PID控制器,。
注意在增量式pid算法中需要對輸出結(jié)果做限幅處理,。根據(jù)實(shí)際情況選擇自己需要的幅度。 頭文件中聲明pid需要參數(shù)的結(jié)構(gòu)體:
關(guān)于pid結(jié)構(gòu)體的初始化,我在主函數(shù)中使用 memset()函數(shù)進(jìn)行初始化,,比較方便,。 初始化之后,就是給賦上自己調(diào)試的參數(shù),。
然后利用定時(shí)器定時(shí)調(diào)用 PID_out() 函數(shù)即可,。 ===================================================================== 關(guān)于參數(shù)的整定: 首先是一位師傅給出的建議,記在這里,,作為指導(dǎo),;《大體上是這個(gè)架構(gòu),采集,,然后計(jì)算,,但是有幾個(gè)要注意得問題,不注意這些,,可能永遠(yuǎn)調(diào)不好PID或者調(diào)出來得不理想,,首先你的傳感器響應(yīng)速度?以及執(zhí)行單元執(zhí)行到溫度傳感器得時(shí)間是多少,這個(gè)要去測量一下,。比如我加熱單元開始加熱,,我需要0.5得控制精度,那么我從開始加熱到傳感器發(fā)現(xiàn)溫度變化0.5所需得時(shí)間,,t,,那么就以這個(gè)得0.3-0.6去做采集時(shí)間,并以這個(gè)采集時(shí)間得3-5倍去作為PID計(jì)算得時(shí)間,,并把這個(gè)時(shí)間,,和Ki,Kd系數(shù)做一個(gè)處理?!?/p> 首先得有一個(gè)實(shí)際的項(xiàng)目,,才能進(jìn)行參數(shù)的整定。我采用的是簡單的小車距離保持,。 主控:STC89C52 超聲波模塊獲取實(shí)際距離,。三次平均濾波后,精度可達(dá)1cm,。 程序中我設(shè)置距離為10cm,,死區(qū)為( -1.0cm) 當(dāng)僅僅采用比例控制時(shí),小車震蕩比較嚴(yán)重,,基本無法穩(wěn)定 PID參數(shù)的整定方式: 其實(shí)這個(gè)調(diào)節(jié)關(guān)鍵還是多看,多試,,如果有能力進(jìn)行模型建立的話,,那將更加精確。但是一般情況下使用試湊法,。剛開始我嘗試了不大概30組參數(shù),,總是不能達(dá)到理想的效果。 顯示比例系數(shù)KP一點(diǎn)點(diǎn)的測試,,在超調(diào)量不大且反應(yīng)靈敏的基礎(chǔ)上增加積分或者微分系數(shù),,但是不要一下子全加上。例如我增加了微分,,控制小車的震蕩,,然后對KD進(jìn)行反復(fù)的測試。 最后增加KI用以消除系統(tǒng)的穩(wěn)態(tài)誤差,但是注意要一點(diǎn)點(diǎn)的增加,。不要加的太多,。 進(jìn)行了pid整定以后,效果如圖,。但是由于芯片處理速度和電機(jī)驅(qū)動性的問題,,導(dǎo)致一直無法調(diào)節(jié)到最佳狀態(tài)。 pid調(diào)節(jié)大法: /****************************** 關(guān)于PID還有很多很多地方等著去實(shí)驗(yàn),,我這里只是面向新手入門的。寫的很淺顯,。但是一點(diǎn)點(diǎn)經(jīng)驗(yàn)不至于讓大家走那么多彎路,。能對PID有一個(gè)初步的了解,這篇文章的目的算是達(dá)到了,。 參考資料: 1,、原理介紹:http://www.cnblogs.com/cjq0301/p/5184808.html 2、原理介紹:https://wenku.baidu.com/view/827c5423647d27284a735105.html 3,、調(diào)參經(jīng)驗(yàn):http://www./bbs/dpj-51884-1.html 謹(jǐn)以此文祭奠我在pid上面花費(fèi)的那么多時(shí)間,。 |
|