溫控系統畢業論文_第1頁
溫控系統畢業論文_第2頁
溫控系統畢業論文_第3頁
溫控系統畢業論文_第4頁
溫控系統畢業論文_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、目錄1 概緒11.1 溫度控制系統設計的背景、發展歷史及意義11.2 溫度控制系統的目的11.3 溫度控制系統完成的功能12 單片機人機接口系統的軟件設計12.1四位數碼管動態顯示和任意浮點數顯示22.2輸入參數合成、計時器程序以及串口通訊程序等73 DS18B20溫度傳感器簡介83.1 DS18B20的工作原理83.2 DS18B20的驅動程序104 溫度控制模塊設計114.1 光電隔離控制電路的設計114.2 風扇PWM驅動程序114.3 制冷片的控制以及程序設計135 溫度測量試驗與分析175.1 溫度測量實驗175.2 數據處理與誤差分析(最大的引用誤差)176 溫度控制試驗與分析18

2、6.1升溫186.2 降溫186.3 恒溫187 總結19考文獻參201 概緒1.1 溫度控制系統設計的背景、發展歷史及意義 溫度是生產過程和科學實驗中普遍而且重要的物理參數,隨著社會的發展,科技的進步,以及測溫儀器在各個領域的應用,智能化已是現代溫度控制系統發展的主流方向。特別是近年來,溫度控制系統已應用到人們生活的各個方面,但溫度控制一直是一個未開發的領域,卻又是與人們息息相關的一個實際問題。針對這種實際情況,設計一個溫度控制系統,具有廣泛的應用前景與實際意義。溫度是一個重要的物理量,它反映了物體冷熱的程度,與自然界中的各種物理和化學過程相聯系。在工、農業生產和日常生活中,各個環節都與溫度

3、緊密相聯,溫度的準確監測及控制占據著極其重要地位。比如,發電廠鍋爐的溫度必須控制在一定的范圍之內;許多化學反應的工藝過程必須在適當的溫度下才能正常進行等。沒有合適的溫度環境,許多電子設備就不能正常工作,糧倉的儲糧就會變質霉爛,酒類的品質就沒有保障。可見,溫度的測量和控制是非常重要的。隨著電子技術和微型計算機的迅速發展,單片機在電子產品中的應用已經越來越廣泛。利用單片機對溫度進行控制的技術也隨之而生,并日益發展和完善,且越來越顯示出它的優越性。1.2 溫度控制系統的目的本設計的內容是溫度測試控制系統,控制對象是溫度。溫度控制在日常生活及工業領域應用相當廣泛,比如溫室、水池、發酵缸、電源等場所的溫

4、度控制。而以往溫度控制是由人工完成的而且不夠重視,其實在很多場所溫度都需要監控以防止發生意外。針對此問題,本系統設計的目的是實現一種可連續高精度調溫的溫度控制系統,它應用廣泛,功能強大,小巧美觀,便于攜帶,是一款既實用又廉價的控制系統。1.3 溫度控制系統完成的功能本設計是對溫度進行實時監測與控制,設計的溫度控制系統實現了基本的溫度控制功能:當溫度低于設定下限溫度時,系統自動啟動加熱繼電器加溫,使溫度上升,同時綠燈亮。當溫度上升到下限溫度以上時,停止加溫;當溫度高于設定上限溫度時,系統自動啟動風扇降溫,使溫度下降,同時紅燈亮。當溫度下降到上限溫度以下時,停止降溫。溫度在上下限溫度之間時,執行機

5、構不執行。三個數碼管即時顯示溫度,精確到小數點一位。2 單片機人機接口系統的軟件設計軟件設計主要包括鍵盤掃描程序、四位數碼管動態顯示程序、任意浮點數顯示程序、輸入參數合成、計時器程序以及串口通訊程序等。溫度測控系統的設計溫度控制系統的設計智能測控系統的設計風扇控制電路設計溫度傳感器程序設計數據處理程序設計扇控制器程序設計數碼管顯示程序設計鍵盤操作程序設計制冷片控制電路設計制冷片控制程序設計2.1四位數碼管動態顯示和任意浮點數顯示#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=

6、P22; /define interfacesbit dula=P26;sbit wela=P27;sbit li=P31;sbit wai=P30;sbit hot=P32; sbit up=P34;sbit down=P35;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef; u

