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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于PXA310平臺(tái)的溫濕度傳感器設(shè)計(jì)

          基于PXA310平臺(tái)的溫濕度傳感器設(shè)計(jì)

          作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
            1 引言
            在工業(yè)控制和工業(yè)生產(chǎn)領(lǐng)域中,傳感器對(duì)于工業(yè)控制和生產(chǎn)環(huán)境的監(jiān)控作用不言而喻。傳統(tǒng)的傳感器監(jiān)控系統(tǒng)大都采用單片機(jī)控制,其監(jiān)控的準(zhǔn)確度和實(shí)時(shí)性不太令人滿意。本文尋找到一套切實(shí)可行的傳感器設(shè)計(jì)方案,其利用溫濕度傳感器芯片,基于PXA310硬件平臺(tái)和Linux操作系統(tǒng),能有效監(jiān)控現(xiàn)場(chǎng)溫濕度變化。在周圍環(huán)境發(fā)生變化,不能滿足工作要求時(shí),可以獲取監(jiān)控?cái)?shù)據(jù)并提出預(yù)警,提高生產(chǎn)和工作環(huán)境檢測(cè)的可靠性及實(shí)時(shí)性。
            2 溫濕度傳感器電路設(shè)計(jì)
            比較了一些傳感器應(yīng)用設(shè)計(jì)方案后,選用SHT10芯片為嵌入式溫濕度傳感器的核心部件。它外圍電路簡(jiǎn)便,相比其他傳感器芯片(DS18B20)有其獨(dú)到優(yōu)勢(shì)。
            STH10 每秒可進(jìn)行3 次溫濕度測(cè)量,數(shù)據(jù)精度14 bit并且工作穩(wěn)定。其測(cè)量采用CMOSens 專利,所以在測(cè)量效率和精度上要好于DS18B20.DS18B20 采用單總線控制方案(1-wire),大約每秒測(cè)量一次,9 位數(shù)字式溫度數(shù)據(jù);只提供溫度測(cè)量。其在生產(chǎn)環(huán)境檢測(cè)要求嚴(yán)格時(shí),就顯得精度和功能有些不足。
            2.1 sht10 簡(jiǎn)介
            SHT10 是一款高度集成的溫濕度傳感器芯片,提供全量程標(biāo)定數(shù)字輸出。傳感器包括一個(gè)電容性聚合體濕度敏感元件和一個(gè)用能隙材料制成的溫度敏感元件,他們與一個(gè)14 位A/D 轉(zhuǎn)換器以及一個(gè)串行接口電路設(shè)計(jì)在同一個(gè)芯片上面。其通過標(biāo)定得到校準(zhǔn)系數(shù)以程序形式儲(chǔ)存在芯片OTP 內(nèi)存中,并利用兩線制串行接口與內(nèi)部電壓調(diào)整,使外圍系統(tǒng)集成變得快速而簡(jiǎn)單。
            2.2 SHT10 工作原理
            SHT10 芯片電源3.3V .傳感器上電后,等待11ms 來完成"休眠"狀態(tài)。通信復(fù)位和啟動(dòng)傳輸命令后,發(fā)送一組測(cè)量命令(00000101表示相對(duì)濕度RH,00000011表示溫度T),控制器要等待測(cè)量結(jié)束。這個(gè)過程需要大約11/55/210ms ,分別對(duì)應(yīng)8/12/14bit 測(cè)量。SHT10 通過下拉DATA 至低電平,表示測(cè)量結(jié)束??刂破饔|發(fā)SCK 時(shí)鐘前,必須等待這個(gè)"數(shù)據(jù)備妥"信號(hào)才能將測(cè)量數(shù)據(jù)正確讀入。
            測(cè)量和通訊結(jié)束后,SHT10 自動(dòng)轉(zhuǎn)入休眠模式。數(shù)據(jù)傳送采用兩線制串行接口(與I2C 接口不兼容)。
            2.3 SHT10 電路原理圖
            SHT10 采用LCC 封裝,其DATA 和SCK 引腳分別連接到PXA310 的GPIO78 和GPIO79.PXA310通過模擬時(shí)序方式實(shí)現(xiàn)對(duì)外圍溫濕度傳感器的控制和數(shù)據(jù)讀寫操作。由于SHT10 對(duì)于溫濕度靈敏度很高,在系統(tǒng)集成時(shí)應(yīng)盡量遠(yuǎn)離發(fā)熱源(如MCU、LCD等),否則測(cè)量結(jié)果會(huì)有所偏離;為SHT10 布線時(shí),周圍應(yīng)盡量鋪地減少周圍器件對(duì)其的干擾。SHT10 電路原理圖如圖1 所示。

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

          ▲圖1 SHT10 電路原理圖

            3 Linux溫濕度傳感器驅(qū)動(dòng)程序?qū)崿F(xiàn)
            單片機(jī)控制的傳感器設(shè)備中,單片機(jī)通常是單線程運(yùn)行。在進(jìn)行溫濕度測(cè)量時(shí),單片機(jī)需要等待測(cè)試結(jié)果返回,其方法阻礙了其他測(cè)試和操作的同步執(zhí)行。
            在嵌入式Linux 系統(tǒng)中,驅(qū)動(dòng)程序?qū)y(cè)試任務(wù)送入任務(wù)隊(duì)列,交出CPU 控制權(quán),繼而進(jìn)行其他實(shí)時(shí)任務(wù)運(yùn)行,待內(nèi)核空閑再進(jìn)入任務(wù)隊(duì)列完成傳感器的測(cè)量,以此提高系統(tǒng)執(zhí)行的效率和實(shí)時(shí)性。
            3.1 Linux 溫濕度傳感器設(shè)備加載
            溫濕度傳感器使用Linux 內(nèi)核的Miscdevice 數(shù)據(jù)結(jié)構(gòu)在驅(qū)動(dòng)程序初始化時(shí)將設(shè)備注冊(cè)到內(nèi)核。
            Miscdevice 是字符設(shè)備,其主設(shè)備號(hào)為10,設(shè)備及設(shè)備接口函數(shù)定義如下所示。

            驅(qū)動(dòng)程序加載設(shè)備時(shí)將調(diào)用內(nèi)核的注冊(cè)函數(shù)。在Linux2.4 和2.6 內(nèi)核中,幾乎所有Linux 驅(qū)動(dòng)程序都依靠如下函數(shù)加載模塊。
            驅(qū)動(dòng)程序初始化完成后,上層應(yīng)用程序可以調(diào)用sht10_fops 中的sht10_read 函數(shù)進(jìn)行溫濕度的讀取操作。
            3.2 Linux 溫濕度傳感器設(shè)備操作
            進(jìn)行數(shù)據(jù)讀取前,首先要在驅(qū)動(dòng)程序中開辟4 個(gè)字節(jié)的數(shù)據(jù)空間,用于存放溫度和濕度測(cè)量值。這里定義全局變量數(shù)據(jù)緩沖區(qū)為unsigned char buf[4].
            讀取SHT10 溫濕度數(shù)據(jù)前,需要進(jìn)行端口初始化和SHT10 復(fù)位操作,然后將任務(wù)送于任務(wù)隊(duì)列并阻塞線程,當(dāng)任務(wù)完成返回后再喚醒線程,將讀到數(shù)據(jù)傳遞給上層應(yīng)用程序做進(jìn)一步處理。程序流程圖和實(shí)現(xiàn)函數(shù)如圖2 所示。

          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

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