溫度控制的PID算法的C語言程序_第1頁
溫度控制的PID算法的C語言程序_第2頁
溫度控制的PID算法的C語言程序_第3頁
溫度控制的PID算法的C語言程序_第4頁
溫度控制的PID算法的C語言程序_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、我的題目是:基于PID算法的溫度控制系統(tǒng) 89C51單片機,通過鍵盤輸入預設值,與DS18B20測得的實際值做比較,然后驅動制冷或加熱電路。用keil C語言來實現(xiàn)PID的控制。 最佳答案/PID算法溫控C語言2008-08-17 18:58#include<reg51.h> #include<intrins.h> #include<math.h> #include<string.h> struct PID unsigned int SetPoint; / 設定目標 Desired Value unsigned int Proportion; /

2、 比例常數(shù) Proportional Const unsigned int Integral; / 積分常數(shù) Integral Const unsigned int Derivative; / 微分常數(shù) Derivative Const unsigned int LastError; / Error-1 unsigned int PrevError; / Error-2 unsigned int SumError; / Sums of Errors ; struct PID spid; / PID Control Structure unsigned int rout; / PID Respo

3、nse (Output) unsigned int rin; / PID Feedback (Input) sbit data1=P10; sbit clk=P11; sbit plus=P20; sbit subs=P21; sbit stop=P22; sbit output=P34; sbit DQ=P33; unsigned char flag,flag_1=0; unsigned char high_time,low_time,count=0;/占空比調(diào)節(jié)參數(shù) unsigned char set_temper=35; unsigned char temper; unsigned ch

4、ar i; unsigned char j=0; unsigned int s; /* 延時子程序,延時時間以12M晶振為準,延時時間為30us×time */ void delay(unsigned char time) unsigned char m,n; for(n=0;n<time;n+) for(m=0;m<2;m+) /* 寫一位數(shù)據(jù)子程序 */ void write_bit(unsigned char bitval) EA=0; DQ=0; /*拉低DQ以開始一個寫時序*/ if(bitval=1) _nop_(); DQ=1; /*如要寫1,則將總線置高*

5、/ delay(5); /*延時90us供DA18B20采樣*/ DQ=1; /*釋放DQ總線*/ _nop_(); _nop_(); EA=1; /* 寫一字節(jié)數(shù)據(jù)子程序 */ void write_byte(unsigned char val) unsigned char i; unsigned char temp; EA=0; /*關中斷*/TR0=0; for(i=0;i<8;i+) /*寫一字節(jié)數(shù)據(jù),一次寫一位*/ temp=val>>i; /*移位操作,將本次要寫的位移到最低位*/ temp=temp&1; write_bit(temp); /*向總線寫該

6、位*/ delay(7); /*延時120us后*/ / TR0=1; EA=1; /*開中斷*/ /* 讀一位數(shù)據(jù)子程序 */ unsigned char read_bit() unsigned char i,value_bit; EA=0; DQ=0; /*拉低DQ,開始讀時序*/ _nop_(); _nop_(); DQ=1; /*釋放總線*/ for(i=0;i<2;i+) value_bit=DQ; EA=1; return(value_bit); /* 讀一字節(jié)數(shù)據(jù)子程序 */ unsigned char read_byte() unsigned char i,value=0

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

8、獲取應答信號*/ delay(28); /*延時以完成整個時序*/ EA=1; return(presence); /*返回應答信號,有芯片應答返回0,無芯片則返回1*/ /* 獲取溫度子程序 */ void get_temper() unsigned char i,j; do i=reset(); /*復位*/ while(i!=0); /*1為無反饋信號*/ i=0xcc; /*發(fā)送設備定位命令*/ write_byte(i); i=0x44; /*發(fā)送開始轉換命令*/ write_byte(i); delay(180); /*延時*/ do i=reset(); /*復位*/ while

9、(i!=0); i=0xcc; /*設備定位*/ 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中*/ /*= Initialize PID Structure =*/ void PIDInit (struct PID *pp) memset ( pp,0,size

10、of(struct PID); /*= PID計算部分 =*/ unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint ) unsigned int dError,Error; Error = pp->SetPoint - NextPoint; / 偏差 pp->SumError += Error; / 積分 dError = pp->LastError - pp->PrevError; / 當前微分 pp->PrevError = pp->LastError; pp->LastErro

