基于nRF24L01的多點溫度采集系統(tǒng)設(shè)計_第1頁
基于nRF24L01的多點溫度采集系統(tǒng)設(shè)計_第2頁
基于nRF24L01的多點溫度采集系統(tǒng)設(shè)計_第3頁
基于nRF24L01的多點溫度采集系統(tǒng)設(shè)計_第4頁
基于nRF24L01的多點溫度采集系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第3頁 共 3頁摘 要隨著信息領(lǐng)域各種技術(shù)的發(fā)展,我們在數(shù)據(jù)采集方面的技術(shù)也取得了很大的進(jìn)步,采集數(shù)據(jù)的信息化是目前社會的主要發(fā)展方向。各種領(lǐng)域都用到了數(shù)據(jù)采集,比如石油勘探、地震數(shù)據(jù)采集領(lǐng)域。隨著工農(nóng)業(yè)生產(chǎn)對溫濕度的要求越來越高,準(zhǔn)確測量溫度變得非常重要。本課題提出一種基于單片機的無線多點溫度采集電路設(shè)計,該方案是利用單片機控制ds18b20溫度傳感器采集溫度,溫度采集成功后由nrf24l01無線通信模塊進(jìn)行數(shù)據(jù)的無線傳輸,在接收板上也有一塊無線通信模塊與它配對。數(shù)據(jù)成功接收后由單片機去控制lcd1602液晶實時顯示溫度。本系統(tǒng)還設(shè)定了一個溫度報警,當(dāng)溫度超過這個界限就由蜂鳴器發(fā)出警報,當(dāng)

2、溫度下降至報警溫度以下時,警報自動停止。本系統(tǒng)做的是多點溫度采集,包括兩塊無線發(fā)送模塊和一塊無線接收模塊,采集到的溫度并排顯示在同一個lcd1602上。用到的主要器件是at89s52單片機、數(shù)字溫度傳感器ds18b20和無線芯片nrf24l01,測量結(jié)果用lcd1602液晶顯示。關(guān)鍵詞:單片機;多點溫度采集;無線通信模塊;溫度報警。abstract along with the development of the technology of information field, we had also made a lot of progress in data collection tec

3、hnology, the data gathering information is the main development direction of the society. various fields also use the data collection, such as petroleum exploration, seismic data acquisition field. along with increasingly demanding of the industry and agriculture production to the temperature and hu

4、midity,more accurate measurement temperature becomes very important.this topic is wireless acquisition multipoint temperature acquisition and transmission circuit design base on scm, the project is using scm to control the temperature sensor ds18b20 to collection temperature, use nrf24l01wireless co

5、mmunication module to transmit if receive temperature successfully, there is a wireless communication module pairing with it in dashreceiver.useing scm to control lcd1602 liquid crystal to display temperatureafter receiving temperature successfully.the system also set a warning temperature, when the

6、 temperature over the line ,the buzzer will call, when the temperature belowthe alarm temperature below, alarm will stop. this system realizes multipoint temperature gathering,including twowireless transmission module and one wireless receiving module.the temperature will show on the same lcd1602.th

7、is systems main components is at89s52 scm and digital temperature sensor ds18b20 and wireless chip nrf24l01, the measured result is displaying by lcd1602.key words:scm; multipoint temperature gathering; wireless communication module;temperature warning.目 錄引言 11 課題方案設(shè)計22 硬件設(shè)計32.1 電源電路 32.2 溫度傳感器電路32.

8、3 無線傳輸電路42.3.1nrf24l01無線模塊組成42.3.2nrf24l01無線模塊應(yīng)用62.4 顯示電路 62.4.1字符型液晶顯示模塊簡介72.4.2字符型液晶顯示模塊引腳和內(nèi)部結(jié)構(gòu) 72.5 單片機系統(tǒng) 82.5.1at89s52簡介 82.5.2at89s52引腳說明 82.6 警報電路113 軟件設(shè)計 123.1 系統(tǒng)概述123.2 程序設(shè)計流程圖 123.3 ds18b20程序設(shè)計133.4 nrf24l01程序設(shè)計 163.5 字符型液晶顯示模塊程序設(shè)計 174 調(diào)試及結(jié)果 205 結(jié)論 22謝辭23參考文獻(xiàn)24附錄25 第40頁 共 40頁引言21世紀(jì)的今天,科學(xué)技術(shù)的

