陳建明,張亞軍,沈媛雪
(華北水利水電大學(xué),河南 鄭州 450045)
對(duì)于當(dāng)今越來(lái)越復(fù)雜的水環(huán)境問(wèn)題,尤其是突發(fā)性污染事件和非常態(tài)條件下的應(yīng)急監(jiān)測(cè)和現(xiàn)場(chǎng)監(jiān)測(cè),實(shí)時(shí)、原位、快速獲取分析測(cè)試數(shù)據(jù)和相關(guān)信息顯得尤其重要[1].從目前應(yīng)用較為廣泛的比色分析法來(lái)看,無(wú)論是光電比色法還是分光光度法,從取樣固定、樣品前處理、試劑配制、反應(yīng)條件控制、干擾的消除等到水樣測(cè)試的完成,存在一條繁瑣復(fù)雜的操作流程.將這一流程分解為顯色和檢測(cè)兩大子系統(tǒng)進(jìn)一步分析發(fā)現(xiàn):顯色系統(tǒng)中各種因素相互交錯(cuò),環(huán)境溫度、人員操作等變量較多.因此溫度作為顯色系統(tǒng)中的根本制約因素,僅靠提高測(cè)量人員的操作水平的方法,并不能有效地減少系統(tǒng)中容易產(chǎn)生干擾、造成偏差的缺點(diǎn),更不能顯著提升測(cè)試工作的效率.
針對(duì)這一需求,文中設(shè)計(jì)開發(fā)了基于Cortex-A8處理器和Android 平臺(tái)與數(shù)字式溫度傳感器DS18B20 的環(huán)境溫度檢測(cè)系統(tǒng).
系統(tǒng)以ARM 公司的CortexTM-A8 系列的微處理器S5PV210 為核心,在Android 4.0.3 操作系統(tǒng)環(huán)境下完成了應(yīng)用軟件的開發(fā)及交叉編譯[2]. 工作主要分為3 個(gè)部分:系統(tǒng)硬件平臺(tái)的構(gòu)建;基于Linux 3.0.8 內(nèi)核的測(cè)溫元件DS18B20 驅(qū)動(dòng)程序的設(shè)計(jì);Android 應(yīng)用層溫度監(jiān)測(cè)軟件的設(shè)計(jì).
系統(tǒng)硬件設(shè)計(jì)的主控制器采用SAMSUNG 公司S5PV210 處理器,它采用了ARM CortexTM-A8 內(nèi)核,是ARM 公司第一款基于ARMv7 架構(gòu)的應(yīng)用處理器[3].該處理器采用32 位RISC(精簡(jiǎn)指令集),內(nèi)部架構(gòu)采用64/32 位總線結(jié)構(gòu),最大處理速度可達(dá)到1 GHz,CPU 內(nèi)部具有16/32 kb 可配置的一級(jí)數(shù)據(jù)/指令緩存,512 kb 的二級(jí)緩存,可實(shí)現(xiàn)2 000 DMIPS(每秒運(yùn)算2 億條指令集)的高性能運(yùn)算能力,且有一套完整的通用系統(tǒng)外設(shè),功耗低于300 mW,具有低功耗、高性能等優(yōu)點(diǎn),減少了系統(tǒng)的整體成本.
DS18B20 是常用的1-wire 單總線數(shù)字溫度傳感器,它的溫度測(cè)量范圍為-55 ~+125 ℃,在-10 ~+85 ℃范圍內(nèi)精確度為0.5 ℃.可編程分辨率9 ~12 位,在9 位分辨率時(shí)最多在93.75 ms 內(nèi)把溫度轉(zhuǎn)換為數(shù)字,能分辨的最小溫度值為0.5 ℃.完全可以滿足該溫度檢測(cè)系統(tǒng)在正常環(huán)境下的測(cè)量要求[4].
DS18B20 既可以采用外部電源供電方式,也可以采用內(nèi)部電源供電方式. 外部電源供電時(shí),VDD接+ 5 V,GND 接地,數(shù)據(jù)接口(DQ)與ARM 的GPIO 相連.其電路如圖1 所示;內(nèi)部電源供電(寄生電源供電)時(shí),VDD、GND 都要接地,數(shù)據(jù)接口(DQ)接ARM 的GPIO[5].
圖1 外部供電模式
由于內(nèi)部供電模式可以節(jié)省一根電源線,大大降低了布線成本,從而使系統(tǒng)結(jié)構(gòu)更趨于簡(jiǎn)單,可靠性更高,而且在測(cè)量正常環(huán)境溫度的需求下,內(nèi)部供電可以采集到足夠準(zhǔn)確的溫度,這里采用內(nèi)部電源供電.從S5PV210 芯片上引出一條具有雙向傳輸功能的I/O 口GPH0_2,與DS18B20 的數(shù)據(jù)接口(DQ)相連.系統(tǒng)連接如圖2 所示.
圖2 系統(tǒng)連接示意圖
系統(tǒng)軟件設(shè)計(jì)包括操作系統(tǒng)、傳感器驅(qū)動(dòng)程序、溫度檢測(cè)程序.
目前較為流行的嵌入式操作系統(tǒng)主要有:微軟公司的Windows CE,風(fēng)河公司(WindRive)的Vx-Works,Palm 公司的Palm OS,由Micrium 公司提供的uC/OS-II、嵌入式Linux 操作系統(tǒng)等[6].基于嵌入式Linux 的Android 系統(tǒng)憑借其安全性高、人機(jī)交互強(qiáng)和代碼開源等優(yōu)點(diǎn),在嵌入式移動(dòng)設(shè)備領(lǐng)域內(nèi)具有很好的應(yīng)用前景,正在慢慢成為眾多嵌入式操作系統(tǒng)的另外一種選擇.目前,在Android 系統(tǒng)中也提供了對(duì)多種傳感器的支持,但要想使得Android 系統(tǒng)支持新添加的傳感器設(shè)備并且使得開發(fā)人員可以通過(guò)調(diào)用系統(tǒng)API 來(lái)直接編寫傳感器的應(yīng)用程序,不僅需要在Linux 內(nèi)核中添加相應(yīng)的硬件驅(qū)動(dòng),還必須在硬件抽樣層(Hardware Abstract Layer,HAL)中實(shí)現(xiàn)相應(yīng)的接口. 在應(yīng)用程序中,Android 系統(tǒng)強(qiáng)大的人機(jī)交互界面也可以使檢測(cè)人員的操作更加準(zhǔn)確、簡(jiǎn)便、快捷,結(jié)合溫度傳感器對(duì)環(huán)境溫度進(jìn)行實(shí)時(shí)的采集和存儲(chǔ),是移動(dòng)平臺(tái)與工業(yè)化結(jié)合的一次良好嘗試[7].
3.2.1 1-wire 總線的時(shí)序及編程
硬件驅(qū)動(dòng)程序?qū)S18B20 的主要操作:初始化,跳過(guò)ROM 命令,匹配ROM,發(fā)送匹配ROM 指令,讀取溫度值等. 對(duì)DS18B20 的操作必須嚴(yán)格按照時(shí)序進(jìn)行,訪問(wèn)DS18B20 的順序如下.
初始化:由總線控制器發(fā)出的復(fù)位脈沖和之后由從機(jī)發(fā)出的存在脈沖組成,存在脈沖告訴總線控制器DS18B20 在總線上,且已準(zhǔn)備好操作.
ROM 操作指令:該ROM 操作指令采用0xCC,這條指令允許總線控制器不用提供64 位ROM 編碼就可以使用功能指令.
功能命令:允許總線控制器讀寫DS18B20 的暫存器發(fā)起溫度轉(zhuǎn)換和識(shí)別電源模式.
使用ARM 實(shí)現(xiàn)DS18B20 數(shù)字式溫度傳感器采集溫度并轉(zhuǎn)換讀取溫度數(shù)值的驅(qū)動(dòng)程序設(shè)計(jì)流程如圖3 所示.值得注意的是,每次DS18B20 被訪問(wèn)時(shí),都必須嚴(yán)格按照這個(gè)順序進(jìn)行操作,否則DS18B20就不響應(yīng).
圖3 DS18B20 驅(qū)動(dòng)程序流程
3.2.2 驅(qū)動(dòng)程序的加載
Android 系統(tǒng)下的Linux 設(shè)備驅(qū)動(dòng)程序?qū)儆趦?nèi)核的一部分,Linux 內(nèi)核的一個(gè)模塊可以以2 種方式被編譯和加載.靜態(tài)加載指直接編譯進(jìn)Linux 內(nèi)核,隨同Linux 啟動(dòng)時(shí)加載. 動(dòng)態(tài)加載指利用Linux 的module 特性,在系統(tǒng)啟動(dòng)后使用insmod 命令對(duì)驅(qū)動(dòng)模塊進(jìn)行加載,在不需要的時(shí)候通過(guò)rmmod 命令來(lái)卸載.
采用靜態(tài)加載方式如果要修改驅(qū)動(dòng)程序?qū)⑿柚匦戮幾g、燒寫內(nèi)核,效率較低,不利于驅(qū)動(dòng)的開發(fā)調(diào)試[8].動(dòng)態(tài)加載的模塊本身并沒(méi)有被編譯進(jìn)內(nèi)核映像,控制了內(nèi)核的大小;同時(shí),模塊一旦被插入內(nèi)核,它就和內(nèi)核中的其他部分完全一樣,使用靈活,調(diào)試方便.故采用動(dòng)態(tài)加載方式來(lái)加載驅(qū)動(dòng)程序.
3.2.3 驅(qū)動(dòng)程序的測(cè)試
這里基于Android 系統(tǒng)實(shí)現(xiàn)一個(gè)可以在shell 中執(zhí)行的驅(qū)動(dòng)測(cè)試工具,代碼位置在Android 源碼的external 目錄,在external 中建立DS18B20 目錄,目錄下主要包括Android. mk 和DS18B20. c 兩個(gè)文件,其中.mk 文件是Android 系統(tǒng)的編譯文件,主要目的是將.c 文件編譯生成為系統(tǒng)可執(zhí)行命令;重新啟動(dòng)系統(tǒng)后,啟動(dòng)Android 系統(tǒng)在ADB shell 中執(zhí)行. /DS18B20 命令.可以讀取到一直在變化的溫度值,說(shuō)明驅(qū)動(dòng)程序已經(jīng)生效.
在實(shí)現(xiàn)了一個(gè)帶有溫度傳感器功能的Android系統(tǒng)后,以溫度傳感器能夠獲取實(shí)時(shí)溫度數(shù)據(jù)的特性,在Eclipse 中設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)環(huán)境溫度檢測(cè)程序,安裝到Android 系統(tǒng)中,賦予訪問(wèn)驅(qū)動(dòng)程序提供的節(jié)點(diǎn)權(quán)限,運(yùn)行操作系統(tǒng)并啟動(dòng)環(huán)境溫度檢測(cè)程序可以采集到實(shí)時(shí)的溫度數(shù)據(jù).
通過(guò)反復(fù)試驗(yàn)表明,該溫度檢測(cè)系統(tǒng)運(yùn)行穩(wěn)定,能夠?qū)崿F(xiàn)對(duì)環(huán)境溫度的實(shí)時(shí)顯示與監(jiān)控功能,且測(cè)量精度高.該溫度檢測(cè)系統(tǒng)具有操作界面人性化、控制方便、實(shí)時(shí)性好等優(yōu)點(diǎn),具有較好的應(yīng)用前景. 由于Android 應(yīng)用程序是用易懂的面向?qū)ο笳Z(yǔ)言JAVA 編寫的,對(duì)于開發(fā)人員的要求相對(duì)較低. 因此把Android 作為水質(zhì)檢測(cè)儀的系統(tǒng)是一次積極的嘗試,對(duì)未來(lái)產(chǎn)品設(shè)計(jì)與開發(fā)有很強(qiáng)的借鑒意義.
[1]陸桂明,李釗,王起龍.基于GPRS 的水質(zhì)監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].華北水利水電學(xué)院學(xué)報(bào),2013,34(4):117 -120.
[2]宋寶華.Linux 設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].2 版.北京:人民郵電出版社,2010.
[3]周立功,王祖麟,陳明計(jì),等.ARM 嵌入式系統(tǒng)基礎(chǔ)教程[M].2 版.北京:北京航空航天大學(xué)出版社,2008.
[4]王麗娟,王艷.基于DS18B20 的多通道溫度測(cè)試儀[J].制造業(yè)自動(dòng)化,2013,35(2):123 -127.
[5]仲進(jìn)安.基于半導(dǎo)體制冷式熱泵的幼蠶共育溫濕度監(jiān)控系統(tǒng)[J].農(nóng)業(yè)工程學(xué)報(bào),2012,28(11):183 -188.
[6]韓迪,潘志宏. 基于Android 移動(dòng)設(shè)備傳感器的體感應(yīng)用[J].華南理工大學(xué)學(xué)報(bào):自然科學(xué)版,2012,40(9):75 -80.
[7]怯肇乾,吳金壘.基于Cortex-Ax 的Android 硬體操作軟件設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(5):36-39.
[8]宋凱,嚴(yán)麗平,甘嵐. ARM Linux 在S3C2410 上的移植[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(16):4138 -4139.