11、r = Error; return (pp->Proportion * Error/比例+ pp->Integral * pp->SumError /積分項+ pp->Derivative * dError); / 微分項 /* 溫度比較處理子程序 */ compare_temper() unsigned char i; if(set_temper>temper) if(set_temper-temper>1) high_time=100; low_time=0; else for(i=0;i<10;i+) get_temper(); rin = s;

12、 / Read Input rout = PIDCalc ( &spid,rin ); / Perform PID Interation if (high_time<=100) high_time=(unsigned char)(rout/800); else high_time=100; low_time= (100-high_time); else if(set_temper<=temper) if(temper-set_temper>0) high_time=0; low_time=100; else for(i=0;i<10;i+) get_temper

13、(); rin = s; / Read Input rout = PIDCalc ( &spid,rin ); / Perform PID Interation if (high_time<100) high_time=(unsigned char)(rout/10000); else high_time=0; low_time= (100-high_time); / else / /* T0中斷服務子程序,用于控制電平的翻轉 ,40us*100=4ms周期 */ void serve_T0() interrupt 1 using 1 if(+count<=(high_ti

14、me) output=1; else if(count<=100) output=0; else count=0; TH0=0x2f; TL0=0xe0; /* 串行口中斷服務程序,用于上位機通訊 */ void serve_sio() interrupt 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

15、 disp_1(unsigned char disp_num16) unsigned char n,a,m; for(n=0;n<6;n+) / k=disp_num1n; for(a=0;a<8;a+) clk=0; m=(disp_num1n&1); disp_num1n=disp_num1n>>1; if(m=1) data1=1; else data1=0; _nop_(); clk=1; _nop_(); /* 顯示子程序 功能:將占空比溫度轉化為單個字符,顯示占空比和測得到的溫度 */ void display() unsigned char cod

16、e number=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6; unsigned char disp_num6; unsigned int k,k1; k=high_time; k=k%1000; k1=k/100; if(k1=0) disp_num0=0; else disp_num0=0x60; k=k%100; disp_num1=numberk/10; disp_num2=numberk%10; k=temper; k=k%100; disp_num3=numberk/10; disp_num4=numberk%10+1; di

17、sp_num5=numbers/10; disp_1(disp_num); /* 主程序 */ main() unsigned char z; unsigned char a,b,flag_2=1,count1=0; unsigned char phil=2,0xce,0x6e,0x60,0x1c,2; TMOD=0x21; TH0=0x2f; TL0=0x40; SCON=0x50; PCON=0x00; TH1=0xfd; TL1=0xfd; PS=1; EA=1; EX1=0; ET0=1; ES=1; TR0=1; TR1=1; high_time=50; low_time=50; P

18、IDInit ( &spid ); / Initialize Structure spid.Proportion = 10; / Set PID Coefficients spid.Integral = 8; spid.Derivative =6; spid.SetPoint = 100; / Set PID Setpoint 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+

19、) for(b=0;a<102;b+) if(subs=0) set_temper-; flag=0; else if(stop=0) for(a=0;a<5;a+) 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; else temper=b; a=temper; flag_2=0; if(+count1>30) display(); count1=0; compare_tempe

20、r(); 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); / break; EA=1; /DS18b20 子程序#include <REG52.H>sbit DQ=P21; /定義端口typedef unsigned char byte;typedef unsigned int word; /延時void delay(word useconds) for(;useconds>0;useconds-); /復位byte o

21、w_reset(void) byte presence; DQ=0; /DQ低電平 delay(29); /480us DQ=1; /DQ高電平 delay(3); /等待 presence=DQ; /presence信號 delay(25); return(presence); /0允許,1禁止 /從1-wire 總線上讀取一個字節(jié)byte read_byte(viod) byte i; byte value=0; for (i=8;i>0;i-) value>>=1; DQ=0; DQ=1; delay(1); if(DQ)value|=0x80; delay(6); r

22、eturn(value); /向1-wire總線上寫一個字節(jié)void write_byte(char val) byte i; for (i=8;i>0;i-) /一次寫一個字節(jié) DQ=0; DQ=val&0x01; delay(5); DQ=1; val=val/2; delay(5); /讀取溫度char Read_Temperature(void) union byte c2; int x; temp; ow_reset(); write_byte(0xcc); write_byte(0xBE); temp.c1=read_byte(); temp.c0=read_byte