9、發(fā)展日新月異,科學(xué)技術(shù)的進(jìn)步同時也帶動了測量技術(shù)的發(fā)展,現(xiàn)代控制設(shè)備不同于以前,它們在性能和結(jié)構(gòu)發(fā)生了翻天覆地的變化。我們已經(jīng)進(jìn)入了高速發(fā)展的信息時代,測量技術(shù)是當(dāng)今社會的主流,廣泛地深入到應(yīng)用工程的各個領(lǐng)域。溫度是工業(yè)、農(nóng)業(yè)生產(chǎn)中常見的和最基本的參數(shù)之一,在生產(chǎn)過程中常需對溫度進(jìn)行檢測和監(jiān)控,采用微型機進(jìn)行溫度檢測、數(shù)字顯示、信息存儲及實時控制,對于提高生產(chǎn)效率和產(chǎn)品質(zhì)量、節(jié)約能源等都有重要的作用。伴隨工業(yè)科技、農(nóng)業(yè)科技的發(fā)展,溫度測量需求越來越多,也越來越重要。但是在一些特定環(huán)境溫度監(jiān)測環(huán)境范圍大,測點距離遠(yuǎn),布線很不方便。這時就要采用無線方式對溫度數(shù)據(jù)進(jìn)行采集。 多路無線溫度采集系統(tǒng)可被

10、廣泛應(yīng)用于溫度測量或相應(yīng)的可轉(zhuǎn)換為溫度量或供電故障監(jiān)控的工業(yè)、農(nóng)業(yè)、環(huán)保、服務(wù)業(yè)、安全監(jiān)控等工程中,例如:城市路燈故障檢測和供電線路防盜監(jiān)視、城市居民小區(qū)供熱檢測、大型倉庫溫度檢測、工業(yè)生產(chǎn)測控、農(nóng)業(yè)生產(chǎn)溫度測控、環(huán)保工程、故障監(jiān)控工程等??紤]到許多工業(yè)環(huán)境中對多點溫度進(jìn)行監(jiān)控,一般需要測量幾十個點以上。本文設(shè)計多點無線溫度監(jiān)控系統(tǒng)。本設(shè)計是以atmel公司的at89s52單片機作為控制核心,提出基于ds18b20的溫度采集與控制系統(tǒng)??刂破魍ㄟ^溫度傳感器實時檢測各節(jié)點的溫度變化,并在lcd1602上循環(huán)顯示各節(jié)點溫度的變化。因為采用微型機進(jìn)行溫度檢測、數(shù)字顯示、信息存儲及實時控制,對于提高生

11、產(chǎn)效率和產(chǎn)品質(zhì)量、節(jié)約能源等都有重要的作用,并且溫度參數(shù)對工業(yè)生產(chǎn)的重要性,所以溫度測量系統(tǒng)的精確度和智能化一直受到企業(yè)的重視。所以學(xué)習(xí)并研究溫度測量及相關(guān)知識可做為一個較為實用的課題的方向,能獲得較實用的知識和方法。因此溫度測控技術(shù)是一個很實用、也很重要的技術(shù),值得去研究掌握。它應(yīng)用的領(lǐng)域也相當(dāng)廣泛,可以應(yīng)用到消防電氣的非破壞性溫度檢測,電力、電訊設(shè)備的過熱故障預(yù)知檢測,空調(diào)系統(tǒng)的溫度檢測,各類運輸工具之組件的過熱檢測,保全與監(jiān)視系統(tǒng)之應(yīng)用,醫(yī)療與健診的溫度測試,化工、機械等設(shè)備溫度過熱檢測。因此前景是相當(dāng)?shù)目捎^。1 課題方案設(shè)計首先要對芯片作出選擇。采用溫度芯片ds18b20測量溫度,可以

12、體現(xiàn)系統(tǒng)芯片化這個趨勢。部分功能電路的集成,使總體電路更簡潔,搭建電路和焊接電路時更快。而且,集成塊的使用,有效地避免外界的干擾,提高測量電路的精確度。所以集成芯片的使用將成為電路發(fā)展的一種趨勢。本方案應(yīng)用這一溫度芯片,也是順應(yīng)這一趨勢。主控部分采用at89s52八位單片機實現(xiàn)。單片機軟件編程的自由度大,可通過編程實現(xiàn)各種各樣的算術(shù)算法和邏輯控制。而且體積小,硬件實現(xiàn)簡單,安裝方便。本系統(tǒng)以單片機為核心,構(gòu)成一個包含溫度采集、處理、無線傳輸、顯示的無線溫度采集系統(tǒng),原理框圖見圖1.1。圖1.1 系統(tǒng)設(shè)計框圖2 硬件設(shè)計 本課題設(shè)計的電路包括:電源電路、晶振電路、復(fù)位電路、無線收發(fā)電路、報警電路

