張宏橋 賀玉泉 張國帥 段凌飛
摘 ?要:非接觸測量是指在不接觸被測物體表面的情況下,間接得到物體表面參數(shù)的測量方法。隨著計(jì)算機(jī)技術(shù)、通訊技術(shù)以及智能傳感器的不斷發(fā)展,此類測量系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)變的更加高效。本文基于平面幾何原理,使用激光測距與角度測量模塊,并結(jié)合AVR單片機(jī)實(shí)現(xiàn)了系統(tǒng)的數(shù)據(jù)采集下位機(jī)。同時(shí)在Windows系統(tǒng)上利用WPF(Windows Presentation Foundation)設(shè)計(jì)了多串口數(shù)據(jù)的同時(shí)接收與處理,最終實(shí)現(xiàn)了一種非接觸式的遠(yuǎn)距離線段實(shí)時(shí)測量系統(tǒng),并通過實(shí)驗(yàn)驗(yàn)證了該測量系統(tǒng)的有效性。
關(guān)鍵詞:非接觸測量;串口通訊;AVR;WPF
中圖分類號:TP311 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:Non-contact measurement is the method of measuring surface parameters without touching the target object.With the development of computer technology,communication technology and intelligent sensors,the design and implementation of such measurement system have become much more efficient.Based on the principle of plane geometry,this paper uses laser sensor and angle measurement module with AVR to realize the slaver measurement computer.On Windows,WPF is used to design a multi-port data receiving and processing.Finally,a non-contact real-time measurement system for line segments is realized,and the effectiveness of the system is verified by experiments.
Keywords:non-contact measurement;serial communication;AVR;WPF
1 ? 引言(Introduction)
計(jì)算機(jī)技術(shù)、通信技術(shù)與傳感器技術(shù)共同構(gòu)成信息技術(shù)的三大支柱。目前,制造業(yè)已逐漸成為各工業(yè)國的支柱產(chǎn)業(yè),測量手段的方便快捷與精準(zhǔn)可靠是相關(guān)行業(yè)的發(fā)展趨勢,而非接觸測量技術(shù)更是在越來越多的制造加工領(lǐng)域中得到應(yīng)用,為測量工作的安全與便捷提供了保障[1]。其中激光測距以其高方向性、高亮度、高單色性等眾多優(yōu)點(diǎn)成為時(shí)下非接觸式檢測的主流手段[2]。本文基于平面幾何原理,使用激光測距與角度測量模塊實(shí)現(xiàn)了關(guān)鍵數(shù)據(jù)的采集,并在Windows上利用WPF設(shè)計(jì)了多個(gè)串口數(shù)據(jù)的同時(shí)接收與被測線段的長度解算,實(shí)現(xiàn)了一種非接觸式的線段實(shí)時(shí)測量系統(tǒng)。
2 ? 系統(tǒng)相關(guān)技術(shù)(Related technology of the system)
2.1 ? 測量原理
本文主要利用如圖1所示的平面幾何模型,對線段X進(jìn)行非接觸式的長度測量。
2.2 ? 距離數(shù)據(jù)采集
為達(dá)到非接觸測量的目的,本文使用兩塊TFmini系列的激光模塊對長度數(shù)據(jù)L1與L2進(jìn)行采集,該激光模塊默認(rèn)使用115200波特率的串口發(fā)送特定格式的距離數(shù)據(jù)。本文通過串口轉(zhuǎn)USB數(shù)據(jù)線直接將數(shù)據(jù)發(fā)送到上位機(jī)PC上,并使用串口調(diào)試工具發(fā)送十六進(jìn)制指令“42 57 02 00 00 00 01 02”進(jìn)入該傳感器的設(shè)置模式,然后發(fā)送命令“42 57 02 00 00 00 00 08”,將傳感器的波特率調(diào)整為9600。如圖2所示。
本文用于測量L1的激光傳感器為固定角度安裝,測量L2的激光傳感器與測量β角的傳感器固定組裝在一起,安裝時(shí)應(yīng)盡量確保兩個(gè)激光傳感器的檢測朝向在同一平面。需要注意,由于該系列激光模塊存在測量盲區(qū),當(dāng)探頭距離所測點(diǎn)小于30cm時(shí),測量值固定為30cm,所以測量時(shí)被測線段的端點(diǎn)須距離相應(yīng)測距傳感器30cm以上。
2.3 ? 角度數(shù)據(jù)采集
本文使用KALAMOYI系列的霍爾角度傳感器進(jìn)行角度測量,其中軸轉(zhuǎn)到對應(yīng)角度時(shí),會(huì)輸出一個(gè)與角度成正比的電壓,范圍為0到5V[3]。具體工作方式如下:從0°開始順時(shí)針旋轉(zhuǎn),輸出電壓會(huì)從0V上升,當(dāng)無限接近360°時(shí),電壓升高到5V,若繼續(xù)旋轉(zhuǎn),則輸出電壓會(huì)重新變到0V,再從0°進(jìn)行計(jì)量。如圖3所示。
由于該傳感器直接得到的是電壓信號,PC無法直接接收,本文使用型號為ATmega16的AVR單片機(jī)實(shí)現(xiàn)角度的AD采集與數(shù)據(jù)的串口發(fā)送。該單片機(jī)的AD采集范圍也是0—5V,與角度傳感器正好匹配,精度為10位,主要配置如下:
(1)AD初始化:將寄存器ADCSRA配置為0×86,啟動(dòng)ADC并配置為自動(dòng)觸發(fā);將ADMUX配置為0×40使用通道0對應(yīng)的PA0口進(jìn)行采集。
(2)數(shù)據(jù)采集:首先將寄存器ADCSRA第7位置為1,啟動(dòng)一次AD轉(zhuǎn)換;然后等待ADCSRA第5位為1表示轉(zhuǎn)換完成,并將其第4為置為1停止采集;最后拼接寄存器ADCH的低2位與ADCL的8位數(shù)據(jù)便完成了一次電壓采集。
(3)串口初始化:將寄存器UCSRA、UCSRB、UCSRC分別設(shè)置為0×00、0×90與0×86,使能串口收發(fā)以及配置奇偶校驗(yàn)位等基本信息;將UBRRH、UBRRL分別設(shè)置為0×00與0×54,配置串口波特率為9600(晶振頻率8M),最后將SREG最高位置為1開啟串口中斷。
(4)串口發(fā)送:等待UCSRA的第6位為1,表示發(fā)送空閑。然后向UDR緩沖區(qū)寫入8位數(shù)據(jù),等待其第7位為1,表示數(shù)據(jù)完全送出。
為了使上位機(jī)接收統(tǒng)一的數(shù)據(jù)格式,規(guī)定AVR上送角度信息的格式如表2所示。
3 ? 上位機(jī)軟件(Host computer software)
本文使用WPF實(shí)現(xiàn)系統(tǒng)上位機(jī),使用三路串口來接收測量數(shù)據(jù),主要過程如下:
(1)關(guān)聯(lián)串口:由于串口每次插入時(shí)串口號均有可能變動(dòng),所以需要手動(dòng)關(guān)聯(lián)串口名稱與采集的數(shù)據(jù)類型。利用SerialPort類的GetPortNames成員函數(shù)動(dòng)態(tài)掃描當(dāng)前PC存在的串口,該函數(shù)以字符串?dāng)?shù)組string[]的形式返回當(dāng)前主機(jī)上所有的串口[4,5]。當(dāng)接入傳感器的串口時(shí),動(dòng)態(tài)判定新增的串口名稱,這樣就可以人為得到當(dāng)前連接串口對應(yīng)的是哪路距離數(shù)據(jù)或角度數(shù)據(jù)。當(dāng)兩路距離傳感器和角度傳感器均準(zhǔn)備完畢后,進(jìn)入串口配置與數(shù)據(jù)接收階段。
(2)配置串口:使用new操作符實(shí)例化三個(gè)SerialPort對象,分別配置端口名屬性PortName為上步獲取到對應(yīng)的三路串口名稱;波特率BaudRate均配置為9600;設(shè)置接收緩沖區(qū)觸發(fā)回調(diào)字節(jié)數(shù)ReceivedBytesThreshold為18字節(jié),并將數(shù)據(jù)接收回調(diào)函數(shù)Com_DataReceived添加到接收回調(diào)列表屬性DataReceived中。
(3)數(shù)據(jù)接收:依次調(diào)用各個(gè)串口對象的open函數(shù),開啟串口接收。由于本文對下的三路數(shù)據(jù)格式相近且長度一致,所以可將三個(gè)串口對象的回調(diào)函數(shù)配置為同一個(gè),只需在回調(diào)函數(shù)中利用傳參對象sender,獲取到對應(yīng)數(shù)據(jù)的串口來源名稱,然后再做相應(yīng)的判別處理:首先將sender格式化為SerialPort對象,如SerialPort s=sender as SerialPort,然后根據(jù)第二步實(shí)例化的三個(gè)串口對象的名稱屬性PortName,查找當(dāng)前觸發(fā)回調(diào)的串口名稱s.PortName是那一路的數(shù)據(jù),如過找到則進(jìn)行下一步處理,否則不解析該串口通道數(shù)據(jù)。
(4)數(shù)據(jù)解析:數(shù)據(jù)解析主要是在串口的回調(diào)函數(shù)中完成,解析流程如下:在回調(diào)函數(shù)中,判斷串口數(shù)據(jù)通道類別后,先獲取當(dāng)前串口數(shù)據(jù)接收緩沖區(qū)長度s.BytesToRead,由于三路數(shù)據(jù)的單幀長度均為9個(gè)字節(jié),則當(dāng)緩沖區(qū)長度如果大于等于18個(gè)字節(jié)時(shí),必定包含有效數(shù)據(jù)在其中。然后從當(dāng)前接收緩沖區(qū)中取出18個(gè)數(shù)據(jù)到大小也為18的字節(jié)組數(shù)RcvBuff中,如s.Read(RcvBuff,0,18)。接著掃描字節(jié)數(shù)組第一次重復(fù)出現(xiàn)兩次0×59的位置,并在這之后獲取相對第3、4字節(jié)位置進(jìn)行數(shù)據(jù)拼接,并保存至對應(yīng)的類內(nèi)私有變量當(dāng)中。注意距離數(shù)據(jù)的第3、4字節(jié)按高低順序可直接拼接出單位為cm的距離值,而角度數(shù)據(jù)拼接之后由于AVR只有10位的采集精度,所以需將拼接后16位角度數(shù)據(jù)取其低10位并乘以360/1024才可進(jìn)一步解算。
(5)數(shù)據(jù)解算與顯示:由于在串口回調(diào)函數(shù)中無法直接更新UI線程的界面,所以本文利用中間變量作為中轉(zhuǎn),在串口回調(diào)線程中寫數(shù)據(jù),而在UI線程中開啟了周期為50ms的定時(shí)器用于數(shù)據(jù)的讀取、計(jì)算與UI刷新。在串口收到并解析出對應(yīng)的數(shù)據(jù)后,先寫到與L1、L2與β相關(guān)的三個(gè)類內(nèi)私有double類型變量中,然后同時(shí)在定時(shí)器中讀取數(shù)據(jù)這三個(gè)變量,并按式(2)計(jì)算出被測線段的長度,最終刷新顯示到界面的文本框中,設(shè)計(jì)的界面如圖4所示。
4 ? 系統(tǒng)功能驗(yàn)證(System performance testing)
本文最終用于測試的簡易模型如圖5所示,其中兩個(gè)激光傳感器的水平距離L0為20cm。
表3為本文所做系統(tǒng)模型測量標(biāo)準(zhǔn)卷尺上對應(yīng)的間距所得到的實(shí)驗(yàn)數(shù)據(jù)。從測量結(jié)果可以看出:在盲區(qū)外,距離越近精度越高;距離較遠(yuǎn)的情況下,角度變動(dòng)的影響要比距離的影響更大。由于本文的驗(yàn)證模型相對簡易,所以測量數(shù)據(jù)的誤差在此程度上還是可以接受的,同時(shí)也證明了該系統(tǒng)的有效性與可用性。
5 ? 結(jié)論(Conclusion)
本文基于平面幾何理論中,已知某四邊形三邊與兩角,解算第四邊長度的原理,使用激光測距模塊與角度測量模塊作為關(guān)鍵長度與角度數(shù)據(jù)的測量手段,即利用激光傳感器的非接觸式測距與支持串口傳輸?shù)奶匦?,以及通過AVR單片機(jī)驅(qū)動(dòng)角度傳感器能使其以類似的格式上發(fā)數(shù)據(jù)到上位機(jī)串口。最終基于WPF在PC上實(shí)現(xiàn)了一套能夠管理多個(gè)串口的非接觸式線段實(shí)時(shí)測量系統(tǒng)并通過實(shí)驗(yàn)驗(yàn)證了該系統(tǒng)的有效性。
參考文獻(xiàn)(References)
[1] 方弄玉,鄒心遙,張文梅,等.一種非接觸式數(shù)字測距儀的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù),2017(12):97-101.
[2] 張向陽,郎野.用于遠(yuǎn)程激光測距機(jī)的板條激光器[J].激光與紅外,2019,49(05):549-552.
[3] 李志鵬,趙伊齊,邵憲友,等.基于霍爾原理的非接觸式位置傳感器的研究現(xiàn)狀與發(fā)展趨勢[J].安徽農(nóng)業(yè)科學(xué),2015,43(11):357-359;361.
[4] 顧星辰,胡仁杰,馬智勇.AVR單片機(jī)和Matlab串口通信的計(jì)時(shí)器系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013,13(03):25-27;31.
[5] 顧家銘.WPF在物聯(lián)網(wǎng)環(huán)境監(jiān)測系統(tǒng)中的應(yīng)用[J].電腦知識(shí)與技術(shù),2018,14(17):287-288.
作者簡介:
張宏橋(1989-),男,碩士,助理實(shí)驗(yàn)師.研究領(lǐng)域:軟件開發(fā),計(jì)算機(jī)控制.
賀玉泉(1999-),男,本科生.研究領(lǐng)域:電氣工程,嵌入式開發(fā).
張國帥(1994-),男,本科生.研究領(lǐng)域:電氣工程,嵌入式開發(fā).
段凌飛(1983-),男,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)控制.本文通訊作者.