王麗娟,王 艷
(鄭州升達(dá)經(jīng)貿(mào)管理學(xué)院 資訊管理系,鄭州 451191)
基于DS18B20的多通道溫度測(cè)試儀
王麗娟,王 艷
(鄭州升達(dá)經(jīng)貿(mào)管理學(xué)院 資訊管理系,鄭州 451191)
在控制和監(jiān)測(cè)系統(tǒng)中,許多場(chǎng)合都需要環(huán)境溫度參數(shù)。例如樓宇溫度監(jiān)測(cè)系統(tǒng)、糧倉溫度控制系統(tǒng)以及蔬菜大棚溫度監(jiān)測(cè)系統(tǒng)等。測(cè)量多點(diǎn)環(huán)境溫度數(shù)據(jù)可采用美國DALLAS公司的DS18B20單總線式數(shù)字溫度傳感器,傳感器的控制和設(shè)置利用單片機(jī)STC89C52實(shí)現(xiàn)。同時(shí)各點(diǎn)溫度數(shù)據(jù)可經(jīng)由串行總線RS232傳送至通用PC機(jī),由PC機(jī)作為監(jiān)控系統(tǒng)的上位機(jī),實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的設(shè)置、監(jiān)測(cè)和報(bào)警。PC機(jī)控制界面和通信程序采用VB6.0編寫。其開發(fā)過程具有簡單、界面友好的特點(diǎn),同時(shí)還可將多點(diǎn)環(huán)境溫度存儲(chǔ)至PC機(jī),對(duì)歷史溫度進(jìn)行統(tǒng)計(jì)和分析,并可將數(shù)據(jù)繪制成圖像方式顯示。
該系統(tǒng)設(shè)計(jì)了四通道測(cè)溫系統(tǒng),單片機(jī)與溫度傳感器的數(shù)據(jù)傳輸采用1-Wire總線即單總線結(jié)構(gòu),該結(jié)構(gòu)是Dallas Semiconductor公司推出的非常簡單實(shí)用的總線協(xié)議。實(shí)用1-Wire結(jié)構(gòu)可將引腳減少到最少,因此特別適合應(yīng)用于單片機(jī)系統(tǒng)中[1]。
Dallas Semiconductor公司推出DS18B20即為1-W i r e總線結(jié)構(gòu),其溫度測(cè)量范圍為-55℃~125℃,測(cè)溫分辨率可達(dá)0.0625℃。多個(gè)DS18B20可以并聯(lián)到3根或者2根線上,CPU只需要一根端口線就能與多個(gè)DS18B20通信,占用MCU端口較少,可節(jié)省大量的口線和硬件電路。因此,DS18B20非常適合與遠(yuǎn)距離多點(diǎn)溫度檢測(cè)系統(tǒng)中[2]。
下位機(jī)以單片機(jī)為核心,其外圍器件有4個(gè)數(shù)字溫度傳感器DS18B20,液晶顯示器LCD1602,與RS232的接口芯片MAX202。單片機(jī)的編程采用C51語言,該語言接近C語言,程序更易移植和模塊化。
系統(tǒng)的連接框圖如圖1所示。系統(tǒng)的核心元件是單片機(jī),采用STC89C52。系統(tǒng)中的測(cè)溫傳感器采用DALLAS公司的DS18B20單線式溫度傳感器,可有效節(jié)省單片機(jī)的I/O接口,簡化系統(tǒng)連線。系統(tǒng)設(shè)計(jì)4通道采集溫度傳感器,各通道傳感器收集到的溫度可由1-wire總線送至單片機(jī),單片機(jī)通過輪詢機(jī)制采集4通道溫度數(shù)據(jù),并將數(shù)據(jù)經(jīng)由RS232總線同時(shí)傳送至PC機(jī)和LCD1602液晶顯示器。PC機(jī)可存儲(chǔ)各通道歷史溫度,顯示各通道當(dāng)前溫度??紤]到PC機(jī)擔(dān)任任務(wù)較多,并非溫度監(jiān)測(cè)控制專用機(jī),系統(tǒng)中四路溫度的當(dāng)前值也同時(shí)送至LCD1602液晶顯示。彌補(bǔ)PC機(jī)擔(dān)任其他任務(wù)時(shí)不能顯示當(dāng)前溫度數(shù)據(jù)的不足。
2.2.1 測(cè)溫電路詳圖
溫度傳感器DS18B20只有三個(gè)引腳,其中VDD為外部供電電源引腳,GND為接地引腳,DQ為1-Wire總線的數(shù)據(jù)輸入/輸出引腳。多個(gè)DS18B20的DQ引腳可以直接接在一起接入單片機(jī)的一個(gè)I/O引腳上,本系統(tǒng)接入單片機(jī)的P1.1引腳??紤]到系統(tǒng)中有多個(gè)DS18B20,在實(shí)際的應(yīng)用中分部在不同的位置,其供電方式采用外部電源供電方式,方便系統(tǒng)接線。DS18B20與單片機(jī)的接線示意圖如圖2所示。
圖2 溫度傳感器和單片機(jī)的接線示意圖
2.2.2 1-wire總線的時(shí)序及編程
單片機(jī)與DS18B20通過1-wire信號(hào)線連接,單片機(jī)要實(shí)現(xiàn)各類操作命令以及溫度的讀取與設(shè)置,必須要嚴(yán)格按照單總線及DS18B20的通信協(xié)議進(jìn)行通信。DS18B20的1-wire工作協(xié)議是:初始化→ROM操作指令→存儲(chǔ)器操作指令→數(shù)據(jù)傳輸。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序。在實(shí)際的編程過程中,可將各個(gè)時(shí)序編寫成子函數(shù),以方便調(diào)用。1-wire初始化時(shí)序、寫時(shí)序和讀時(shí)序如圖3所示[3]。
1)1-wire的初始化時(shí)序及編程
分析圖3(a)初始化時(shí)序圖,1-wire初始化即復(fù)位時(shí)序的步驟如下:首先將數(shù)據(jù)線DQ拉低并保持一段時(shí)間來實(shí)現(xiàn)1-wire總線上的所有器件的復(fù)位。接著主機(jī)等待DS18B20返回的存在脈沖,并返回存在信號(hào)。如果返回0,則表示器件存在,返回1,則表示器件不存在。根據(jù)初始化時(shí)序,采用C51編寫單片機(jī)模擬1-wire的初始化協(xié)議函數(shù)initial(),其代碼如下:
2)1-wire寫時(shí)序及編程
分析圖3(b)寫數(shù)據(jù)時(shí)序圖,主機(jī)要將一位數(shù)據(jù)寫入DS18B20,首先應(yīng)將數(shù)據(jù)線DQ置低電平,開始寫時(shí)間間隙,然后按照數(shù)據(jù)位從低到高發(fā)送數(shù)據(jù)(一次只發(fā)送1位),如果寫入1則數(shù)據(jù)線DQ置1,如果寫入0則數(shù)據(jù)線DQ置0。根據(jù)以上1-wire總線的寫時(shí)序流程,采用C51語言分別編寫位寫入函數(shù)BitWrite()和字節(jié)寫入函數(shù)ByteWrite
圖3 1-wire總線的時(shí)序圖
3)1-wire讀時(shí)序及編程
分析圖3中的(c)讀時(shí)序圖,主機(jī)要讀入DS18B20的數(shù)據(jù),首先拉低數(shù)據(jù)線DQ開始讀時(shí)間間隙,然后將DQ置1。延時(shí)一段時(shí)間,讀取并返回?cái)?shù)據(jù)總線DQ上的1位數(shù)據(jù),重復(fù)以上步驟,直到8位數(shù)據(jù)讀完。根據(jù)以上1-wire總線的讀時(shí)序流程,采用C51語言分別編寫位讀入函數(shù)BitRead()和字節(jié)讀入函數(shù)ByteRead()。程序代碼如下:
單片機(jī)作為PC機(jī)和DS18B20的聯(lián)絡(luò)器件,主要負(fù)責(zé)接收PC機(jī)發(fā)送的指令,并將指令以特定的形式和時(shí)序傳送給相應(yīng)的DS18B20,同時(shí),讀取多個(gè)DS18B20的溫度數(shù)據(jù),并將數(shù)據(jù)送至LCD顯示,同時(shí)將數(shù)據(jù)送至PC及進(jìn)行顯示、存儲(chǔ)和分析。單片機(jī)控制控制DS18B20的流程圖如圖4所示。
單片機(jī)接收到PC機(jī)的復(fù)位指令,或者單片機(jī)本身的復(fù)位按鈕被按下,單片機(jī)首先進(jìn)行系統(tǒng)初始化,定義有關(guān)數(shù)據(jù)線的位地址。接著調(diào)用復(fù)位函數(shù),發(fā)送復(fù)位時(shí)隙復(fù)位所有的1-wire總線上的DS18B20。由于所有的DS18B20都要檢測(cè)溫度,此時(shí)可以忽略每個(gè)DS18B20的64位ROM序列號(hào),由單片機(jī)發(fā)送跳過ROM的命令CCH,緊接著發(fā)送溫度轉(zhuǎn)換命令44H,之后延時(shí)1s,以便各個(gè)溫度傳感器進(jìn)行溫度轉(zhuǎn)換。
單片機(jī)要讀入每個(gè)DS18B20D 溫度數(shù)據(jù),因此要建立每個(gè)DS18B20的64位ROM和測(cè)量位置點(diǎn)之間的對(duì)應(yīng)關(guān)系。單片機(jī)讀入DS18B20的命令是33H,但該命令只能讀出1-wire總線上的單個(gè)1-wire器件的序列號(hào),因此,在當(dāng)主機(jī)需要對(duì)眾多在線的DS18B20中的某一個(gè)進(jìn)行操作時(shí),首先應(yīng)該講單片機(jī)逐個(gè)與DS18B20進(jìn)行掛接,發(fā)送33H命令讀入其序列號(hào),并將該序列號(hào)和測(cè)溫點(diǎn)的對(duì)應(yīng)關(guān)系存儲(chǔ)在單片機(jī)的CODE區(qū)。
系統(tǒng)中多個(gè)DS18B20,單片機(jī)要逐個(gè)讀入其溫度數(shù)據(jù),首先發(fā)送匹配ROM的指令55H,緊接著發(fā)送測(cè)溫點(diǎn)的DS18B20的64位序列號(hào),讀入單個(gè)測(cè)溫點(diǎn)的數(shù)據(jù),該數(shù)據(jù)送到LCD的與測(cè)溫點(diǎn)相對(duì)應(yīng)的區(qū)域顯示,同時(shí)該數(shù)據(jù)送至PC機(jī)進(jìn)行顯示和存儲(chǔ)。主程序中該處共有4個(gè)DS18B20,因此讀入溫度的循環(huán)次數(shù)是4次。
考慮到系統(tǒng)要顯示4通道測(cè)溫點(diǎn)溫度數(shù)據(jù),采用點(diǎn)陣字符LCD液晶模塊,液晶體積小、功耗低、顯示操作簡單。本系統(tǒng)選用市面上較為流行的并行接口通用LCD1602,該液晶可以顯示2行,每行顯示16個(gè)字符。每個(gè)通道的溫度數(shù)據(jù)可占用8個(gè)字符。
圖4 下位機(jī)程序流程圖
單片機(jī)和LCD1602的連接如圖5所示,液晶顯示模塊的端口引腳7~14為并行數(shù)據(jù)線D0~D7與單片機(jī)的P0.0~P0.7連接,液晶的引腳6為使能信號(hào)LCDEN接單片機(jī)的P1.1,液晶的端口4為數(shù)據(jù)/命令選擇端接P1.2,液晶的端口5為“讀/寫選擇端”,在本系統(tǒng)中只用于寫入命令和數(shù)據(jù),因此始終選擇為寫狀態(tài),即低電平接地。
單片機(jī)對(duì)LCD1602的讀寫,在較多的資料中都有介紹,在此不再贅述。
單片機(jī)采集到4通道溫度數(shù)據(jù)后,一方面送入LCD1602顯示,一方面送入PC機(jī),單片機(jī)和PC機(jī)之間的通信采用RS232總線連接。由于RS232的邏輯電平和單片機(jī)所用的TTL電平不匹配,因此需要接入電平轉(zhuǎn)換芯片MAX202,其所配電容只需0.1μ即可。采用RS232可實(shí)現(xiàn)全雙工通信,故單片機(jī)可每隔10秒主動(dòng)向PC機(jī)發(fā)送一次測(cè)量的溫度數(shù)據(jù)(每隔10s測(cè)量一次溫度,測(cè)后即發(fā)),單片機(jī)與MAX202的電路連接如圖5所示。
PC機(jī)采用VB6.0編寫用戶界面,上位機(jī)的主要任務(wù)是通過串口和單片機(jī)進(jìn)行通信,顯示4通道的當(dāng)前溫度,并可以輸入各個(gè)通道的溫度的上下限。上位機(jī)軟件流程圖如圖6所示。通過初始化命令按鈕將各通道的溫度上下限的值通過單片機(jī)送至各個(gè)DS18B20,然后通知單片機(jī)開始進(jìn)行溫度轉(zhuǎn)換,延遲10s后即可接收數(shù)據(jù),由于環(huán)境溫度時(shí)刻變化,因此程序中每個(gè)10s接收一次溫度數(shù)據(jù),并同時(shí)將當(dāng)前溫度數(shù)據(jù)顯示在PC機(jī)界面的文本框內(nèi),在PC機(jī)中用軟件檢測(cè)溫度是否超限,如果超限,可彈出提示窗口進(jìn)行提醒。VB6.0的串口通信主要是通過調(diào)用MSComm控件實(shí)現(xiàn),通過設(shè)置MSComm控件的屬性可以設(shè)置系統(tǒng)的波特率,傳送字符的格式,串口標(biāo)號(hào)等信息。上位機(jī)運(yùn)行界面如圖7所示[4]。
該系統(tǒng)實(shí)現(xiàn)了4通道溫度的測(cè)量和顯示,上位機(jī)以通用的PC機(jī)作為主機(jī),用VB6.0編寫人機(jī)交互界面,通過調(diào)用VB6.0的MSComm1控件實(shí)現(xiàn)與下位機(jī)的串行通信。同時(shí)可以通過界面設(shè)定溫度的上下限。下位機(jī)以單片機(jī)STC89C52為核心器件,采用4路DS18B20數(shù)字溫度傳感器進(jìn)行多點(diǎn)溫度采樣,其上下限溫度數(shù)據(jù)來自PC機(jī)的設(shè)定,多點(diǎn)溫度數(shù)據(jù)可同時(shí)送至LCD1602顯示,彌補(bǔ)PC機(jī)擔(dān)任其他任務(wù)時(shí)不能實(shí)時(shí)看到溫度的不足。
讀者也可在該系統(tǒng)的基礎(chǔ)上進(jìn)行擴(kuò)展,例如,由PC機(jī)檢測(cè)到溫度超限時(shí)通知單片機(jī)報(bào)警,PC機(jī)接收的數(shù)據(jù)可以做歷史保存,并對(duì)數(shù)據(jù)采樣進(jìn)行圖像的繪制和分析。
圖5 單片機(jī)與并行LCD1602液晶和MAX202的接口電路
圖7 上位機(jī)運(yùn)行界面
[1]趙建領(lǐng),薛園園,等. 51單片機(jī)開發(fā)與應(yīng)用技術(shù)詳解[M].北京:電子工業(yè)出版社,2009.
[2]張維君,等.基于PC機(jī)串口與DS18B20的單線多點(diǎn)溫度測(cè)量[J].儀表技術(shù)與傳感器,2009(4):52-54.
[3]馬云峰.單片機(jī)與數(shù)字溫度傳感器DS18B20的接口設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2002(10):279-280.
[4]郭天祥.51單片機(jī)C語言教程—入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2009.
The multi-channel temperature tester based on DS18B20
WANG Li-juan,WANG Yan
本文設(shè)計(jì)了4路溫度測(cè)試顯示系統(tǒng)。下位機(jī)以STC89C52單片機(jī)為主控芯片,溫度傳感器采用DALLAS公司的數(shù)字溫度傳感器DS18B20,采集4路溫度數(shù)據(jù),并將溫度數(shù)據(jù)傳送至單片機(jī),同時(shí)由單片傳經(jīng)由串口送至PC機(jī)和LCD1602液晶進(jìn)行顯示。PC機(jī)采用VB編寫控制界面和通信程序,可設(shè)定各通道溫度的上下限,并檢測(cè)和顯示當(dāng)前溫度,同時(shí)對(duì)于超限溫度進(jìn)行提示。
單片機(jī);溫度傳感器DS18B20;RS232
王麗娟(1979-),女,河南長葛人,講師,碩士,研究方向?yàn)橛?jì)算機(jī)通信及自動(dòng)控制。
TP273.1
A
1009-0134(2013)01(下)-0123-05
10.3969/j.issn.1009-0134.2013.01(下).36
2012-09-05
基于DS18B20的網(wǎng)絡(luò)型溫度測(cè)試系統(tǒng)(2011YJ07)