23、(); ow_reset(); write_byte(0xCC); write_byte(0x44); return temp.x/2; 參考資料:你把這兩個程序組合就可以了 PID算法     PID算法是本程序中的核心部分。我們采用PID模糊控制技術,通過Pvar、Ivar、Dvar(比例、積分、微分)三方面的結合調(diào)整形成一個模糊控制來解決慣性溫度誤差問題。其原理如下:     本系統(tǒng)的溫度控制器的電熱元件之一是發(fā)熱絲。發(fā)熱絲通過電流加熱時,內(nèi)部溫度都很高。當容器內(nèi)溫度升高至設定溫度時,溫度控制器會發(fā)

24、出信號停止加熱。但這時發(fā)熱絲的溫度會高于設定溫度,發(fā)熱絲還將會對被加熱的器件進行加熱,即使溫度控制器發(fā)出信號停止加熱,被加熱器件的溫度還往往繼續(xù)上升幾度,然后才開始下降。當下降到設定溫度的下限時,溫度控制器又開始發(fā)出加熱的信號,開始加熱,但發(fā)熱絲要把溫度傳遞到被加熱器件需要一定的時候,這就要視發(fā)熱絲與被加熱器件之間的介質(zhì)情況而定。通常開始重新加熱時,溫度繼續(xù)下降幾度。所以,傳統(tǒng)的定點開關控制溫度會有正負誤差幾度的現(xiàn)象,但這不是溫度控制器本身的問題,而是整個熱系統(tǒng)的結構性問題,使溫度控制器控溫產(chǎn)生一種慣性溫度誤差。     增量式PID算法的輸出量為 &#

25、160;              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為采樣周期。     計算機每隔固定時間 T將現(xiàn)場溫度與用戶設定目標溫度的差值帶入增量式PID算法公式,由公式輸出

26、量決定PWM方波的占空比,后續(xù)加熱電路根據(jù)此PWM方波的占空比決定加熱功率?,F(xiàn)場溫度與目標溫度的偏差大則占空比大,加熱電路的加熱功率大,使溫度的實測值與設定值的偏差迅速減少;反之,二者的偏差小則占空比減小,加熱電路加熱功率減少,直至目標值與實測值相等,達到自動控制的目的。     PID參數(shù)的選擇是實驗成敗的關鍵,它決定了溫度控制的準確度。數(shù)字PID調(diào)節(jié)器參數(shù)的整定可以仿照模擬PID調(diào)節(jié)器參數(shù)整定的各種方法,根據(jù)工藝對控制性能的要求,決定調(diào)節(jié)器的參數(shù)。各個參數(shù)對系統(tǒng)性能的影響如下:     比例系數(shù)P對系統(tǒng)性能的影

27、響:比例系數(shù)加大,使系統(tǒng)的動作靈敏,速度加快,穩(wěn)態(tài)誤差減小;P偏大,振蕩次數(shù)加多,調(diào)節(jié)時間加長;P太大時,系統(tǒng)會趨于不穩(wěn)定;P太小,又會使系統(tǒng)的動作緩慢。P可以選負數(shù),這主要是由執(zhí)行機構、傳感器以及控制對象的特性決定的。如果P的符號選擇不當對象測量值就會離控制目標的設定值越來越遠,如果出現(xiàn)這樣的情況P的符號就一定要取反。     積分控制I對系統(tǒng)性能的影響:積分作用使系統(tǒng)的穩(wěn)定性下降,I小(積分作用強)會使系統(tǒng)不穩(wěn)定,但能消除穩(wěn)態(tài)誤差,提高系統(tǒng)的控制精度。 微分控制D對系統(tǒng)性能的影響:微分作用可以改善動態(tài)特性,D偏大時,超調(diào)量較大,調(diào)節(jié)時間較短;D偏小時

28、,超調(diào)量也較大,調(diào)節(jié)時間也較長;只有D合適,才能使超調(diào)量較小,減短調(diào)節(jié)時間。   溫底控制PID的算法設計及實現(xiàn) -PID 簡介    PID(Proportional Integral Derivative)控制是控制工程中技術成熟、應用廣泛的一種控制策略,經(jīng)過長期的工程實踐,已形成了一套完整的控制方法和典型的結構。它不僅適用于數(shù)學模型已知的控制系統(tǒng)中,而且對于大多數(shù)數(shù)學模型難以確定的工業(yè)過程也可應用,在眾多工業(yè)過程控制中取得了滿意的應用效果。    PID 工作基理:由于來自外界的各種擾動不斷產(chǎn)生,要

