摘要
本課題以51單片機為核心實現智能化遠程無線溫度監控。利用18B20溫度傳感器獲取溫度信號,將需要測量的溫度信號自動轉化為數字信號,通過無線模塊NRF24L01一對一傳送將數據傳送到接收機,最終單片機將信號轉換成LCD可以識別的信息顯示輸出。 基于STC89C52RC+NRF24L01+LCD1602的單片機的智能遠程無線溫度監控系統,設計采用18B20溫度傳感器,其分辨率可編程設計。本課題設計應用于溫度變化緩慢的空間,綜合考慮,以降低靈敏度來提高顯示精度。設計使用12位分辨率,因其最高4位代表溫度極性,故實際使用為11位半,而溫度測量范圍為-55℃~+125℃,則其分辨力為0.0625℃。 設計使用LCD1602顯示器,可顯示16*2個英文字符,顯示器顯示實時溫度和過溫警告信息。報警采用蜂鳴器加LED組成的聲光電報警。 目錄 一、設計功能 3 二、系統設計 三、器件選擇 4 3.1溫度信號采集模塊 4 3.2 液晶顯示器1602LCD 3.3 無線NRF24L01 11 四、軟件設計 4.1 程序設計流程圖 五、設計總結 21 六、參考文獻 22 七、硬件原理圖 22 八、程序清單 23
一、設計功能·由單片機、溫度傳感器、無線模塊NRF24L01以及液晶顯示器等構成高精度遠 程無線溫度監測系統。 ·溫度顯示精確到小數點后一位。 ·按鍵設定過溫值,過溫在液晶屏提示。 三、器件選擇3.1溫度信號采集模塊傳統的溫度檢測大多以熱敏電阻為傳感器,采用熱敏電阻,可滿足 40℃度 至 90℃測量范圍,但熱敏電阻可靠性差,測量溫度準確率低,對于1℃的信號是不適用的,還得經過專門的接口電路轉換成數字信號才能由微處理器進行處理。 目前常用的微機與外設之間進行的數據通信的串行總線主要有 總線, SPI 總線等。其中 總線以同步串行 2 線方式進行通信(一條時鐘線,一條數據線)。SPI 總線則以同步串行 3 線方式進行通信(一條時鐘線,一條數據輸入線,一條數據輸出線)。這些總線至少需要兩條或兩條以上的信號線。而單總線( 1-wire bus ),采用單根信號線,既可傳輸數據,而且數據傳輸是雙向的, CPU 只需一根端口線就能與諸多單總線器件通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路。 單總線具有廣闊的應用前景,是值得關注的一個發展領域。單總線即只有一根數據線,系統中的數據交換,控制都由這根線完成。主機或從機通過一個漏極開路或三態端口連接到數據線,以允許設備在不發送數據時能夠釋放總線,而讓其它設備使用總線。單總線通常要求外接一個約為 4.7K 的上拉電阻,這樣,當總線閑置時其狀態為高電平。 3.1.1 DS18B20 數字式溫度傳感器DS18B20 數字式溫度傳感器使用集成芯片,采用單總線技術,其能夠有效的減小外界的干擾,提高測量的精度,同時,它可以直接將被測溫度轉化成串行數字信號供微機處理,接口簡單,使數據傳輸和處理簡單化。部分功能電路的集成,使總體硬件設計更簡潔,能有效地降低成本,搭建電路和焊接電路時更快,調試也更方便簡單化,大大縮短了開發的周期 。 3.1.2 DS18B20特性采用單總線的接口方式,與微處理器連接時僅需要一條口線即可實現微處理器與 DS18B20 的雙向通訊。 單總線具有經濟性好,抗干擾能力強,適合于惡劣環境的現場溫度測量,使用方便等優點,使用戶可輕松地組建傳感器網絡,為測量系統的構建引入全新概念。 - 適應電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數據線供電。
- 獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。
- DS18B20支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現組網多點測溫。
- DS18B20在使用中不需要任何外圍元件,全部 傳感元件及轉換電路集成在形如一只三極管的集成電路內。
- 溫范圍-55℃~+125℃。
- 可編程 的分辨率為9~12位,對應的分辨力分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現高精度測溫。
- 在9位分辨率時最多在 93.75ms內把溫度轉換為數字,12位分辨率時最多在750ms內把溫度值轉換為數字,速度更快。
- 測量結果直接輸出數字溫度信號,以" 1-wire bus "串行傳送給CPU,可選擇同時傳送CRC校驗碼,具有極強的抗干擾糾錯能力。
- 負壓特性:電源極性接反時,芯片不會因發熱而燒毀, 但不能正常工作。
3.1.3 DS18B20結構
DS18B20的內部結構 3.1.4 DS18B20測溫原理
DS18B20測溫原理框圖 圖中低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振 隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入. 計數器1對 低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重 新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。圖3中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數器1的預置值。
3.1.5 DS18B20的讀寫功能DS18B20溫度值格式表 這是12位轉化后得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0, 這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。 例如+125℃的數字輸出為07D0H,+25.0625℃的數字輸出為0191H,-25.0625℃的數字輸出為FE6FH,-55℃的數字輸出為FC90H 。 DS18B20溫度數據表 DS18B20溫度傳感器的存儲器 DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發器 TH、TL和結構寄存器。
配置寄存器結構 低五位一直都是"1",TM是測試模式位,用于設置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設置為0,用 戶不要去改動。R1和R0用來設置分辨率,如下表所示:(DS18B20出廠時被設置為12位) R1 | R0 | 分辨率 | 溫度最大轉換時間 | 0 | 0 | 9位 | 93.75ms | 0 | 1 | 10位 | 187.5ms | 1 | 0 | 11位 | 375ms | 1 | 1 | 12位 | 750ms |
溫度分辨率設置表
DS18B20暫存寄存器分布 根據DS18B20的通訊協議,主機(單片機)控制DS18B20完成溫度轉換必須經過三個步驟:每一次讀寫之前都要對DS18B20進行 復位操作,復位成功后發送一條ROM指令,最后發送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數據線下拉500微秒,然后釋放,當DS18B20收到信號后等待16~60微秒左右,后發出60~240微秒的存在低脈沖,主CPU收到此信號表示復位成功。 | | | | | 讀DS1820溫度傳感器ROM中的編碼(即64位地址) | | | 發出此命令之后,接著發出 64 位 ROM 編碼,訪問單總線上與該編碼相對應的DS1820 使之作出響應,為下一步對該 DS1820 的讀寫作準備。 | | | 用于確定掛接在同一總線上 DS1820 的個數和識別 64 位 ROM 地址。為操作各器件作好準備。 | | | 忽略 64 位 ROM 地址,直接向 DS1820 發溫度變換命令。適用于單片工作。 | | | 執行后只有溫度超過設定值上限或下限的片子才做出響應。 | | | 啟動DS1820進行溫度轉換,12位轉換時最長為750ms(9位為93.75ms)。結果存入內部9字節RAM中。 | | | | | | 發出向內部RAM的3、4字節寫上、下限溫度數據命令,緊跟該命令之后,是傳送兩字節的數據。 | | | 將RAM中第3 、4字節的內容復制到EEPROM中。 | | | 將EEPROM中內容恢復到RAM中的第3 、4字節。 | | | 讀DS1820的供電模式。寄生供電時DS1820發送“ 0 ”,外接電源供電 DS1820發送“ 1 ”。 |
ROM指令表
3.2液晶顯示器1602LCD
顯示容量:16×2個字符,芯片工作電壓:4.5—5.5V,工作電流:2.0mA(5.0V),模塊最佳工作電壓:5.0V,字符尺寸:2.95×4.35(W×H)mm。 3.2.1引腳功能說明1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如圖 編號 | 符號 | 引腳說明 | 編號 | 符號 | 引腳說明 | 1 | VSS | 電源地 | 9 | D2 | 數據 | 2 | VDD | 電源正極 | 10 | D3 | 數據 | 3 | VL | 液晶顯示偏壓 | 11 | D4 | 數據 | 4 | RS | 數據/命令選擇 | 12 | D5 | 數據 | 5 | R/W | 讀/寫選擇 | 13 | D6 | 數據 | 6 | E | 使能信號 | 14 | D7 | 數據 | 7 | D0 | 數據 | 15 | BLA | 背光源正極 | 8 | D1 | 數據 | 16 | BLK | 背光源負極 |
|
|
|
|
|
| 3.2.2 1602LCD的指令說明及時序1602液晶模塊內部的控制器共有11條控制指令,如圖 3.2.3 1602LCD的一般初始化過程 延時15mS 寫指令38H(不檢測忙信號) 延時5mS 寫指令38H(不檢測忙信號) 延時5mS 寫指令38H(不檢測忙信號) 以后每次寫指令、讀/寫數據操作均需要檢測忙信號 寫指令38H:顯示模式設置 寫指令08H:顯示關閉 寫指令01H:顯示清屏 寫指令06H:顯示光標移動設置 寫指令0CH:顯示開及光標設置 NRF24L01無線模塊nRF24L01是一款新型單片射頻收發器件,工作于2.4 GHz~2.5 GHz ISM頻段。內置頻率合成器、功率放大器、晶體振蕩器、調制器等功能模塊,并融合了增強型ShockBurst技術,其中輸出功率和通信頻道可通過程序進行配置。nRF24L01功耗低,在以-6dBm的功率發射時,工作電流也只有9mA;接收時,工作電流只有12.3mA,多種低功率工作模式(掉電模式和空閑模式)使節能設計更方便[10]。nRF24L01主要特性如下: 1、GFSK調制,硬件集成OSI鏈路層; 2、具有自動應答和自動再發射功能; 3、片內自動生成報頭和CRC校驗碼; 4、數據傳輸率為l Mb/s或2Mb/s; 5、SPI速率為0 Mb/s~10 Mb/s; 6、125個頻道與其他nRF24系列射頻器件相兼容; 7、QFN20引腳4 mm×4 mm封裝; 8、供電電壓為1.9 V~3.6 V; 3.2.2 引腳功能及描述nRF24L01的封裝及引腳排列如圖所示[11]。各引腳功能如圖3.5所示。
圖3.5 nRF24L01封裝圖 CE:使能發射或接收; CSN,SCK,MOSI,MISO:SPI引腳端,微處理器可通過此引腳配置nRF24L01: IRQ:中斷標志位; VDD:電源輸入端; VSS:電源地; XC2,XC1:晶體振蕩器引腳; VDD_PA:為功率放大器供電,輸出為1.8 V; ANT1,ANT2:天線接口; IREF:參考電流輸入; 3.2.3 工作模式通過配置寄存器可將nRF24L01配置為發射、接收、空閑及掉電四種工作模式,如表3.1所示。 表3.1 nRF24L01工作模式 | PWR_UP | PRIM_RX | CE | | | 1 | 1 | 1 | | | 1 | 0 | 1 | | | 1 | 0 | 1→0 | | | 1 | 0 | 1 | | | 1 | - | 0 | | | 0 | - | - | |
待機模式1主要用于降低電流損耗,在該模式下晶體振蕩器仍然是工作的;待機模式2則是在當FIFO寄存器為空且CE=1時進入此模式;待機模式下,所有配置字仍然保留。在掉電模式下電流損耗最小,同時nRF24L01也不工作,但其所有配置寄存器的值仍然保留。 3.2.4工作原理發射數據時,首先將nRF24L01配置為發射模式:接著把接收節點地址TX_ADDR和有效數據TX_PLD按照時序由SPI口寫入nRF24L01緩存區,TX_PLD必須在CSN為低時連續寫入,而TX_ADDR在發射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發射數據;若自動應答開啟,那么nRF24L01在發射數據后立即進入接收模式,接收應答信號(自動應答接收地址應該與接收節點地址TX_ADDR一致)。如果收到應答,則認為此次通信成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應答,則自動重新發射該數據(自動重發已開啟),若重發次數(ARC)達到上限,MAX_RT置高,TX FIFO中數據保留以便在次重發;MAX_RT或TX_DS置高時,使IRQ變低,產生中斷,通知MCU。最后發射成功時,若CE為低則nRF24L01進入空閑模式1;若發送堆棧中有數據且CE為高,則進入下一次發射;若發送堆棧中無數據且CE為高,則進入空閑模式2。 接收數據時,首先將nRF24L01配置為接收模式,接著延遲130μs進入接收狀態等待數據的到來。當接收方檢測到有效的地址和CRC時,就將數據包存儲在RX FIFO中,同時中斷標志位RX_DR置高,IRQ變低,產生中斷,通知MCU去取數據。若此時自動應答開啟,接收方則同時進入發射狀態回傳應答信號。最后接收成功時,若CE變低,則nRF24L01進入空閑模式1。在寫寄存器之前一定要進入待機模式或掉電模式。 表3.2常用配置寄存器 地址(H) |
| |
| 功能 | 00 |
| |
| 設置24L01工作模式 | 01 |
| |
| 設置接收通道及自動應答 | 02 |
| |
| 使能接收通道地址 | 03 |
| |
| 設置地址寬度 | 04 |
| |
| 設置自動重發數據時間和次數 | 07 |
| |
| 狀態寄存器,用來判定工作狀態 | 0A~0F |
| |
| 設置接收通道地址 | 10 |
| |
| 設置接收接點地址 | 11~16 |
| |
| 設置接收通道的有效數據寬度 | 3.2.5 配置字SPI口為同步串行通信接口,最大傳輸速率為10 Mb/s,傳輸時先傳送低位字節,再傳送高位字節。但針對單個字節而言,要先送高位再送低位。與SPI相關的指令共有8個,使用時這些控制指令由nRF24L01的MOSI輸入。相應的狀態和數據信息是從MISO輸出給MCU。 nRF24L0l所有的配置字都由配置寄存器定義,這些配置寄存器可通過SPI口訪問。nRF24L01 的配置寄存器共有25個,常用的配置寄存器如表3.2所示。經過綜合考慮,如果采用單芯片自己焊接無線模塊可能會產生以下問題:電路板電磁影響較大,天線不好弄,在焊接過程中易損壞芯片。所以最終決定采用已集成了的模塊進行課題的制作。模塊PCB版圖提供于下:
4、軟件設計4.1.1 溫度檢測 溫度檢測模塊軟件設計DS18B20的測溫原理遵循嚴格的單總線協議,以確保通信數據的準確性,單片機通過時序來寫入和讀出DS18B20中的數據,包括初始化、讀l、讀0,寫1、寫0等操作。傳感器復位后,接收應答信號,跳過讀ROM中序列號后,啟動溫度轉換,等待溫度轉換完畢后,保存數據。如此反復,完成所有操作,其流程圖如圖所示。
4.1.2無線發射模塊軟件設計首先進行初始化操作,初始化包括設置單片機I/O和SPI相關寄存器兩部分其可以和nRF24L01通信。通過SPI總線配置射頻芯片使其進入正確的工作模式。發射數據時,首先將nRF24L01配置為發射模式。接著把發送端待發射數據的目標地址TX—ADDR和數據TX—PLD寫入nRF24L01緩沖區,延時后發射數據,其流程圖如圖4.2所示[14]。
圖4.2 無線發射軟件流程圖 4.1.3無線接收模塊軟件設計接收數據時,首先將nRF24L01配置為接收模式。接著延遲進入接收狀態等待數據的到來。當接收方檢測到有效地址和CRC時,就將數據包儲存在接收堆棧中,同時狀態寄存器中的中斷標志位RX—DR置高,產生中斷使IRQ引腳變為低電平,以便通知MCU去取數據,其流程圖如圖4.3所示。
 圖4.3 無線接收軟件流程圖
