PID控制的原理和特點 在工業(yè)現(xiàn)場實際應(yīng)用中,最為廣泛的調(diào)節(jié)器控制規(guī)律是比例積分微分控制,簡稱PID控制,又稱PID調(diào)節(jié)。 PID控制器問世至今已有近70年歷史,它以其結(jié)構(gòu)簡單穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。 當被控對象的結(jié)構(gòu)和參數(shù)不能完全掌握,或得不到精確的數(shù)學模型時,控制理論的其它技術(shù)難以采用,系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗和現(xiàn)場調(diào)試來確定,這時應(yīng)用PID控制技術(shù)最為方便。即當我們不完全了解一個系統(tǒng)和被控對象﹐或不能通過有效的測量手段來獲得系統(tǒng)參數(shù)時,最適合用PID控制技術(shù)。PID控制,實際中也有PI和PD控制。PID控制器就是根據(jù)系統(tǒng)的誤差,利用比例積分微分計算出控制量進行控制的。 1、比例(P)控制 比例控制是一種最簡單的控制方式其控制器的輸出與輸入誤差信號成比例關(guān)系當僅有比例控制時系統(tǒng)輸出存在穩(wěn)態(tài)誤差(Steady-state error) 2、積分(I)控制 在積分控制中,控制器的輸出與輸入誤差信號的積分成正比關(guān)系對一個自動控制系統(tǒng),如果在進入穩(wěn)態(tài)后存在穩(wěn)態(tài)誤差,則稱這個控制系統(tǒng)是有穩(wěn)態(tài)誤差的或簡稱有差系統(tǒng)(System with Steady-state Error)為了消除穩(wěn)態(tài)誤差,在控制器中必須引入積分項積分項對誤差取決于時間的積分,隨著時間的增加,積分項會增大這樣,即便誤差很小,積分項也會隨著時間的增加而加大,它推動控制器的輸出增大使穩(wěn)態(tài)誤差進一步減小,直到等于零因此,比例+積分(PI)控制器,可以使系統(tǒng)在進入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差 3、微分(D)控制 在微分控制中,控制器的輸出與輸入誤差信號的微分(即誤差的變化率)成正比關(guān)系 自動控制系統(tǒng)在克服誤差的調(diào)節(jié)過程中可能會出現(xiàn)振蕩甚至失穩(wěn),其原因是由于存在有較大慣性組件(環(huán)節(jié))或有滯后(delay)組件,具有抑制誤差的作用,其變化總是落后于誤差的變化。解決的辦法是使抑制誤差的作用的變化超前,即在誤差接近零時,抑制誤差的作用就應(yīng)該是零。這就是說,在控制器中僅引入比例項往往是不夠的,比例項的作用僅是放大誤差的幅值,而目前需要增加的是微分項,它能預測誤差變化的趨勢,這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負值,從而避免了被控量的嚴重超調(diào)所以對有較大慣性或滯后的被控對象,比例+微分(PD)控制器能改善系統(tǒng)在調(diào)節(jié)過程中的動態(tài)特性 PID參數(shù)的整定 一、自動控制系統(tǒng)性能評價 評價一個自動控制系統(tǒng)性能是否優(yōu)越,有三個指標:快、穩(wěn)、準 1.快速性:就是系統(tǒng)輸出能快速地達到期望值的能力。 2.穩(wěn)定性:就是系統(tǒng)輸出穩(wěn)定不波動或波動量小。 3.準確性,就是要求命令值與輸出值之間的誤差e小。 對于系統(tǒng)來說,要求快的話,可以增大Kp、Ki值 要求準的話,可以增大Ki值 要求穩(wěn)的話,可以增大Kd值,可以減少壓力波動 尤其要注意:這三個指標是相互矛盾的,如果太快,可能導致不穩(wěn); 如果太穩(wěn),可能導致不快。 二、誤差問題 只要系統(tǒng)穩(wěn)定且存在積分Ki,該系統(tǒng)在靜態(tài)是沒有誤差的(會存在動態(tài)誤差); 所謂動態(tài)誤差,指當命令值不為恒值時,輸出值跟不上命令值而存在的誤差不管是誰設(shè)計的再好的系統(tǒng)都存在動態(tài)誤差,動態(tài)誤差體現(xiàn)的是系統(tǒng)的跟蹤特性,比如說,有的音響功放對高頻聲音不敏感,就說明功放跟蹤性能不好 三、PID控制器的參數(shù)整定 PID控制器的參數(shù)整定是控制系統(tǒng)設(shè)計的核心內(nèi)容。它是根據(jù)被控過程的特性確定PID控制器的比例系數(shù)積分時間和微分時間的大小。 PID控制器參數(shù)整定的方法很多,概括起來有兩大類: 一是理論計算整定法它主要是依據(jù)系統(tǒng)的數(shù)學模型,經(jīng)過理論計算確定控制器參數(shù)這種方法所得到的計算數(shù)據(jù)未必可以直接用,還必須通過工程實際進行調(diào)整和修改。 二是工程整定方法,它主要依賴工程經(jīng)驗,直接在控制系統(tǒng)的試驗中進行,且方法簡單易于掌握。 在工程實際中被廣泛采用PID控制器參數(shù)的工程整定方法,主要有臨界比例法、反應(yīng)曲線法和衰減法。三種方法各有其特點,其共同點都是通過試驗,然后按照工程經(jīng)驗公式對控制器參數(shù)進行整定但無論采用哪一種方法所得到的控制器參數(shù),都需要在實際運行中進行最后調(diào)整與完善?,F(xiàn)在一般采用的是臨界比例法,利用該方法進行PID控制器參數(shù)的整定步驟如下: (1)首先預選擇一個足夠短的采樣周期讓系統(tǒng)工作﹔ (2)僅加入比例控制環(huán)節(jié),直到系統(tǒng)對輸入的階躍響應(yīng)出現(xiàn)臨界振蕩,記下這時的比例放大系數(shù)和臨界振蕩周期﹔ (3)在一定的控制度下通過公式計算得到PID控制器的參數(shù) PID參數(shù)的設(shè)定:是靠經(jīng)驗及工藝的熟悉,參考測量值跟蹤與設(shè)定值曲線,從而調(diào)整P\I\D的大小 PID控制器參數(shù)的工程整定,各種調(diào)節(jié)系統(tǒng)中P.I.D參數(shù)經(jīng)驗數(shù)據(jù)以下可參照: 溫度T: P=20~60%,T=180~600s,D=3-180s 壓力P: P=30~70%,T=24~180s, 液位L: P=20~80%,T=60~300s, 流量L: P=40~100%,T=6~60s 書上的常用口訣: 參數(shù)整定找最佳,從小到大順序查 先是比例后積分,最后再把微分加 曲線振蕩很頻繁,比例度盤要放大 曲線漂浮繞大灣,比例度盤往小扳 曲線偏離回復慢,積分時間往下降 曲線波動周期長,積分時間再加長 曲線振蕩頻率快,先把微分降下來 動差大來波動慢微分時間應(yīng)加長 理想曲線兩個波,前高后低4比1 一看二調(diào)多分析,調(diào)節(jié)質(zhì)量不會低 這里介紹一種經(jīng)驗法這種方法實質(zhì)上是一種試湊法,它是在生產(chǎn)實踐中總結(jié)出來的行之有效的方法,并在現(xiàn)場中得到了廣泛的應(yīng)用 這種方法的基本程序是先根據(jù)運行經(jīng)驗,確定一組調(diào)節(jié)器參數(shù),并將系統(tǒng)投入閉環(huán)運行,然后人為地加入階躍擾動(如改變調(diào)節(jié)器的給定值),觀察被調(diào)量或調(diào)節(jié)器輸出的階躍響應(yīng)曲線若認為控制質(zhì)量不滿意,則根據(jù)各整定參數(shù)對控制過程的影響改變調(diào)節(jié)器參數(shù)這樣反復試驗,直到滿意為止。 經(jīng)驗法簡單可靠,但需要有一定現(xiàn)場運行經(jīng)驗,整定時易帶有主觀片面性當采用PID調(diào)節(jié)器時,有多個整定參數(shù),反復試湊的次數(shù)增多,不易得到最佳整定參數(shù)。 下面以PID調(diào)節(jié)器為例,具體說明經(jīng)驗法的整定步驟: 讓調(diào)節(jié)器參數(shù)積分系數(shù)S0=0,實際微分系數(shù)k=0,控制系統(tǒng)投入閉環(huán)運行,由小到大改變比例系數(shù)S1,讓擾動信號作階躍變化,觀察控制過程,直到獲得滿意的控制過程為止 取比例系數(shù)S1為當前的值乘以0.83,由小到大增加積分系數(shù)S0,同樣讓擾動信號作階躍變化,直至求得滿意的控制過程 (3)積分系數(shù)S0保持不變,改變比例系數(shù)S1,觀察控制過程有無改善,如有改善則繼續(xù)調(diào)整,直到滿意為止否則,將原比例系數(shù)S1增大一些,再調(diào)整積分系數(shù)S0,力求改善控制過程如此反復試湊,直到找到滿意的比例系數(shù)S1和積分系數(shù)S0為止 引入適當?shù)膶嶋H微分系數(shù)k和實際微分時間TD,此時可適當增大比例系數(shù)S1和積分系數(shù)S0和前述步驟相同,微分時間的整定也需反復調(diào)整,直到控制過程滿意為止 注意:仿真系統(tǒng)所采用的PID調(diào)節(jié)器與傳統(tǒng)的工業(yè) PID調(diào)節(jié)器有所不同,各個參數(shù)之間相互隔離,互不影響,因而用其觀察調(diào)節(jié)規(guī)律十分方便 PID參數(shù)是根據(jù)控制對象的慣量來確定的大慣量如:大烘房的溫度控制,一般P可在10以上,I=3-10,D=1左右小慣量如:一個小電機帶 一水泵進行壓力閉環(huán)控制,一般只用PI控制P=1-10,I=0.1-1,D=0,這些要在現(xiàn)場調(diào)試時進行修正的 提供一種增量式PID供大家參考 U(k)=Ae(k)-Be(k-1)+Ce(k-2) A=Kp(1+T/Ti+Td/T) B=Kp(1+2Td/T) C=KpTd/T T采樣周期 Td微分時間 Ti積分時間 用上面的算法可以構(gòu)造自己的PID算法 U(K)=U(K-1)+U(K) 調(diào)整PID參數(shù)有兩種方法: 1仿真法; 2試湊法 試湊法設(shè)置PID參數(shù)的建議步驟: 1把Ki與Kd設(shè)為0,不要積分與微分; 2把Kp值從0開始慢慢增大,觀察壓力的反應(yīng)速度是否在你的要求內(nèi); 3當壓力的反應(yīng)速度達到你的要求,停止增大Kp值; 4在該Kp值的基礎(chǔ)上減少10%; 5把Ki值從0開始慢慢增大; 6當壓力開始波動,停止增大Ki值; 7在該Ki值的基礎(chǔ)上減少10%; 8把Kd值從0開始慢慢增大,觀察壓力的反應(yīng)速度是否在你的要求內(nèi); PID控制是目前工程上應(yīng)用最廣的一種控制方法,它的優(yōu)點在于結(jié)構(gòu)簡單,且不依賴被控對象模型,控制所需的信息量也很少,因而非常易于工程實現(xiàn),同時通過參數(shù)的調(diào)整也可獲得較好的控制效果。 PID控制是將誤差信號的比例(P)、積分(I)和微分通過線性組合構(gòu)成控制量,故稱之為PID控制。因此,在使用中只需要設(shè)定三個參數(shù)即可。在很多情況,往往不一定需要三個單元,但是比例單元是必不可少的。 PID控制器設(shè)計的難點在于參數(shù)整定。但是實際上很多情況下我們可以直接根據(jù)系統(tǒng)的時域響應(yīng)來調(diào)整比例、微分和積分三個環(huán)節(jié)的參數(shù),當然這就需要了解這三個環(huán)節(jié)對時域響應(yīng)的有什么樣的影響。 (1)比例環(huán)節(jié):直接將誤差信號放大或縮小,因此將比例環(huán)節(jié)參數(shù)增大可以提高響應(yīng)速度并且減小穩(wěn)態(tài)誤差,但是,快速性和穩(wěn)定性總是一對矛盾,也就是在增大比例系數(shù)的同時,系統(tǒng)的穩(wěn)定性逐漸減低,系統(tǒng)將會出現(xiàn)超調(diào)、振蕩,甚至發(fā)散,因此合適的比例增益是在快速性和穩(wěn)定性之間進行折中。 (2)積分環(huán)節(jié):從積分的定義可知,該環(huán)節(jié)是將誤差不斷進行累積,可實現(xiàn)消除穩(wěn)態(tài)誤差。增益越大,積分作用越強,穩(wěn)態(tài)誤差消除也越快,但是帶來的問題是容易產(chǎn)生積分飽和現(xiàn)象,帶來大的超調(diào)并延緩了系統(tǒng)進入穩(wěn)態(tài)的速度,因此這又是一個矛盾。 (3)微分環(huán)節(jié):該環(huán)節(jié)或取的是誤差的微分信息,根據(jù)微分的定義,我們可以知道,這是一個超前環(huán)節(jié),也就是說該信號提前告訴我們控制量是該減還是該增,避免造成超調(diào)、振蕩,因此增大該環(huán)節(jié)增益有助于提高系統(tǒng)的穩(wěn)定性,避免振蕩,但是對快速性卻產(chǎn)生了負作用(快速性和穩(wěn)定性總是一會矛盾體),因此必須合理選取。還有必須注意的是,微分環(huán)節(jié)對噪聲信號將產(chǎn)生放大作用,因此在噪聲較大的系統(tǒng)中慎用。 離散形式的PID控制 最近看了一些文獻,發(fā)現(xiàn)其中一些文獻標題寫著是用增量式PID控制,但是看表達式似乎仍是位置式PID控制。不知是他弄錯了,還是我的理解錯了,下面根據(jù)我的理解比較一下位置式PID與增量式PID控制。 首先看表達式,這里采用離散形式。 位置式PID控制: 增量式PID控制: 從表達式我們可以得出以下結(jié)論: (1)位置式PID控制的輸出與整個過去的狀態(tài)有關(guān),用到了誤差的累加值;而增量式PID的輸出只與當前拍和前兩拍的誤差有關(guān),因此位置式PID控制的累積誤差相對更大; (2)增量式PID控制輸出的是控制量增量,并無積分作用,因此該方法適用于執(zhí)行機構(gòu)帶積分部件的對象,如步進電機等,而位置式PID適用于執(zhí)行機構(gòu)不帶積分部件的對象,如電液伺服閥。 (3)由于增量式PID輸出的是控制量增量,如果計算機出現(xiàn)故障,誤動作影響較小,而執(zhí)行機構(gòu)本身有記憶功能,可仍保持原位,不會嚴重影響系統(tǒng)的工作,而位置式的輸出直接對應(yīng)對象的輸出,因此對系統(tǒng)影響較大。 正是由于PID控制參數(shù)整定的復雜性,目前出現(xiàn)了多種改進的PID控制方法,我們將在下一篇中對這些改進型進行歸納總結(jié)。 PID控制器C代碼(部分) typedef struct PID{ double Command; //輸入指令 double Proportion; //比例系數(shù) double Integral; //積分系數(shù) double Derivative; //微分系數(shù) double preErr; //前一拍誤差 double sumErr; //誤差累積 };PID double PIDCale(PID *p,double feedback) { double dErr,Err; Err=p->Command-feedback; //當前誤差 p->sumErr+=Err; //誤差累加 dErr=Err-p->preErr; //誤差微分 p->preErr=Err; return(p->Proportion*Err //比例項 +p->Derivative*dErr //微分項 +p->Integral*p->sumErr); //積分項 } void PIDInit(PID *p) { memset(p,0,sizeof(PID)); //初始化 } PID控制器驗證(C++) #include <string.h> #include<stdio.h> typedef struct PID{ double Command; //輸入指令 double Proportion; //比例系數(shù) double Integral; //積分系數(shù) double Derivative; //微分系數(shù) double preErr; //前一拍誤差 double sumErr; //誤差累積 }PID; double PIDCale(PID *p,double feedback) { double dErr,Err; Err=p->Command-feedback; //當前誤差 p->sumErr+=Err; //誤差累加 dErr=Err-p->preErr; //誤差微分 p->preErr=Err; return(p->Proportion*Err //比例項 +p->Derivative*dErr //微分項 +p->Integral*p->sumErr); //積分項 } void PIDInit(PID *p) { memset(p,0,sizeof(PID)); //初始化 } typedef struct motor{ double lastY; double preY; double lastU; double preU; }motor; void motorInit(motor *m) { memset(m,0,sizeof(motor)); } double motorCal(motor *m,double u) { double y=1.9753*m->lastY-0.9753*m->preY+0.00003284*u+0.00006568*m->lastU+0.00003284*m->preU;//二階系統(tǒng) m->preY=m->lastY; m->lastY=y; m->preU=m->lastU; m->lastU=u; return y; } void main() { FILE *fp=fopen("data.txt","w+"); PID sPID; double u; double y=0; PIDInit(&sPID); sPID.Proportion=2; sPID.Derivative=10; sPID.Integral=0.00001; sPID.Command=10; motor m_motor; motorInit(&m_motor); int k=0; while(k<=1000) { fprintf(fp,"%f %f\n",y,sPID.Command); u=PIDCale(&sPID,y); y=motorCal(&m_motor,u); k++; } printf("%f\n",y); fclose(fp); } 增量式PID控制函數(shù)源代碼(C語言) typedef struct PID{ double Command; //輸入指令 double Proportion; //比例系數(shù) double Integral; //積分系數(shù) double Derivative; //微分系數(shù) double pre2Err; //前兩拍誤差 double preErr; //前一拍誤差 }PID; double PIDCale(PID *p,double feedback) { double Err,pErr,dErr,dU; Err=p->Command-feedback; //當前誤差 pErr=Err-p->preErr; //比例項增量式誤差 dErr=Err-2*p->preErr+p->pre2Err; //微分項增量式誤差 dU=p->Proportion*pErr+p->Derivative*dErr+p->Integral*Err; //控制量增量 p->pre2Err=p->preErr; p->preErr=Err; return dU; } void PIDInit(PID *p) { memset(p,0,sizeof(PID)); //初始化 } |
|