29、想達到現(xiàn)場控制對象值保持恒定的目的,控制作用就必須不斷的進行。若擾動出現(xiàn)使得現(xiàn)場控制對象值(以下簡稱被控參數(shù))發(fā)生變化,現(xiàn)場檢測元件就會將這種變化采集后經(jīng)變送器送至PID 控制器的輸入端,并與其給定值(以下簡稱SP 值)進行比較得到偏差值(以下簡稱e 值),調(diào)節(jié)器按此偏差并以我們預先設定的整定參數(shù)控制規(guī)律發(fā)出控制信號,去改變調(diào)節(jié)器的開度,使調(diào)節(jié)器的開度增加或減少,從而使現(xiàn)場控制對象值發(fā)生改變,并趨向于給定值(SP 值),以達到控制目的 ,如圖 1 所示,其實PID 的實質(zhì)就是對偏差(e 值)進行比例、積分、微分運算,根據(jù)運算結果控制執(zhí)行部件的過程。 圖1 模擬PID 控制系統(tǒng)原理圖&

30、#160;   PID 控制器的控制規(guī)律可以描述為:  (1)    比例(P)控制能迅速反應誤差,從而減小穩(wěn)態(tài)誤差。但是,比例控制不能消除穩(wěn)態(tài)誤差。比例放大系數(shù)的加大,會引起系統(tǒng)的不穩(wěn)定。積分(I)控制的作用是:只要系統(tǒng)有誤差存在,積分控制器就不斷地積累,輸出控制量,以消除誤差。因而,只要有足夠的時間,積分控制將能完全消除誤差,使系統(tǒng)誤差為零,從而消除穩(wěn)態(tài)誤差。積分作用太強會使系統(tǒng)超調(diào)加大,甚至使系統(tǒng)出現(xiàn)振蕩。微分(D)控制可以減小超調(diào)量,克服振蕩,使系統(tǒng)的穩(wěn)定性提高,同時加快系統(tǒng)的動態(tài)響應速度,減小調(diào)整時間,從而改善系統(tǒng)

31、的動態(tài)性能。根據(jù)不同的被控對象的控制特性,又可以分為P、PI、PD、PID 等不同的控制模型。數(shù)字PID 的實現(xiàn)    在連續(xù)-時間控制系統(tǒng)(模擬PID 控制系統(tǒng))中,PID 控制器應用得非常廣泛。其設計技術成熟,長期以來形成了典型的結構,參數(shù)整定方便,結構更改靈活,能滿足一般的控制要求。隨著計算機的快速發(fā)展,人們將計算機引入到PID 控制領域,也就出現(xiàn)了數(shù)字式PID 控制。    由于計算機基于采樣控制理論,計算方法也不能沿襲傳統(tǒng)的模擬PID 控制算法(如公式1 所示),所以必須將控制模型離散化,離散化的方法:以T 為采樣周期,k

32、為采樣序號,用求和的形式代替積分,用增量的形式(求差)代替微分,這樣可以將連續(xù)的PID 計算公式離散: (2)式1 就可以離散為: (3)或者: (4)    這樣就可以讓計算機或者單片機通過采樣的方式實現(xiàn)PID 控制,具體的PID 控制又分為位置式PID 控制和增量式PID 控制,公式4 給出了控制量的全部大小,所以稱之為全量式或者位置式控制;如果計算機只對相鄰的兩次作計算,只考慮在前一次基礎上,計算機輸出量的大小變化,而不是全部輸出信息的計算,這種控制叫做增量式PID 控制算法,其實質(zhì)就是求的大小,而   k

33、=k -k-1 ;所以將式4 做自減變換有: (5)其中 溫度控制PID 算法設計    本設計利用了上面所介紹的位置式PID 算法,將溫度傳感器采樣輸入作為當前輸入,然后與設定值進行相減得偏差ek,然后再對之進行PID 運算產(chǎn)生輸出結果fOut,然后讓fOut 控制定時器的時間進而控制加熱器。為了方便PID 運算,首先建立一個PID 的結構體數(shù)據(jù)類型,該數(shù)據(jù)類型用于保存PID 運算所需要的P、I、D 系數(shù),以及設定值,歷史誤差的累加和等信息:typedef struct PIDfloat SetPoint; / 設定目標 Desired Va