4.2軟件的總體設計4.2.1 發送部分發送部分的一個循環的總體思路是這樣的先初始化DS18B20,從DS18B20讀出溫度(DS18B20采用默認的12位精度),將得到的溫度值的反碼轉化成十進制,取溫度數組的高兩位(即整數部分)寫入發送數據數組,然后初始化nRF24L01,將溫度發送,其流程圖如圖4.5所示[15]。
圖4.5 發射部分總體流程圖 4.2.2接收部分接收部分的總體思路是這樣的,首先還是初始化nRF24L01,然后進入大循環判斷狀態寄存器是否有接收中斷。如果有就從FIFO_buffer讀入二進制數據,然后將數據轉換成十進制在數碼管上顯示出來,其流程圖如圖4.6所示。
圖4.6 接收部分總體流程圖
 登臨對晚晴 翔云列曉陣
四川工程職業技術學院 電氣系2012級電子信息一班 張登翔 201212020216
 登臨對晚晴 翔云列曉陣
四川工程職業技術學院 電氣系2012級電子信息一班 張登翔 201212020216
五、設計總結在這課題設計中我學到了很多東西,獲益匪淺。本次課題以51單片機為核心實現了遠程無線智能化溫度監控,過溫警告。 利用溫度傳感器獲取被控對象指標,通過溫度傳感器將需要測量的溫度信號轉化為數字電信號,通過單總線與MCU進行傳輸,再經單片機轉換成溫度值經過NRF24L01無線模塊進行傳輸,再由接收機通過NRF24L01進行接收,最終由接收機進行處理,并將當前所監控的溫度值,通過LCD1602進行顯示。并且可以由按鍵進行溫度的最大最小值得設定,最終將監控溫度設定在一個范圍內。若溫度過高或過低都可由報警模塊進行報警。 在設計此次課題的初期,考慮到手中有兩塊閑置的單片機,并且有一塊1602顯示模塊及兩塊無線模塊。所以快速的決定做一個無線的課題,可是無線控制什么呢?于是上網百度了一下,發現在現代的工業控制中,溫度是一個非常重要的因數。并且在電子行業中,溫度也是非常重要的,而且溫度過高對電子產品的損害非常厲害。于是決定做一個關于溫度監控的課題。這是設計之初的目的。 但是在設計的過程中,暴露的問題非常之多。而且反了一個致命的錯誤。由于本人在焊接NRF24L01模塊時,沒有查閱相關的模塊供電電壓,直接用了單片機的VCC對其進行供電。導致模塊被燒壞,本人深深的心痛啊;诓划敵酰豢凑f明書,自己想怎么干就怎么干。在模塊被燒壞后,一直處于后悔中,但是想想,就當花錢買個教訓吧,于是重新振作起來,上網淘寶淘寶,當新的模塊到手后,這下,我并不急于對無線模塊進行焊接,反而是將重點轉向了模塊供電電壓部分的設計,由于模塊是3.3V供電的(這是后來查閱說明書了解到的),可是自己手中只有7805和7809這兩種穩壓芯片。并無3.3v的穩壓管及穩壓模塊。于是向盛老師求助。最終盛老師給了我兩塊AZ1117T,電源問題才得以解決。在此感謝盛老師。還有就是單片機對于RF24L01高頻模塊的讀寫、操作等比較復雜,查找的資料也很難理解。還有就是DS18B20的時序也有一定難度。 不過,通過這次的學習和實踐,我學會了如何看待問題,解決問題。例如,調試無線收發時,1602老顯示亂碼,而且一直跳躍不定,又例如后來整合程序時,溫度不正確,老是成不斷上升趨勢,后來檢查程序后才發現是沒有將溫度的全局變量清零,導致每次循環累加。
七、硬件原理圖及調試7.1系統硬件原理圖發射機
接收機
完整的Word格式文檔51黑下載地址(內含源碼):
基于51單片機和NRF24L01的無線溫度監控.doc
(1.37 MB, 下載次數: 139)
2018-6-1 22:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|