我的題目是基于PID算法的溫度控制系統(tǒng)_第1頁(yè)
我的題目是基于PID算法的溫度控制系統(tǒng)_第2頁(yè)
我的題目是基于PID算法的溫度控制系統(tǒng)_第3頁(yè)
我的題目是基于PID算法的溫度控制系統(tǒng)_第4頁(yè)
我的題目是基于PID算法的溫度控制系統(tǒng)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余41頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、我的題目是:基于PID算法的溫度控制系統(tǒng)89C51單片機(jī),通過鍵盤輸入預(yù)設(shè)值,與DS18B20測(cè)得的實(shí)際值做比較,然后驅(qū)動(dòng)制冷或加熱電路。用keil C語言來實(shí)現(xiàn)PID的控制。最佳答案/PID 算法溫控 C 語言 2008-08-17 18:58#in clude<reg51.h>#in clude< intrin s.h>#in clude<math.h>#in clude<stri ng.h>struct PID un sig ned int SetPo int; / un sig ned int Proporti on; / un sig

2、ned int In tegral; / un sig ned int Derivative; /設(shè)定目標(biāo) Desired Value比例常數(shù) Proportio nal Co nst 積分常數(shù) In tegral Co nst微分常數(shù) Derivative Co nstun sig ned int LastError; / Error-1un sig ned int PrevError; / Error-2un sig ned int SumError; / Sums of Errors;struct PID spid; / PID Control Structureun sig ned i

3、nt rout; / PID Resp onse (Output) un sig ned int rin; / PID Feedback (In put) sbit data 1= P1A0;sbit clk=P1Ai;sbit plus=P2A0;sbit subs=P2Al;sbit stop=P2A2;sbit output=P3A4;sbit DQ=P3A3;un sig ned char flag,flag_1=0;un sig ned char high_time,low_time,co un t=0;占空比調(diào)節(jié)參數(shù)un sig ned char set_temper=35;un

4、sig ned char temper;un sig ned char i;un sig ned char j=0;un sig ned int s;/*延時(shí)子程序,延時(shí)時(shí)間以12M晶振為準(zhǔn),延時(shí)時(shí)間為30usxtime*/void delay (un sig ned char time)un sig ned char m,n;for(n=0;n< time ;n+)for(m=0;m<2;m+)/*寫一位數(shù)據(jù)子程序*/void write_bit( un sig ned char bitval)EA=0;DQ=0; /*拉低DQ以開始一個(gè)寫時(shí)序*/if(bitval=1)_n o

5、p_();DQ=1; /*如要寫1,則將總線置高*/delay(5); /* 延時(shí) 90us 供 DA18B20 采樣 */DQ=1; /*釋放DQ總線*/_n op_();_n op_();EA=1;/*寫一字節(jié)數(shù)據(jù)子程序*/void write_byte( un sig ned char val)un sig ned char i;un sig ned char temp;EA=0;/*關(guān)中斷*/TR0=0;for(i=0;i<8;i+) /*寫一字節(jié)數(shù)據(jù),一次寫一位*/temp=val>>i; /*移位操作,將本次要寫的位移到最低位*/temp=temp&1;w

6、rite_bit(temp); /* 向總線寫該位 */delay;/* 延時(shí) 120us 后 */ TR0=1;EA=1; /*開中斷*/*讀一位數(shù)據(jù)子程序*/un sig ned char read_bit()un sig ned char i,value_bit;EA=O;DQ=O; /*拉低DQ,開始讀時(shí)序*/_n op_();_n op_();DQ=1; /*釋放總線*/for(i=0;i<2;i+)value_bit=DQ;EA=1;return(value_bit);/*讀一字節(jié)數(shù)據(jù)子程序*/un sig ned char read_byte()un sig ned cha