13、及顯示電路。2.1 電源電路(1)單片機供電本設(shè)計所用的是at89s52單片機、lcd1602液晶及ds18b20芯片,直接由電池盒輸入+5v的電壓即可讓它們正常工作。(2)nrf24l01無線模塊nrf24l01芯片的供電電壓為1.9v到3.6v之間,如果直接接+5v電壓會讓芯片燒毀,所以設(shè)計了一個3.3v輸出的穩(wěn)壓電路。穩(wěn)壓電路的作用是當(dāng)輸入電壓波動及其它外界因素變化時,還可以穩(wěn)定輸出直流電壓。5v輸入電壓經(jīng)過電解電容進(jìn)行一級濾波,去除雜波干擾。再經(jīng)過三端穩(wěn)壓管ams1117-3.3輸出穩(wěn)定的3.3v電壓。3.3v電壓再經(jīng)過電解電容進(jìn)行二級濾波,讓電壓更穩(wěn)定,保證nrf24l01芯片不被燒

14、毀。穩(wěn)壓電源原理圖見圖2.1圖2.1 穩(wěn)壓電源電路原理圖2.2 溫度傳感器電路 本方案采用ds18b20芯片進(jìn)行溫度采集。溫度芯片ds18b20是dallas公司生產(chǎn)的一線式數(shù)字溫度傳感器,具有3引腳to92小體積封裝形式。ds18b20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有l(wèi)tm8877,ltm8874等等。主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的ds18b20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用

15、于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。內(nèi)部結(jié)構(gòu)見圖2.2。圖2.2 ds18b20內(nèi)部結(jié)構(gòu)ds18b20引腳定義: (1)dq為數(shù)字信號輸入/輸出端; (2)gnd為電源地; (3)vdd為外接供電電源輸入端(在寄生電源接線方式時接地)。具體見圖2.3。圖2.3 ds18b20引腳圖2.3 無線傳輸電路2.3.1nrf24l01無線模塊組成 nrf24l01是nordic公司最近生產(chǎn)的一款無線通信芯片,采用fsk調(diào)制,內(nèi)部集成nordic自己的enhanced short burst協(xié)議??梢詫崿F(xiàn)點對點或是1對6的無線通信。無線通信速度廳以達(dá)到2m(bps)。nordic公司提供通信模塊的ge

16、rber文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機愛好者只需要為單片機系統(tǒng)預(yù)留5個gpio,1個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能,非常適合用來為mcu系統(tǒng)構(gòu)建無線通信功能。芯片管腳分布見圖2.4圖2.4 nrf24l01芯片管腳分布芯片管腳分布已經(jīng)在上圖展示出來,我們只需要關(guān)注六個控制和數(shù)據(jù)信號即可,分別為csn、sck、miso、mosi、irq、ce。下面對這幾個管腳進(jìn)行簡單的分析。csn:芯片的片選線,csn為低電平芯片工作。sck:芯片控制的時鐘線(spi時鐘)。miso:芯片控制數(shù)據(jù)線。mosi:芯片控制數(shù)據(jù)線。irq:中斷信號。無線通信過程中mcu主要是通過irq與

17、nrf24l01進(jìn)行通信。ce:芯片的模式控制線。在csn為低的情況下,ce協(xié)同nrf24l01的config寄存器共同決定nrf24l01的狀態(tài)。整個無線模塊的原理圖如圖2.5所示圖2.5 基于nrf24l01的無線模塊電路 本次設(shè)計所用的無線模塊則直接套用上圖所示的無線模塊。2.3.2nrf24l01無線模塊應(yīng)用nrf24l01無線收發(fā)電路如圖2.6所示。其中,發(fā)送和接收都用的是同一個無線模塊。由穩(wěn)壓電源電路供電3.3v。圖2.6 nrf24l01無線收發(fā)電路發(fā)射數(shù)據(jù)時,首先將nrf24l01配置為發(fā)射模式:接著把接收節(jié)點地址tx_addr和有效數(shù)據(jù)tx_pld按照時序由spi口寫入nrf

18、24l01緩存區(qū),tx_pld必須在csn為低時連續(xù)寫入,而tx_addr在發(fā)射時寫入一次即可,然后ce置為高電平并保持至少10s,延遲130s后發(fā)射數(shù)據(jù);若自動應(yīng)答開啟,那么nrf24l01在發(fā)射數(shù)據(jù)后立即進(jìn)入接收模式,接收應(yīng)答信號(自動應(yīng)答接收地址應(yīng)該與接收節(jié)點地址tx_addr一致)。如果收到應(yīng)答,則認(rèn)為此次通信成功,tx_ds置高,同時tx_pld從tx fifo中清除;若未收到應(yīng)答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(arc)達(dá)到上限,max_rt置高,tx fifo中數(shù)據(jù)保留以便再次重發(fā);max_rt或tx_ds置高時,使irq變低,產(chǎn)生中斷,通知mcu。最后發(fā)射成

