李德信 胡朝旭
西安理工大學(xué),西安,710048
隧道表面尺寸、形狀的測量是隧道工程施工及檢測經(jīng)常進(jìn)行的工作。傳統(tǒng)的人工表面測量方式是在隧道中確定一個基點(diǎn)后,用手工方式測量此基點(diǎn)與表面若干被測點(diǎn)之間的距離,再對測量數(shù)據(jù)進(jìn)行后處理。在這種測量方式中,整個測量過程均由操作者手工操作完成,勞動強(qiáng)度大,測量周期長,且由于操作人員技術(shù)水平高低不同,會造成不同程度的測量誤差[1]。
數(shù)字化的表面形狀測量常常借助于各種測距元件進(jìn)行,常見的測距元件有紅外線測距元件、雷達(dá)測距元件和激光測距元件等。數(shù)字化的測量方式具有精度高、效率高、勞動強(qiáng)度低等特點(diǎn),以上幾種測距元件中,使用最廣、測量精度比較高的是激光測距元件[2]。借助測距元件進(jìn)行測量時所依據(jù)的原理與手工用尺子測量的方式基本一致,只是確定基點(diǎn)與表面若干被測點(diǎn)之間距離的方式用測距元件來完成,對測量數(shù)據(jù)的后處理,諸如計算和繪圖等,通過電腦完成[1]。
傳統(tǒng)的隧道斷面激光測量儀在使用時,固定好儀器后,激光測距元件只能繞一個軸轉(zhuǎn)動,僅能測量該表面上的一條曲線,不能自動連續(xù)測量整個表面。若需要測量整個表面,便需要移動儀器,重新定位進(jìn)行測量,然后綜合幾次測量的結(jié)果,才可生成表面形狀,這樣便使測量變得繁瑣,且重新定位會影響測量精度。本文所設(shè)計的隧道表面激光測量儀,在一次固定后,激光測距元件可同時繞兩個相互垂直的軸轉(zhuǎn)動,實(shí)現(xiàn)對某個表面的自動連續(xù)測量,同時,該儀器還具有掃描測量物體外形的功能。
激光隧道表面測量儀工作時,測距元件依靠激光測量距離。測距元件在工作時向目標(biāo)射出一束激光,由光電元件接收目標(biāo)反射的激光束,計時器測定激光束從發(fā)射到返回被接收的時間,經(jīng)過計算得出所測距離[3-4]。
測量隧道表面時,有兩個特點(diǎn):一是表面頂部的位置較高,人員不易觸及;二是需要逐點(diǎn)測距,數(shù)據(jù)量大。對測距儀的基本要求是:①無合作目標(biāo)測距功能(即不需棱鏡或其他反射物體來反射測距光束);②測距速度快,一般1~2s就能測距一次;③測距儀有標(biāo)準(zhǔn)數(shù)據(jù)輸出接口,如RS232或USB接口,以方便與計算機(jī)等設(shè)備連接;④測距儀誤差應(yīng)能控制在一定范圍之內(nèi),一般是±5mm;⑤測距頭體積和重量應(yīng)較小,便于移動、系統(tǒng)集成和操作[5]。本文中所采用的激光測距元件DISTO OEM module3.0WH30可以滿足上述要求。
如何控制激光測距元件發(fā)出的激光在隧道表面上自動連續(xù)掃描測量曲面輪廓,是本文所設(shè)計的儀器的關(guān)鍵所在。圖1所示的斷面測量儀只能繞一個軸轉(zhuǎn)動,在工作時,一次安裝僅能測量一條曲線(一個斷面),不能連續(xù)測量曲面,若要實(shí)現(xiàn)對曲面的測量,需移動儀器,重新定位測量,這樣就增加了測量工作量,降低了測試效率,且重新定位后,測量精度會受到影響。要使儀器在工作時能實(shí)現(xiàn)對曲面的自動連續(xù)掃描測量,需要使儀器的機(jī)械運(yùn)動部件滿足以下要求:①測距儀具有兩個旋轉(zhuǎn)自由度,即可以分別繞兩個坐標(biāo)軸旋轉(zhuǎn);②激光測距元件測量一個點(diǎn)大約需1~2s,因此,每轉(zhuǎn)過一定角度,需等待激光測距元件測量完成后,方可轉(zhuǎn)向下一角度測量,需要控制步進(jìn)電機(jī)的啟停和旋轉(zhuǎn)速度。綜合以上兩點(diǎn),本文設(shè)計的測量儀機(jī)械運(yùn)動部分原理圖如圖2所示。
圖1 激光隧道表面測量儀的測量原理
圖2 機(jī)械運(yùn)動部分原理圖
圖2中,激光測距元件與安裝在上箱座中的步進(jìn)電機(jī)2連接在一起,在步進(jìn)電機(jī)2的帶動下,激光測距元件可以繞X軸旋轉(zhuǎn);上箱座又與安裝在底座中的步進(jìn)電機(jī)1連接在一起,這樣,在步進(jìn)電機(jī)1的帶動下,激光測距元件與步進(jìn)電機(jī)2可以同時繞Y軸轉(zhuǎn)動。由此本文設(shè)計的測量儀實(shí)現(xiàn)了激光測距元件在兩個自由度下的運(yùn)動,可以實(shí)現(xiàn)對曲面的自動連續(xù)測量。測量儀工作時,兩個方向的轉(zhuǎn)動由控制系統(tǒng)控制,并記錄下轉(zhuǎn)動信息。
圖2所示的機(jī)械部分在工作時,激光測距元件繞X軸旋轉(zhuǎn)一周后(或按照用戶需要測完某個范圍),即可完成一個斷面的測量,然后,上箱體在步進(jìn)電機(jī)1的帶動下旋轉(zhuǎn)一個角度,激光測距元件再次繞X軸旋轉(zhuǎn)便可以對下一個斷面進(jìn)行測量。
在測量過程中,測量得到的數(shù)據(jù)需及時顯示出來,以方便操作者及時掌控。因此,顯示器是必不可少的,且顯示器具有實(shí)時監(jiān)測測量進(jìn)程以及顯示測量后生成的表面圖形的作用。
在測量完成后,數(shù)據(jù)除了可以立刻被CPU處理生成表面形狀圖以外,還可以將數(shù)據(jù)儲存下來,以方便對數(shù)據(jù)做進(jìn)一步的處理和后續(xù)使用,因此,數(shù)據(jù)存儲也是該系統(tǒng)必備的部分。為了使用方便,設(shè)計了打印機(jī)來打印測量數(shù)據(jù)。
數(shù)據(jù)可能會需要后續(xù)處理,單靠儀器的CPU可能無法完成。因此,儀器需要與PC機(jī)之間保持通信關(guān)系,能在測量的同時將數(shù)據(jù)送入PC中進(jìn)行處理和保存。
綜合以上分析,圖3為所設(shè)計的測量儀的系統(tǒng)控制原理圖。該系統(tǒng)可根據(jù)操作者的控制指令,控制兩個步進(jìn)電機(jī)運(yùn)動,同時向激光測距元件發(fā)送測量命令,測量結(jié)果返回CPU后,進(jìn)行數(shù)據(jù)的處理,顯示器顯示測量進(jìn)程和數(shù)據(jù)處理結(jié)果,打印機(jī)可將數(shù)據(jù)打印出來,便于保存。
圖3 系統(tǒng)控制原理圖
CPU需控制激光測距元件、步進(jìn)電機(jī)和實(shí)現(xiàn)對數(shù)據(jù)的簡單處理,更復(fù)雜的處理可以通過功能更強(qiáng)的PC機(jī)來實(shí)現(xiàn)??紤]儀器控制相對比較簡單和成本問題,CPU采用單片機(jī)即可實(shí)現(xiàn)所需控制功能,本文選用STC89C516單片機(jī)作為CPU,它具有63KB的Flash程序存儲器和1280B的RAM數(shù)據(jù)存儲器,可以滿足程序及數(shù)據(jù)存儲的需要,且不需外接存儲器,其價格相對較低[6]。
激光測距元件DISTO OEM module3.0 WH30,采用RS232串口來接收測量命令并返回測量結(jié)果。單片機(jī)的串行接口通過MAX232轉(zhuǎn)換電平后,與激光測距元件的RS232串口連接,便可向激光測距元件發(fā)送測量指令并接收測量結(jié)果。
單片機(jī)的串行接口通過MAX232轉(zhuǎn)換電平后也可與PC機(jī)進(jìn)行通信。但單片機(jī)只有一個串口,為了能同時連接激光測距元件和PC機(jī),需對單片機(jī)串口進(jìn)行擴(kuò)展,以實(shí)現(xiàn)單片機(jī)與PC機(jī)和激光測距元件通信。
步進(jìn)電機(jī)的控制采用步進(jìn)電機(jī)驅(qū)動器來實(shí)現(xiàn),單片機(jī)需向步進(jìn)電機(jī)驅(qū)動器發(fā)送走步和方向脈沖,實(shí)現(xiàn)對步進(jìn)電機(jī)走步和方向的控制。單片機(jī)的P1.0、P1.1和P1.2、P1.3分別接兩個步進(jìn)電機(jī)驅(qū)動器的走步和方向脈沖輸入端。其中,接步進(jìn)電機(jī)1驅(qū)動器的P1.0為正反轉(zhuǎn)控制端,P1.1為走步控制端;接步進(jìn)電機(jī)2驅(qū)動器的P1.2為正反轉(zhuǎn)控制端,P1.3為走步控制端。通過以上連接,步進(jìn)電機(jī)便可以按照單片機(jī)發(fā)出的控制信號運(yùn)動,實(shí)現(xiàn)對激光測距元件轉(zhuǎn)向和速度的控制。
由于單片的I/O口有限,若同時連接VGA顯示器、打印機(jī)和鍵盤會出現(xiàn)I/O口不夠用的情況,因此,需對單片的I/O口進(jìn)行擴(kuò)展,將P0口通過擴(kuò)展后分別連接鍵盤、VGA顯示器和打印機(jī)。
鍵盤是用戶控制該儀器的設(shè)備,鍵盤需對激光測距元件、步進(jìn)電機(jī)、打印機(jī)等的工作過程進(jìn)行控制,這里采用單片機(jī)系統(tǒng)常用的4×4矩陣式鍵盤,共16個按鍵。
VGA顯示器可以顯示彩色圖形和文字,在本儀器中主要用來顯示測量的進(jìn)程、結(jié)果和生成的圖形。
數(shù)據(jù)在打印時,考慮到儀器需便于移動、打印方便等特點(diǎn),因此,打印機(jī)采用μp-A面板式微型打印機(jī)。該打印機(jī)可以打印ASCII字符,英文字符、少量的漢字和各種圖形符號,可直接用單片機(jī)進(jìn)行控制,編程簡單,且這種打印機(jī)體積小,可以鑲嵌在儀器內(nèi),采用針式打印,打印成本低。
數(shù)據(jù)存儲采用SD卡,SD卡具有存儲容量大、掉電數(shù)據(jù)不丟失等優(yōu)點(diǎn),是現(xiàn)在各種電子產(chǎn)品中廣泛使用的存儲設(shè)備,造價不高。單片機(jī)在讀寫SD卡時,需要用四個端口模擬SPI模式來實(shí)現(xiàn)與SD卡的通信,四個端口分別連接SD卡的片選(CS)、數(shù)據(jù)0(D0)、數(shù)據(jù)1(D1)和時鐘信號(SCL)[7]。因此,用P1.4~P1.7四個引腳接SD卡進(jìn)行數(shù)據(jù)存儲。這里要注意的是,SD卡的邏輯電平相當(dāng)于3.3VTTL電平標(biāo)準(zhǔn),而單片機(jī)的邏輯電平為5V,高于SD卡工作時的電壓,若直接相連,會燒毀SD卡。因此,需要解決電平匹配問題。本文采用74HC244作為電平轉(zhuǎn)換芯片。單片機(jī)與SD卡通過一片74HC244連接,當(dāng)對74HC244輸入3.3V電壓時,不論輸入高電平是5V還是3.3V,其輸出高電平均為3.3V,可以滿足電平匹配問題。
綜合以上部分,所設(shè)計儀器的硬件電路原理如圖4所示。
圖4 硬件電路原理圖
本文設(shè)計的測量儀軟件包括兩部分:一部分為硬件控制程序,另一部分為數(shù)據(jù)后處理程序。
硬件控制程序主要有系統(tǒng)主程序、初始化程序、中斷服務(wù)程序、鍵盤掃描子程序、鍵盤處理及數(shù)據(jù)處理子程序、打印子程序、串行通信子程序、步進(jìn)電機(jī)控制子程序、數(shù)據(jù)采集及處理子程序、報警子程序等。數(shù)據(jù)進(jìn)一步詳細(xì)的處理需在PC機(jī)上進(jìn)行,本文還編制了測量儀與PC機(jī)之間的通信程序,用來實(shí)現(xiàn)二者的通信。測量數(shù)據(jù)的后處理是所設(shè)計的測量儀的另一個重點(diǎn)部分。數(shù)據(jù)的后處理一般要完成以下工作:實(shí)測表面圖數(shù)據(jù)的預(yù)處理、坐標(biāo)系的確定、坐標(biāo)值的計算、設(shè)計表面的繪制、實(shí)測表面與設(shè)計表面的比較等。所設(shè)計的測量儀的軟件系統(tǒng)流程如圖5所示。
開始測量時,首先設(shè)定需要測量的表面范圍,然后CPU向激光測距元件發(fā)送測量命令,對一個點(diǎn)進(jìn)行測量,測量完成后將當(dāng)前點(diǎn)的測量數(shù)據(jù)和關(guān)系數(shù)據(jù)存入到SD卡中,同時傳輸該數(shù)據(jù)至PC機(jī),然后判斷所設(shè)定的測量范圍是否測量完成,若測量完成,則判斷一行是否測完,若一行測量完畢,則步進(jìn)電機(jī)1轉(zhuǎn)過一個步距角,進(jìn)行下一行的測量,若一行沒有測完,步進(jìn)電機(jī)2轉(zhuǎn)動一個步距角,進(jìn)行該行下一個點(diǎn)的測量。因?yàn)榧す鉁y距元件在步進(jìn)電機(jī)2的帶動下繞X軸轉(zhuǎn)動時,假設(shè)測量第一行是順時針從0°旋轉(zhuǎn)到180°,那么第一行測量完成后,第二行的測量就要使激光測距元件逆時針從180°旋轉(zhuǎn)到0°。因此,程序在運(yùn)行時,需要判斷所測量的是奇數(shù)行還是偶數(shù)行,以確定步進(jìn)電機(jī)2的轉(zhuǎn)向。當(dāng)測完整個表面后,操作者可以選擇是否打印測量數(shù)據(jù)。最后,相關(guān)數(shù)據(jù)清零,為下一次測量做好準(zhǔn)備。
圖5 測量程序流程
軟件的硬件控制程序采用C語言編寫,并通過Keil C51軟件編譯成HEX文件,下載到單片機(jī)中??紤]到MATLAB具有較強(qiáng)的數(shù)據(jù)處理功能,PC機(jī)中的數(shù)據(jù)后處理軟件采用MATLAB與VC++混合編程的方法,在VC++中調(diào)用 MATLAB程序,完成對數(shù)據(jù)的后處理[8]。整個儀器的程序較為繁瑣,因此,以下僅給出幾個關(guān)鍵部分的程序代碼。
(1)激光測距元件測量命令關(guān)鍵代碼:
send_ch("a\r\n");//發(fā)送復(fù)位命令
DelayMS(10);//延時10ms
send_ch("G\r\n");//發(fā)送測量命令(G命令)
DelayMS(10);//延時10ms
for(i=0;i<=14;i++)//接收激光測距元件返回的測量結(jié)果,存在數(shù)組a中
{
a[i]=get_byte();//get_byte()為從串口接收緩沖區(qū)讀取數(shù)據(jù)的函數(shù)
}
(2)步進(jìn)電機(jī)控制關(guān)鍵代碼(步進(jìn)電機(jī)1正轉(zhuǎn)代碼):
P1_5=0;//P1.5置為低電平,控制步進(jìn)電機(jī)1正轉(zhuǎn)
P1_4=0;//P1.4置為低電平
DelayMS(5);//延時5ms
P1_4=1;//P1.4置為高電平,向步進(jìn)電機(jī)驅(qū)動器發(fā)送走步脈沖
DelayMS(5);//高電平狀態(tài)延時5ms
P1_4=0;//P1.4置為低電平,一個脈沖結(jié)束
(3)數(shù)據(jù)存儲關(guān)鍵代碼:
FAT32_Create_File(&FileInfo,"\\data.txt",Create_DT);//在SD卡中創(chuàng)建保存數(shù)據(jù)的文本文檔data.txt
strcpy(str,&a);//將數(shù)組a中的數(shù)據(jù)拷貝到數(shù)組str中
strcat(str,"\r\n");//在str數(shù)據(jù)后加換行
FAT32_Add_Dat(&FileInfo,strlen(str),str);//將數(shù)據(jù)寫入data.txt文件
FAT32_File_Close(&FileInfo);//關(guān)閉文件
(4)數(shù)據(jù)發(fā)送至PC機(jī)關(guān)鍵代碼:
while(cp[i]?。?)//判斷字符串是否結(jié)束
{
TI=0;
SBUF=cp[i];//發(fā)送一字節(jié)
while(!TI);//發(fā)送完畢
i++;//移到下字節(jié)
}
為了驗(yàn)證儀器的使用情況,選擇某塑料棚的局部進(jìn)行了試驗(yàn)測量,并繪制了所測表面的三維圖形。
按照圖5給出的測量流程,使用隧道表面激光測量儀對所選表面進(jìn)行測量,測量完成后,將所測得的距離值按照球面坐標(biāo)系轉(zhuǎn)換為OXYZ三維直角坐標(biāo)系,測量及轉(zhuǎn)換后的部分?jǐn)?shù)據(jù)如表1所示。其中,測量位置(i,j)中的i表示測量的是第i個斷面,j表示測量的是第i個斷面的第j個點(diǎn)。通過數(shù)據(jù)后處理軟件將所測點(diǎn)的數(shù)據(jù)進(jìn)行處理,生成所測表面的網(wǎng)格圖,如圖6所示,圖中X軸平行于(或重合于)隧道中線,Y軸與隧道中線垂直,因此,XOY坐標(biāo)平面為水平面,Z軸為垂直于XOY坐標(biāo)平面(水平面)的軸。
表1 實(shí)際測量的部分?jǐn)?shù)據(jù)
圖6 墻面的三維圖
本文采用激光測距元件作為測量傳感器,設(shè)計研制了激光隧道表面測量儀,并對該儀器的硬件組成、控制軟件和數(shù)據(jù)處理軟件進(jìn)行了分析和設(shè)計。該儀器可以實(shí)現(xiàn)繞相互垂直的X軸和Y軸轉(zhuǎn)動,能對隧道表面的形狀進(jìn)行測量,并生成被測量表面的三維圖。使用該儀器對實(shí)際墻面進(jìn)行了測量,測量數(shù)據(jù)和生成的墻面圖形符合被測表面的實(shí)際形狀。該測量儀除了可以測量隧道表面形狀外,還可以用于一般物體的外形測量,如煤堆、土堆等外形的掃描測量,以此來推算其體積和重量。儀器測量速度快、測量準(zhǔn)確、便于攜帶、用途較為廣泛。
[1]張清富,楊武裝.簡易型激光斷面儀的研制和使用[J].隧道建設(shè),2003,23(5):55-56
[2]劉坤,陳芳.激光測距方法及激光器的發(fā)展[J].科技資訊,2008,30:387-388.
[3]劉宏,姜力.仿人多指靈巧手及其操作控制[M].北京:科學(xué)出版社,2010.
[4]常鳳筠,崔旭東.基于激光測距傳感器的汽車防撞報警器的設(shè)計[J].應(yīng)用激光,2007,27(1):45-46.
[5]熊維海.隧道斷面測量技術(shù)[J].中國測試技術(shù),2004(2):41-43.
[6]劉換成.工程背景下的單片機(jī)原理及系統(tǒng)設(shè)計[M].北京:清華大學(xué)出版社,2008.
[7]尚怡君,葛明濤.SPI模式下對SD卡的讀寫控制[J].光盤技術(shù),2009(14):195-199.
[8]劉靜,吳衍青,湯宇暉.Matlab/VC++/Access組合編程方法及其應(yīng)用[J].計算機(jī)工程,2001,27(3):23-24.