7、int temp; / variable of temperature uint aa=0,bb=0,cc,dd,ee;void delay(uint count) /delay uint i; while(count) i=200; while(i>0) i-; count-; void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;bit tmpreadbit(void) /read a bit

8、uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);uchar tmpread(void) /read a byte date uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /讀出的數據最低位在最前面,這樣剛好一個字節在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a

9、 byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /write 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc);

10、/ address all drivers on bus tmpwritebyte(0x44); / initiates a single temperature conversionuint tmp() /get the temperature float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /two byte compose a int variable temp=temp|a

11、; tt=temp*0.0625; temp=tt*10+0.5; return temp;void readrom() /read the serial uchar sn1,sn2; dsreset(); delay(1); tmpwritebyte(0x33); sn1=tmpread(); sn2=tmpread();void delay10ms() /delay uchar a,b; for(a=10;a>0;a-) for(b=60;b>0;b-); void display(uint temp)/顯示程序 uchar A1,A2,A2t,A3,ser; ser=temp

12、/10; SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=tableA1;/顯示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0=table1A2;/顯示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=tableA3;/顯示個位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1);

13、void xianshi(uint temp1) uint A5,A6; A5=temp1/10; A6=temp1%10; P0=tableA5; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(1); P0=tableA6; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(1);void keyscan()if(up=0)delay(10);if(up=0)aa+;if(aa=50)aa=0;if(down=0)delay(10);if(down=0)if(aa=0)aa=50;aa-;2.2輸入參

