基于單片機(jī)的倉(cāng)庫(kù)溫度控制系統(tǒng)_第1頁
基于單片機(jī)的倉(cāng)庫(kù)溫度控制系統(tǒng)_第2頁
基于單片機(jī)的倉(cāng)庫(kù)溫度控制系統(tǒng)_第3頁
基于單片機(jī)的倉(cāng)庫(kù)溫度控制系統(tǒng)_第4頁
基于單片機(jī)的倉(cāng)庫(kù)溫度控制系統(tǒng)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

廣西科技大學(xué)課程設(shè)計(jì)說明書 單片機(jī)課程設(shè)計(jì) -GuangxiUniversityofScienceandTechnology單片機(jī)系統(tǒng)項(xiàng)目設(shè)計(jì)實(shí)訓(xùn)七報(bào)告課題名稱:基于單片機(jī)的倉(cāng)庫(kù)溫度控制系統(tǒng)院(系):計(jì)算機(jī)工程科學(xué)與通信工程學(xué)院專業(yè):物聯(lián)網(wǎng)工程學(xué)生姓名:李興鴻QQ:201942988完成日期:2016年9月7日摘

要隨著智能分析技術(shù)、網(wǎng)絡(luò)技術(shù)的迅速發(fā)展以及經(jīng)濟(jì)的不斷發(fā)展、各種產(chǎn)品的騰出不窮,但這些產(chǎn)品對(duì)環(huán)境的要求也是挺高的,如果溫度過高就會(huì)使產(chǎn)品變壞,我們需要一個(gè)解決辦法。然而使用溫度控制系統(tǒng)成為了一個(gè)重要的研究課題。

本設(shè)計(jì)是基于單片機(jī)的溫度控制系統(tǒng),主要是由一個(gè)DS18B20溫度傳感器采集溫度信號(hào),通過液晶LCD1602顯示,并且通過串口把溫度發(fā)送到上位機(jī),利用蜂鳴器報(bào)警,監(jiān)測(cè)倉(cāng)庫(kù)溫度變化,再利用上位機(jī)發(fā)送檔位來控制風(fēng)扇的轉(zhuǎn)速使倉(cāng)庫(kù)溫度保持在產(chǎn)品所需溫度范圍內(nèi)。本系統(tǒng)由DS18B20采集溫度、串口發(fā)送和接收數(shù)據(jù)、用ULN2803驅(qū)動(dòng)芯片驅(qū)動(dòng)風(fēng)扇、MCU采用STC89C52;完成溫度信號(hào)的采集顯示內(nèi)容的顯示、傳輸、報(bào)警等功能。本設(shè)計(jì)的溫度報(bào)警器由三個(gè)部分組成:溫度傳感器、LCD1602顯示器、蜂鳴器模塊。軟件上采用C語言編程,結(jié)構(gòu)簡(jiǎn)單運(yùn)行穩(wěn)定。

