張宏橋 賀玉泉 張國帥 段凌飛



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