34、luefloat Proportion; / 比例系數(shù) Proportional Constfloat Integral; / 積分系數(shù) Integral Constfloat Derivative; / 微分系數(shù) Derivative Constint LastError; / 上次偏差int SumError; / 歷史誤差累計值 PID;PID stPID; / 定義一個stPID 變量    下面是PID 運算的算法程序,通過PID 運算返回fOut,fOut 的值決定是否加熱,加熱時間是多少。PID 運算的C 實現(xiàn)代碼:float PIDCalc( PI

35、D *pp, int NextPoint )int dError,Error;Error = pp->SetPoint*10 - NextPoint; / 偏差,設定值減去當前采樣值pp->SumError += Error; / 積分,歷史偏差累加dError = Error-pp->LastError; / 當前微分,偏差相減pp->PrevError = pp->LastError; / 保存pp->LastError = Error;+ pp->Integral * pp->SumError / 積分項- pp->Derivativ

36、e * dError / 微分項);    在實際運算時,由于水具有很大的熱慣性,而且PID 運算中的I(積分項)具有非常明顯的延遲效應所以不能保留,我們必須把積分項去掉,相反D(微分項)則有很強的預見性,能夠加快反應速度,抑制超調(diào)量,所以積分作用應該適當加強才能達到較佳的控制效果,系統(tǒng)最終選擇PD 控制方案,下面C 代碼所示為PD 控制的實現(xiàn)過程:float PIDCalc( PID *pp, int NextPoint )int dError,Error;Error = pp->SetPoint*10 - NextPoint; / 偏差,設定值減去當前采

37、樣值dError = Error-pp->LastError; / 當前微分,偏差相減pp->PrevError = pp->LastError; / 保存pp->LastError = Error;return (pp->Proportion * Error / 比例項- pp->Derivative * dError / 微分項);溫度控制實現(xiàn)    通過溫度的PID 運算,產(chǎn)生結果fOut,該參數(shù)決定是否加熱,加熱時間是多長。該程序如下:stPID.Proportion = 2; /設置PID 比例值stPID.Integ

38、ral = 0; /設置PID 積分值stPID.Derivative = 5; /設置PID 微分值fOut = PIDCalc ( &stPID,(int)(fT*10) ); /PID 計算if(fOut<=0)*P_IOA_Buffer &= 0xff7f; /溫度高于設定值,關閉加熱器else*P_IOA_Buffer |= 0x0080; /溫度低于設定值,打開加熱器    加熱時間由主函數(shù)計算,由TimerB 中斷控制。主程序中通過PIDCalc 函數(shù)得到fOut 參數(shù),如果該參數(shù)大于“0”,則開啟加熱器。IRQ2_TMB 中斷

39、一直處于允許狀態(tài),每進入一次IRQ2_TMB 中斷,fOut 參數(shù)減1,直到fOut = 0,停止加熱。如果PIDCalc 計算結果比較大說明離目標溫度相差較大,則加熱時間比較長,如果計算結果比較小,說明離目標溫度相差較小,加熱時間相對較短。  基于PID算法和89C52單片機的溫度控制系統(tǒng)作者:張艷艷 安徽電子信息職業(yè)技術學院  來源:現(xiàn)代電子技術  發(fā)布時間:2009-12-22 17:36:09  收 藏 評 論基于PID算法和89C52單片機的溫度控制系統(tǒng)0 引 言    溫控技術無論是

40、在工業(yè)生產(chǎn),還是日常生活中都起著非常重要的作用。在冶金、石油、化工、電力和現(xiàn)代農(nóng)業(yè)等行業(yè),溫度是極為重要而又普遍的熱工參數(shù)之一,在普通家庭里熱水器、電飯煲、電烤箱等依賴于溫控技術的家電設備也是必不可少??梢哉f溫度控制技術無處不在。    常規(guī)的溫度控制方法以設定溫度為臨界點,超出設定允許范圍即進行溫度調(diào)控:低于設定值就加熱,反之就停止或降溫。這種方法實現(xiàn)簡單、成本低,但控制效果不理想,控制溫度精度不高、容易引起震蕩,達到穩(wěn)定點的時間也長,因此,只能用在精度要求不高的場合。    而采用PID算法進行溫度控制,它具有控制精度高,能夠克服