關(guān)鍵字:溫度檢測(cè),報(bào)警,串口,上位機(jī),風(fēng)扇。共24頁目錄TOC\o"1-2"\h\u1、任務(wù)設(shè)計(jì) 21.1設(shè)計(jì)任務(wù) 21.2設(shè)計(jì)要求 21.3創(chuàng)新部分 22、總體方案設(shè)計(jì) 22.1系統(tǒng)整體設(shè)計(jì)思想 23、系統(tǒng)硬件設(shè)計(jì)(各個(gè)功能模塊設(shè)計(jì)) 33.1STC89C52RC單片機(jī)最小系統(tǒng) 33.2蜂鳴器連接電路 43.3串口收發(fā)模塊 53.4DS18B20溫度傳感器模塊 53.5LCD1602液晶顯示屏模塊 73.6直流電機(jī)模塊 83.7系統(tǒng)整體電路圖 94、軟件設(shè)計(jì) 105、系統(tǒng)測(cè)試與調(diào)試結(jié)果分析 115.1測(cè)試儀器 115.2測(cè)試方法與結(jié)果分析 116、設(shè)計(jì)總結(jié) 137、參考文獻(xiàn) 138、附件:源程序 14 1、任務(wù)設(shè)計(jì)1.1設(shè)計(jì)任務(wù)設(shè)計(jì)出一個(gè)可以對(duì)倉(cāng)庫(kù)溫度監(jiān)控的系統(tǒng),并實(shí)現(xiàn)以應(yīng)用。1.2設(shè)計(jì)要求1、檢測(cè)倉(cāng)庫(kù)溫度,當(dāng)大于28度時(shí)驅(qū)動(dòng)電機(jī)低速轉(zhuǎn)動(dòng),當(dāng)大于30度時(shí)驅(qū)動(dòng)電機(jī)中速轉(zhuǎn)動(dòng),當(dāng)大于35度時(shí)驅(qū)動(dòng)電機(jī)高速轉(zhuǎn)動(dòng);2、檢測(cè)倉(cāng)庫(kù)溫度,將溫度數(shù)據(jù)上傳至上位機(jī),上位機(jī)收到溫度后做出以下反應(yīng):當(dāng)大于28度時(shí)發(fā)送命令01驅(qū)動(dòng)電機(jī)低速轉(zhuǎn)動(dòng),當(dāng)大于30度時(shí)發(fā)送命令02驅(qū)動(dòng)電機(jī)中速轉(zhuǎn)動(dòng),當(dāng)大于35度時(shí)發(fā)送命令03驅(qū)動(dòng)電機(jī)高速轉(zhuǎn)動(dòng)。(可加分)1.3創(chuàng)新部分(1)增加了蜂鳴器報(bào)警(2)可以通過串口把數(shù)據(jù)發(fā)送到上位機(jī)、并且上位機(jī)可以控制風(fēng)扇的轉(zhuǎn)速(3)把直流電機(jī)改為風(fēng)扇使得現(xiàn)象更加明顯2、總體方案設(shè)計(jì)2.1系統(tǒng)整體設(shè)計(jì)思想本系統(tǒng)不僅可以滿足倉(cāng)庫(kù)溫度變量實(shí)行全面、實(shí)時(shí)、長(zhǎng)期監(jiān)測(cè)的要求,而且還實(shí)現(xiàn)上位機(jī)控制風(fēng)扇的轉(zhuǎn)速來使倉(cāng)庫(kù)恢復(fù)所需溫度。系統(tǒng)以52單片機(jī)為核心,以DS18B20溫度傳感器、通過單片機(jī)與智能傳感器相連,采集并存儲(chǔ)智能傳感器的測(cè)量數(shù)據(jù),經(jīng)過分析處理將結(jié)果顯示于LCD液晶屏,通過串口模塊把溫度上傳到上位機(jī)顯示、再通過上位機(jī)發(fā)送檔位控制風(fēng)扇的轉(zhuǎn)速控制溫度,對(duì)倉(cāng)庫(kù)的溫度檢測(cè),為名貴產(chǎn)品的保存環(huán)境提供了一種有效的監(jiān)控系統(tǒng)。3、系統(tǒng)硬件設(shè)計(jì)(各個(gè)功能模塊設(shè)計(jì))3.1STC89C52RC單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng).對(duì)52系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:單片機(jī)微處理器芯片、晶振電路、復(fù)位電路。52單片機(jī)最小系統(tǒng)復(fù)位電路的極性電容C1的大小直接影響單片機(jī)的復(fù)位時(shí)間,一般采用10~30uF,52單片機(jī)最小系統(tǒng)容值越大需要的復(fù)位時(shí)間越短。復(fù)位電路的用途

單片機(jī)復(fù)位電路就好比電腦的重啟部分,當(dāng)電腦在使用中出現(xiàn)死機(jī),按下重啟按鈕電腦內(nèi)部的程序從頭開始執(zhí)行。當(dāng)單片機(jī)系統(tǒng)在運(yùn)行中,受到環(huán)境干擾出現(xiàn)程序跑飛的時(shí)候,按下復(fù)位按鈕內(nèi)部的程序自動(dòng)從頭開始執(zhí)行(感覺沒用到,所以沒做這一部分)。52單片機(jī)最小系統(tǒng)電路介紹

51單片機(jī)最小系統(tǒng)晶振Y1也可以采用12MHz或者11.0592MHz,在正常工作的情況下可以采用更高頻率的晶振,52單片機(jī)最小系統(tǒng)晶振的振蕩頻率直接影響單片機(jī)的處理速度,頻率越大處理速度越快。

51單片機(jī)最小系統(tǒng)起振電容C2、C3一般采用15~33pF,并且電容離晶振越近越好,晶振離單片機(jī)越近越好,P0口為開漏輸出,作為輸出口時(shí)需加上拉電阻,阻值一般為10k。

設(shè)置為定時(shí)器模式時(shí),加1計(jì)數(shù)器是對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)(1個(gè)機(jī)器周期等于12個(gè)振蕩周期,即計(jì)數(shù)頻率為晶振頻率的1/12)。計(jì)數(shù)值N乘以機(jī)器周期Tcy就是定時(shí)時(shí)間t。