19、功時,若ce為低則nrf24l01進(jìn)入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且ce為高,則進(jìn)入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且ce為高,則進(jìn)入空閑模式2。接收數(shù)據(jù)時,首先將nrf24l01配置為接收模式,接著延遲130s進(jìn)入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效的地址和crc時,就將數(shù)據(jù)包存儲在rx fifo中,同時中斷標(biāo)志位rx_dr置高,irq變低,產(chǎn)生中斷,通知mcu去取數(shù)據(jù)。若此時自動應(yīng)答開啟,接收方則同時進(jìn)入發(fā)射狀態(tài)回傳應(yīng)答信號。最后接收成功時,若ce變低,則nrf24l01進(jìn)入空閑模式1。2.4 顯示電路本設(shè)計用的是字符型液晶lcd1602來顯示采集的溫度。2.4.1字符型液晶顯示模塊

20、簡介lcd1602液晶外形尺寸如圖2.7所示。圖2.7 lcd1602外形尺寸1602液晶模塊內(nèi)部的字符發(fā)生存儲器(cgrom)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“a”的代碼是01000001b(41h),顯示時模塊把地址41h中的點陣字符圖形顯示出來,我們就能看到字母“a”。2.4.2字符型液晶顯示模塊引腳和內(nèi)部結(jié)構(gòu)lcd1602液晶顯示模塊引腳如下表2.1所示。表2.1 lcd1602模塊引腳本設(shè)計所使用的lcd1602原理圖見圖2.9。圖2.9 lcd1602原理圖2.

21、5單片機系統(tǒng)本設(shè)計使用的是atmel公司的at89s52單片機。2.5.1at89s52簡介at89s52 是一種低功耗、高性能cmos8位微控制器,具有 8k 在系統(tǒng)可編程flash 存儲器。使用atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80c51 產(chǎn)品指令和引腳完全兼容。片上flash允許程序存儲器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位cpu 和在系統(tǒng) 可編程flash,使得at89s52為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。 at89s52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)flash,256字節(jié)ram, 32 位i/o 口線,看門狗定時器,2

22、 個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。另外,at89s52 可降至0hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,cpu 停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,ram內(nèi)容被保存,振蕩器被凍結(jié), 單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。2.5.2 at89s52引腳說明at89s52單片機的引腳如圖2.10所示。圖2.10 at89s52引腳下面將對單片機的引腳進(jìn)行說明。vcc:電源電壓輸入端。 gnd:電源地。 p0口:p0口為一個8位漏級開路雙向i/o口,每腳可吸

23、收8ttl門電流。當(dāng)p1口的管腳第一次寫1時,被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在fiash編程時,p0口作為原碼輸入口,當(dāng)fiash進(jìn)行校驗時,p0輸出原碼,此時p0外部必須被拉高。 p1口:p1口是一個內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在flash編程和校驗時,p1口作為第八位地址接收。 p2口:p2口為一個內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個ttl門電流,當(dāng)p2口被

24、寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,p2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,p2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,p2口輸出其特殊功能寄存器的內(nèi)容。p2口在flash編程和校驗時接收高八位地址信號和控制信號。 p3口:p3口管腳是8個帶內(nèi)部上拉電阻的雙向i/o口,可接收輸出4個ttl門電流。當(dāng)p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(ill)這是由于上拉

25、的緣故。p3口除了作為普通i/o口,還有第二功能: p3.0 rxd(串行輸入口)。 p3.1 txd(串行輸出口)。 p3.2 /int0(外部中斷0)。 p3.3 /int1(外部中斷1)。p3.4 t0(t0定時器的外部計數(shù)輸入)。 p3.5 t1(t1定時器的外部計數(shù)輸入)。 p3.6 /wr(外部數(shù)據(jù)存儲器的寫選通)。 p3.7 /rd(外部數(shù)據(jù)存儲器的讀選通)。 p3口同時為閃爍編程和編程校驗接收一些控制信號。 i/o口作為輸入口時有兩種工作方式,即所謂的讀端口與讀引腳。讀端口時實際上并不從外部讀入數(shù)據(jù),而是把端口鎖存器的內(nèi)容讀入到內(nèi)部總線,經(jīng)過某種運算或變換后再寫回到端口鎖存器。

26、只有讀端口時才真正地把外部的數(shù)據(jù)讀入到內(nèi)部總線。89c51的p0、p1、p2、p3口作為輸入時都是準(zhǔn)雙向口。除了p1口外p0、p2、p3口都還有其他的功能。 rst:復(fù)位輸入端,高電平有效。當(dāng)振蕩器復(fù)位器件時,要保持rst腳兩個機器周期的高電平時間。 ale/prog:地址鎖存允許/編程脈沖信號端。當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時,ale端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ale脈沖。如想