41、容量滯后的特點,特別適用于負荷變化大、容量滯后較大、控制品質(zhì)要求又很高的控制系統(tǒng)。    單片機作為控制系統(tǒng)中必不可少的部分,在各個領域得到了廣泛的應用,用單片機進行實時系統(tǒng)數(shù)據(jù)處理和控制,保證系統(tǒng)工作在最佳狀態(tài),提高系統(tǒng)的控制精度,有利于提高系統(tǒng)的工作效率。本系統(tǒng)采用單片機編程實現(xiàn)PID算法進行溫度控制。 1 PID控制的原理和特點    在工程實際中,應用最為廣泛的調(diào)節(jié)器控制規(guī)律為比例、積分、微分控制,簡稱PID控制,又稱PID調(diào)節(jié)。PID控制器以其結構簡單、穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術之一。當被控對象的結

42、構和參數(shù)不能完全掌握,或得不到精確的數(shù)學模型,控制理論的其他技術也難以采用,系統(tǒng)控制器的結構和參數(shù)必須依靠經(jīng)驗和現(xiàn)場調(diào)試來確定時,應用PID控制技術最為方便。    PID控制器的參數(shù)整定是控制系統(tǒng)設計的核心內(nèi)容。它是根據(jù)被控過程的特性確定PID控制器的比例系數(shù)、積分時問和微分時間的大小。PID控制器參數(shù)整定的方法概括起來有兩大類:一是理論計算整定法。它主要是依據(jù)系統(tǒng)的數(shù)學模型,經(jīng)過理論計算確定控制器參數(shù)。這種方法所得到的計算數(shù)據(jù)未必可以直接用,還必須通過工程實際進行調(diào)整和修改。二是工程整定方法,它主要依賴工程經(jīng)驗,直接在控制系統(tǒng)的試驗中進行,且方法簡單、易于掌握

43、,在工程實際中被廣泛采用。    PID一般算式及模擬控制規(guī)律如式(1)所示:        式中:u(t)為控制器的輸出;e(t)為偏差,即設定值與反饋值之差;KC為控制器的放大系數(shù),即比例增益;TI為控制器的積分常數(shù);TD為控制器的微分時間常數(shù)。PID算法的原理即調(diào)節(jié)KC,TI,TD三個參數(shù)使系統(tǒng)達到穩(wěn)定。    由于計算機控制是一種采樣控制,它只能根據(jù)采樣時刻的偏差值計算控制量。因此在計算機控制系統(tǒng)中,必須首先對式(1)進行離散化處理,用數(shù)字形式的差分方程代替連續(xù)系統(tǒng)的

44、微分方程,此時積分項和微分項可用求和及增量式表示:        將式(2)和式(3)代入式(1),則可得到離散的PID表達式:        式中:t=T為采樣周期,必須使T足夠小,才能保證系統(tǒng)有一定的精度(采樣定理);E(K)為第K次采樣時的偏差值;E(K-1)為第K-1次采樣時的偏差值;P(K)為第K次采樣是調(diào)節(jié)器的輸出。2 系統(tǒng)的硬件構成    本系統(tǒng)由傳感器AD采樣輸入、單片機控制、人機交互、控制信號輸出四部分組成,其中溫度傳感部分由測

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

46、鍵盤部分的雙向通信。    (3)PC機通信:此部分完成與微機控制接口RS 232的連接及通信的控制。    (4)數(shù)值轉換子程序:由于主程序中用到了很多的數(shù)值轉換及數(shù)值的運算(如十進制轉換成十六進制、雙字節(jié)與單字節(jié)的除法運算等),為了程序調(diào)用的方便,特將其編寫成子程序的形式。    (5)PID算法。4 實驗測試    系統(tǒng)的性能與穩(wěn)定度需要通過具體實驗測試完成。現(xiàn)用1 kW的電爐將電熱杯中的1 L清水進行加熱。    觀測設定值和實測值之間的

