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

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > 全數字溫濕度儀的設計與實現

          全數字溫濕度儀的設計與實現

          作者: 時間:2016-10-22 來源:網絡 收藏

          本文從實際應用出發(fā),較全面地介紹了全的設計與實現。方案采用AT89S52單片機作為MCU,DS18B20作為數字溫度,奧松DHT11為數字濕度,1602液晶模塊為顯示部件,結合相關電路組成溫濕度計的硬件部分,嵌入式編程采用C51語言。

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

          本文不僅包括器件選型方面的硬件知識,同時給出了驅動等典型程序段。實踐證明,本溫濕度儀具有測量數據準確、顯示直觀、反應快、量程大、誤差小、免標定、報警溫度可設定等優(yōu)點,穩(wěn)定可靠,值得推廣。

          0引言

          溫濕度儀是日常生活、工礦企業(yè)、養(yǎng)殖等場所經常使用的測量溫度、濕度的儀表,老式溫濕度儀存在反應慢、精度低、量程小、標定繁瑣等缺點。近年來,隨著數字傳感器發(fā)展與普及,溫濕度儀也在朝著數字化、免標定、方便設置報警、實時監(jiān)控等方向發(fā)展。尤其以DS18B20、DHT11為代表的數字傳感器,屬于集成傳感器,可靠性很高,因此,采用微控制器結合數字傳感器,設計全數字的溫濕度儀,具有普遍的實際意義和社會價值。

          1.功能結構描述

          本溫濕度儀以MCU為核心,利用最新數字化溫濕度傳感器作為測量器件,LCM為顯示部件,蜂鳴器為提示音和報警聲輸出,由于本儀表還具有其他功能,所以設置了三個按鍵作為輸入部分,以完成多個顯示界面切換及進行相關設置的功能。功能結構示意圖如圖1所示:

          2.硬件選型

          2.1 溫度傳感器選型

          以熱電偶、熱敏電阻等為主,輸出電壓、電流或頻率等模擬物理量的模擬傳感器,在需要數字信號的場合應用不夠方便。近幾年涌現出一些數字溫度傳感器,如ADT7301、TMP205等,但經過綜合比較,這里采用了美國Dallas公司出品的DS18B20[1],優(yōu)勢是反映快、精度高(可編程9-12位,最高0.0625℃)、體積小、誤差小(±0.5℃)、測溫范圍大(-55~125℃)、接口簡單,尤其值得稱道的是其“單總線”數據傳輸方式,與單片機交換信息僅需要一根I/O線。而且,可同一總線掛接多個傳感器,每一個都有自己唯一的64位序列號。實際應用中,采用了DS18B20的外部電源供電方式。

          2.2 濕度傳感器選型

          近年來市面上典型數字濕度傳感器有瑞士SHT11等型號,精度高范圍大,但價格較高,這里最終選用奧松DHT11[2],該傳感器由一個電阻式感濕元件、NTC測溫元件和8位單片機組成,相比前者有較大價格優(yōu)勢,精度5%RH,誤差2%RH,濕度范圍20~95%RH.而且,該傳感器也是單線制串行接口,編程上與18B20有一定相似之處。該傳感器缺點是不如電容型精度高。由于該傳感器溫度測量的性能指標不及DS18B20,所以只用了其濕度測量功能。

          2.3 MCU選型

          鑒于溫濕度測量實時性要求不高,數字化溫度、濕度傳感器及液晶顯示模塊對M C U速度要求也不算高,以上器件加上鍵盤、蜂鳴器等硬件資源占用的引腳數也不多,所以采用經典的51系列單片機是很好的選擇。尤其美國Atmel公司生產的AT89S5x系列單片機[3],質優(yōu)價廉,完全滿足上述要求,而且具有ISP下載功能,可實現在對板載芯片進行程序升級,十分方便。最終C51程序經編譯生成的HEX文件為15k大小,可下載到AT89S52芯片。

          2.4 顯示部件選型

          為了提升儀表外觀檔次,沒有使用傳統(tǒng)數碼管,而是采用了應用較廣的字符點陣型液晶顯示模組LCM1602,其具有微功耗、體積小、編程顯示靈活等特點。由于各廠家1602液晶大都基于HD44780液晶芯片的,故控制原理相同,方便替換。該液晶型號國內外生產廠家不少,如長沙太陽人、深圳金馬等,價格約十元。應用時通過模擬口線方式將LCM1602與MCU連接。

          2.5 電源選型

          本系統(tǒng)MCU、傳感器等都可使用+5V供電,故需配置直流電源。這里采用兩種供電方案(開關切換),一是外置220VAC轉5VDC的線性電源或開關電源,PCB板上只留一個DC-002電源插座,二是采用兩節(jié)堿性電池結合Boost電路為系統(tǒng)提供電源。在采用后一方案時,有MAX1674、TPS60110、SP6641A等多種芯片選擇,但從經濟性和方便采購等方面考慮,最終選擇上海貝嶺公司的開關型DC/DC升壓穩(wěn)壓芯片BL8530[4].該芯片僅0.8V的啟動電壓、高電流的負載驅動能力,極低的靜態(tài)功耗(Iq5.5uA),非常適合于便攜式電池應用的場合。采用了高性能、低功耗的參考電壓電路結構,同時在生產中引入修正技術,保證了輸出電壓的高輸出精度及低溫度漂移,且對周邊電路干擾很小。

          配合肖特基二極管1N5819、100uf鉭電容和33uH屏蔽功率電感,輸出電壓實測維持在4.98V,十分穩(wěn)定。

          3.軟件編程

          3.1 軟件流程圖

          開始上電后,首先進行系統(tǒng)初始化,包括定義IO口、設置默認值,顯示開機畫 面等工作。然后默認進入顯示當前溫度的狀態(tài),如果沒有收到DS18B20返回的存在脈沖,蜂鳴器報警且液晶有相關信息提示。軟件流程如圖2所示。

          根據官方數據手冊,相關溫度操作包括啟動溫度轉換(Conver T),跳過ROM(SkipRom),寫暫存器(Write Scratchpad),設置高低溫報警寄存器TH和TL,拷貝暫存器(Copy Scratchpad),Recall E2和讀暫存器(Read Scratchpad)等。接下來進行按鍵判斷,本儀表共有3個輸入按鍵,按鍵1是功能切換鍵,每當按下一次則軟件狀態(tài)計數器加1,進入相應測試界面,且在溫度測量、濕度測量及其他幾個功能間循環(huán)。鍵2分長按和短按,在溫度模式下有攝氏/華氏溫度切換、最大值保持、關閉報警等功能。鍵3有切換液晶屏手動/自動背光,關閉報警等功能。如果所有按鍵都沒有被按下,則先判斷當前狀態(tài),然后判斷是否存在相應傳感器,如果有只更新當前溫度或濕度值,或進入其他功能。最后返回,整個是一個大循環(huán)結構。另外,此處僅是軟件流程圖示意圖,提供設計思路,某些具體實現可能會根據實際情況放到中斷里處理,更為方便。 3.2 溫度傳感器典型程序段

          D S 1 8 B 2 0對時序要求非常嚴格,編程時應確保延時程序要符合datasheet中的要求,這里首先編制了一個較精確的10us延時,之后的程序中多次調用。另外,攝氏、華氏溫度的轉換,以及低于0攝氏度時,需要顯示的負號等情況都可在液晶顯示溫度的程序段中考慮。典型程序如下:

          3.3 濕度傳感器典型程序段

          相比同樣是單總線設計的DS18B20,國產DHT11在編程思路上有一定相似性,但時序、移位等操作都不同,協(xié)議較前者簡單。

          用戶主機(M C U)發(fā)送一次開始信號后,DHT11從低功耗模式轉換到高速模式,待主機開始信號結束后,DHT11發(fā)送響應信號,送出40bit的數據,并觸發(fā)一次信采集。而操作DS18B20時,MCU初始化收到應答信號后,就可隨時發(fā)個指令寫或讀,主機有更多主動權。按照官方產品手冊提供的時序,編制程序如下:

          主程序、1602顯示驅動、其他功能等程序略去。

          4.結論

          經試制、長時間運行,表現穩(wěn)定,效果良好。在調試階段,遇到并解決了一些問題,一個比較棘手的問題是,顯示溫度時偶爾會出現異常數字。經仔細分析發(fā)現,這是由于本儀表的多按鍵、多功能而采用的多個定時器,定時器產生的中斷導致了DS18B20與MCU通信時序遭到破壞,造成傳輸的數據出錯。本問題后來通過增加CRC8校驗,對偶然出現的錯誤數據進行舍棄得到解決。

          現階段該溫濕度儀只作為單獨使用,在以后的升級型號中,可以加入數據存儲功能(如24C02芯片記錄峰值),以及多傳感器總線方式,通過上位機監(jiān)控各點溫濕度等功能。



          評論


          相關推薦

          技術專區(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); })();