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

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于ARM和DS18B20設計網(wǎng)絡化的智能溫度傳感器

          基于ARM和DS18B20設計網(wǎng)絡化的智能溫度傳感器

          作者: 時間:2010-08-03 來源:網(wǎng)絡 收藏

            傳感器作為一種獲取信息的重要工具,在工業(yè)生產(chǎn)、科學技術等領域發(fā)揮著重大的作用。但隨著微處理器技術的迅猛發(fā)展以及測控系統(tǒng)自動化、智能化的發(fā)展,傳統(tǒng)的傳感器已與各種微處理器相結合,并連入網(wǎng)絡,形成了帶有信息檢測、信號處理、邏輯思維等一系列功能的智能,傳感器。

            1 簡介

            使傳感器由單一功能、單一檢測向多功能和多點檢測發(fā)展;從被動檢測向主動進行信息處理方向發(fā)展;從就地測量向遠距離實時在線測控發(fā)展。網(wǎng)絡化使得傳感器可以就近接入網(wǎng)絡,傳感器與測控設備間再無需點對點連接,大大簡化了連接線路,易于系統(tǒng)的維護和擴充。一般由信號采集單元、數(shù)據(jù)處理單元和網(wǎng)絡接口單元組成。這3個單元可以是采用不同芯片構成合成式的,也可以是單片式結構。網(wǎng)絡化智能傳感器的核心便是嵌入式微處理器。嵌入式微處理器具有體積小、功耗低、可靠性高、可抗干擾能力強等特點。本系統(tǒng)就是采用嵌入式微處理器作為核心,使用數(shù)字式的溫度傳感器作為采集單元。系統(tǒng)設計中采用的是信息技術領域最新的B/S(Brower/Server,瀏覽器/服務器)結構,用瀏覽器作為統(tǒng)一的客戶端,無需安裝軟件,使用起來更加方便。

            2 系統(tǒng)硬件設計

            2.1 總體框架

            采用的嵌入式微處理器是基于一個支持實時仿真和嵌入式跟蹤的16/32位ARM7TDMI—S CPU的微控制器。功耗極低,具有多個32位定時器、8路10位ADC、PWM輸出以及多達9個外部中斷,特別適用于工業(yè)控制、醫(yī)療系統(tǒng);由于內(nèi)置了寬范圍的串行通信接口,也非常適合于通信網(wǎng)關、協(xié)議轉換器、嵌入式軟Modem以及其他類型的應用。

            該嵌入式Web智能溫度傳感器系統(tǒng)設計的總體框架如圖1所示。

          嵌入式Web智能溫度傳感器系統(tǒng)設計的總體框架

            2.2 電源模塊

            LPC2200系列ARM7微控制器均要使用2組電源,I/O口供電電源為3.3 V,內(nèi)核及片內(nèi)外設供電電源為1.8 V應用系統(tǒng)。如圖2所示,首先由CZl電源接口輸入9 V直流電源,二極管D1防止電源反接,經(jīng)過C1和C2兩個電容進行濾波;然后,通過LM7805將電源穩(wěn)壓至5 V,再使用LDO芯片(低壓差電源芯片)穩(wěn)壓輸出3.3 V及1.8 V電壓。

          電源模塊

            2.3 溫度傳感器

            溫度傳感器采用單線數(shù)字溫度傳感器,該傳感器是Maxim公司生產(chǎn)的、屬于新一代適配微處理器的智能溫度傳感器。測溫范圍較廣,為一55~+125℃,固有測溫分辨率為O.5℃。其支持“一線總線”接口,即從讀出信息或向寫入信息僅需要一根口線(單線接口)。溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。DS18B20集溫度測量、A/D轉換于一體,可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式,具有體積小、接口方便、傳輸距離遠等特點。

            DS18B20與微處理器的連接圖如圖3所示。注意,應加入一個阻值為5.1 kΩ的上拉電阻。

          DS18820與微處理器LPC2210的連接圖

            2.4 網(wǎng)絡接口

            網(wǎng)絡接口采用的是目前比較常用的lO Mbps嵌入式以太網(wǎng)控制芯片RTL8019。它是一種高度集成的以太網(wǎng)控制芯片,內(nèi)部集成了DMA控制器、ISA總線控制器、16 KB SRAM和網(wǎng)絡PHY收發(fā)器。用戶可以通過DMA方式把需要發(fā)送的數(shù)據(jù)寫入片內(nèi)SRAM中,讓芯片自動將數(shù)據(jù)發(fā)送出去;而芯片在接收到數(shù)據(jù)后,用戶也可以通過DMA方式將其讀出。

            一般通過外部總線進行連接,其連接關系如表1所列。

          RTL8019AS與LPC2210的連接關系

            由表1可知,使用LPC2210外部存儲控制的Bank2部分,而的I/O地址為0x00300~Ox0031F,所以RTL8019AS在SA8=l、SA5=O時選通,其數(shù)據(jù)地址為0x83400000~Ox83400001F。

            NET_RST為LPC2210輸出引腳,RTL8019AS中斷信號為中斷輸入信號,且為外部中斷。RTL8019AS的SDO~SDl5串了一個470 Ω電阻連接到LPC2210的D0~D15。此外,該系統(tǒng)還加入了LCM接口,可以直接支持SMG240128A點陣圖形液晶模塊,便于通過液晶實時顯示傳感器所接收的溫度。

            3 系統(tǒng)軟件分析

            3.1 總體設計

            系統(tǒng)開發(fā)采用的是ARM公司的ADS1.2作為開發(fā)編譯環(huán)境。移植了μC/OS—II操作系統(tǒng),主要采用C語言編寫。將μC/OS—II移植到ARM處理器上,需要修改3個與ARM體系結構相關的文件:OS_CPU.H、0S_CPU_A.ASM、OS_CPU_C.C。具體移植請參考相關書籍。

            程序首先調(diào)用OSinit()初始化μC/OS—II,完成對操作系統(tǒng)內(nèi)部一些變量、數(shù)據(jù)結構和宏定義的初始化。在開始多任務之前,還需建立一個名為Task0()的任務,這一點是非常重要的,否則用戶的應用程序就會崩潰。主任務中首先調(diào)用TargeTInit()函數(shù)將目標板初始化,模板中包含這個初始化函數(shù),它完成對板上硬件的一些初始化工作。之后啟動多任務環(huán)境,創(chuàng)建3個任務來實現(xiàn)系統(tǒng)最終的目標。這3個任務包括:傳感器對溫度的采集和處理;溫度比較與液晶顯示;建立Web服務器。下面對設計過程中比較關鍵問題進行詳細的闡述。

            3.2 軟件設計中的關鍵技術問題

            3.2.1 傳感器的溫度采集

            在對傳感器數(shù)據(jù)采集的軟件編程中,采用的是單線總線協(xié)議。通過單線總線訪問DSl8820的協(xié)議包括:初始化DSl8820、ROM操作命令、存儲器操作命令和讀數(shù)據(jù)/處理數(shù)據(jù)。

            根據(jù)DSl8820的初始化時序、寫時序和讀時序,分別編寫3個子程序:Init_DSl8820為初始化子程序;WriteOneChar為寫(命令或數(shù)據(jù))子程序;ReadOneChar為讀數(shù)據(jù)子程序。所有的數(shù)據(jù)讀/寫均由最低位開始。

            該系統(tǒng)的讀字節(jié)子程序的流程如圖4所示。

          系統(tǒng)的讀字節(jié)子程序的流程

            溫度傳感器采集的關鍵任務程序代碼如下:

          程序

          程序

          tcp/ip相關文章:tcp/ip是什么



          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();