




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上PID控制算法介紹與實現(xiàn)一、PID的數(shù)學模型在工業(yè)應用中PID及其衍生算法是應用最廣泛的算法之一,是當之無愧的萬能算法,如果能夠熟練掌握PID算法的設計與實現(xiàn)過程,對于一般的研發(fā)人員來講,應該是足夠應對一般研發(fā)問題了,而難能可貴的是,在很多控制算法當中,PID控制算法又是最簡單,最能體現(xiàn)反饋思想的控制算法,可謂經(jīng)典中的經(jīng)典。經(jīng)典的未必是復雜的,經(jīng)典的東西常常是簡單的,而且是最簡單的。PID算法的一般形式:PID算法通過誤差信號控制被控量,而控制器本身就是比例、積分、微分三個環(huán)節(jié)的加和。這里我們規(guī)定(在t時刻):1.輸入量為i(t)2.輸出量為o(t)3.偏差量為err
2、t= i(t)- o(t)u(t)=kp(errt+1Ti.errtdt+TDderr(t)dt)二、PID算法的數(shù)字離散化假設采樣間隔為T,則在第K個T時刻:偏差err(k)=i(k) - o(k)積分環(huán)節(jié)用加和的形式表示,即errk + err(k+1) + 微分環(huán)節(jié)用斜率的形式表示,即err(k)- err(k-1)/T;PID算法離散化后的式子:u(k)=kp(errk+TTi.errj+TDT(errk-err(k-1)則u(k)可表示成為:u(k)=kp(errk+kierrj+kd(errk-err(k-1)其中式中:比例參數(shù)kp:控制器的輸出與輸入偏差值成比例關(guān)系。系統(tǒng)一旦出現(xiàn)
3、偏差,比例調(diào)節(jié)立即產(chǎn)生調(diào)節(jié)作用以減少偏差。特點:過程簡單快速、比例作用大,可以加快調(diào)節(jié),減小誤差;但是使系統(tǒng)穩(wěn)定性下降,造成不穩(wěn)定,有余差。積分參數(shù)ki:積分環(huán)節(jié)主要是用來消除靜差,所謂靜差,就是系統(tǒng)穩(wěn)定后輸出值和設定值之間的差值,積分環(huán)節(jié)實際上就是偏差累計的過程,把累計的誤差加到原有系統(tǒng)上以抵消系統(tǒng)造成的靜差。微分參數(shù)kd:微分信號則反應了偏差信號的變化規(guī)律,或者說是變化趨勢,根據(jù)偏差信號的變化趨勢來進行超前調(diào)節(jié),從而增加了系統(tǒng)的快速性。PID的基本離散表示形式如上。目前的這種表述形式屬于位置型PID,另外一種表述方式為增量式PID,由上述表達式可以輕易得到:u(k-1)=kp(errk-1
4、+kierrj+kd(errk-1-err(k-2)那么:u(k)=kp(errk-errk-1)+kierr(k)+kd(errk-2err(k-1)+err(k-2)上式就是離散化PID的增量式表示方式,由公式可以看出,增量式的表達結(jié)果和最近三次的偏差有關(guān),這樣就大大提高了系統(tǒng)的穩(wěn)定性。需要注意的是最終的輸出結(jié)果應該為:輸出量 = u(k) + 增量調(diào)節(jié)值三、PID的C語言實現(xiàn)1.位置式PID的C語言實現(xiàn)上邊已經(jīng)抽象出了位置性PID和增量型PID的數(shù)學表達式,這里重點講解C語言代碼的實現(xiàn)過程。 第一步:定義PID變量結(jié)構(gòu)體,代碼如下:struct t_pid float SetSpeed;
5、 /定義設定值 float ActualSpeed; /定義實際值 float err; /定義偏差值 float err_last; /定義上一個偏差值 float Kp,Ki,Kd; /定義比例、積分、微分系數(shù) float voltage; /定義電壓值(控制執(zhí)行器的變量) float integral; /定義積分值pid;第二部:初始化變量,代碼如下:void PID_init() pid.SetSpeed=0.0; pid.ActualSpeed=0.0; pid.err=0.0; pid.err_last=0.0; pid.voltage=0.0; egral=0.0
6、; pid.Kp=0.2; pid.Ki=0.015; pid.Kd=0.2; 統(tǒng)一初始化變量,尤其是Kp,Ki,Kd三個參數(shù),調(diào)試過程當中,對于要求的控制效果,可以通過調(diào)節(jié)這三個量直接進行調(diào)節(jié)。第三步:編寫控制算法,代碼如下:float PID_realize(float speed) pid.SetSpeed=speed; pid.err=pid.SetSpeed-pid.ActualSpeed; egral+=pid.err; pid.voltage=pid.Kp*pid.err+pid.Ki*egral+pid.Kd*(pid.err-pid.err_las
7、t); pid.err_last=pid.err; pid.ActualSpeed=pid.voltage*1.0; return pid.ActualSpeed;注意:這里用了最基本的算法實現(xiàn)形式,沒有考慮死區(qū)問題,沒有設定上下限,只是對公式的一種直接的實現(xiàn),后面的介紹當中還會逐漸的對此改進。 到此為止,PID的基本實現(xiàn)部分就初步完成了。下面是測試代碼:int main() PID_init(); int count=0; while(count1000) float speed=PID_realize(200.0); printf(%fn,speed); count+; return 0;
8、2.增量型PID的C語言實現(xiàn) 上一節(jié)中介紹了最簡單的位置型PID的實現(xiàn)手段,這一節(jié)講解增量式PID的實現(xiàn)方法。#include#includestruct t_pid float SetSpeed; /定義設定值 float ActualSpeed; /定義實際值 float err; /定義偏差值 float err_next; /定義上一個偏差值 float err_last; /定義最上前的偏差值 float Kp,Ki,Kd; /定義比例、積分、微分系數(shù)pid;void PID_init() pid.SetSpeed=0.0; pid.ActualSpeed=0.0; pid.err=
9、0.0; pid.err_last=0.0; pid.err_next=0.0; pid.Kp=0.2; pid.Ki=0.015; pid.Kd=0.2;float PID_realize(float speed) pid.SetSpeed=speed; pid.err=pid.SetSpeed-pid.ActualSpeed; float incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last); pid.ActualSpeed+=incr
10、ementSpeed; pid.err_last=pid.err_next; pid.err_next=pid.err; return pid.ActualSpeed;int main() PID_init(); int count=0; while(count200) index=0; else index=1; egral+=pid.err; pid.voltage=pid.Kp*pid.err+index*pid.Ki*egral+pid.Kd*(pid.err-pid.err_last); /算法具體實現(xiàn)過程4.抗積分飽和的PID控制算法C語言實現(xiàn) 所謂的積
11、分飽和現(xiàn)象是指如果系統(tǒng)存在一個方向的偏差,PID控制器的輸出由于積分作用的不斷累加而加大,從而導致執(zhí)行機構(gòu)達到極限位置,若控制器輸出U(k)繼續(xù)增大,執(zhí)行器開度不可能再增大,此時計算機輸出控制量超出了正常運行范圍而進入飽和區(qū)。一旦系統(tǒng)出現(xiàn)反向偏差,u(k)逐漸從飽和區(qū)退出。進入飽和區(qū)越深則退出飽和區(qū)時間越長。在這段時間里,執(zhí)行機構(gòu)仍然停留在極限位置而不隨偏差反向而立即做出相應的改變,這時系統(tǒng)就像失控一樣,造成控制性能惡化,這種現(xiàn)象稱為積分飽和現(xiàn)象或積分失控現(xiàn)象。 防止積分飽和的方法之一就是抗積分飽和法,該方法的思路是在計算u(k)時,首先判斷上一時刻的控制量u(k-1)是否已經(jīng)超出了極限范圍:
12、 如果u(k-1)umax,則只累加負偏差; 如果u(k-1)pid.umax) /灰色底色表示抗積分飽和的實現(xiàn) if(abs(pid.err)200) /藍色標注為積分分離過程 index=0; else index=1; if(pid.err0) egral+=pid.err; else if(pid.ActualSpeed200) /積分分離過程 index=0; else index=1; if(pid.err0) egral+=pid.err; else if(abs(pid.err)200) /積分分離過程 index=0; else index=1;
13、egral+=pid.err; pid.voltage=pid.Kp*pid.err+index*pid.Ki*egral+pid.Kd*(pid.err-pid.err_last); pid.err_last=pid.err; pid.ActualSpeed=pid.voltage*1.0; return pid.ActualSpeed;5.梯形積分的PID控制算法先看一下梯形算法的積分環(huán)節(jié)公式0Te(t)dt=i=0ke(i)+e(i-1)2.T 作為PID控制律的積分項,其作用是消除余差,為了盡量減小余差,應提高積分項運算精度,為此可以將矩形積分改為梯形積分,
14、具體實現(xiàn)的語句為:pid.voltage=pid.Kp*pid.err+index*pid.Ki*egral/2+pid.Kd*(pid.err-pid.err_last); /梯形積分6.變積分的PID控制算法 變積分PID可以看成是積分分離的PID算法的更一般的形式。在普通的PID控制算法中,由于積分系數(shù)ki是常數(shù),所以在整個控制過程中,積分增量是不變的。但是,系統(tǒng)對于積分項的要求是,系統(tǒng)偏差大時,積分作用應該減弱甚至是全無,而在偏差小時,則應該加強。積分系數(shù)取大了會產(chǎn)生超調(diào),甚至積分飽和,取小了又不能短時間內(nèi)消除靜差。因此,根據(jù)系統(tǒng)的偏差大小改變積分速度是有必要的。 變積分
15、PID的基本思想是設法改變積分項的累加速度,使其與偏差大小相對應:偏差越大,積分越慢; 偏差越小,積分越快。 這里給積分系數(shù)前加上一個比例值index: 當abs(err)180時,index=1; 當180abs(err)200時,index=0; 最終的比例環(huán)節(jié)的比例系數(shù)值為ki*index; 具體PID實現(xiàn)代碼如下: pid.Kp=0.4; pid.Ki=0.2; /增加了積分系數(shù) pid.Kd=0.2; float PID_realize(float speed) float index; pid.SetSpeed=speed; pid.err=pid.SetSpeed-pid.Act
16、ualSpeed; if(abs(pid.err)200) /變積分過程 index=0.0; else if(abs(pid.err)Mmax時,說明誤差的絕對值已經(jīng)很大了,不論誤差變化趨勢如何,都應該考慮控制器的輸入應按最大(或最?。┹敵?,以達到迅速調(diào)整誤差的效果,使誤差絕對值以最大的速度減小。此時,相當于實施開環(huán)控制。 當e*ec0時,說明誤差在朝向誤差絕對值增大的方向變化,此時,如果abs(e)Mmid,說明誤差也較大,可考慮由控制器實施較強的控制作用,以達到扭轉(zhuǎn)誤差絕對值向減小的方向變化,并迅速減小誤差的絕對值。此時如果abs(e)Mmid,說明盡管誤差是向絕對值增大的方向變化,但是
17、誤差絕對值本身并不是很大,可以考慮控制器實施一般的控制作用,只需要扭轉(zhuǎn)誤差的變化趨勢,使其向誤差絕對值減小的方向變化即可。 當e*err0或者e=0時,說明誤差的絕對值向減小的方向變化,或者已經(jīng)達到平衡狀態(tài),此時保持控制器輸出不變即可。 當e*err0且e*err(k-1)0時,說明誤差處于極限狀態(tài)。如果此時誤差的絕對值較大,大于Mmin,可以考慮實施較強控制作用。如果此時誤差絕對值較小,可以考慮實施較弱控制作用。 當abs(e)Mmin時,說明誤差絕對值很小,此時加入積分,減小靜態(tài)誤差。上面的邏輯判斷過程,實際上就是對于控制系統(tǒng)的一個專家判斷過程。 實際上模糊算法屬于智能算法,智能算法也可以
18、叫非模型算法,智能算法包含了專家系統(tǒng)、模糊算法、遺傳算法、神經(jīng)網(wǎng)絡算法等。其實這其中的任何一種算法都可以跟PID去做結(jié)合,而選擇的關(guān)鍵在于,處理的實時性能不能得到滿足。當我們處理器的速度足夠快速時,我們可以選擇更為復雜的、精度更加高的算法。但是,控制器的處理速度限制了我們算法的選擇。當然,成本是限制處理器速度最根本的原因。模糊PID適應一般的控制系統(tǒng)是沒有問題。 模糊算法其實并不模糊。模糊算法其實也是逐次求精的過程。這里舉個例子說明。我們設計一個倒立擺系統(tǒng),假如擺針偏差5,我們說它的偏差比較“小”;擺針偏差在5和10之間,我們說它的偏差處于“中”的狀態(tài);當擺針偏差10的時候,我們說它的偏差有點
19、兒“大”了。對于“小”、“中”、“大”這樣的詞匯來講,他們是精確的表述,可問題是如果擺針偏差是3呢,那么這是一種什么樣的狀態(tài)呢。我們可以用“很小”來表述它。如果是7呢,可以說它是“中”偏“小”。那么如果到了80呢,它的偏差可以說“非常大”。而我們調(diào)節(jié)的過程實際上就是讓系統(tǒng)的偏差由非常“大”逐漸向非?!靶 边^度的過程。當然,我們系統(tǒng)這個調(diào)節(jié)過程是快速穩(wěn)定的。通過上面的說明,可以認識到,其實對于每一種狀態(tài)都可以劃分到大、中、小三個狀態(tài)當中去,只不過他們隸屬的程度不太一樣,比如6隸屬于小的程度可能是0.3,隸屬于中的程度是0.7,隸屬于大的程度是0。這里實際上是有一個問題的,就是這個隸屬的程度怎么確
20、定?這就要求我們?nèi)ピO計一個隸屬函數(shù)。詳細內(nèi)容可以查閱相關(guān)的資料,這里沒有辦法那么詳細的說明了。那么,知道了隸屬度的問題,就可以根據(jù)目前隸屬的程度來控制電機以多大的速度和方向轉(zhuǎn)動了,當然,最終的控制量肯定要落實在控制電壓上。這點可以很容易的想想,我們控制的目的就是讓倒立擺從隸屬“大”的程度為1的狀態(tài),調(diào)節(jié)到隸屬“小”的程度為1的狀態(tài)。當隸屬大多一些的時候,我們就加快調(diào)節(jié)的速度,當隸屬小多一些的時候,我們就減慢調(diào)節(jié)的速度,進行微調(diào)。可問題是,大、中、小的狀態(tài)是漢字,怎么用數(shù)字表示,進而用程序代碼表示呢?其實我們可以給大、中、小三個狀態(tài)設定三個數(shù)字來表示,比如大表示用3表示,中用2表示,小用1表示。
21、那么我們完全可以用1*0.3+2*0.7+3*0.0=1.7來表示它,當然這個公式也不一定是這樣的,這個公式的設計是系統(tǒng)模糊化和精確化的一個過程,讀者也可參見相關(guān)文獻理解。但就1.7這個數(shù)字而言,可以說明,目前6的角度偏差處于小和中之間,但是更偏向于中。我們就可以根據(jù)這個數(shù)字來調(diào)節(jié)電機的轉(zhuǎn)動速度和時間了。當然,這個數(shù)字與電機轉(zhuǎn)速的對應關(guān)系,也需要根據(jù)實際情況進行設計和調(diào)節(jié)。 前面一個例子已經(jīng)基本上說明了模糊算法的基本原理了。可是實際上,一個系統(tǒng)的限制因素常常不是一個。上面的例子中,只有偏差角度成為了系統(tǒng)調(diào)節(jié)的參考因素。而實際系統(tǒng)中,比如PID系統(tǒng),我們需要調(diào)節(jié)的是比例、積分、微分三個環(huán)節(jié),那么
22、這三個環(huán)節(jié)的作用就需要我們認清,也就是說,我們需要根據(jù)超調(diào)量、調(diào)節(jié)時間、震蕩情況等信息來考慮對這三個環(huán)節(jié)調(diào)節(jié)的比重,輸入量和輸出量都不是單一的,可是其中必然有某種內(nèi)在的邏輯聯(lián)系。所以這種邏輯聯(lián)系就成為我們設計工作的重點了。四、PID算法參數(shù)整定方法1.臨界比例度法(1)將調(diào)節(jié)器的積分時間Ti置于最大(Ti=),微分時間置零(Td=0),比例度適當,平衡操作一段時間,把系統(tǒng)投入自動運行。 (2)將比例度逐漸減小,得到等幅振蕩過程,記下臨界比例度k和臨界振蕩周期Tk值。 (3)根據(jù)k和Tk值,采用經(jīng)驗公式,計算出調(diào)節(jié)器各個參數(shù),即、Ti、Td的值。 (4)按“先P后I最后D”的操作程序?qū)⒄{(diào)節(jié)器整定參數(shù)調(diào)到計算值上。若還不夠滿意,可再作進一步調(diào)整。參數(shù)(%)Ti(min)Td(min)P2kP/I2.2kTk/1.2P/I/D1.6k0.5k0.25Ti臨界振蕩整定計算公式2.衰減曲線法 在純比例作用下,由大到小調(diào)整比例度以得到具有衰減比(4:1)的過渡過程,記下此時的比例度s及振蕩周期Ts,根據(jù)經(jīng)驗公式,求出相應的積分時間Ti和微分時間Td。 參數(shù)(%)Ti(min)Td(min)PsP/I1.2s0.5TsP/I/D0.8s0.3Ts0.1Ts衰減曲線法控制器參數(shù)計算表Note:(1).反應較快的控制系統(tǒng),要認定4:1衰減曲線和讀出Ts比較困難,此時,可用記錄來回擺動兩次就達到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城南殮殯管理暫行辦法
- 電動機單機試運行流程與實施策略研究
- 村級農(nóng)民夜校管理辦法
- 110kV變電站升級改造與啟動方案研究
- 古代漢語教學中的語言轉(zhuǎn)化能力培養(yǎng)策略研究
- 鏡子:揭示被忽視的世界歷史
- 大軸徑磁流體密封技術(shù)的發(fā)展與進展
- 《完整的PMC部作業(yè)流程體系》
- 工貿(mào)企業(yè)安全教育培訓
- 林業(yè)文化遺產(chǎn)地感知價值與游客重游意愿關(guān)系研究
- 碳資產(chǎn)管理與碳金融 課件 第3章 碳資產(chǎn)管理及相關(guān)理論
- 稀土鎂合金超塑性及擴散連接工藝研究進展
- 2025年全國普通話水平測試15套復習題庫及答案
- 工傷受傷經(jīng)過簡述模板
- 2025-2030全球雨生紅球藻蝦青素油行業(yè)調(diào)研及趨勢分析報告
- 2025年中國中煤江蘇分公司招聘筆試參考題庫含答案解析
- 國家開放大學法學本科《商法》期末紙質(zhì)考試第四大題案例分析庫2025珍藏版
- 實驗室技術(shù)崗前培訓制度
- 煙氣CEMS在線比對驗收調(diào)試報告附表D.1-12計算公式(HJ-75-2017)
- 手術(shù)間體溫下降的后果及預防
- 腫瘤化療導致的中性粒細胞減少診治中國專家共識解讀課件
評論
0/150
提交評論