7、r i,value=0;EA=0;for(i=0;i<8;i+)if(read_bit() /*讀一字節(jié)數(shù)據(jù),一個(gè)時(shí)序中讀一次,并作移位處理*/value|=OxO1<<i;delay(4); /*延時(shí)80us以完成此次都時(shí)序,之后再讀下一數(shù)據(jù)*/EA=1;return(value);/*復(fù)位子程序*/un sig ned char reset()un sig ned char prese nee;EA=0;DQ=0; /*拉低DQ總線開始復(fù)位*/delay(30); /* 保持低電平 480us*/DQ=1; /*釋放總線*/delay(3);presence=DQ; /*

8、獲取應(yīng)答信號(hào)*/delay(28); /*延時(shí)以完成整個(gè)時(shí)序*/EA=1;return(prese nee); /*返回應(yīng)答信號(hào),有芯片應(yīng)答返回0,無芯片則返回1*/*獲取溫度子程序*/void get_temper()un sig ned char i,j;doi=reset(); /* 復(fù)位 */while(i!=0); /*1為無反饋信號(hào)*/i=0xcc; /*發(fā)送設(shè)備定位命令*/write_byte(i);i=0x44; /*發(fā)送開始轉(zhuǎn)換命令*/write_byte(i);delay(180); /* 延時(shí) */doi=reset(); /* 復(fù)位 */while(i!=0);i=0x

9、cc; /*設(shè)備定位*/write_byte(i);i=0xbe; /*讀出緩沖區(qū)內(nèi)容*/write_byte(i);j=read_byte();i=read_byte();i=(i<<4) &0x7f;s=(unsigned int)(j&0x0f);s=(s*100)/16;j=j>>4;temper=i|j; /*獲取的溫度放在 temper中*/ /*=In itialize PID Structure=*/void PIDI ni t (struct PID *pp)memset ( pp,0,sizeof(struct PID); /*=PI

10、D計(jì)算部分=*/un sig ned int PIDCalc( struct PID *pp, un sig ned int NextPoi nt )unsigned int dError,Error;Error = pp->SetPoi nt - NextPoi nt; / 偏差 pp->SumError += Error; / 積分dError = pp->LastError - pp->PrevError; / 當(dāng)前微分pp->PrevError = pp->LastError;pp->LastError = Error;return (pp-&

11、gt;Proporti on * Error/ 比例+ pp->I ntegral * pp->SumError / 積分項(xiàng)+ pp->Derivative * dError); / 微分項(xiàng)/*溫度比較處理子程序*/compare_temper()un sig ned char i;if(set_temper>temper)if(set_temper-temper>1)high_time=100;low_time=0;elsefor(i=0;i<10;i+) get_temper();rin = s; / Read In putrout = PIDCalc

12、( &spid,ri n ); / Perform PID In teratio nif (high_time<=100)high_time=(un sig ned char)(rout/800);elsehigh_time=100;low_time= (100-high_time);else if(set_temper<=temper)if(temper-set_temper>0)high_time=0;low_time=100;elsefor(i=0;i<10;i+) get_temper();rin = s; / Read In putrout = PID

13、Calc ( &spid,ri n ); / Perform PID In teratio nif (high_time<100)high_time=(unsigned char)(rout/10000);elsehigh_time=0;low_time= (100-high_time);/ else/ /*TO中斷服務(wù)子程序,用于控制電平的翻轉(zhuǎn) ,40us*100=4ms周期*/void serve_T0() in terrupt 1 using 1if(+co un t<=(high_time)output=1;else if(cou nt<=100)output

14、=0;elsecoun t=0;TH0=0x2f;TLO=OxeO;/*串行口中斷服務(wù)程序,用于上位機(jī)通訊*void serve_sio() in terrupt 4 using 2/* EA=0;RI=0;i=SBUF;if(i=2)while(RI=0)RI=0;set_temper=SBUF;SBUF=0x02;while(TI=0)TI=0;else if(i=3)TI=0;SBUF=temper;while(TI=0)TI=0;EA=1; */void disp_1( un sig ned char disp_ nu m16)un sig ned char n, a,m;for(n=

15、0;n<6;n+)/ k=disp_ nu m1 n;for(a=0;a<8;a+)clk=0;m=(disp_ nu m1 n& 1);disp_ nu m1 n=disp_ nu m1 n> >1;if(m=1)data1=1;elsedata1=0;_n op_();clk=1;_n op_();/*顯示子程序功能:將占空比溫度轉(zhuǎn)化為單個(gè)字符,顯示占空比和測(cè)得到的溫度*/void display()un sig ned char code number=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;un

16、 sig ned char disp_ nu m6;un sig ned int k,k1;k=high_time;k=k%1OOO;k仁 k/100;if(k1=0)disp_ num0=0;elsedisp_num0=0x60;k=k%100;disp_num1=numberk/10;disp_num2=numberk%10;k=temper;k=k%100;disp_num3=numberk/10;disp_num4=nu mberk%10+1;disp_ nu m5=nu mbers/10;disp_1(disp_ nu m);/*主程序*/main ()un sig ned char

17、 z;un sig ned char a,b,flag_2=1,co un t1=0;unsigned char phil=2,0xce,0x6e,0x60,0x1c,2;TMOD=Ox21;TH0=0x2f;TL0=0x40;SCON=0x50;PCON=OxOO;TH1=0xfd;TL1=0xfd;PS=1;EA=1;EX仁 0;ET0=1;ES=1;TR0=1;TR1=1;high_time=50; low_time=50;PIDI nit ( & spid ); / I nitialize Structure spid. Proportion = 10; / Set PID C

18、oefficie nts spid .In tegral = 8;spid.Derivative =6;spid.SetPoi nt = 100; / Set PID Setpoi nt while(1)if(plus=0)EA=0;for(a=0;a<5;a+) for(b=0;b<102;b+)if(plus=0)set_temper+;flag=0;else if(subs=0)for(a=0;a<5;a+) for(b=0;a<102;b+)if(subs=0)set_temper-;flag=0;else if(stop=0)for(a=0;a<5;a+

19、) for(b=0;b<102;b+) if(stop=0)flag=0;break;EA=1;get_temper(); b=temper;if(flag_2=1)a=b;if(abs(a-b)>5) temper=a;elsetemper=b;a=temper; flag_2=0;if(+cou nt1>30)display();coun t1=0;compare_temper();TR0=0;z=1;while(1)EA=0;if(stop=0) for(a=0;a<5;a+) for(b=0;b<102;b+) if(stop=0) disp_1(phil

20、);/ break;EA=1;DS18b20 子程序#i nclude <REG52.H>定義端口sbit DQ=P2A1;typedef un sig ned char byte;word;延時(shí)typedef un sig ned intvoid delay(word usec on ds)for(;usec on ds>0;usec on ds-);byte ow_reset(void)byte prese nee;DQ=0;delay(29);DQ=1;delay(3);prese nce=DQ;delay(25);return(prese nee);byte read

21、_byte(viod)byte i;復(fù)位/DQ低電平480us/DQ高電平/等待/presenee 信號(hào)0允許,1禁止/從1-wire總線上讀取一個(gè)字節(jié)byte value=0;for (i=8;i>0;i-)value>>=1;DQ=0;DQ=1;delay(1);if(DQ)value|=0x80;delay(6);return(value);向1-wire總線上寫一個(gè)字節(jié)void write_byte(char val)/ 一次寫一個(gè)字節(jié)byte i;for (i=8;i>0;i-)DQ=0;DQ=va l&O x01; delay(5); DQ=1; v

22、al=val/2;delay(5);讀取溫度char Read_Temperature(void) unionbyte c2; int x;temp;ow_reset(); write_byte(0xcc); write_byte(0xBE); temp.c1=read_byte(); temp.cO=read_byte(); ow_reset(); write_byte(OxCC); write_byte(0x44); return temp.x/2;參考資料:你把這兩個(gè)程序組合就可以了PID算法PID算法是本程序中的核心部分。我們采用PID模糊控制技術(shù),通過Pvar、Ivar、Dvar (

23、比例、積分、微分)三方面的結(jié)合調(diào)整形成模糊控制來解決慣性溫度誤差問題。其原理如下:本系統(tǒng)的溫度控制器的電熱元件之一是發(fā)熱絲。發(fā)熱絲通過電流加熱時(shí),內(nèi)部溫度都很高。當(dāng)容器內(nèi)溫度升高至設(shè)定溫度時(shí),溫度控 器會(huì)發(fā)岀信號(hào)停止加熱。但這時(shí)發(fā)熱絲的溫度會(huì)高于設(shè)定溫度,發(fā)熱絲還將會(huì)對(duì)被加熱的器件進(jìn)行加熱,即使溫度控制器發(fā)岀信號(hào)停止加熱, 加熱器件的溫度還往往繼續(xù)上升幾度,然后才開始下降。當(dāng)下降到設(shè)定溫度的下限時(shí),溫度控制器又開始發(fā)岀加熱的信號(hào),開始加熱,但發(fā)熱 要把溫度傳遞到被加熱器件需要一定的時(shí)候,這就要視發(fā)熱絲與被加熱器件之間的介質(zhì)情況而定。通常開始重新加熱時(shí),溫度繼續(xù)下降幾度。 以,傳統(tǒng)的定點(diǎn)開關(guān)控制

24、溫度會(huì)有正負(fù)誤差幾度的現(xiàn)象,但這不是溫度控制器本身的問題,而是整個(gè)熱系統(tǒng)的結(jié)構(gòu)性問題,使溫度控制器控溫 生一種慣性溫度誤差。增量式PID算法的輸岀量為 Un = Kp(en-en-1)+(T/Ti)en+(Td/T)(en-2*en-1+en-2)式中,en、en-1、en-2分別為第n次、n-1次和n-2次的偏差值,Kp、Ti、Td分別為比例系數(shù)、積分系數(shù)和微分系數(shù),T為采樣周期計(jì)算機(jī)每隔固定時(shí)間 T將現(xiàn)場(chǎng)溫度與用戶設(shè)定目標(biāo)溫度的差值帶入增量式PID算法公式,由公式輸出量決定PWM方波的占空比,后續(xù)熱電路根據(jù)此PWM方波的占空比決定加熱功率?,F(xiàn)場(chǎng)溫度與目標(biāo)溫度的偏差大則占空比大,加熱電路的加

25、熱功率大,使溫度的實(shí)測(cè)值與設(shè)定值 偏差迅速減少;反之,二者的偏差小則占空比減小,加熱電路加熱功率減少,直至目標(biāo)值與實(shí)測(cè)值相等,達(dá)到自動(dòng)控制的目的。PID參數(shù)的選擇是實(shí)驗(yàn)成敗的關(guān)鍵,它決定了溫度控制的準(zhǔn)確度。數(shù)字PID調(diào)節(jié)器參數(shù)的整定可以仿照模擬PID調(diào)節(jié)器參數(shù)整定的各法,根據(jù)工藝對(duì)控制性能的要求,決定調(diào)節(jié)器的參數(shù)。各個(gè)參數(shù)對(duì)系統(tǒng)性能的影響如下: 比例系數(shù)P對(duì)系統(tǒng)性能的影響:比例系數(shù)加大,使系統(tǒng)的動(dòng)作靈敏,速度加快,穩(wěn)態(tài)誤差減小;P偏大,振蕩次數(shù)加多,調(diào)節(jié)時(shí)間加P太大時(shí),系統(tǒng)會(huì)趨于不穩(wěn)定;P太小,又會(huì)使系統(tǒng)的動(dòng)作緩慢。P可以選負(fù)數(shù),這主要是由執(zhí)行機(jī)構(gòu)、傳感器以及控制對(duì)象的特性決定的。如P的符號(hào)選

26、擇不當(dāng)對(duì)象測(cè)量值就會(huì)離控制目標(biāo)的設(shè)定值越來越遠(yuǎn),如果岀現(xiàn)這樣的情況P的符號(hào)就一定要取反。 積分控制I對(duì)系統(tǒng)性能的影響:積分作用使系統(tǒng)的穩(wěn)定性下降,I小(積分作用強(qiáng))會(huì)使系統(tǒng)不穩(wěn)定,但能消除穩(wěn)態(tài)誤差,提高系控制精度。 微分控制D對(duì)系統(tǒng)性能的影響:微分作用可以改善動(dòng)態(tài)特性,D偏大時(shí),超調(diào)量較大,調(diào)節(jié)時(shí)間較短;D偏小時(shí),超調(diào)量也較大,調(diào)節(jié)時(shí)間長(zhǎng);只有D合適,才能使超調(diào)量較小,減短調(diào)節(jié)時(shí)間。溫底控制PID的算法設(shè)計(jì)及實(shí)現(xiàn)PID簡(jiǎn)介PID ( Proportional Integral Derivative)控制是控制工程中技術(shù)成熟、應(yīng)用廣泛的一種控制策略,經(jīng)過長(zhǎng)期的工程實(shí)踐,已整的控制方法和典型的結(jié)構(gòu)

27、。它不僅適用于數(shù)學(xué)模型已知的控制系統(tǒng)中,而且對(duì)于大多數(shù)數(shù)學(xué)模型難以確定的工業(yè)過程也可應(yīng)用,在眾 制中取得了滿意的應(yīng)用效果。PID工作基理:由于來自外界的各種擾動(dòng)不斷產(chǎn)生,要想達(dá)到現(xiàn)場(chǎng)控制對(duì)象值保持恒定的目的,控制作用就必須不斷的進(jìn)行。若現(xiàn)場(chǎng)控制對(duì)象值(以下簡(jiǎn)稱被控參數(shù))發(fā)生變化,現(xiàn)場(chǎng)檢測(cè)元件就會(huì)將這種變化采集后經(jīng)變送器送至PID控制器的輸入端,并與其給定值值)進(jìn)行比較得到偏差值(以下簡(jiǎn)稱e值),調(diào)節(jié)器按此偏差并以我們預(yù)先設(shè)定的整定參數(shù)控制規(guī)律發(fā)出控制信號(hào),去改變調(diào)節(jié)器的開度, 度增加或減少,從而使現(xiàn)場(chǎng)控制對(duì)象值發(fā)生改變,并趨向于給定值(SP值),以達(dá)到控制目的,如圖1所示,其實(shí)PID的實(shí)質(zhì)就是

28、對(duì)行比例、積分、微分運(yùn)算,根據(jù)運(yùn)算結(jié)果控制執(zhí)行部件的過程。p:圖1模擬PID控制系統(tǒng)原理圖PID控制器的控制規(guī)律可以描述為:比例(P)控制能迅速反應(yīng)誤差,從而減小穩(wěn)態(tài)誤差。但是,比例控制不能消除穩(wěn)態(tài)誤差。比例放大系數(shù)的加大,會(huì)引起系統(tǒng)的(I )控制的作用是:只要系統(tǒng)有誤差存在,積分控制器就不斷地積累,輸出控制量,以消除誤差。因而,只要有足夠的時(shí)間,積分控制誤差,使系統(tǒng)誤差為零,從而消除穩(wěn)態(tài)誤差。積分作用太強(qiáng)會(huì)使系統(tǒng)超調(diào)加大,甚至使系統(tǒng)出現(xiàn)振蕩。微分(D)控制可以減小超調(diào)量,系統(tǒng)的穩(wěn)定性提高,同時(shí)加快系統(tǒng)的動(dòng)態(tài)響應(yīng)速度,減小調(diào)整時(shí)間,從而改善系統(tǒng)的動(dòng)態(tài)性能。根據(jù)不同的被控對(duì)象的控制特性,又可PD

29、 PID等不同的控制模型。數(shù)字PID的實(shí)現(xiàn)在連續(xù)-時(shí)間控制系統(tǒng)(模擬 PID控制系統(tǒng))中,PID控制器應(yīng)用得非常廣泛。其設(shè)計(jì)技術(shù)成熟,長(zhǎng)期以來形成了典型的結(jié)構(gòu),結(jié)構(gòu)更改靈活,能滿足一般的控制要求。隨著計(jì)算機(jī)的快速發(fā)展,人們將計(jì)算機(jī)引入到PID控制領(lǐng)域,也就岀現(xiàn)了數(shù)字式PID控制由于計(jì)算機(jī)基于采樣控制理論,計(jì)算方法也不能沿襲傳統(tǒng)的模擬PID控制算法(如公式 1所示),所以必須將控制模型離散化PID計(jì)算公式離散法:以T為采樣周期,k為采樣序號(hào),用求和的形式代替積分,用增量的形式(求差)代替微分,這樣可以將連續(xù)的tkT(k=0J.2.)卜-Te(jT) = T e(j) Mr j=Cde(t)u(k

30、T)-亡(k-汕1 肚 dtTT式1就可以離散為:I九=KFet + y ej + -屯)+也'(3)或者:Ik卩嚴(yán)K曲+瓦工勺+ KD(ek - %)+ %亠 (4)這樣就可以讓計(jì)算機(jī)或者單片機(jī)通過采樣的方式實(shí)現(xiàn)PID控制,具體的PID控制又分為位置式 PID控制和增量式 PID控制,公制量的全部大小,所以稱之為全量式或者位置式控制;如果計(jì)算機(jī)只對(duì)相鄰的兩次作計(jì)算,只考慮在前一次基礎(chǔ)上,計(jì)算機(jī)輸岀量的大是全部輸出信息的計(jì)算,這種控制叫做增量式PID控制算法,其實(shí)質(zhì)就是求卩的大小,而卩k =卩k -卩k-1 ;所以將式4做自叫=Kplck -z T= Kp(l + += Ae1-Bck

31、.1+Ccl,2Ck +上_在血+ Ck-2)- Kp(l + -+ Kp2dT(5)其中- tA=KpU-s- +B = -Kp(l +¥溫度控制PID算法設(shè)計(jì)本設(shè)計(jì)利用了上面所介紹的位置式PID算法,將溫度傳感器采樣輸入作為當(dāng)前輸入,然后與設(shè)定值進(jìn)行相減得偏差ek,然后再運(yùn)算產(chǎn)生輸岀結(jié)果 fOut,然后讓fOut控制定時(shí)器的時(shí)間進(jìn)而控制加熱器。為了方便PID運(yùn)算,首先建立一個(gè) PID的結(jié)構(gòu)體數(shù)據(jù)類型,于保存PID運(yùn)算所需要的P、I、D系數(shù),以及設(shè)定值,歷史誤差的累加和等信息:typedef struct PIDfloat SetPoi nt; /設(shè)定目標(biāo) Desired Valu

32、efloat Proporti on; /比例系數(shù) Proportional Constfloat In tegral; /積分系數(shù) Integral Constfloat Derivative; /微分系數(shù) Derivative Constint LastError; /上次偏差int SumError; /歷史誤差累計(jì)值 PID;PID stPID; /定義一個(gè)stPID變量PID運(yùn)算的算法程序,通過PID運(yùn)算返回fOut,fOut的值決定是否加熱,加熱時(shí)間是多少。PID運(yùn)算的C實(shí)現(xiàn)代碼: float PIDCalc( PID *pp, i nt NextPoi nt ) int dErr

33、or,Error;Error = pp->SetPoint*10 - NextPoint; /偏差,設(shè)定值減去當(dāng)前采樣值pp->SumError += Error; /積分,歷史偏差累加dError = Error-pp->LastError; / pp->PrevError = pp->LastError; / pp->LastError = Error;+ pp->I ntegral * pp->SumError /-pp->Derivative * dError /);當(dāng)前微分,偏差相減保存積分項(xiàng)微分項(xiàng)在實(shí)際運(yùn)算時(shí),由于水具有很大的熱

34、慣性,而且PID運(yùn)算中的I (積分項(xiàng))具有非常明顯的延遲效應(yīng)所以不能保留,我們必須把相反D (微分項(xiàng))則有很強(qiáng)的預(yù)見性,能夠加快反應(yīng)速度,抑制超調(diào)量,所以積分作用應(yīng)該適當(dāng)加強(qiáng)才能達(dá)到較佳的控制效果,系統(tǒng)最方案,下面C代碼所示為PD控制的實(shí)現(xiàn)過程:float PIDCalc( PID *pp, i nt NextPoi nt )int dError,Error;Error = pp->SetPoint*10 - NextPoint; / dError = Error-pp->LastError; / pp->PrevError = pp->LastError; / pp-

35、>LastError = Error;return (pp->Proportio n * Error /偏差,設(shè)定值減去當(dāng)前采樣值當(dāng)前微分,偏差相減保存比例項(xiàng)-pp->Derivative * dError /微分項(xiàng));溫度控制實(shí)現(xiàn)通過溫度的PID運(yùn)算,產(chǎn)生結(jié)果fOut,該參數(shù)決定是否加熱,加熱時(shí)間是多長(zhǎng)。該程序如下:stPID.Proportion = 2; /設(shè)置 PID 比例值stPID.Integral = 0; /設(shè)置 PID 積分值stPID.Derivative = 5; /設(shè)置 PID 微分值fOut = PIDCalc ( & stPID,(i nt

36、)(fT*10) ); /PID計(jì)算if(fOut<=0)*P_IOA_Buffer &= 0xff7f; /溫度高于設(shè)定值,關(guān)閉加熱器PID 般算式及模擬控制規(guī)律如式(1)所示:else*P_IOA_Buffer |= 0x0080; /溫度低于設(shè)定值,打開加熱器“ 0”,則開啟加計(jì)算結(jié)果比較大說明加熱時(shí)間由主函數(shù)計(jì)算,由TimerB中斷控制。主程序中通過 PIDCalc函數(shù)得到fOut參數(shù),如果該參數(shù)大于B中斷一直處于允許狀態(tài),每進(jìn)入一次IRQ2_TMB中斷,fOut參數(shù)減1直到fOut = 0 ,停止加熱。如果 PIDCalc差較大,則加熱時(shí)間比較長(zhǎng),如果計(jì)算結(jié)果比較小,說

37、明離目標(biāo)溫度相差較小,加熱時(shí)間相對(duì)較短?;赑ID算法和89C52單片機(jī)的溫度控制系統(tǒng)作者:張艷艷 安徽電子信息職業(yè)技術(shù)學(xué)院 來源:現(xiàn)代電子技術(shù) 發(fā)布時(shí)間:2009-12-22 17:36:09 收 藏評(píng)論基于PID算法和89C52單片機(jī)的溫度控制系統(tǒng)0引言溫控技術(shù)無論是在工業(yè)生產(chǎn),還是日常生活中都起著非常重要的作用。在冶金、石油、化工、電力和現(xiàn)代農(nóng)業(yè)等行業(yè),溫度是極為重要而又普遍的熱工參數(shù)之一,在普通家庭里熱水器、電飯煲、電烤箱等依賴于溫控技術(shù)的家電設(shè)備也是必不可少??梢哉f溫度控制技術(shù)無處不在。常規(guī)的溫度控制方法以設(shè)定溫度為臨界點(diǎn),超岀設(shè)定允許范圍即進(jìn)行溫度調(diào)控:低于設(shè)定值就加熱,反之就停止

38、或降溫。這種方法實(shí)現(xiàn)簡(jiǎn)單、成本低,但控制效果不理想,控制溫度精度不高、容易引起震蕩,達(dá)到穩(wěn)定點(diǎn)的時(shí)間也長(zhǎng),因此,只能用在精度要求不高的場(chǎng)合。而采用PID算法進(jìn)行溫度控制,它具有控制精度高,能夠克服容量滯后的特點(diǎn), 特別適用于負(fù)荷變化大、 容量滯后較大、控制品質(zhì)要求又很高的控制系統(tǒng)。單片機(jī)作為控制系統(tǒng)中必不可少的部分,在各個(gè)領(lǐng)域得到了廣泛的應(yīng)用,用單片機(jī)進(jìn)行實(shí)時(shí)系統(tǒng)數(shù)據(jù)處理和控制,保證系統(tǒng)工作在最佳狀態(tài),提高系統(tǒng)的控制精度,有利于提高系統(tǒng)的工作效率。本系統(tǒng)采用單片機(jī)編程實(shí)現(xiàn)PID算法進(jìn)行溫度控制。1 PID控制的原理和特點(diǎn)在工程實(shí)際中,應(yīng)用最為廣泛的調(diào)節(jié)器控制規(guī)律為比例、積分、微分控制,簡(jiǎn)稱PI

39、D控制,又稱PID調(diào)節(jié)。PID控制器以其結(jié)構(gòu)簡(jiǎn)單、穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。當(dāng)被控 對(duì)象的結(jié)構(gòu)和參數(shù)不能完全掌握,或得不到精確的數(shù)學(xué)模型,控制理論的其他技術(shù)也難以采用,系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗(yàn)和現(xiàn)場(chǎng)調(diào)試來確定時(shí),應(yīng)用PID控制技術(shù)最為方便。PID控制器的參數(shù)整定是控制系統(tǒng)設(shè)計(jì)的核心內(nèi)容。它是根據(jù)被控過程的特性確定PID控制器的比例系數(shù)、積分時(shí)問和微分時(shí)間的大小。PID控制器參數(shù)整定的方法概括起來有兩大類:一是理論計(jì)算整定法。它主要是依據(jù)系統(tǒng)的數(shù)學(xué)模型,經(jīng)過理論計(jì)算確定控制器參數(shù)。這種方法所得到的計(jì)算數(shù)據(jù)未必可以直接 用,還必須通過工程實(shí)際進(jìn)行調(diào)整和修改

40、。二是工程整定方法,它主要依賴工程經(jīng)驗(yàn),直接在控制系統(tǒng)的 試驗(yàn)中進(jìn)行,且方法簡(jiǎn)單、易于掌握,在工程實(shí)際中被廣泛采用。uCt) = Kq e(t) + 寺J f(£)dt 十 To (1)N式中:u(t)為控制器的輸出;e(t)為偏差,即設(shè)定值與反饋值之差;KC為控制器的放大系數(shù),即比例增益;TI為控制器的積分常數(shù);TD為控制器的微分時(shí)間常數(shù)。 PID算法的原理即調(diào)節(jié) KC,TI,TD三個(gè)參 數(shù)使系統(tǒng)達(dá)到穩(wěn)定。由于計(jì)算機(jī)控制是一種采樣控制,它只能根據(jù)采樣時(shí)刻的偏差值計(jì)算控制量。因此在計(jì)算機(jī)控制系統(tǒng)中,必須首先對(duì)式(1)進(jìn)行離散化處理,用數(shù)字形式的差分方程代替連續(xù)系統(tǒng)的微分方程,此時(shí)積分

41、項(xiàng)和微分項(xiàng)可用求和及增量式表示:血 A EgE(K)-E(gl) "、一 =亍 0di AzTe(i)dz =二(3)Joj=Gj-0將式(2)和式代入式(1),則可得到離散的 PID表達(dá)式:P(K) = KpE(K) + # 左E(j)+I j = 0*E(K) E(K - 1(4)式中: t=T為采樣周期,必須使 T足夠小,才能保證系統(tǒng)有一定的精度 (采樣定理);E(K)為第K次采樣時(shí)的偏差值;E(K-1)為第K-1次采樣時(shí)的偏差值;P(K)為第K次采樣是調(diào)節(jié)器的輸出。2系統(tǒng)的硬件構(gòu)成本系統(tǒng)由傳感器 A/D采樣輸入、單片機(jī)控制、人機(jī)交互、控制信號(hào)輸岀四部分組成,其中溫度傳感部分由

42、測(cè)試采樣電路實(shí)現(xiàn), 人機(jī)交互由矩陣鍵盤和 LCD液晶屏構(gòu)成,PID控制算法由89C52單片機(jī)實(shí)現(xiàn),控制信號(hào)輸岀部分則由功率放大和開關(guān)控制電路組成。系統(tǒng)框圖如圖1所示。圖1 溫控系統(tǒng)框圖3主程序流程軟件程序是本控制系統(tǒng)的核心,它包括從溫度采樣到信號(hào)輸岀的整個(gè)流程控制,其示意圖如圖2所示開機(jī)圖2 控制系統(tǒng)流程圖程序功能主要由以下的幾部分組成:(1) 初始化:設(shè)定各參數(shù)的初始值,設(shè)定各中斷及定時(shí)器。(2) 接收/發(fā)射:此部分程序主要完成數(shù)據(jù)的控制及顯示,主要通過89C52單片機(jī)的全雙工串行口完成和鍵盤部分的雙向通信。(3) PC機(jī)通信:此部分完成與微機(jī)控制接口RS 232的連接及通信的控制。(4)

43、數(shù)值轉(zhuǎn)換子程序:由于主程序中用到了很多的數(shù)值轉(zhuǎn)換及數(shù)值的運(yùn)算(如十進(jìn)制轉(zhuǎn)換成十六進(jìn)制、雙字節(jié)與單字節(jié)的除法運(yùn)算等),為了程序調(diào)用的方便,特將其編寫成子程序的形式。(5) PID 算法。4實(shí)驗(yàn)測(cè)試系統(tǒng)的性能與穩(wěn)定度需要通過具體實(shí)驗(yàn)測(cè)試完成?,F(xiàn)用1 kW的電爐將電熱杯中的1 L清水進(jìn)行加熱。觀測(cè)設(shè)定值和實(shí)測(cè)值之間的誤差 (當(dāng)水溫達(dá)到穩(wěn)定時(shí)的值),計(jì)算絕對(duì)誤差和相對(duì)誤差,見表1。表1 逞差分析表序號(hào)設(shè)定泯度/匸實(shí)測(cè)溫度/忙絕對(duì)娛搭相對(duì)誤蓋/%135.335. 300240,240. 1-0. 16 24345.045, 30. 30価460.060* 50 50.83574.073,4-0.4:0,

44、606B1.081. 20,20.25設(shè)定溫度為50 C,每隔30s記錄實(shí)測(cè)溫度,如表2所示。表2蠱度穩(wěn)定度關(guān)系羸t設(shè)定溫度snv)測(cè)-老時(shí)間/ min實(shí)測(cè)溫度測(cè)量時(shí)間/min實(shí)測(cè)溫度隹0* 535. 54,051, 11.037.04. 550. 61.510. 35” 049.8世0佩55.550. 52. 5轍1G. 050t23. 550.3反550. 1從表2中的數(shù)據(jù)可知,系統(tǒng)運(yùn)行 5 min時(shí)基本達(dá)到穩(wěn)定。5結(jié)語由實(shí)驗(yàn)結(jié)果可以看岀,系統(tǒng)的誤差基本穩(wěn)定在如.3'C,可見系統(tǒng)的精度很好。此外,系統(tǒng)運(yùn)行5 min時(shí)溫度基本達(dá)到穩(wěn)定,穩(wěn)定所需時(shí)間較短??梢钥磳?,基于PID算法的單片

