<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > 基于AT89C51和DS18B20的最簡溫度測量系統(tǒng)

          基于AT89C51和DS18B20的最簡溫度測量系統(tǒng)

          作者: 時(shí)間:2012-03-29 來源:網(wǎng)絡(luò) 收藏

          l 引 言

          本文引用地址:http://www.ex-cimer.com/article/194194.htm

          溫度的測量和控制在激光器、光纖光柵的使用及其他的工農(nóng)業(yè)生產(chǎn)和科學(xué)研究中應(yīng)用廣泛。溫度檢測的傳統(tǒng)方法是使用諸如熱電偶、熱電阻、半導(dǎo)體PN結(jié)之類的模擬溫度傳感器。信號經(jīng)取樣、放大后通過模數(shù)轉(zhuǎn)換,再交自單片機(jī)處理。被測溫度信號從溫敏元件到單片機(jī),經(jīng)過眾多器件,易受干擾、不易控制且精度不高。因此,本文介紹一種新型的可編程溫度傳感器DS20,他能代替模擬溫度傳感器和信號處理電路,直接與單片機(jī)溝通,完成溫度采集和數(shù)據(jù)處理。DS20與AT51結(jié)合實(shí)現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強(qiáng),適合于惡劣環(huán)境下進(jìn)行現(xiàn)場溫度測量,有廣泛的應(yīng)用前景。

          2 溫度測量系統(tǒng)硬件

          系統(tǒng)結(jié)構(gòu)圖如圖1所示[1]。這里通過上拉電阻直接驅(qū)動LED顯示。以增加線路復(fù)雜度為代價(jià),減少芯片數(shù)量。

          11.jpg

          2.1數(shù)字溫度傳感器DS20

          DS18是美國DALLAS公司推出的單總線數(shù)字測溫芯片。他具有獨(dú)特的單總線接口方式,僅需使用1個端口就能實(shí)現(xiàn)與單片機(jī)的雙向通訊。采用數(shù)字信號輸出提高了信號抗干擾能力和溫度測量精度。他的工作電壓使用范圍寬(3.0~5.5 V),可
          以采用外部供電方式,也可以采用寄生電源方式,即當(dāng)總線DQ為高電平時(shí),竊取信號能量給DS18供電。他還有負(fù)壓特性,電源極性接反時(shí),DS18不會因接錯線而燒毀,但不能正常工作??梢酝ㄟ^編程實(shí)現(xiàn)9~12位的溫度轉(zhuǎn)換精度設(shè)置。由表1[2]可見,設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間就越長,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。

          DS18B20采用3腳TO-92封裝,形如三極管,同時(shí)也有8腳SOIC封裝,還有6腳的TSOC封裝。測溫范圍為-55~+125℃,在一10~85℃范圍內(nèi),精度為±0.5℃。每一個DS18B20芯片的ROM中存放了一個64位ID號:前8位是產(chǎn)品類型編號,隨后48位是該器件的自身序號,最后8位是前面56位的循環(huán)冗余校驗(yàn)碼。又因其可以采用寄生電源方式供電。因此,一條總線上可以同時(shí)掛接多個DS18B20,實(shí)現(xiàn)多點(diǎn)測溫系統(tǒng)。另外用戶還可根據(jù)實(shí)際情況設(shè)定非易失性溫度報(bào)警上下限值TH和TL。DS18B20檢測到溫度值經(jīng)轉(zhuǎn)換為數(shù)字量后,自動存入存儲器中,并與設(shè)定值TH或TL進(jìn)行比較,當(dāng)測量溫度超出給定范圍時(shí),就輸出報(bào)警信號,并自動識別是高溫超限還是低溫超限。

          22.jpg

          2.2 AT51單片機(jī)

          AT51單片機(jī)是ATMEL公司生產(chǎn)的高性能8位單片機(jī),主要功能特性如下:

          ①兼容MCS-51指令系統(tǒng);

          ②32個雙向I/O口,兩個16位可編程定時(shí)/計(jì)數(shù)器;

          ③1個串行中斷,兩個外部中斷源;

          ④可直接驅(qū)動LED;

          ⑤低功耗空閑和掉電模式;

          ⑥4 kB可反復(fù)擦寫(>1 000次)FLASI ROM;

          ⑦全靜態(tài)操作O~24 MHz;

          ⑧128×8 b內(nèi)部RAM。

          該款芯片的超低功耗和良好的性能價(jià)格比使其非常適合嵌入式產(chǎn)品應(yīng)用。

          3 溫度測量系統(tǒng)軟件

          DS18B20簡單的硬件接口是以相對復(fù)雜的接口編程為代價(jià)。由于DS18B20通過單總線與單片機(jī)進(jìn)行通訊,所以其通訊功能是分時(shí)完成的。他與單片機(jī)的接口協(xié)議是通過嚴(yán)格的時(shí)序來實(shí)現(xiàn)的,只有在特定的時(shí)隙,才能實(shí)現(xiàn)DS18B20數(shù)據(jù)的寫入和讀出。這里以AT89和一個DS18B20通訊為例,列出部分通訊的匯編語言代碼。

          33.jpg

          3.1 初始化子程序(RESET)

          與DS18B20的所有通訊都是由一個單片機(jī)的復(fù)位脈沖和一個DS18B20的應(yīng)答脈沖開始的。單片機(jī)先發(fā)一個復(fù)位脈沖,保持低電平時(shí)間最少480μs,最多不能超過960μs。然后,單片機(jī)釋放總線,等待DS18B20的應(yīng)答脈沖。DS18B20在接受到復(fù)位脈沖后等待15~60μs才發(fā)出應(yīng)答脈沖。應(yīng)答脈沖能保持60~240μs。單片機(jī)從發(fā)送完復(fù)位脈沖到再次控制總線至少要等待480 μs。程序代碼如下:

          1.jpg

          3.2 WRITE子程序

          寫時(shí)隙需要15~75 μs,且在2次獨(dú)立的寫時(shí)隙之間至少需要1μs的恢復(fù)時(shí)間。寫時(shí)隙起始于單片機(jī)拉低總線。以要把單片機(jī)A中的數(shù)據(jù)發(fā)給DS18B20為例,程序代碼如下:

          3.3 READ子程序

          讀時(shí)隙需15~60 μs,且在2次獨(dú)立的讀時(shí)隙之間至少需要1 μs的恢復(fù)時(shí)間。讀時(shí)隙起始于單片機(jī)拉低總線至少1 μs。DSl8820在讀時(shí)隙開始15μs后開始采樣總線電平。以單片機(jī)讀取2 B的數(shù)據(jù)為例。程序代碼如下:

          3.jpg

          4 結(jié) 語

          用DS18820測量溫度,在其內(nèi)部就能進(jìn)行A/D轉(zhuǎn)換,輸出數(shù)字量與單片機(jī)直接通訊,無需外加A/D轉(zhuǎn)換器,轉(zhuǎn)換速度快,降低了成本,而且簡化了電路,提高了系統(tǒng)的集成度,使其滿足了最簡的要求。這個溫度傳感器稍加改良,配合半導(dǎo)體制冷器還能實(shí)現(xiàn)高精度的溫度控制功能。

          半導(dǎo)體制冷相關(guān)文章:半導(dǎo)體制冷原理




          關(guān)鍵詞: 18B 89C C51 B20

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();