基于單片機(jī)和DS18B20的溫度采集和分析系統(tǒng)
傳統(tǒng)的溫度檢測(cè)大多以熱敏電阻為溫度傳感器,但熱敏電阻的可靠性較差、測(cè)量溫度準(zhǔn)確率低,且還必須經(jīng)專門(mén)的接口電路轉(zhuǎn)換為數(shù)字信號(hào)后才能由單片機(jī)進(jìn)行處理。不僅如此,大部分溫度系統(tǒng)都缺少對(duì)溫度的采樣存儲(chǔ),無(wú)法對(duì)溫度進(jìn)一步分析。本文介紹了一套以個(gè)人電腦及80C51單片機(jī)為核心,使用DS18B20溫度傳感器進(jìn)行溫度采樣,數(shù)據(jù)庫(kù)進(jìn)行溫度存儲(chǔ),Matlab進(jìn)行溫度分析的系統(tǒng)。該系統(tǒng)可對(duì)其所處環(huán)境的溫度進(jìn)行實(shí)時(shí)監(jiān)控,同時(shí)進(jìn)行溫度的采樣、存儲(chǔ)和分析,實(shí)現(xiàn)對(duì)特定環(huán)境下溫度的了解。
1 系統(tǒng)總體組成
系統(tǒng)硬件部分主要用于溫度的測(cè)量和存儲(chǔ)。PC端則用于測(cè)溫事件的建立與存儲(chǔ)、測(cè)量參數(shù)的設(shè)置、溫度數(shù)據(jù)的存儲(chǔ)及溫度數(shù)據(jù)的分析。整體而言,系統(tǒng)核心部分分為溫度監(jiān)測(cè)模塊、溫度存儲(chǔ)模塊和溫度分析模塊3部分。
溫度監(jiān)測(cè)模塊用于溫度的監(jiān)測(cè)及采樣,首先利用PC端程序進(jìn)行測(cè)溫事件的建立及采樣開(kāi)始時(shí)間(時(shí)分秒)、采樣結(jié)束時(shí)間(時(shí)分秒)、采樣間隔(秒)和傳輸方式8個(gè)采樣相關(guān)參數(shù)的設(shè)置,傳輸方式包括直接傳輸和間接傳輸,對(duì)應(yīng)溫度的永久存儲(chǔ)和臨時(shí)存儲(chǔ),相關(guān)參數(shù)通過(guò)串口傳給單片機(jī)。然后利用80C51單片機(jī)和DS18B20溫度傳感器來(lái)獲取當(dāng)前溫度,并按要求對(duì)溫度進(jìn)行采樣,同時(shí)利用其他器件將溫度及當(dāng)前時(shí)間顯示到LED屏上。
溫度存儲(chǔ)模塊分為臨時(shí)存儲(chǔ)模塊和永久存儲(chǔ)模塊,臨時(shí)存儲(chǔ)模塊用于將所測(cè)量的溫度數(shù)據(jù)通過(guò)I2C總線臨時(shí)存儲(chǔ)于AT24C02芯片中,永久存儲(chǔ)模塊則將AT24C02芯片中的數(shù)據(jù)或當(dāng)前測(cè)量的溫度數(shù)據(jù)通過(guò)串行口傳給PC端,然后PC端程序?qū)⑵浯鎯?chǔ)于SQL Server數(shù)據(jù)庫(kù)中。
溫度分析模塊利用Matlab對(duì)所獲數(shù)據(jù)進(jìn)行處理。通過(guò)將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)入Excel表,然后調(diào)用Matlab的m文件讀取Excel表中的數(shù)據(jù),并對(duì)其分析,完成數(shù)據(jù)處理。
系統(tǒng)的總體設(shè)計(jì)如圖1所示。
2 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)硬件原理如圖2所示,硬件電路圖如圖3所示。整個(gè)系統(tǒng)通過(guò)STC89C52RC單片機(jī)進(jìn)行控制,8051系列單片機(jī)為1980年Intel公司推出的MCS-51系列8為高檔單片機(jī)微機(jī),而該型號(hào)單片機(jī)為8051內(nèi)核芯片,內(nèi)含F(xiàn)lash E2PROM存儲(chǔ)器,內(nèi)部程序存儲(chǔ)空間的大小為4 kB,內(nèi)部RAM為512 Byte,價(jià)格較低,能較好地滿足系統(tǒng)要求。DS18B20溫度傳感器通過(guò)單總線與單片機(jī)P1.7連接,單總線數(shù)字溫度傳感器將地址線、數(shù)據(jù)線、控制線合為1根信號(hào)線,硬件開(kāi)銷小,為保證系統(tǒng)穩(wěn)定性,將DS18B20的VCC端與外部電源相連。1602液晶為5 V電壓驅(qū)動(dòng),可顯示兩行,每行16個(gè)字符,內(nèi)置含128個(gè)字符的ASCII字符集字庫(kù),可滿足系統(tǒng)信息輸出的要求,1602占用單片機(jī)的P0及P2.3、P2.4、P2.5。AT24C02為E2PROM存儲(chǔ)器,使用了快速、高效、精準(zhǔn)的I2C接口設(shè)計(jì)技術(shù)與單片機(jī)進(jìn)行通信,時(shí)鐘線與單片機(jī)P2.0相連,信號(hào)線與P2.1相連。DS1302為時(shí)間芯片,能自動(dòng)產(chǎn)生年、月、日、時(shí)、分、秒等時(shí)間信息,可實(shí)現(xiàn)系統(tǒng)溫度與測(cè)量時(shí)間的對(duì)應(yīng)傳輸,并方便系統(tǒng)控制。MAX232為RS232/TTL電平轉(zhuǎn)換芯片,實(shí)現(xiàn)下位機(jī)與PC端上位機(jī)的串口通信,其與單片機(jī)的RXD(P3.0)和TxD(P3.1)相連。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 單片機(jī)程序設(shè)計(jì)
圖3為程序的程序總體設(shè)計(jì)圖,application為整個(gè)單片機(jī)程序的全局變量,用以區(qū)分系統(tǒng)核心部分和應(yīng)用部分,當(dāng)按下與P3.2相連的按鍵時(shí),觸發(fā)外部中斷0,application自加1。
系統(tǒng)核心部分又分為空閑模式和工作模式。系統(tǒng)處于空閑模式時(shí),讀取DS1302的時(shí)間信息和DS18B20的溫度信息,在液晶顯示屏上顯示當(dāng)前的日期、時(shí)間和溫度,同時(shí)利用按鍵可校準(zhǔn)日期和時(shí)間;處于工作模式時(shí),硬件電路與PC端配合工作,完成溫度的采樣、存儲(chǔ)和傳輸。
應(yīng)用部分,單片機(jī)通過(guò)串口獲得溫度閾值和函數(shù)式,利用下文將敘述的公式完成相應(yīng)功能。另外,單片機(jī)進(jìn)行溫度采樣的時(shí)間由定時(shí)器0進(jìn)行精確控制。定時(shí)器1用于波特率的產(chǎn)生。當(dāng)PC端傳遞數(shù)據(jù)給單片機(jī)時(shí),將導(dǎo)致串口中斷,參數(shù)數(shù)據(jù)傳送至單片機(jī)的SBUF寄存器,然后再將數(shù)據(jù)存儲(chǔ)于char型二維數(shù)組Parameter中,因?yàn)樗鑲鬏數(shù)膮?shù)數(shù)據(jù)共有8個(gè),且每個(gè)參數(shù)的位數(shù)均為2位,故包括‘\0’在內(nèi)共需3個(gè)char。型存儲(chǔ)空間,從而完成采樣參數(shù)設(shè)置。當(dāng)單片機(jī)向PC端傳遞溫度數(shù)據(jù)時(shí),先傳遞溫度的整數(shù)部分傳給SBUF寄存器,再將溫度的小數(shù)部分傳給SBUF,從而傳給PC端,此時(shí)先用強(qiáng)制轉(zhuǎn)換將float型的溫度數(shù)據(jù)轉(zhuǎn)換為int型變量,傳遞其整數(shù)部分,然后將float型變量乘以100并減去其整數(shù)部分,得到小數(shù)部分。
3.2 PC端程序設(shè)計(jì)
圖4為數(shù)據(jù)庫(kù)設(shè)計(jì)的E—R圖。系統(tǒng)數(shù)據(jù)庫(kù)中包括事件表、數(shù)據(jù)表和處理結(jié)果表。事件表存儲(chǔ)各種事件信息,數(shù)據(jù)表存儲(chǔ)對(duì)應(yīng)時(shí)間的溫度數(shù)據(jù)及時(shí)間數(shù)據(jù),處理結(jié)果表存儲(chǔ)處理結(jié)果。
Matlab分析模塊的主要步驟為:從Excel表中獲取時(shí)間;利用datenum()函數(shù)將三維的時(shí)分秒轉(zhuǎn)換成一維的實(shí)數(shù);利用polyfit()函數(shù)擬合時(shí)間溫度的一階函數(shù)式;利用polyv al()函數(shù)計(jì)算已知各點(diǎn)擬合曲線的溫度值;利用plot畫(huà)出原始各點(diǎn)和擬合曲線。
PC端可是化程序主要使用Visual C++6.0編寫(xiě)而成,通過(guò)串口與單片機(jī)進(jìn)行數(shù)據(jù)交換,并于數(shù)據(jù)庫(kù)和Matlab進(jìn)行通信,完成測(cè)溫事件的建立、采樣參數(shù)的設(shè)置以及數(shù)據(jù)的存儲(chǔ)與分析。
PC端可視化程序使用到了Microsoft CommunicationsControl控件(MSComm控件)實(shí)現(xiàn)了串口通信和數(shù)據(jù)接收,利用微軟提供的一種面向?qū)ο?、與語(yǔ)言無(wú)關(guān)的數(shù)據(jù)訪問(wèn)應(yīng)用編程接口 ADO組件實(shí)現(xiàn)與SQL Server數(shù)據(jù)庫(kù)的通信,通過(guò)Matlab引擎調(diào)用Matlab的m文件,實(shí)現(xiàn)數(shù)據(jù)的分析,Matlab引擎是一組Matlab提供的接口函數(shù)(ICngine API函數(shù)),其采用客戶機(jī)/服務(wù)器計(jì)算模式,此時(shí)C++作為客戶端出現(xiàn),負(fù)責(zé)用戶接口和提出數(shù)據(jù)請(qǐng)求,Matlab則屬于服務(wù)器端,向客戶端提供數(shù)據(jù)服務(wù)。通過(guò)以上接口及MFC函數(shù)庫(kù)完成PC端的可視化程序設(shè)計(jì)。
4 系統(tǒng)測(cè)試及應(yīng)用
系統(tǒng)測(cè)試采用額定功率為1 500 W的電熱壺?zé)M(jìn)行實(shí)驗(yàn)測(cè)試。利用系統(tǒng)對(duì)1 200 ml的自來(lái)水在電熱壺中的溫度進(jìn)行采樣,獲得相關(guān)數(shù)據(jù)并進(jìn)行分析,從而得到溫度與時(shí)間的函數(shù)式,然后用該函數(shù)式來(lái)計(jì)算到達(dá)某一溫度閾值的所需時(shí)間,完成應(yīng)用。
由于電熱壺的功率恒定且過(guò)大,故加熱時(shí)因各種原因散失的溫度可忽略不計(jì),故水所吸收的熱量在單位時(shí)間內(nèi)是恒定的,通過(guò)比熱容公式Q=Cm△T(其中Q為熱量的變化,C為比熱容,m為質(zhì)量,△T為溫度變化)及Q=p△t(p為功率,△t為所用時(shí)間)可得
由于水的比熱容為4.2×103J/(kg·℃),電熱壺功率為1 500 W,水的質(zhì)量約為1.2kg,代入數(shù)據(jù)可得△T=0.297△t。
可見(jiàn)水溫與時(shí)間應(yīng)該是線性的,其系數(shù)約為0.297,即T=at+T0,其中a=0.297,T0為初始溫度。
通過(guò)以上分析,可得式(2),該公式用于應(yīng)用部分計(jì)算水到達(dá)某一溫度剩余時(shí)間的函數(shù)式
t=(T-T1)÷a (2)
其中,t為所需的時(shí)間;T1為閾值溫度;T為當(dāng)前溫度;a為分析所得函數(shù)的一次項(xiàng)系數(shù)。
系統(tǒng)測(cè)試結(jié)果如圖6與圖7所示,由圖6可知,溫度與時(shí)間呈較好的線性,與上述分析結(jié)果一致,由圖7可知,擬合曲線的系數(shù)為0.264.53,與理論值的相對(duì)誤差為-10.9%,這可能與電熱壺的老化等因素有關(guān)。但由實(shí)驗(yàn)結(jié)果可知,系統(tǒng)可較好地對(duì)溫度進(jìn)行采樣、存儲(chǔ)和分析。
圖8為針對(duì)系統(tǒng)分析的數(shù)據(jù)進(jìn)行的一個(gè)應(yīng)用測(cè)試,通過(guò)式(2)可知電熱壺水溫至100℃還需要的時(shí)間,從圖8中可看出,當(dāng)前水溫為23℃,距水燒開(kāi)還需380 s。
5 結(jié)束語(yǔ)
經(jīng)過(guò)實(shí)驗(yàn)測(cè)試,本系統(tǒng)可完成溫度的采集、存儲(chǔ)和分析功能。通過(guò)該系統(tǒng),可測(cè)得某一時(shí)段內(nèi)固定時(shí)間間隔的溫度值,并可將其存儲(chǔ)于PC端的數(shù)據(jù)庫(kù)中,當(dāng)測(cè)得規(guī)定時(shí)間內(nèi)的數(shù)據(jù)后,通過(guò)系統(tǒng)的分析模塊,可對(duì)所測(cè)的溫度數(shù)據(jù)進(jìn)行一定程度的分析,獲得溫度變化的走勢(shì)曲線圖,在熱功率恒定的條件下,通過(guò)Q=Cm△t函數(shù)可獲得溫度與時(shí)間的一次函數(shù),從而對(duì)其他時(shí)段相同環(huán)境下的數(shù)據(jù)進(jìn)行提前分析。同時(shí),該系統(tǒng)功能較強(qiáng),操作簡(jiǎn)便,系統(tǒng)較穩(wěn)定,有一定的實(shí)際應(yīng)用價(jià)值。