45、機(jī)溫度控制系統(tǒng)具有較高的精確度和穩(wěn)定性,在溫度調(diào)節(jié)階段平衡溫度時(shí)間較短。因此本系統(tǒng)可以應(yīng)用于各種對(duì)精度要求較高的溫度控回復(fù)數(shù):5,點(diǎn)擊數(shù):1528制場(chǎng)合。溫度控制中,用PID算法得到的是一個(gè)數(shù)值,這個(gè)數(shù)值如何轉(zhuǎn)換為占空比?【樓主位】xu我在用MEGA16控制電加熱調(diào)節(jié)水溫時(shí),采用PID算法,輸出采用占空xianhai比通斷控制。為求階躍響應(yīng),我用15%占空比達(dá)到穩(wěn)定后,將占空比調(diào)至積分:230%,開始測(cè)量溫度。得到階躍響應(yīng)曲線后,為求加熱器的靜態(tài)增益K,派別:采用K= Y/ X公式。我知道厶Y用溫度值的單位,但 X的單位該如等級(jí):何取呢?是用15,還是0.15?來自:另外,我用PID算法得到的

46、是一個(gè)數(shù)值,這個(gè)數(shù)值如何轉(zhuǎn)換為占空比?是要先設(shè)定一個(gè)較大的值嗎?如果是的話,這個(gè)數(shù)值是否有一個(gè)經(jīng)驗(yàn)值,大 概取多少?懇請(qǐng)各位高手幫忙看一下,謝謝!2006-02-17,10:資料 郵件 回復(fù) 引用回復(fù)編輯刪除51:03【1樓】sa nol哥們,我也做這個(gè),交流下?積分:8qq 940353508派別:等級(jí):-來自:2009-04-23,09: L資料 =郵件 竺 引用回復(fù)=編輯 刪除42:23【2樓】huang關(guān)于PID有點(diǎn)心得,供LZ參考:stone1、PID運(yùn)算出來是一個(gè)數(shù)據(jù)沒有量綱, 在這里這個(gè)數(shù)據(jù)和占空比沒有什積分:47么直接的關(guān)系,這個(gè)數(shù)據(jù)的大小表示的 PID調(diào)節(jié)的強(qiáng)度,數(shù)據(jù)大調(diào)節(jié)度

