基于PXA310平臺的溫濕度傳感器設計
在工業控制和工業生產領域中,傳感器對于工業控制和生產環境的監控作用不言而喻。傳統的傳感器監控系統大都采用單片機控制,其監控的準確度和實時性不太令人滿意。本文尋找到一套切實可行的傳感器設計方案,其利用溫濕度傳感器芯片,基于PXA310硬件平臺和Linux操作系統,能有效監控現場溫濕度變化。在周圍環境發生變化,不能滿足工作要求時,可以獲取監控數據并提出預警,提高生產和工作環境檢測的可靠性及實時性。
2 溫濕度傳感器電路設計
比較了一些傳感器應用設計方案后,選用SHT10芯片為嵌入式溫濕度傳感器的核心部件。它外圍電路簡便,相比其他傳感器芯片(DS18B20)有其獨到優勢。
STH10 每秒可進行3 次溫濕度測量,數據精度14 bit并且工作穩定。其測量采用CMOSens 專利,所以在測量效率和精度上要好于DS18B20.DS18B20 采用單總線控制方案(1-wire),大約每秒測量一次,9 位數字式溫度數據;只提供溫度測量。其在生產環境檢測要求嚴格時,就顯得精度和功能有些不足。
2.1 sht10 簡介
SHT10 是一款高度集成的溫濕度傳感器芯片,提供全量程標定數字輸出。傳感器包括一個電容性聚合體濕度敏感元件和一個用能隙材料制成的溫度敏感元件,他們與一個14 位A/D 轉換器以及一個串行接口電路設計在同一個芯片上面。其通過標定得到校準系數以程序形式儲存在芯片OTP 內存中,并利用兩線制串行接口與內部電壓調整,使外圍系統集成變得快速而簡單。
2.2 SHT10 工作原理
SHT10 芯片電源3.3V .傳感器上電后,等待11ms 來完成"休眠"狀態。通信復位和啟動傳輸命令后,發送一組測量命令(00000101表示相對濕度RH,00000011表示溫度T),控制器要等待測量結束。這個過程需要大約11/55/210ms ,分別對應8/12/14bit 測量。SHT10 通過下拉DATA 至低電平,表示測量結束??刂破饔|發SCK 時鐘前,必須等待這個"數據備妥"信號才能將測量數據正確讀入。
測量和通訊結束后,SHT10 自動轉入休眠模式。數據傳送采用兩線制串行接口(與I2C 接口不兼容)。
2.3 SHT10 電路原理圖
SHT10 采用LCC 封裝,其DATA 和SCK 引腳分別連接到PXA310 的GPIO78 和GPIO79.PXA310通過模擬時序方式實現對外圍溫濕度傳感器的控制和數據讀寫操作。由于SHT10 對于溫濕度靈敏度很高,在系統集成時應盡量遠離發熱源(如MCU、LCD等),否則測量結果會有所偏離;為SHT10 布線時,周圍應盡量鋪地減少周圍器件對其的干擾。SHT10 電路原理圖如圖1 所示。
▲圖1 SHT10 電路原理圖
3 Linux溫濕度傳感器驅動程序實現單片機控制的傳感器設備中,單片機通常是單線程運行。在進行溫濕度測量時,單片機需要等待測試結果返回,其方法阻礙了其他測試和操作的同步執行。
在嵌入式Linux 系統中,驅動程序將測試任務送入任務隊列,交出CPU 控制權,繼而進行其他實時任務運行,待內核空閑再進入任務隊列完成傳感器的測量,以此提高系統執行的效率和實時性。
3.1 Linux 溫濕度傳感器設備加載
溫濕度傳感器使用Linux 內核的Miscdevice 數據結構在驅動程序初始化時將設備注冊到內核。
Miscdevice 是字符設備,其主設備號為10,設備及設備接口函數定義如下所示。


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