陳建明,張亞軍,沈媛雪
(華北水利水電大學,河南 鄭州 450045)
對于當今越來越復雜的水環境問題,尤其是突發性污染事件和非常態條件下的應急監測和現場監測,實時、原位、快速獲取分析測試數據和相關信息顯得尤其重要[1].從目前應用較為廣泛的比色分析法來看,無論是光電比色法還是分光光度法,從取樣固定、樣品前處理、試劑配制、反應條件控制、干擾的消除等到水樣測試的完成,存在一條繁瑣復雜的操作流程.將這一流程分解為顯色和檢測兩大子系統進一步分析發現:顯色系統中各種因素相互交錯,環境溫度、人員操作等變量較多.因此溫度作為顯色系統中的根本制約因素,僅靠提高測量人員的操作水平的方法,并不能有效地減少系統中容易產生干擾、造成偏差的缺點,更不能顯著提升測試工作的效率.
針對這一需求,文中設計開發了基于Cortex-A8處理器和Android 平臺與數字式溫度傳感器DS18B20 的環境溫度檢測系統.
系統以ARM 公司的CortexTM-A8 系列的微處理器S5PV210 為核心,在Android 4.0.3 操作系統環境下完成了應用軟件的開發及交叉編譯[2]. 工作主要分為3 個部分:系統硬件平臺的構建;基于Linux 3.0.8 內核的測溫元件DS18B20 驅動程序的設計;Android 應用層溫度監測軟件的設計.
系統硬件設計的主控制器采用SAMSUNG 公司S5PV210 處理器,它采用了ARM CortexTM-A8 內核,是ARM 公司第一款基于ARMv7 架構的應用處理器[3].該處理器采用32 位RISC(精簡指令集),內部架構采用64/32 位總線結構,最大處理速度可達到1 GHz,CPU 內部具有16/32 kb 可配置的一級數據/指令緩存,512 kb 的二級緩存,可實現2 000 DMIPS(每秒運算2 億條指令集)的高性能運算能力,且有一套完整的通用系統外設,功耗低于300 mW,具有低功耗、高性能等優點,減少了系統的整體成本.
DS18B20 是常用的1-wire 單總線數字溫度傳感器,它的溫度測量范圍為-55 ~+125 ℃,在-10 ~+85 ℃范圍內精確度為0.5 ℃.可編程分辨率9 ~12 位,在9 位分辨率時最多在93.75 ms 內把溫度轉換為數字,能分辨的最小溫度值為0.5 ℃.完全可以滿足該溫度檢測系統在正常環境下的測量要求[4].
DS18B20 既可以采用外部電源供電方式,也可以采用內部電源供電方式. 外部電源供電時,VDD接+ 5 V,GND 接地,數據接口(DQ)與ARM 的GPIO 相連.其電路如圖1 所示;內部電源供電(寄生電源供電)時,VDD、GND 都要接地,數據接口(DQ)接ARM 的GPIO[5].

圖1 外部供電模式
由于內部供電模式可以節省一根電源線,大大降低了布線成本,從而使系統結構更趨于簡單,可靠性更高,而且在測量正常環境溫度的需求下,內部供電可以采集到足夠準確的溫度,這里采用內部電源供電.從S5PV210 芯片上引出一條具有雙向傳輸功能的I/O 口GPH0_2,與DS18B20 的數據接口(DQ)相連.系統連接如圖2 所示.

圖2 系統連接示意圖
系統軟件設計包括操作系統、傳感器驅動程序、溫度檢測程序.
目前較為流行的嵌入式操作系統主要有:微軟公司的Windows CE,風河公司(WindRive)的Vx-Works,Palm 公司的Palm OS,由Micrium 公司提供的uC/OS-II、嵌入式Linux 操作系統等[6].基于嵌入式Linux 的Android 系統憑借其安全性高、人機交互強和代碼開源等優點,在嵌入式移動設備領域內具有很好的應用前景,正在慢慢成為眾多嵌入式操作系統的另外一種選擇.目前,在Android 系統中也提供了對多種傳感器的支持,但要想使得Android 系統支持新添加的傳感器設備并且使得開發人員可以通過調用系統API 來直接編寫傳感器的應用程序,不僅需要在Linux 內核中添加相應的硬件驅動,還必須在硬件抽樣層(Hardware Abstract Layer,HAL)中實現相應的接口. 在應用程序中,Android 系統強大的人機交互界面也可以使檢測人員的操作更加準確、簡便、快捷,結合溫度傳感器對環境溫度進行實時的采集和存儲,是移動平臺與工業化結合的一次良好嘗試[7].
3.2.1 1-wire 總線的時序及編程
硬件驅動程序對DS18B20 的主要操作:初始化,跳過ROM 命令,匹配ROM,發送匹配ROM 指令,讀取溫度值等. 對DS18B20 的操作必須嚴格按照時序進行,訪問DS18B20 的順序如下.
初始化:由總線控制器發出的復位脈沖和之后由從機發出的存在脈沖組成,存在脈沖告訴總線控制器DS18B20 在總線上,且已準備好操作.
ROM 操作指令:該ROM 操作指令采用0xCC,這條指令允許總線控制器不用提供64 位ROM 編碼就可以使用功能指令.
功能命令:允許總線控制器讀寫DS18B20 的暫存器發起溫度轉換和識別電源模式.
使用ARM 實現DS18B20 數字式溫度傳感器采集溫度并轉換讀取溫度數值的驅動程序設計流程如圖3 所示.值得注意的是,每次DS18B20 被訪問時,都必須嚴格按照這個順序進行操作,否則DS18B20就不響應.

