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