47、就派別:大。等級(jí):-2、占空比的輸出一般通過定時(shí)器,我們假設(shè)當(dāng)定時(shí)器的值為255時(shí),來自:占空比為100%。第1點(diǎn)計(jì)算的數(shù)據(jù)是和你 PID的三個(gè)參數(shù)密切相關(guān)的,在相同的被控量測(cè)量值下,不同的 PID參數(shù)會(huì)得出不同的值,這其實(shí)就是 PID參數(shù)要調(diào)節(jié)的原因。因此要對(duì) PID參數(shù)加以調(diào)整,將計(jì)算出的數(shù)據(jù)可 以直接賦給定時(shí)器控制占空比,但是要對(duì)最大和最小值加以限定。3、想象一下,如果你的PID參數(shù)不合適,計(jì)算出的數(shù)據(jù)要么大于255,要么小于0,這就變成了開關(guān)控制了。其實(shí)最關(guān)鍵的就是我寫的第一點(diǎn),只要理解了 PID計(jì)算出的數(shù)據(jù)是表示的調(diào)節(jié)強(qiáng)度的大小,和占空比和溫度都沒有直接的對(duì)應(yīng)關(guān)系的。那PID就沒有什

48、么困難的。2009-04-23,11:資料 郵件 業(yè) 引用回復(fù)編輯刪除52:49【3樓】deepi【2樓】huangstonen學(xué)習(xí)了 !!!積分:402派別:等級(jí):-來自:編輯刪除2009-04-24,14:資料 郵件 回復(fù) 引用回復(fù) ffJJ48:14【4樓】lengqi這個(gè)樓的時(shí)間跨度太大了吧? ?ng1309積分:209派別:等級(jí):-來自:泉州2009-04-24,16:資料廠郵件 回復(fù) 引用回復(fù)編輯 刪除33:29學(xué)習(xí)了【5樓】aglen58積分 派別 等級(jí) 來自2009-10-11,11:05:24資料 郵 件 回復(fù) 引用回單片機(jī)高精度溫度控制實(shí)例【摘要】本文介紹了以AT89S51單片機(jī)為核心的溫度控制器的設(shè)計(jì),在該設(shè)計(jì)中采用高精度 的溫度傳感器AD590對(duì)電熱鍋爐的溫度進(jìn)行實(shí)時(shí)精確測(cè)量,用超低溫漂移高精度運(yùn)算放大器 OP07將溫度-電壓信號(hào)進(jìn)行放大 再送入12位的AD574A進(jìn)行AD轉(zhuǎn)換,從而實(shí)現(xiàn)自動(dòng)檢測(cè),實(shí) 時(shí)顯示及越限報(bào)警??刂撇糠植捎肞ID算法,實(shí)時(shí)更新PWM控制輸岀參數(shù),控制可控硅的通斷 時(shí)間,最終實(shí)現(xiàn)對(duì)爐溫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論