47、誤差(當水溫達到穩(wěn)定時的值),計算絕對誤差和相對誤差,見表1。    設定溫度為50,每隔30 s記錄實測溫度,如表2所示。    從表2中的數(shù)據(jù)可知,系統(tǒng)運行5 min時基本達到穩(wěn)定。5 結 語    由實驗結果可以看出,系統(tǒng)的誤差基本穩(wěn)定在±03,可見系統(tǒng)的精度很好。此外,系統(tǒng)運行5 min時溫度基本達到穩(wěn)定,穩(wěn)定所需時間較短??梢钥闯觯赑ID算法的單片機溫度控制系統(tǒng)具有較高的精確度和穩(wěn)定性,在溫度調(diào)節(jié)階段平衡溫度時間較短。因此本系統(tǒng)可以應用于各種對精度要求較高的溫度控制場合。溫度控制中

48、,用PID算法得到的是一個數(shù)值,這個數(shù)值如何轉換為占空比? 回復數(shù):5,點擊數(shù):1528 【樓主位】 xuxianhai 積分:2派別:等級:-來自:我在用MEGA16控制電加熱調(diào)節(jié)水溫時,采用PID算法,輸出采用占空比通斷控制。為求階躍響應,我用15%占空比達到穩(wěn)定后,將占空比調(diào)至30%,開始測量溫度。得到階躍響應曲線后,為求加熱器的靜態(tài)增益K,采用K=Y/X公式。我知道Y用溫度值的單位,但X的單位該如何取呢?是用15,還是0.15? 另外,我用PID算法得到的是一個數(shù)值,這個數(shù)值如何轉換為占空比?是要先設定一個較大的值嗎?如果是的話,這個數(shù)值是否有一個經(jīng)驗值,大概取多少? 懇請各位高手幫忙

49、看一下,謝謝! 2006-02-17,10:51:03 資料 郵件 回復 引用回復       編輯 刪除 【1樓】 sanol 積分:8派別:等級:-來自:哥們,我也做這個,交流下? qq 940353508 2009-04-23,09:42:23 資料 郵件 回復 引用回復       編輯 刪除 【2樓】 huangstone 積分:47派別:等級:-來自:關于PID有點心得,供LZ參考:     1、PID運算出來是一個數(shù)據(jù)沒有量綱,在這

50、里這個數(shù)據(jù)和占空比沒有什么直接的關系,這個數(shù)據(jù)的大小表示的PID調(diào)節(jié)的強度,數(shù)據(jù)大調(diào)節(jié)度就大。     2、占空比的輸出一般通過定時器,我們假設當定時器的值為255時,占空比為100%。第1點計算的數(shù)據(jù)是和你PID的三個參數(shù)密切相關的,在相同的被控量測量值下,不同的PID參數(shù)會得出不同的值,這其實就是PID參數(shù)要調(diào)節(jié)的原因。因此要對PID參數(shù)加以調(diào)整,將計算出的數(shù)據(jù)可以直接賦給定時器控制占空比,但是要對最大和最小值加以限定。     3、想象一下,如果你的PID參數(shù)不合適,計算出的數(shù)據(jù)要么大于255,要么小于0,這

51、就變成了開關控制了。          其實最關鍵的就是我寫的第一點,只要理解了PID計算出的數(shù)據(jù)是表示的調(diào)節(jié)強度的大小,和占空比和溫度都沒有直接的對應關系的。那PID就沒有什么困難的。 2009-04-23,11:52:49 資料 郵件 回復 引用回復       編輯 刪除 【3樓】 deepin 積分:402派別:等級:-來自:【2樓】 huangstone  學習了! 2009-04-24,14:48:14 資料 郵件 回復 引用回復 &

52、#160;     編輯 刪除 【4樓】 lengqing1309 積分:209派別:等級:-來自:泉州這個樓的時間跨度太大了吧? 2009-04-24,16:33:29 資料 郵件 回復 引用回復       編輯 刪除 【5樓】 aglen 積分:58派別:等級:-來自:學習了 2009-10-11,11:05:24 資料 郵件 回復 引用回復       單片機高精度溫度控制實例【摘要】 本文介紹了以AT89S51單片機為核心的溫度控制器的設計,在該設計中采用高精度的溫度傳感器AD590對電熱鍋爐的溫度進行實時精確測量,用超低溫漂移高精度運算放大器OP07將溫度-電壓信號進行放大,再送入12位的AD574A進行AD轉換,從而實現(xiàn)自動檢

溫馨提示

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

評論

0/150

提交評論