14、數合成、計時器程序以及串口通訊程序等void main() uchar a; while(1) keyscan(); tmpchange(); bb=tmp(); bb=bb/10; cc=aa-1; dd=aa+1; if(bb>cc&&bb<dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0x00;li=1;wai=1;hot=1; else if(bb>dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=

15、1; else if(bb<cc) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=0; 3 DS18B20溫度傳感器簡介3.1 DS18B20的工作原理 DS18B20工作時序根據DS18B20的通訊協議,主機控制DS18B20完成溫度轉換必須經過三個步驟:1. 每一次讀寫之前都必須要對DS18B20進行復位;2. 復位成功后發送一條ROM指令;3. 最后發送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數據線下拉500微秒,然后釋放,DS18B20收到信號后等待1560微

16、秒左右后發出60240微秒的存在低脈沖,主CPU收到此信號表示復位成功。其工作時序包括初始化時序、寫時序和讀時序,具體工作方法如圖2.1,2.2,2.3所示。(1) 初始化時序 圖31 初始化時序總線上的所有傳輸過程都是以初始化開始的,主機響應應答脈沖。應答脈沖使主機知道,總線上有從機設備,且準備就緒。主機輸出低電平,保持低電平時間至少480us,以產生復位脈沖。接著主機釋放總線,4.7K上拉電阻將總線拉高,延時1560us,并進入接受模式,以產生低電平應答脈沖,若為低電平,再延時480us12。(2) 寫時序圖32 寫時序 寫時序包括寫0時序和寫1時序。所有寫時序至少需要60us,且在2次獨

17、立的寫時序之間至少需要1us的恢復時間,都是以總線拉低開始。寫1時序,主機輸出低電平,延時2us,然后釋放總線,延時60us。寫0時序,主機輸出低電平,延時60us,然后釋放總線,延時2us8。(3) 讀時序 圖33 讀時序總線器件僅在主機發出讀時序是,才向主機傳輸數據,所以,在主機發出讀數據命令后,必須馬上產生讀時序,以便從機能夠傳輸數據。所有讀時序至少需要60us,且在2次獨立的讀時序之間至少需要1us的恢復時間。每個讀時序都由主機發起,至少拉低總線1us。主機在讀時序期間必須釋放總線,并且在時序起始后的15us之內采樣總線狀態。主機輸出低電平延時2us,然后主機轉入輸入模式延時12us,

18、然后讀取總線當前電平,然后延時50us4 ROM操作命令當主機收到DSl8B20 的響應信號后,便可以發出ROM 操作命令之一,這些命令如表2.2:ROM操作命令。3.2 DS18B20的驅動程序unsigned char ReadOneChar(void) unsigned char i=0;unsigned char dat; /儲存讀出的一個字節數據for (i=0;i<8;i+) DQ =1; / 先將數據線拉高 _nop_(); /等待一個機器周期 DQ = 0; /單片機從DS18B20讀書據時,將數據線從高拉低即啟動讀時序 _nop_(); /等待一個機器周期 DQ = 1

19、; /將數據線"人為"拉高,為單片機檢測DS18B20的輸出電平作準備 for(time=0;time<2;time+) ; /延時約6us,使主機在15us內采樣 dat>>=1; if(DQ=1) dat|=0x80; /如果讀到的數據是1,則將1存入dat elsedat|=0x00;/如果讀到的數據是0,則將0存入dat for(time=0;time<8;time+); /延時3us,兩個讀時序之間必須有大于1us的恢復期 return(dat); /返回讀出的十六進制數據WriteOneChar(unsigned char dat) un

20、signed char i=0;for (i=0; i<8; i+) DQ =1; / 先將數據線拉高 _nop_(); /等待一個機器周期 DQ=0; /將數據線從高拉低時即啟動寫時序 DQ=dat&0x01; /利用與運算取出要寫的某位二進制數據, /并將其送到數據線上等待DS18B20采樣 for(time=0;time<10;time+) ;/延時約30us,DS18B20在拉低后的約1560us期間從數據線上采樣 DQ=1; /釋放數據線 for(time=0;time<1;time+) ;/延時3us,兩個寫時序間至少需要1us的恢復期 dat>&g

21、t;=1; /將dat中的各二進制位數據右移1位 for(time=0;time<4;time+) ; /稍作延時,給硬件一點反應時間* 總結單總線即只有一根數據線,系統中的數據交換,控制都由這根線完成。單總線通常要求外接一個約為 4.7K10K 的上拉電阻,這樣,當總線閑置時其狀態為高電平。4 溫度控制模塊設計4.1 光電隔離控制電路的設計4.2 風扇PWM驅動程序void keyscan()if(up=0)delay(10);if(up=0)aa+;if(aa=50)aa=0;if(down=0)delay(10);if(down=0)if(aa=0)aa=50;aa-;void m

22、ain() uchar a; while(1) keyscan(); tmpchange(); bb=tmp(); bb=bb/10; cc=aa-1; dd=aa+1; if(bb>cc&&bb<dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0x00;li=1;wai=1;hot=1; else if(bb>dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=1; else if(bb<cc) for

23、(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=0; 4.3 制冷片的控制以及程序設計#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=P22; /define interfacesbit dula=P26;sbit wela=P27;sbit li=P31;sbit wai=P30;sbit hot=P32; sbit up=P34;sbit down=P35;unsigned char co

24、de table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef; uint temp; / variable of temperature uint aa=0,bb=0,cc,dd,ee;void delay(uint count) /delay uint i; while(count) i=200; while(i>0)

25、 i-; count-; void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;bit tmpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);uchar tmpread(void) /read a byte date

26、 uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /讀出的數據最低位在最前面,這樣剛好一個字節在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DS=0; i+;

27、i+; DS=1; i=8;while(i>0)i-; else DS=0; /write 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus tmpwritebyte(0x44); / initiates a single temperature conversionuint tmp() /get the temperature float t

28、t; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /two byte compose a int variable temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp;void readrom() /read the serial uchar sn1,sn2; dsreset(); delay(1); tmpwritebyte(0x33

29、); sn1=tmpread(); sn2=tmpread();void delay10ms() /delay uchar a,b; for(a=10;a>0;a-) for(b=60;b>0;b-); void display(uint temp)/顯示程序 uchar A1,A2,A2t,A3,ser; ser=temp/10; SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=tableA1;/顯示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; w

30、ela=0; delay(1); dula=0; P0=table1A2;/顯示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=tableA3;/顯示個位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1);void xianshi(uint temp1) uint A5,A6; A5=temp1/10; A6=temp1%10; P0=tableA5; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(1); P0=tableA6; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(1);5 溫度測量試驗與分析5.1 溫度測量實驗DS18B20測量值25.526.327.22829.430.331.132.634.2玻璃溫度計值25.326.027.127.829.330.230.932.434.15.2 數據處理與誤差分析(最大的引用誤差)被測量的真值和試驗所得的給出值總存在一定的差異,這就是測量誤差。而誤差的存在使我們對客觀事物的認識受到不同程度的歪曲,因此就必須進行誤差分析。另一方面,一般原始的測試技術都是參差不齊的,需運用數學方法

溫馨提示

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

評論

0/150

提交評論