一种非接触式线段测量系统的实现
2019-10-08张宏桥贺玉泉张国帅段凌飞
张宏桥 贺玉泉 张国帅 段凌飞
摘 要:非接触测量是指在不接触被测物体表面的情况下,间接得到物体表面参数的测量方法。随着计算机技术、通讯技术以及智能传感器的不断发展,此类测量系统的设计与实现变的更加高效。本文基于平面几何原理,使用激光测距与角度测量模块,并结合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-),男,硕士,讲师.研究领域:计算机控制.本文通讯作者.