27、禁止ale的輸出可在sfr8eh地址上置0。此時, ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。 psen:外部程序存儲器的選通信號,低電平有效。在由外部程序存儲器取指期間,每個機器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen信號將不出現(xiàn)。 ea/vpp:外部程序存儲器訪問允許。當(dāng)/ea保持低電平時,則在此期間外部程序存儲器(0000h-ffffh),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/ea將內(nèi)部鎖定為reset;當(dāng)/ea端保持高電平時,此間內(nèi)部程序存儲器。在flash編程

28、期間,此引腳也用于施加12v編程電源(vpp)。 xtal1:片內(nèi)振蕩器反相放大器和時鐘發(fā)生器的輸入端。 xtal2:片內(nèi)振蕩器反相放大器的輸出端。2.6 警報電路本設(shè)計的警報電路比較簡單,用了一個蜂鳴器。設(shè)定溫度上限為32攝氏度,當(dāng)采集到的溫度超過上限溫度的時候,蜂鳴器則會一直響;當(dāng)溫度降到上限溫度以下時,蜂鳴器停止鳴叫。原理如圖2.11所示。圖2.11 警報電路原理圖3 軟件設(shè)計3.1 系統(tǒng)概述系統(tǒng)包括軟件和硬件,硬件已經(jīng)在以上的內(nèi)容介紹完了,下面開始介紹軟件。各個模塊獨立工作,但各個模塊都互相影響。3.2程序設(shè)計流程圖發(fā)射電路程序設(shè)計流程圖如圖3.1所示。下面簡單解釋一下本設(shè)計的發(fā)射電路

29、工作流程。首先上電,其中無線通信模塊用3.3v穩(wěn)壓電源,然后溫度采集模塊ds18b20初始化,進(jìn)行溫度檢測以及數(shù)據(jù)存放。存放成功之后由單片機控制把數(shù)據(jù)以數(shù)組形式傳輸?shù)絥rf24l01無線通信模塊進(jìn)行數(shù)據(jù)發(fā)送。發(fā)送之后返回檢測數(shù)據(jù)是否發(fā)射成功,如果發(fā)射成功則重新返回溫度檢測。圖3.1 發(fā)射電路程序設(shè)計流程圖接收電路程序設(shè)計流程圖如圖3.2所示。系統(tǒng)上電,nrf24l01無線模塊采用的是3.3v穩(wěn)壓電源,其它芯片直接用5v。系統(tǒng)初始化,檢測是否接收到發(fā)送模塊發(fā)送過來的數(shù)據(jù)。接收成功后調(diào)用溫度顯示函數(shù),把溫度顯示出來。其中第一塊采集電路板的溫度顯示在lcd1602第一行,第二塊采集電路板的溫度顯示在

30、lcd1602第二行。在此同時,調(diào)用報警函數(shù),一旦接收到的溫度超過設(shè)定的上限溫度之后蜂鳴器會一直鳴叫進(jìn)行溫度警報。當(dāng)溫度降到上限溫度以下時,警報停止。圖3.2 接收電路程序設(shè)計流程圖3.3 ds18b20程序設(shè)計根據(jù)ds18b20的通信協(xié)議,主機控制ds18b20完成溫度轉(zhuǎn)化必須經(jīng)過3個步驟:每一次讀寫之前都要對ds18b20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條rom指令,最后發(fā)送ram指令,這樣才能對ds18b20進(jìn)行預(yù)定的操作。每一步驟都有嚴(yán)格的時序要求,所有的時序都是將主機作為主設(shè)備,單總線器件作為從設(shè)備。每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命

31、令后,主機需要啟動讀指令完成數(shù)據(jù)接受。數(shù)據(jù)和命令的傳輸都是低位在前。時序可分為初始化時序、讀時序和寫時序。復(fù)位時要求cpu將數(shù)據(jù)線下拉500us,然后釋放,ds18b20收到信號后等待1560us左右,后發(fā)出60240us的低脈沖。讀時序分為讀“0”時序和讀“1”時序兩個過程。ds18b20的讀時序是從主機把單總線拉低之后在15us之內(nèi)釋放單總線,把數(shù)據(jù)傳輸?shù)絾慰偩€上。ds18b20完成一個讀時序過程至少需要60us。ds18b20的寫時序仍然可分為寫“0”時序和寫“1”時序兩個過程。ds18b20寫“0”時序和寫“1”時序的要求不同,當(dāng)要寫“0”時,單總線要被拉低至少60us,以保證ds18