設(shè)置為計(jì)數(shù)器模式時(shí),外部事件計(jì)數(shù)脈沖由T0或T1引腳輸入到計(jì)數(shù)器。在每個(gè)機(jī)器周期的S5P2期間采樣T0、T1引腳電平。當(dāng)某周期采樣到一高電平輸入,而下一周期又采樣到一低電平時(shí),則計(jì)數(shù)器加1,更新的計(jì)數(shù)值在下一個(gè)機(jī)器周期的S3P1期間裝入計(jì)數(shù)器。由于檢測(cè)一個(gè)從1到0的下降沿需要2個(gè)機(jī)器周期,因此要求被采樣的電平至少要維持一個(gè)機(jī)器周期。當(dāng)晶振頻率為12MHz時(shí),最高計(jì)數(shù)頻率不超過1/2MHz,即計(jì)數(shù)脈沖的周期要大于2ms。STC89C52RC單片機(jī)的最小系統(tǒng)如圖2所示。圖2單片機(jī)最小系統(tǒng)3.2蜂鳴器連接電路利用三極管作為蜂鳴器的開關(guān),三極管基極接單片機(jī)的P1^3引腳,如果基極高電平三極管反偏,如果基極低電平,三極管正偏。其接線圖如圖3所示。圖3蜂鳴器連接電路3.3串口收發(fā)模塊MAX232芯片是MAXIM公司生產(chǎn)的、包含兩路接收器和驅(qū)動(dòng)器的IC芯片,它的內(nèi)部有一個(gè)電源電壓變換器,可以把輸入的+5V電源電壓變換成為RS-232輸出電平所需的+10V電壓。模塊如圖4所示。圖4串口連接電路 3.4DS18B20溫度傳感器模塊(1)初始化(時(shí)序圖如下)先將數(shù)據(jù)線置高電平1。延時(shí)(時(shí)間不是很嚴(yán)格要求,但要盡可能短一點(diǎn))。數(shù)據(jù)線拉到低電平。延時(shí)750us(該時(shí)間范圍可以在480~960us)。數(shù)據(jù)線拉到高電平。延時(shí)等待。如果初始化成功則在15~60ms內(nèi)產(chǎn)生一個(gè)由DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。但是應(yīng)注意不能無限地等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)判斷。若CPU讀到數(shù)據(jù)線上的低電平0后,還要進(jìn)行延時(shí),其延時(shí)的時(shí)間從發(fā)出高電平算起(第5步的時(shí)間算起)最少要480us。將數(shù)據(jù)線再次拉到高地平1后結(jié)束。(2)DS18B20寫數(shù)據(jù)(時(shí)序圖如下)數(shù)據(jù)線先置低電平0.延時(shí)的時(shí)間確定為15us。按從低到高的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。延時(shí)時(shí)間為45us。將數(shù)據(jù)線拉到高電平1。重復(fù)1-5步驟,直到發(fā)送完整個(gè)字節(jié)。最后將數(shù)據(jù)線拉高到1。DS18B20讀數(shù)據(jù)(時(shí)序圖如下)將數(shù)據(jù)線拉高到1。延時(shí)2us。將數(shù)據(jù)線拉低到0。延時(shí)6us。將數(shù)據(jù)線拉高到1。延時(shí)4us。讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。延時(shí)30us。重復(fù)1~7步驟,直到讀取完一個(gè)字節(jié)。3.5LCD1602液晶顯示屏模塊(1)1602液晶接口信號(hào)說明圖如下:3.6直流電機(jī)模塊電機(jī)驅(qū)動(dòng)芯片ULN2803內(nèi)部結(jié)構(gòu)如下:1~18、2~17、3~16、4~15、5~14、6~13、7~12、8~11是對(duì)應(yīng)的非門,9為地(與電機(jī)共地),10為12v輸入。電機(jī)模塊的電路圖如下:3.7系統(tǒng)整體電路圖原理圖:PCB圖:4、軟件設(shè)計(jì) 開始后程序初始化,LCD1602、DS18B20、串口初始化,并且處于循環(huán)讀取溫度,并且把溫度不斷地在LCD1602上刷新,還發(fā)送到上位機(jī),然后在上位機(jī)上輸入檔位使風(fēng)扇達(dá)到不同的轉(zhuǎn)速。開始開始LCD1602、DS18B20、串口初始化LCD1602、DS18B20、串口初始化18B20讀溫度18B20讀溫度 STC89C52STC89C52串口串口風(fēng)扇上位機(jī)LCD1602顯示溫度風(fēng)扇上位機(jī)LCD1602顯示溫度5、系統(tǒng)測(cè)試與調(diào)試結(jié)果分析5.1測(cè)試儀器萬用表、一字螺絲刀、PC機(jī)顯示界面、采用電腦USB通過串口通信模塊進(jìn)行供電。5.2測(cè)試方法與結(jié)果打開電源系統(tǒng)各個(gè)模塊開始工作,各模塊正常工作,如圖16、圖17所示:圖16系統(tǒng)初始化工作圖圖17溫度檢測(cè)1602顯示和上傳到上位機(jī)、上位機(jī)輸入檔位控制風(fēng)扇轉(zhuǎn)速6、設(shè)計(jì)總結(jié)1、整個(gè)設(shè)計(jì)過程中團(tuán)隊(duì)的合作最為重要、各隊(duì)員既要完成好各自負(fù)責(zé)的模塊也要小組內(nèi)成員互相協(xié)作。2、要想實(shí)現(xiàn)一個(gè)系統(tǒng),那必須對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)有整體的思路。3、目前系統(tǒng)設(shè)置已經(jīng)基本實(shí)現(xiàn)功能,不足在于中斷部分沒有弄得進(jìn)去就沒辦法規(guī)定時(shí)間讀取溫度到上位機(jī),因?yàn)橐婚_總中斷允許位就會(huì)使溫度讀取出錯(cuò)。4、設(shè)計(jì)電路是系統(tǒng)功能實(shí)現(xiàn)的前提,合理的選用芯片十分關(guān)鍵,合理設(shè)置元器件參數(shù)更是一個(gè)難點(diǎn)。5、焊接電路路需要扎實(shí)的基礎(chǔ)功及較強(qiáng)的耐心,調(diào)試電路是必須認(rèn)真細(xì)心。如有問題,耐心排查。6、需要有扎實(shí)的知識(shí)基礎(chǔ),既懂軟件又懂硬件,會(huì)寫程序能搭電路,對(duì)常用元器件比較了解。7、任何小的問題都會(huì)影響系統(tǒng)的最終功能,所以必須注意細(xì)節(jié),同時(shí)完成設(shè)計(jì)需要投入大量時(shí)間和精力,需要極強(qiáng)的毅力。7、參考文獻(xiàn)