圖3 DS18B20 驅動程序流程
3.2.2 驅動程序的加載
Android 系統下的Linux 設備驅動程序屬于內核的一部分,Linux 內核的一個模塊可以以2 種方式被編譯和加載.靜態加載指直接編譯進Linux 內核,隨同Linux 啟動時加載. 動態加載指利用Linux 的module 特性,在系統啟動后使用insmod 命令對驅動模塊進行加載,在不需要的時候通過rmmod 命令來卸載.
采用靜態加載方式如果要修改驅動程序將需重新編譯、燒寫內核,效率較低,不利于驅動的開發調試[8].動態加載的模塊本身并沒有被編譯進內核映像,控制了內核的大小;同時,模塊一旦被插入內核,它就和內核中的其他部分完全一樣,使用靈活,調試方便.故采用動態加載方式來加載驅動程序.
3.2.3 驅動程序的測試
這里基于Android 系統實現一個可以在shell 中執行的驅動測試工具,代碼位置在Android 源碼的external 目錄,在external 中建立DS18B20 目錄,目錄下主要包括Android. mk 和DS18B20. c 兩個文件,其中.mk 文件是Android 系統的編譯文件,主要目的是將.c 文件編譯生成為系統可執行命令;重新啟動系統后,啟動Android 系統在ADB shell 中執行. /DS18B20 命令.可以讀取到一直在變化的溫度值,說明驅動程序已經生效.
在實現了一個帶有溫度傳感器功能的Android系統后,以溫度傳感器能夠獲取實時溫度數據的特性,在Eclipse 中設計并實現了一個環境溫度檢測程序,安裝到Android 系統中,賦予訪問驅動程序提供的節點權限,運行操作系統并啟動環境溫度檢測程序可以采集到實時的溫度數據.
通過反復試驗表明,該溫度檢測系統運行穩定,能夠實現對環境溫度的實時顯示與監控功能,且測量精度高.該溫度檢測系統具有操作界面人性化、控制方便、實時性好等優點,具有較好的應用前景. 由于Android 應用程序是用易懂的面向對象語言JAVA 編寫的,對于開發人員的要求相對較低. 因此把Android 作為水質檢測儀的系統是一次積極的嘗試,對未來產品設計與開發有很強的借鑒意義.
[1]陸桂明,李釗,王起龍.基于GPRS 的水質監測系統設計[J].華北水利水電學院學報,2013,34(4):117 -120.
[2]宋寶華.Linux 設備驅動開發詳解[M].2 版.北京:人民郵電出版社,2010.
[3]周立功,王祖麟,陳明計,等.ARM 嵌入式系統基礎教程[M].2 版.北京:北京航空航天大學出版社,2008.
[4]王麗娟,王艷.基于DS18B20 的多通道溫度測試儀[J].制造業自動化,2013,35(2):123 -127.
[5]仲進安.基于半導體制冷式熱泵的幼蠶共育溫濕度監控系統[J].農業工程學報,2012,28(11):183 -188.
[6]韓迪,潘志宏. 基于Android 移動設備傳感器的體感應用[J].華南理工大學學報:自然科學版,2012,40(9):75 -80.
[7]怯肇乾,吳金壘.基于Cortex-Ax 的Android 硬體操作軟件設計[J].單片機與嵌入式系統應用,2012,12(5):36-39.
[8]宋凱,嚴麗平,甘嵐. ARM Linux 在S3C2410 上的移植[J].計算機工程與設計,2008,29(16):4138 -4139.