32、b20熊貓在1545us同正確采樣i/o線上的“0”電平。當(dāng)要寫“1”時,單總線被拉低后,要在15us內(nèi)釋放單總線。下面介紹ds18b20編程實現(xiàn)的過程。(1)ds18b20初始化程序設(shè)計初始化復(fù)位時序圖如圖3.3所示。圖3.3 ds18b20初始化復(fù)位時序主要程序如下: dq=1;_nop_();_nop_(); /dq復(fù)位,稍微延時dq=0; /拉低總線delay1(80); /延時500us,時序圖上有說明控制器復(fù)位脈沖范圍dq=1; /釋放總線delay1(9); /延時60us,等待temp=dq; /讀ds18b20反饋信號(2)ds18b20寫時序程序設(shè)計 寫時序圖如圖3.4所示

33、。圖3.4 ds18b20的寫時序主要程序如下:for(i=8;i0;i-) dq=1;_nop_();_nop_(); dq=0;_nop_();_nop_();_nop_();_nop_();_nop_(); dq=value&0x01; /從最低位開始寫 delay1(9); value=1; 低位在前,右移 (3)ds18b20讀時序程序設(shè)計 讀時序圖如圖3.5所示。圖3.5 ds18b20的讀時序主要程序如下:for(i=8;i0;i-)dq=1;_nop_();_nop_();value1=1;dq=0;_nop_();_nop_();_nop_();_nop_();dq=1; /

34、釋放總線之后 采樣_nop_();_nop_();_nop_();_nop_();if(dq) /是否1value1|=0x80; delay1(9);(4)ds18b20讀取溫度及溫度處理在這一塊程序中編寫了void read_temp()(讀取溫度)和void work_temp()(溫度處理)兩個函數(shù)。ds18b20中的溫度傳感器可完成對溫度的測量,當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,轉(zhuǎn)換后的溫度以補碼形式存放在調(diào)整暫存存儲器的第0和第1個字節(jié)中。ds18b20溫度值格式表如表3.1所示。表3.1 ds18b20溫度值格式表本設(shè)計顯示的溫度為正溫度,兩位整數(shù)和一位小數(shù)。分兩部分進(jìn)行操作:整數(shù)和小數(shù)。整

35、數(shù)部分的“table6=(temp_data0&0xf0)4)|(temp_data1&0x0f)4)”語句把整數(shù)整合到一起,并且默認(rèn)為正溫度。小數(shù)部分是將測到的數(shù)值再乘以0.0625,取近似值作為第一小數(shù)位。比如測到的是0x02,通過2*0.0625=0.125,取近似值為1。3.4 nrf24l01程序設(shè)計(1)nrf24l01初始化程序設(shè)計 void init_nrf24l01()是最基本的函數(shù),完成gpio模擬spi的功能。將輸出字節(jié)(mosi)從msb 循環(huán)輸出,同時將輸入字節(jié)(miso)從lsb循環(huán)移入。上升沿讀入,下降沿輸出。(從sck被初始化為低電平可以判斷出)。(3)nrf2

36、4l01讀寫寄存器函數(shù)uint spi_rw_reg(uchar reg, uchar value)寄存器訪問函數(shù):用來設(shè)置 24l01 的寄存器的值。基本思路就是通過write_reg命令(也就是 0x20+寄存器地址)把要設(shè)定的值寫到相應(yīng)的寄存器地址里面去,并讀取返回值。對于函數(shù)來說也就是把value值寫到reg寄存器中。需要注意的是,訪問 nrf24l01之前首先要enable芯片(csn=0; ),訪問完了以后再disable芯片(csn=1;)。 (4)nrf24l01的spi時序uchar spi_read(uchar reg)讀取寄存器值的函數(shù):基本思路就是通過read_reg命

37、令(也就是0x00+寄存器地址),把寄存器中的值讀出來。對于函數(shù)來說也就是把reg寄存器的值讀到reg_val中去。 (5)nrf24l01讀數(shù)據(jù)uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars)接收緩沖區(qū)訪問函數(shù):主要用來在接收時讀取fifo緩沖區(qū)中的值?;舅悸肪褪峭ㄟ^read_reg命令把數(shù)據(jù)從接收fifo(rd_rx_pload)中讀出并存到數(shù)組里面去。 (6)nrf24l01寫數(shù)據(jù)uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars)發(fā)射緩沖區(qū)訪問函數(shù):主要用來把數(shù)組

