李軍,申俊澤
(東北石油大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院 嵌入式實(shí)驗(yàn)室,大慶 163318)
隨著國民經(jīng)濟(jì)的迅速發(fā)展,超聲波在機(jī)械制造、石油化工、航空航天等領(lǐng)域發(fā)揮著越來越重要的作用。
超聲波測(cè)距作為一種非接觸式距離測(cè)量方法,具有不受外界光及電磁場(chǎng)等因素影響的優(yōu)點(diǎn),實(shí)現(xiàn)電路簡(jiǎn)單,成本低;同時(shí),還具有易于定向發(fā)射、方向性好、對(duì)人體傷害小等特點(diǎn)。上述優(yōu)勢(shì)使得與超聲波測(cè)距領(lǐng)域相關(guān)的儀器設(shè)備在數(shù)據(jù)處理、檢測(cè)性能和工程設(shè)計(jì)系統(tǒng)化等方面有了更大的發(fā)展空間。
本系統(tǒng)利用三星公司的S3C2410及超聲波測(cè)距模塊HC-SR04構(gòu)造了一個(gè)嵌入式系統(tǒng)平臺(tái)。整個(gè)系統(tǒng)由3部分組成:底層硬件平臺(tái)、系統(tǒng)軟件層和應(yīng)用軟件層。系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
超聲波測(cè)距儀的軟件層由驅(qū)動(dòng)及應(yīng)用程序組成。其中,應(yīng)用程序包括數(shù)據(jù)采集程序及圖形用戶界面;而驅(qū)動(dòng)程序的設(shè)計(jì)是本系統(tǒng)的重點(diǎn)。
S3C2410處理器是三星公司的一款基于ARM920T內(nèi)核的16/32位RISC嵌入式微處理器。ARM920T由ARM9TDMI、存儲(chǔ)管理單元(MMU)和高速緩存3部分組成,主頻可達(dá)200MHz;外圍硬件資源包括64MB SDRAM、64MB NAND Flash、2個(gè)五線異步串行口、1個(gè)10M網(wǎng)口及用戶擴(kuò)展口等。本系統(tǒng)利用開發(fā)板提供的GPIO擴(kuò)展資源,實(shí)現(xiàn)對(duì)超聲波測(cè)距模塊HC-SR04的數(shù)據(jù)采集及控制,同時(shí)在LCD屏上顯示精確的距離數(shù)值。
超聲波測(cè)距是借助于超聲脈沖回波渡越時(shí)間法來實(shí)現(xiàn)的。設(shè)超聲波脈沖由傳感器發(fā)出到接收所經(jīng)歷的時(shí)間為t,超聲波在空氣中的傳播速度為c,則從傳感器到目標(biāo)物體的距離D可用下式求出:
超聲波測(cè)距模塊HC-SR04可提供2~400cm的非接觸式距離感測(cè)功能,測(cè)距精度可高達(dá)3mm。模塊包括超聲波發(fā)器、接收器與控制電路。圖2為HC-SR04的引腳圖。
各引腳功能如下:
①VCC是5V電源,GND為地。
②TRIG是觸發(fā)測(cè)距引腳,給至少10μs的高電平信號(hào)。
③ECHO是信號(hào)接收引腳。有信號(hào)返回時(shí),通過I/O口ECHO輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。
圖2 HC-SR04引腳圖
在軟件開發(fā)之前,首先要完成軟件開發(fā)環(huán)境的搭建,接下來最重要的工作就是設(shè)備驅(qū)動(dòng)程序的開發(fā)。當(dāng)軟件系統(tǒng)底層的程序完成之后,就可以著手上層的與設(shè)備無關(guān)的應(yīng)用程序。最后就是系統(tǒng)的圖形界面的設(shè)計(jì),并將應(yīng)用程序燒寫到S3C2410開發(fā)板上。
(1)交叉編譯環(huán)境的建立
交叉編譯是嵌入式開發(fā)過程中的一項(xiàng)重要技術(shù),是編譯技術(shù)發(fā)展過程中的一個(gè)重要分支。本系統(tǒng)采用的交叉編譯器是cross-3.3.2.tar.bz2。安裝此編譯器只需要在/usr/local目錄下建一個(gè)arm的目錄,將cross-3.3.2.tar.bz2拷貝到arm目錄下,然后進(jìn)入該目錄進(jìn)行解壓,并設(shè)置相應(yīng)的環(huán)境變量。
(2)Qt/Embedded和Qtopia開發(fā)環(huán)境的建立
建立Qt/Embedded和Qtopia開發(fā)環(huán)境的具體步驟如下:首先,下載tmake、Qt/Embedded、Qtopia的源碼包,注意版本之間的向后兼容性;其次,把這3個(gè)源碼包分別解壓到不同的目錄下;最后,編輯/etc/bashrc文件,設(shè)置環(huán)境變量,并利用交叉編譯器編譯Qt/Embedded。
超聲波測(cè)距模塊程序由驅(qū)動(dòng)及應(yīng)用程序組成。應(yīng)用程序傳送給超聲波測(cè)距模塊驅(qū)動(dòng)控制參數(shù),具體測(cè)距由驅(qū)動(dòng)程序完成。在用戶態(tài)應(yīng)用程序中讀取超聲波設(shè)備,可獲得所需的信息。
Linux系統(tǒng)訪問設(shè)備就像訪問文件一樣。字符設(shè)備使用struct file_operation結(jié)構(gòu)來定義設(shè)備的各種操作集合,結(jié)構(gòu)中的各個(gè)函數(shù)分別響應(yīng)同名或類似名稱的系統(tǒng)調(diào)用。它是操作外設(shè)的函數(shù)接口,又稱設(shè)備驅(qū)動(dòng)程序接口。編寫字符設(shè)備驅(qū)動(dòng)程序,主要實(shí)現(xiàn)struct file_operation結(jié)構(gòu)中的各個(gè)函數(shù)。當(dāng)然,驅(qū)動(dòng)程序并不是要實(shí)現(xiàn)所有的這些函數(shù),可以根據(jù)實(shí)際設(shè)備需要實(shí)現(xiàn)必要的函數(shù)。超聲波傳感器設(shè)備驅(qū)動(dòng)中定義的數(shù)據(jù)結(jié)構(gòu)為:
函數(shù)gpio_init用于初始化GPIO設(shè)備。函數(shù)gpio_setup_cdev創(chuàng)建并注冊(cè)字符設(shè)備,動(dòng)態(tài)分配設(shè)備號(hào)。函數(shù)gpio_open用于打開并配置為輸入口。函數(shù)gpio_read用于讀取超聲波測(cè)距模塊輸出的距離數(shù)據(jù)。函數(shù)gpio_release用于關(guān)閉GPIO設(shè)備。
超聲波測(cè)距系統(tǒng)的應(yīng)用程序主要由測(cè)距程序、超聲波發(fā)生子程序、超聲波接收程序及顯示子程序組成。測(cè)距程序流程如圖3所示。
圖3 測(cè)距程序流程
圖形用戶界面(GUI)是系統(tǒng)的一個(gè)至關(guān)重要的方面,用戶通過GUI與系統(tǒng)進(jìn)行交互,所以GUI應(yīng)該易于使用并且可靠。本系統(tǒng)圖形界面的主要功能有:調(diào)用相應(yīng)驅(qū)動(dòng)程序,顯示距離,處理觸摸屏點(diǎn)擊事件等。
將應(yīng)用程序燒寫到S3C2410開發(fā)板。首先將驅(qū)動(dòng)程序的可執(zhí)行文件復(fù)制到根文件系統(tǒng)的/usr目錄下;其次把Qt\Embedded二進(jìn)制庫和應(yīng)用程序的二進(jìn)制代碼復(fù)制到某個(gè)目錄下;然后把這個(gè)目錄制成某種類型的根文件系統(tǒng);最后把這個(gè)根文件系統(tǒng)燒寫到S3C2410的Flash存儲(chǔ)器上。這個(gè)過程可能需要一些制作根文件系統(tǒng)的工具,如mkcramfs。
在系統(tǒng)設(shè)計(jì)并實(shí)現(xiàn)后,為了驗(yàn)證測(cè)距儀的準(zhǔn)確性與穩(wěn)定性,測(cè)試了12組數(shù)據(jù),并對(duì)測(cè)距結(jié)果與實(shí)際距離進(jìn)行了比較。距離測(cè)試結(jié)果如表1所列。
表1 距離測(cè)試結(jié)果 cm
由實(shí)驗(yàn)數(shù)據(jù)可知,該超聲波測(cè)距器的盲區(qū)(超聲波傳感器檢測(cè)到墻壁的最近距離)為2cm;而最遠(yuǎn)測(cè)量距離為400cm。電路程序設(shè)計(jì)時(shí),為了避免超聲波從發(fā)射器直接傳送到接收器引起的直射波觸發(fā),延時(shí)約為0.1ms,所以超聲波測(cè)距器會(huì)有一個(gè)最小可測(cè)距離。而由于超聲波在傳播過程中會(huì)產(chǎn)生衰減且發(fā)射功率有限,導(dǎo)致遠(yuǎn)距離回波很難檢測(cè)到,所以會(huì)有一個(gè)最遠(yuǎn)測(cè)量距離。另外,通過溫度補(bǔ)償可以提高測(cè)量精度。
利用超聲波測(cè)距原理,系統(tǒng)在S3C2410+Linux的平臺(tái)上,實(shí)現(xiàn)了自動(dòng)測(cè)距和實(shí)時(shí)顯示功能。該系統(tǒng)所有運(yùn)算、處理、顯示都實(shí)現(xiàn)數(shù)字化;操作簡(jiǎn)單,使用方便,測(cè)量速度快、準(zhǔn)確,結(jié)果顯示直觀;體積小,攜帶方便,適用于各種水文液位測(cè)量、障礙物的識(shí)別以及車輛自動(dòng)導(dǎo)航等領(lǐng)域,具有良好的應(yīng)用前景。
[1]石秀民.嵌入式系統(tǒng)原理與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2007.
[2]王宜懷.嵌入式技術(shù)基礎(chǔ)與實(shí)踐[M].北京:清華大學(xué)出版社,2009.
[3]優(yōu)龍科技發(fā)展公司.YLP2410使用手冊(cè),2007.
[4]宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,2008.
[5]歐文盛.ARM嵌入式Linux應(yīng)用實(shí)例開發(fā)[M].北京:中國電力出版社,2008.
[6]Xteam(中國)軟件技術(shù)有限公司.Qt程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002.