




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于單片機(jī)的PID溫度控制系統(tǒng)一.概述溫度控制技術(shù)無(wú)論在工業(yè)生產(chǎn),還是日常生活中都起著非常重要的作用。常規(guī)的溫度控制方法以設(shè)定溫度為臨界點(diǎn),超出設(shè)定允許范圍就進(jìn)行溫度調(diào)控,低于設(shè)定值就加熱,反之就停止或降溫。這種方法實(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)行系統(tǒng)數(shù)據(jù)處理和控制,保證系統(tǒng)工作在最佳的狀態(tài),提高系統(tǒng)的控制精度,有利于提高系統(tǒng)的工作效率。本系統(tǒng)就是采用單片機(jī)編程實(shí)現(xiàn)PID算法進(jìn)行溫度控制。二.PID控制的原理和特點(diǎn)在工程實(shí)際中,應(yīng)用最為廣泛的調(diào)節(jié)器控制規(guī)律為比例、積分、微分控制,簡(jiǎn)稱PID控制,又稱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)試來(lái)確定時(shí),應(yīng)用PID控制技術(shù)最為方便。
PID控制器的參數(shù)整定是控制系統(tǒng)設(shè)計(jì)的核心內(nèi)容。它是根據(jù)被控過(guò)程的特性確定PID控制器的比例系數(shù)、積分時(shí)問(wèn)和微分時(shí)間的大小。PID控制器參數(shù)整定的方法概括起來(lái)有兩大類:一是理論計(jì)算整定法。它主要是依據(jù)系統(tǒng)的數(shù)學(xué)模型,經(jīng)過(guò)理論計(jì)算確定控制器參數(shù)。這種方法所得到的計(jì)算數(shù)據(jù)未必可以直接用,還必須通過(guò)工程實(shí)際進(jìn)行調(diào)整和修改。二是工程整定方法,它主要依賴工程經(jīng)驗(yàn),直接在控制系統(tǒng)的試驗(yàn)中進(jìn)行,且方法簡(jiǎn)單、易于掌握,在工程實(shí)際中被廣泛采用。
PID一般算式及模擬控制規(guī)律如式(1)所示:
式中: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í)積分項(xiàng)和微分項(xiàng)可用求和及增量式表示:
將式(2)和式(3)代入式(1),則可得到離散的PID表達(dá)式:
式中:△t=T為采樣周期,必須使T足夠小,才能保證系統(tǒng)有一定的精度(采樣定理);E(K)為第K次采樣時(shí)的偏差值;E(K-1)為第K-1次采樣時(shí)的偏差值;P(K)為第K次采樣是調(diào)節(jié)器的輸出。三硬件構(gòu)成本系統(tǒng)由傳感器采樣輸入、單片機(jī)控制、人機(jī)交互、控制信號(hào)輸出四部分組成,其中溫度傳感部分由測(cè)試采樣電路實(shí)現(xiàn),人機(jī)交互由矩陣鍵盤和LCD液晶屏構(gòu)成,PID控制算法由89C51單片機(jī)實(shí)現(xiàn),控制信號(hào)輸出部分則由功率放大和開(kāi)關(guān)控制電路組成。系統(tǒng)框圖如圖1所示。四.主程序流程軟件程序是本控制系統(tǒng)的核心,它包括從溫度采樣到信號(hào)輸出的整個(gè)流程控制,其示意圖如下圖所示:五程序部分實(shí)現(xiàn)這個(gè)系統(tǒng)的控制的程序部分主要由復(fù)位子程序,LCD顯示子程序,溫度輸入子程序,PID控制子程序等組成。具體如下:#include<reg52.h>#include<intrins.h>#include<math.h>#include<string.h>structPID{unsignedintSetPoint;//設(shè)定目標(biāo)DesiredValueunsignedintProportion;//比例常數(shù)ProportionalConstunsignedintIntegral;//積分常數(shù)IntegralConstunsignedintDerivative;//微分常數(shù)DerivativeConstunsignedintLastError;//Error[-1]unsignedintPrevError;//Error[-2]unsignedintSumError;//SumsofErrors};structPIDspid;//PIDControlStructureunsignedintrout;//PIDponse(Output)unsignedintrin;//PIDFeedback(Input)sbitdata1=P1^0;sbitclk=P1^1;sbitplus=P2^0;sbitsubs=P2^1;sbitstop=P2^2;sbitoutput=P3^0;sbitDQ=P2^2;unsignedcharflag,flag_1=0;unsignedcharhigh_time,low_time,count=0;//占空比調(diào)節(jié)參數(shù)unsignedcharset_temper=35;unsignedchartemper;unsignedchari;unsignedcharj=0;unsignedints;/***********************************************************延時(shí)子程序,延時(shí)時(shí)間以12M晶振為準(zhǔn),延時(shí)時(shí)間為30us×time***********************************************************/voiddelay(unsignedchartime){unsignedcharm,n;for(n=0;n<time;n++)for(m=0;m<2;m++){}}/***********************************************************寫一位數(shù)據(jù)子程序***********************************************************/voidwrite_bit(unsignedcharbitval){EA=0;DQ=0;/*拉低DQ以開(kāi)始一個(gè)寫時(shí)序*/if(bitval==1){_nop_();DQ=1;/*如要寫1,則將總線置高*/}delay(5);/*延時(shí)90us供DA18B20采樣*/DQ=1;/*釋放DQ總線*/_nop_();_nop_();EA=1;}/***********************************************************寫一字節(jié)數(shù)據(jù)子程序***********************************************************/voidwrite_byte(unsignedcharval){unsignedchari;unsignedchartemp;EA=0;/*關(guān)中斷*/TR0=0;for(i=0;i<8;i++)/*寫一字節(jié)數(shù)據(jù),一次寫一位*/{temp=val>>i;/*移位操作,將本次要寫的位移到最低位*/temp=temp&1;write_bit(temp);/*向總線寫該位*/}delay(7);/*延時(shí)120us后*///TR0=1;EA=1;/*開(kāi)中斷*/}/***********************************************************讀一位數(shù)據(jù)子程序***********************************************************/unsignedcharread_bit(){unsignedchari,value_bit;EA=0;DQ=0;/*拉低DQ,開(kāi)始讀時(shí)序*/_nop_();_nop_();DQ=1;/*釋放總線*/for(i=0;i<2;i++){}value_bit=DQ;EA=1;return(value_bit);}/***********************************************************讀一字節(jié)數(shù)據(jù)子程序***********************************************************/unsignedcharread_byte(){unsignedchari,value=0;EA=0;for(i=0;i<8;i++){if(read_bit())/*讀一字節(jié)數(shù)據(jù),一個(gè)時(shí)序中讀一次,并作移位處理*/value|=0x01<<i;delay(4);/*延時(shí)80us以完成此次都時(shí)序,之后再讀下一數(shù)據(jù)*/}EA=1;return(value);}/***********************************************************復(fù)位子程序***********************************************************/unsignedcharreset(){unsignedcharpresence;EA=0;DQ=0;/*拉低DQ總線開(kāi)始復(fù)位*/delay(30);/*保持低電平480us*/DQ=1;/*釋放總線*/delay(3);presence=DQ;/*獲取應(yīng)答信號(hào)*/delay(28);/*延時(shí)以完成整個(gè)時(shí)序*/EA=1;return(presence);/*返回應(yīng)答信號(hào),有芯片應(yīng)答返回0,無(wú)芯片則返回1*/}/***********************************************************獲取溫度子程序***********************************************************/voidget_temper(){unsignedchari,j;do{i=reset();/*復(fù)位*/}while(i!=0);/*1為無(wú)反饋信號(hào)*/i=0xcc;/*發(fā)送設(shè)備定位命令*/write_byte(i);i=0x44;/*發(fā)送開(kāi)始轉(zhuǎn)換命令*/write_byte(i);delay(180);/*延時(shí)*/do{i=reset();/*復(fù)位*/}while(i!=0);i=0xcc;/*設(shè)備定位*/write_byte(i);i=0xbe;/*讀出緩沖區(qū)內(nèi)容*/write_byte(i);j=read_byte();i=read_byte();i=(i<<4)&0x7f;s=(unsignedint)(j&0x0f);s=(s*100)/16;j=j>>4;temper=i|j;/*獲取的溫度放在temper中*/}/*====================================================================================================InitializePIDStructure=====================================================================================================*/voidPIDInit(structPID*pp){memset(pp,0,sizeof(structPID));}/*====================================================================================================PID計(jì)算部分=====================================================================================================*/unsignedintPIDCalc(structPID*pp,unsignedintNextPoint){unsignedintdError,Error;Error=pp->SetPoint-NextPoint;//偏差pp->SumError+=Error;//積分dError=pp->LastError-pp->PrevError;//當(dāng)前微分pp->PrevError=pp->LastError;pp->LastError=Error;return(pp->Proportion*Error//比例+pp->Integral*pp->SumError//積分項(xiàng)+pp->Derivative*dError);//微分項(xiàng)}/***********************************************************溫度比較處理子程序***********************************************************/compare_temper(){unsignedchari;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;//ReadInputrout=PIDCalc(&spid,rin);//PerformPIDInteration}if(high_time<=100)high_time=(unsignedchar)(rout/800);elsehigh_time=100;low_time=(100-high_time);}}elseif(set_temper<=temper){if(temper-set_temper>0){high_time=0;low_time=100;}else{for(i=0;i<10;i++){get_temper();rin=s;//ReadInputrout=PIDCalc(&spid,rin);//PerformPIDInteration}if(high_time<100)high_time=(unsignedchar)(rout/10000);elsehigh_time=0;low_time=(100-high_time);}}//else//{}}/*****************************************************T0中斷服務(wù)子程序,用于控制電平的翻轉(zhuǎn),40us*100=4ms周期******************************************************/voidserve_T0()interrupt1using1{if(++count<=(high_time))output=1;elseif(count<=100){output=0;}elsecount=0;TH0=0x2f;TL0=0xe0;}/*****************************************************串行口中斷服務(wù)程序,用于上位機(jī)通訊******************************************************/voidserve_sio()interrupt4using2{/*EA=0;RI=0;i=SBUF;if(i==2){while(RI==0){}RI=0;set_temper=SBUF;SBUF=0x02;while(TI==0){}TI=0;}elseif(i==3){TI=0;SBUF=temper;while(TI==0){}TI=0;}EA=1;*/}voiddisp_1(unsignedchardisp_num1[6]){unsignedcharn,a,m;for(n=0;n<6;n++){//k=disp_num1[n];for(a=0;a<8;a++){clk=0;m=(disp_num1[n]&1);disp_num1[n]=disp_num1[n]>>1;if(m==1)data1=1;elsedata1=0;_nop_();clk=1;_nop_();}}}/*****************************************************顯示子程序功能:將占空比溫度轉(zhuǎn)化為單個(gè)字符,顯示占空比和測(cè)得到的溫度******************************************************/voiddisplay(){unsignedcharcodenumber[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};unsignedchardisp_num[6];unsignedintk,k1;k=high_time;k=k%1000;k1=k/100;if(k1==0)disp_num[0]=0;elsedisp_num[0]=0x60;k=k%100;disp_num[1]=number[k/10];disp_num[2]=number[k%10];k=temper;k=k%100;disp_num[3]=number[k/10];disp_num[4]=number[k%10]+1;disp_num[5]=number[s/10];disp_1(disp_num);}/***********************************************************主程序***********************************************************/main(){unsignedcharz;unsignedchara,b,flag_2=1,count1=0;unsignedcharphil[]={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;PIDInit(&spid);//InitializeStructurespid.Proportion=10;//SetPIDCoefficientsspid.Integral=8;spid.Derivative=6;spid.SetPoint=100;//SetPIDSetpointwhile(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;}}elseif(subs==0){for(a=0;a<5;a++)for(b=0;a<102;b++){}if(subs==0){set_temper--;flag=0;}}elseif(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;elsetemper=b;a=temper;flag_2=0;if(++count1>30){display();count1=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);//break;}EA=1;}}//DS18b20子程序#include<REG52.H>//定義端口typedefunsignedcharbyte;typedefunsignedintword;//延時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)水平定向鉆機(jī)行業(yè)市場(chǎng)規(guī)模及投資前景預(yù)測(cè)分析報(bào)告
- 肘關(guān)節(jié)脫位護(hù)理查房
- 酒店水電系統(tǒng)成品保護(hù)措施
- 兒童藝術(shù)啟蒙鉆石畫工作坊
- 小學(xué)英語(yǔ)復(fù)習(xí)計(jì)劃與考試策略
- 二年級(jí)藝術(shù)特長(zhǎng)生培養(yǎng)計(jì)劃
- 腦卒中吞咽障礙患者進(jìn)食護(hù)理
- 初中語(yǔ)文試卷講評(píng)課教案范文
- 2025年青年公寓出租運(yùn)營(yíng)流程與技術(shù)應(yīng)用
- 物流項(xiàng)目成本核算與管理流程
- 2024年廣東省預(yù)防接種技能競(jìng)賽理論考試題庫(kù)(含答案)
- GB/T 4706.24-2024家用和類似用途電器的安全第24部分:洗衣機(jī)的特殊要求
- DLT 1529-2016 配電自動(dòng)化終端設(shè)備檢測(cè)規(guī)程
- 2018年四川省中職學(xué)校技能大賽建筑CAD賽項(xiàng) 樣題
- T-CACE 097-2023 廢漆包線熱解處理污染控制技術(shù)要求
- 2024年人工智能訓(xùn)練師(初級(jí))職業(yè)鑒定理論考試題庫(kù)及答案
- 山東省青島市嶗山區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題
- 某銀行培訓(xùn)管理手冊(cè)
- 氧氣吸入操作評(píng)分標(biāo)準(zhǔn)(中心供氧)
- php設(shè)備管理系統(tǒng)論文
- 2019年壓力性損傷預(yù)防治療臨床實(shí)踐指南
評(píng)論
0/150
提交評(píng)論