38、里的數(shù)放到發(fā)射fifo緩沖區(qū)中?;舅悸肪褪峭ㄟ^write_reg命令把數(shù)據(jù)存到發(fā)射fifo(wr_tx_pload)中去。(7)nrf24l01數(shù)據(jù)接收發(fā)送配置void setrx_mode()函數(shù)是用于設(shè)置為本塊無線通信模塊為接收模塊,里面包含了兩塊采集電路的地址,當(dāng)?shù)刂放鋵Τ晒χ蠓娇山邮諗?shù)據(jù)。void setrx_mode()函數(shù)則是用來設(shè)置本塊無線通信模塊為發(fā)射模塊,里面包含了自己的本地地址,這個地址是它與其它模塊區(qū)分的標(biāo)志。(8)nrf24l01接收緩沖區(qū)unsigned char nrf24l01_rxpacket(unsigned char* rx_buf)函數(shù)的功能是數(shù)據(jù)讀取

39、后放如rx_buf接收緩沖區(qū)中。3.5 字符型液晶顯示模塊程序設(shè)計(1)lcd1602初始化程序設(shè)計lcd1602的初始化的過程如下: 延時15ms; 寫指令38h(不檢測忙信號); 延時5ms; 寫指令38h(不檢測忙信號); 延時5ms; 寫指令38h(不檢測忙信號); (以后每次寫指令、讀/寫數(shù)據(jù)操作之前均需要檢測忙信號) 寫指令38h:顯示模式設(shè)置; 寫指令08h:顯示關(guān)閉; 寫指令01h:顯示清屏; 寫指令06h:顯示光標(biāo)移動位置; 寫指令0ch:顯示開及光標(biāo)設(shè)置。主要程序如下: delay_50us(300); /延時15ms write_com(0x38); /寫指令 0x38

40、delay_50us(100); /延時5ms write_com(0x38); /寫指令 0x38 delay_50us(100); /延時5ms write_com(0x38); /寫指令 0x38 write_com(0x38); /寫指令 0x38 write_com(0x08); /寫指令 0x08,顯示關(guān)閉 write_com(0x01); /寫指令 0x01,顯示清屏 write_com(0x06); /寫指令 0x06,顯示光標(biāo)移動設(shè)置 write_com(0x0c); /寫指令 0x0c,顯示開及光標(biāo)設(shè)置(2)lcd1602寫指令程序設(shè)計寫操作時序圖如圖3.7所示。圖3.7

41、lcd1602寫操作時序圖lcd1602的寫指令基本操作時序為:rs=l,rw=l,d0d7=指令碼,e=高脈沖。根據(jù)這個格式可以進(jìn)行對lcd1602寫指令進(jìn)行編程。寫void write_com(uchar com)寫指令函數(shù)的時候要注意使能端拉高或拉低都要進(jìn)行延時。(3)lcd1602寫數(shù)據(jù)程序設(shè)計lcd1602的寫數(shù)據(jù)基本操作時序為:rs=h,rw=l,d0d7=數(shù)據(jù),e=高脈沖。根據(jù)這個格式可以進(jìn)行對lcd1602寫數(shù)據(jù)進(jìn)行編程。(4)lcd1602顯示函數(shù)程序設(shè)計程序如下:void disdignit(uchar *y) uchar i;write_com(y); /lcd1602顯

42、示行for(i=0;i6;i+) write_data(tab_tempi); write_data(0x30+rxbuf2); /0x30的10進(jìn)制表示為48,即ascii碼字符0write_data(0x30+rxbuf1);write_data(.);write_data(0x30+rxbuf0);write_data(0xdf);write_data(c);在這里需要補充一點,在程序的開頭已經(jīng)定義了tab_temp6=”temp: ”,在顯示數(shù)字溫度前注明一下看起來比較嚴(yán)謹(jǐn)。顯示函數(shù)里的rxbuf2、rxbuf1、rxbuf0分別代表接收到的溫度的十位、個位、小數(shù)位。加上0x30可以讓

43、它轉(zhuǎn)換成ascii碼。函數(shù)還用了指針*y,是因為本設(shè)計為多點溫度采集,為了方便溫度顯示,讓第一個溫度顯示在液晶第一行,第二個溫度顯示在液晶第二行,因此加入個指針,在主函數(shù)里分別賦值0x80(lcd1602第一行第一個位置)和0x80+0x40(lcd1602第二行第一個位置)。4 調(diào)試及結(jié)果本系統(tǒng)實現(xiàn)的是無線多點溫度采集,在兩個地方檢測溫度,然后發(fā)射到接收端。經(jīng)過實踐得出本系統(tǒng)可以接收到100米之內(nèi)的數(shù)據(jù),并且可以正常顯示和正常報警。溫度采集板如圖4.1所示。板上的發(fā)光二極管是電源指示燈,電源接通后即可正常工作。圖4.1 溫度采集板溫度接收顯示板如圖4.2所示。1602液晶第一行和第二行分別顯

