摘要:目前DS18B20數(shù)據(jù)的采集方法,,存在不能自動(dòng)更新DS18B20序列號(hào)和定位DS18B20的不足,,因此不能及時(shí)進(jìn)行 DS18B20的更換。本課題利用單片機(jī)I/O端口號(hào)" title="端口號(hào)">端口號(hào)和DS18B20的溫度報(bào)警觸發(fā)器(TH和TL),,作為在外部存儲(chǔ)器中的存儲(chǔ)地址和DS18B20的物理地址,,實(shí)現(xiàn)了DS18B20和ROM序列號(hào)的自動(dòng)更新,和溫度數(shù)據(jù)的準(zhǔn)確定位,。并給出了軟,、硬件設(shè)計(jì)" title="硬件設(shè)計(jì)">硬件設(shè)計(jì)。
關(guān)鍵詞:DS18B20 AVR單片機(jī),;單總線
0 引言
溫度監(jiān)控系統(tǒng)在工業(yè),、農(nóng)業(yè)和醫(yī)療領(lǐng)域擁有很大的應(yīng)用價(jià)值和前景。隨著計(jì)算機(jī)技術(shù),、測(cè)量技術(shù)和無線通信技術(shù)的發(fā)展,,傳統(tǒng)的人工監(jiān)控由于存在很多缺點(diǎn),正在逐漸被電子監(jiān)控所代替?,F(xiàn)有的一根I/O線上連接多個(gè)DS18B20的數(shù)據(jù)采集方法,,在DS18B20接入系統(tǒng)之前,需要采用人工方式將DS18B20的64位ROM序列號(hào)逐一讀出,,并在單片機(jī)程序中或外部存儲(chǔ)器中進(jìn)行存儲(chǔ),。這種方法給DS18B20物理位置的確定帶來了困難,特別是當(dāng)更換出現(xiàn)故障的DS18B20時(shí),,這個(gè)問題變得尤為突出,。
因此,本課題通過采用軟件編程與硬件設(shè)計(jì)相結(jié)合的方式,,解決了在AVR單片機(jī)與DS18B20結(jié)合的測(cè)溫系統(tǒng)中數(shù)字傳感器" title="數(shù)字傳感器">數(shù)字傳感器的更換問題,。在本課題提出的解決方案中,數(shù)據(jù)采集模塊采用低功耗AVR單片機(jī)-Atmega16,、單總線" title="單總線">單總線數(shù)字溫度傳感器DS18B20以及外部存儲(chǔ)器-低能耗串行EEP-ROM,。系統(tǒng)根據(jù)DS18B20數(shù)量的多少,可以選擇基于MAX485的有線組網(wǎng),,也可以選擇基于nRF905或ZigBee的分布式無線組網(wǎng),。
1 DS18B20簡(jiǎn)介
1.1 概述
DS18B20是由美國(guó)DALLAS(達(dá)拉斯)公司生產(chǎn)的高性能單線數(shù)字式溫度傳感器,。該傳感器提供9到12位溫度讀數(shù);可實(shí)現(xiàn)-55℃到+125℃范圍內(nèi)的溫度測(cè)量,,增量值為0.5℃?,F(xiàn)場(chǎng)測(cè)量的溫度值通過單總線接口傳給微處理器,多個(gè)DS18B20可以存在于同一條單線總線上,。因此,,在實(shí)際應(yīng)用中可以在多個(gè)不同的地方放置DS18B20,并將這些傳感器接在同一條單線總線上,,由一個(gè)單片機(jī)進(jìn)行控制,。對(duì)DS18B20數(shù)字傳感器供電有兩種方式:一是寄生電源供電" title="電源供電">電源供電,;二是外部電源供電,。每個(gè)DS18B20在出廠時(shí)都有一個(gè)唯一的64位編號(hào),存放在內(nèi)部ROM中,。
1.2 引腳說明
DS18B20只有三個(gè)引腳:一個(gè)是GDN(電源地),;一個(gè)是VDD(當(dāng)采用寄生電源供電時(shí),VDD接地,;若采用外部電源供電時(shí),,VDD接工作電源 );還有一個(gè)引腳是DQ(數(shù)據(jù)輸入/輸出引腳),。
1.3 硬件電路
1.3.1 寄生電源供電電路
1.3.2 外部電源供電電路
采用寄生電源供電時(shí),,VDD引腳必須接地,由I/O引腳為DS18B20提供電源電流,。采用外部電源供電時(shí),,VDD接外部電源,為DS18B20提供電源電流,。寄生電源有雙重優(yōu)點(diǎn):a.利用此引腳,,遠(yuǎn)程溫度檢測(cè)無需本地電源;b.缺少正常電源條件下也可以讀ROM,。但是這種供電方式無法保證在數(shù)據(jù)轉(zhuǎn)換期間的供電,,從而DS18B20無法進(jìn)行精確地溫度轉(zhuǎn)換。當(dāng)多個(gè)DS18B20掛在同一根I/O線上并同時(shí)進(jìn)行溫度轉(zhuǎn)換時(shí),,這個(gè)問題變得更加明顯,。所以本課題采用外部電源供電方式,以達(dá)到提高溫度轉(zhuǎn)換精確度的目的,。
1.4 內(nèi)部結(jié)構(gòu)
DS18B20內(nèi)部主要包括:64位光刻ROM,、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL,、配置寄存器,。如圖3所示:
1.4.1 64位光刻ROM
用于存儲(chǔ)64位序列號(hào),。該序列號(hào)是DS18B20的唯一編號(hào),在出廠前被光刻在64位ROM中,。DS18B20在與單片機(jī)通信時(shí),,用此序列號(hào)以區(qū)別其它傳感器。64位序列號(hào)可以看作是DS18B20的地址序列碼,。
64位光刻ROM的位排列是:低8位是產(chǎn)品類型標(biāo)號(hào),;接著的48位是該DS18B20的自身序列號(hào);最后高8位是低56位的循環(huán)冗余校驗(yàn)碼,,該8位又被單獨(dú)提出,,稱為CRC發(fā)生器,主要是實(shí)現(xiàn)串行通信中的數(shù)據(jù)校驗(yàn),,判斷接收的數(shù)據(jù)是否正確,。64為序列號(hào)的作用,是使每一個(gè)DS18B20都各不相同,,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20,。
1.4.2 非易失性溫度報(bào)警觸發(fā)器
DS18B20的溫度報(bào)警觸發(fā)器TH和TL各由一個(gè)非易失性EEPROM字節(jié)構(gòu)成,如果沒有對(duì)DS18B20使用報(bào)警搜索指令,,可以作為一般的EEPROM存儲(chǔ)器使用,。利用每個(gè)DS18B20唯一的序列號(hào)可讀取同一根I/O線上的多個(gè)DS18B20的溫度數(shù)據(jù),利用I/O端口號(hào)和已經(jīng)寫入層數(shù)信息的DS18B20的溫度報(bào)警觸發(fā)器(TH和TL),,可將每個(gè)DS18B20的溫度數(shù)據(jù)和其物理位置對(duì)應(yīng)起來,。因此在DS18B20安裝之前,就需將DS18B20所在層的信息寫入到溫度報(bào)警觸發(fā)器(TH和TL)中,。
2 DS18B20與AVR單片機(jī)的連接
在本課題中DS18B20采用寄生電源供電,,單片機(jī)選用AVR單片機(jī)-Atmega16。之所以選擇AVR單片機(jī),,是因?yàn)槠渚哂?1單片機(jī)無法提供的優(yōu)點(diǎn):a.讀寫速度快,,AVR單片機(jī)采用了大型快速存取寄存器文件和快速單周期指令。其快速存取RISC寄存器文件由32個(gè)通用工作寄存器組成,。AVR用32個(gè)通用寄存器代替累加器,,避免了傳統(tǒng)的累加器與存儲(chǔ)器之間的數(shù)據(jù)傳送,可在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行一條指令來訪問兩個(gè)獨(dú)立的寄存器,,代碼效率比常規(guī)CISC微控制器快十倍,。高效的讀寫速度,更適合于對(duì)及時(shí)性要求高的場(chǎng)合,。b.性價(jià)比高,。c.工作電壓范圍寬(2.7~6V)、抗干擾能力強(qiáng),,這樣更適合在各種條件下處理測(cè)量溫度值,??傊珹VR單片機(jī)在一個(gè)芯片內(nèi)將增強(qiáng)性能的RISC 8位CPU與可下載的FLA-SH相結(jié)合使其成為適合于許多要求,、具有高度靈活性和低成本的嵌入式高效微控制器,。
圖4給出了DS18B20采用外部電源供電方式時(shí),與Atmega16單片機(jī)的硬件連接圖,。
3 DS18B20更新問題的解決方案
本課題在深入研究了數(shù)字傳感器工作機(jī)理的基礎(chǔ)上,,通過硬件設(shè)計(jì)和軟件編程,提出了解決數(shù)字傳感器更換的方案,,并應(yīng)用在了通過無線傳感器網(wǎng)絡(luò)遠(yuǎn)程控制傳感器的設(shè)計(jì)中,,而且在硬件平臺(tái)上實(shí)現(xiàn)了仿真。圖5是通過Proteus 7單片機(jī)軟件仿真系統(tǒng)設(shè)計(jì)的,,單片機(jī)控制DS18-B20并顯示測(cè)試結(jié)果的電路圖,。
3.1 硬件設(shè)計(jì)
單片機(jī)通過I/O口控制DS18B20,每個(gè)I/O口外接60個(gè)DS18B20,,同時(shí)單片機(jī)通過SPI串行接口外接外部存儲(chǔ)器EEPROM,,如圖6所示,。
本課題中,,外部存儲(chǔ)器EEPROM選用意法半導(dǎo)體(ST)生產(chǎn)的M95128;選用Atmega16單片機(jī),。DS18B20采用外部電源供電方式,,所以VCC接外部電源,GDN接地,。
M95128芯片采用MLP8微型封裝技術(shù),,因此,可以大大節(jié)省產(chǎn)品的空間和成本,;待機(jī)功耗低于3μA,,也是該芯片的一大特點(diǎn);四線的SPI接口支持最高 2 Mbit/s的通信速率,,除提供標(biāo)準(zhǔn)的硬件寫保護(hù)功能外,,還支持軟件寫保護(hù)。外部存儲(chǔ)器EEPROM用來存放單片機(jī)控制的所有DS1-8B20的序列號(hào),,和對(duì)應(yīng)的邏輯地址,。一個(gè)DS18B20的序列號(hào)占八個(gè)字節(jié),所以一路數(shù)據(jù)線上所接DS18B20溫度傳感器的個(gè)數(shù)與外部存儲(chǔ)器EEPR-OM的存儲(chǔ)空間有關(guān),。M95128芯片的容量達(dá)128kbit,,可以存儲(chǔ)13107個(gè)DS18B20的序列號(hào)和對(duì)應(yīng)的邏輯地址,足以滿足本課題的需要,。
單片機(jī)Atmega16的PB5(MOSI)口接EEPROM的DI(數(shù)據(jù)輸入)口,,PB6(MISO)口接DO(數(shù)據(jù)輸出)口,,PB7(SCK) 口接SK(讀寫時(shí)鐘信號(hào)輸入引腳)。單片機(jī)讀到每個(gè)DS18B20的序列號(hào)后,,通過PB5口將序列號(hào)和對(duì)應(yīng)的邏輯地址寫入EEPROM中,。需要某個(gè)邏輯地址對(duì)應(yīng)的序列號(hào)時(shí),EEPROM通過DO口將序列號(hào)傳入單片機(jī)中,。
3.2 軟件設(shè)計(jì)
本課題設(shè)計(jì)使單片機(jī)每次上電時(shí),,都重新讀取每根數(shù)據(jù)線上的每個(gè)DS18B20的序列號(hào)和溫度報(bào)警器中的內(nèi)容,I/O端口號(hào)+溫度報(bào)警觸發(fā)器中的層信息即為該DS18B20的邏輯地址,。單片機(jī)將讀取到的各DS18B20的序列號(hào)與其對(duì)應(yīng)的邏輯地址,,通過MOSI引腳保存在外部存儲(chǔ)器EEP-ROM中。在控制模塊" title="控制模塊">控制模塊的固化程序中,,只涉及傳感器的邏輯地址,。當(dāng)需要訪問某個(gè)傳感器時(shí),單片機(jī)會(huì)根據(jù)固化程序中的邏輯地址在EEPROM中查找該邏輯地址對(duì)應(yīng)的 DS18B20序列號(hào),,從而找到需要訪問的傳感器,。在更換了某個(gè)DS18B20時(shí),只需給單片機(jī)重新上電,,微控制會(huì)更新EEPRO-M,,而不需修改控制模塊中的固化程序。
本課題中,,使用ICCAVR編譯器作為軟件開發(fā)環(huán)境,,編譯C語言程序代碼。向EEPROM中保存序列號(hào)的程序流程圖如圖7所示,。
根據(jù)控制模塊中涉及的邏輯地址,,單片機(jī)在EEPROM中查找對(duì)應(yīng)的DS18B20的序列號(hào)的程序流程如圖8所示。
4 結(jié)語
無線測(cè)溫系統(tǒng)的應(yīng)用前景非常廣闊,。本課題提出的通過外接EEPROM存儲(chǔ)器,,保存DS18B20的序列號(hào)和對(duì)應(yīng)的邏輯地址的方案,解決了 DS-18B20的更新問題,??梢詷O大地提高技術(shù)人員及工作人員的工作效率;同時(shí),,由于在通信鏈路中傳輸?shù)氖沁壿嫷刂?,所以減少了鏈路中的冗余信息,增加有效信息的傳輸,,提高無線傳輸效率,。因此,本課題設(shè)計(jì)的溫度采集系統(tǒng)具有運(yùn)行速率快、性能穩(wěn)定,、數(shù)字化程度高,、便于維護(hù)等特點(diǎn)。此系統(tǒng)在各類數(shù)字通信,、環(huán)境監(jiān)測(cè),、安防系統(tǒng)等多個(gè)領(lǐng)域具有廣泛的應(yīng)用價(jià)值。并且已經(jīng)在CX-AT16硬件平臺(tái)上實(shí)現(xiàn)了仿真,。