[1]郭天祥新概念51單片機(jī)C語言教程——入門、提高、開發(fā)、拓展全攻略,電子工業(yè)出版社2014,(05)[2]上網(wǎng)查閱資料。8、附件:源程序#include<reg52.h>#include<intrins.h>#include<stdio.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedintsbitRS=P1^0;sbitrw=P1^1;sbitLCDEN=P1^2;sbitfengmingqi=P1^3;sbitDSPORT=P1^4;sbitdianji=P2^0;floatt;intvalue;uchara;uchartable1[]="wendu:";uchartable2[]="dangwei:";uchartable3[]="0";uchartable4[]="1";uchartable5[]="2";uchartable6[]="3";voiddelayMs(uintz)//延時(shí)函數(shù){uinti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} voidwriteComm(ucharcomm) //寫命令函數(shù){RS=0;P0=comm;LCDEN=1;_nop_();LCDEN=0;delayMs(1);}voidwriteData(uchardat)//寫數(shù)據(jù)函數(shù){RS=1;P0=dat;LCDEN=1;_nop_();LCDEN=0;delayMs(1);}voidinit() //1602初始化{rw=0;writeComm(0x38);writeComm(0x0c);writeComm(0x06);writeComm(0x01);}voidwriteString(uchar*str,ucharlength)//在1602上寫第一行數(shù)據(jù)的格式函數(shù){uchari;for(i=0;i<length;i++){writeData(str[i]);}}/********************************************************************************函數(shù)名:Ds18b20Init*函數(shù)功能 :初始化*輸入:無*輸出:初始化成功返回1,失敗返回0*******************************************************************************/ucharDs18b20Init(){ uchari; DSPORT=0; //將總線拉低480us~960us i=70; while(i--);//延時(shí)642us DSPORT=1; //然后拉高總線,如果DS18B20做出反應(yīng)會(huì)將在15us~60us后總線拉低 i=0; while(DSPORT) //等待DS18B20拉低總線 { i++; if(i>5)//等待>5MS { return0;//初始化失敗 } delayMs(1); } return1;//初始化成功}/********************************************************************************函數(shù)名:Ds18b20WriteByte*函數(shù)功能 :向18B20寫入一個(gè)字節(jié)*輸入:com*輸出:無*******************************************************************************/voidDs18b20WriteByte(uchardat){ uinti,j; for(j=0;j<8;j++) { DSPORT=0; //每寫入一位數(shù)據(jù)之前先把總線拉低1us i++; DSPORT=dat&0x01;//然后寫入一個(gè)數(shù)據(jù),從最低位開始 i=6; while(i--);//延時(shí)68us,持續(xù)時(shí)間最少60us DSPORT=1; //然后釋放總線,至少1us給總線恢復(fù)時(shí)間才能接著寫入第二個(gè)數(shù)值 dat>>=1; }}/********************************************************************************函數(shù)名:Ds18b20ReadByte*函數(shù)功能 :讀取一個(gè)字節(jié)*輸入:com*輸出:無*******************************************************************************/ucharDs18b20ReadByte(){ ucharbyte,bi; uinti,j; for(j=8;j>0;j--) { DSPORT=0;//先將總線拉低1us i++; DSPORT=1;//然后釋放總線 i++; i++;//延時(shí)6us等待數(shù)據(jù)穩(wěn)定 bi=DSPORT; //讀取數(shù)據(jù),從最低位開始讀取 /*將byte左移一位,然后與上右移7位后的bi,注意移動(dòng)之后移掉那位補(bǔ)0。*/ byte=(byte>>1)|(bi<<7); i=4; //讀取完之后等待48us再接著讀取下一個(gè)數(shù) while(i--); } returnbyte;}/********************************************************************************函數(shù)名:Ds18b20ChangTemp*函數(shù)功能 :讓18b20開始轉(zhuǎn)換溫度*輸入:com*輸出:無*******************************************************************************/voidDs18b20ChangTemp(){ Ds18b20Init(); delayMs(1); Ds18b20WriteByte(0xcc); //跳過ROM操作命令 Ds18b20WriteByte(0x44); //溫度轉(zhuǎn)換命令// delayMs(100); //等待轉(zhuǎn)換成功,而如果你是一直刷著的話,就不用這個(gè)延時(shí)了}/********************************************************************************函數(shù)名:Ds18b20ReadTempCom*函數(shù)功能 :發(fā)送讀取溫度命令*輸入:com*輸出:無 *******************************************************************************/voidDs18b20ReadTempCom(){ Ds18b20Init(); delayMs(1); Ds18b20WriteByte(0xcc); //跳過ROM操作命令 Ds18b20WriteByte(0xbe); //發(fā)送讀取溫度命令}/********************************************************************************函數(shù)名:Ds18b20ReadTemp*函數(shù)功能 :讀取溫度*輸入:com*輸出:無*******************************************************************************/intDs18b20ReadTemp(){ uinttemp=0; uchartmh,tml; Ds18b20ChangTemp(); //先寫入轉(zhuǎn)換命令 Ds18b20ReadTempCom(); //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令 tml=Ds18b20ReadByte(); //讀取溫度值共16位,先讀低字節(jié) tmh=Ds18b20ReadByte(); //再讀高字節(jié) temp=tmh; temp<<=8; temp|=tml; value=temp; t=value*0.0625; value=t*100+(value>0?0.5:-0.5);//大于0加0.5,小于0減0.5 returnvalue;}voiddisplay(intv){ucharcount;uchardatas[]={0,0,0,0,0};uinttmp=abs(v); datas[0]=tmp/10000;datas[1]=tmp%10000/1000;datas[2]=tmp%1000/100;datas[3]=tmp%100/10; datas[4]=tmp%10;if(v<0){writeString("-",1);}else{writeString("+",1);}if(datas[0]!=0){writeData('0'+datas[0]);}for(count=1;count!=5;count++){writeData('0'+datas[count]);if(count==2){writeData('.');}} writeComm(0x80+6); Ds18b20ChangTemp(); if((tmp<=3400)|(v<0)) { fengmingqi=1; } elseif((3400<tmp)&&(tmp<=3500)) { fengmingqi=1; delayMs(50); fengmingqi=0; delayMs(50); } elseif((3500<tmp)&&(tmp<=3600)) { fengmingqi=1; delayMs(10); fengmingqi=0; delayMs(10); } elseif(tmp>3600) { fengmingqi=0; } }voidinit_com(void){ TMOD=0x20; PCON=0x00; SCON=0x50; TH1=0xfd; TL1=0xfd; ET2=1; TR1=1; }voidcomm(char*parr){ do { SBUF=*parr++; while(!TI); TI=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論