44、示的是第一塊和第二塊采集板發(fā)射過來的溫度。從液晶顯示來看,溫度顯示清晰并且穩(wěn)定。本系統(tǒng)還設(shè)置了一個溫度報警上限溫度32攝氏度,當(dāng)溫度達(dá)到警報溫度時,報警系統(tǒng)開始工作:蜂鳴器會一直叫,并且報警指示燈也跟著亮;當(dāng)溫度下降到警報溫度時,報警系統(tǒng)停止工作?,F(xiàn)象如圖4.3所示,在1602液晶上方的led即報警指示燈。由此可見,報警系統(tǒng)可以正常工作。圖4.2 溫度接收板圖4.3 報警系統(tǒng)演示參考文獻(xiàn)1 余永權(quán):單片機原理及應(yīng)用,電子工業(yè)出版社, 1998.122 諸邦田:電子電路實用抗干擾技術(shù),人民郵電出版社,1994.5 3 曲喜新:電子元件材料手冊.電子工業(yè)出版社,1989.44 黃賢武、鄭筱霞、曲

45、波、劉文杰:傳感器實際應(yīng)用電路設(shè)計,電子科技大學(xué)出版社,1997.65 劉君華:智能傳感器系統(tǒng),西安電子科技大學(xué)出版社,1999.36 汪吉鵬、馬云峰:微機原理與接口技術(shù),高等教育出版社,2001.77 賈振國:ds1820 及高精度溫度測量的實現(xiàn),電子技術(shù)應(yīng)用,2000.18 偉 正:單線數(shù)字溫度傳感器的原理與應(yīng)用,電子技術(shù)應(yīng)用,2000.69 周月霞、孫傳友:ds18b20 硬件連接及軟件編程,傳感器世界,2001.810 單線數(shù)字溫度傳感器資料,武漢力源電子有限公司,1996.311 王琳,商周,王學(xué)偉.數(shù)據(jù)采集的發(fā)展及應(yīng)用.電測與儀表,2004,no.46412 v. schmidt,

46、 control, data acquisition, and remote participation for fusion research, fusion eng. des. 81 (2006) 17021712.13 a.neto,h.fernandes,a.duarte, firesignal-data acquisition and control system software.fusionengineering and design 82(2007)1359-1364.附 錄(1)接收部分程序如下:#include #include #define lcdio p0 /液晶數(shù)據(jù)

47、端口void disdignit1();void disdignit2();typedef unsigned char uchar;typedef unsigned char uint;uchar code tab_temp16=temp1:;uchar code tab_temp26=temp2:;/*端口定義sbit lcd1602_rs = p35; /控制寫數(shù)據(jù)或命令sbit lcd1602_en = p34; /液晶使能sbit bell=p26;/*nrf24l01端口定義sbit miso=p23;sbit mosi=p21;sbitsck =p24;sbitce =p25;sb

48、itcsn=p20;sbitirq=p22;#define tx_adr_width 5 / 5 uints tx address width#define rx_adr_width 5 / 5 uints rx address width#define tx_pload_width 20 / 20 uints tx payload#define rx_pload_width 20 / 20 uints tx payloaduchar idata rxbuf120=0;uchar idata aa20=0;uint const rx_address0rx_adr_width= 0x34,0x4

49、3,0x10,0x10,0x01;/接收地址uint const rx_address1rx_adr_width= 0xc2,0xc2,0xc2,0xc2,0xc3;/接收地址void delay(int s) /延時函數(shù)int i,j;for(i=0; i110; i+) for(j=0; j0;n-)_nop_();/*函數(shù):uint spi_rw(uint uchar)/*功能:nrf24l01的spi寫時序uint spi_rw(uint uchar)uint bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit mosi =

50、 (uchar & 0x80); / output uchar, msb to mosiuchar = (uchar 1); / shift next bit into msb.sck = 1; / set sck high.uchar |= miso; / capture current miso bitsck = 0; / .then set sck low again return(uchar); / return read uchar/*功能:nrf24l01讀寫寄存器函數(shù)uint spi_rw_reg(uchar reg, uchar value)uint status;csn =

51、0; / csn low, init spi transactionstatus = spi_rw(reg); / select registerspi_rw(value); / .and write value to it.csn = 1; / csn high againreturn(status); / return nrf24l01 status uchar/*函數(shù):uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars)/*功能: 用于寫數(shù)據(jù):為寄存器地址,pbuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars)uint status,uchar_ctr;csn = 0; /spi使能 status = spi_rw(reg); for(uchar_ctr=0; ucha

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論