嵌入式高精度激光测距系统设计*
2022-01-27胡宁波张家峰胡钊雄
胡宁波,王 晗,张 平,张家峰,胡钊雄
(1.广东工业大学a.机电工程学院广东省微纳加工技术与装备重点实验室,广州 510006;b.省部共建精密电子制造技术与装备国家重点实验室,广州 510006;2.长春理工大学机电工程学院,长春 130022)
0 引言
随着近年来激光测距技术被广泛运用于社会生活,工业自动化生产等多个领域,距离信息被认为是其中最重要的测量指标之一,因此对激光测距系统能够获取准确可靠的距离数据的研究具有积极的意义[1-2]。
研究发现国内目前在激光测距系统设计方面其测距原理主要采用三种方式:三角式、脉冲式和相位式,其系统主要组成部分包括硬件和软件,硬件部分一般选用单一的控制器来控制各种硬件电路包括:信号产生与激光调制电路、激光器与激光接收探测器、差频测相技术设计的鉴相电路、以及信号接收处理电路等。软件部分大多数通过其选择的控制器对应的软件平台进行下位机开发,有的同时开发出上位机测量界面。其中研究者往往通过实验测试结果的反馈来选择更合理的器件和测量算法去设计硬件电路,从而保证和提高系统测量性能[3-6]。这些都是通过提升系统硬件质量的方式理论上保证了系统测量部分的精度和稳定性,不是针对于整个系统而言,同时对测量技术和成本的要求比较高,缺乏可观性、可移植性和灵活性。在实际测量过程中,系统经常会受到测量环境、硬件故障、被测目标间差异等客观因素的干扰而产生一些系统误差,由于这些系统误差的产生会使测量结果出现异常数据,甚至是未知数据等在系统间传输的错误返回数据导致偏离真实测量值,这些会影响到系统测量的精度和稳定性。因此提出了一种自定义HEX通信协议的软件方法,该方法使系统只对正确返回数据进行通信交互,避免了系统因直接对错误返回数据的分析处理而造成错误测量的问题,尤其在后期需要对大量测量样本进行测试分析时,从而提高系统测量过程中的精度和稳定性。
本文提出的自定义HEX通信协议运用到激光测距系统中,搭建了基于相位式测距原理、STM32控制器搭载μC/OS-III实时操作系统[7]、同时结合LabVIEW的激光测距系统,解决了系统因在数据传送过程中产生的系统误差而影响系统测量性能问题,促进了激光测距技术在理论研究方面的发展。
1 高精度激光测距仪系统设计
相位式激光测距原理距离计算方法如下(其中c为光速:3×108m/s;测量往返一次所需的时间为t2D;相位差(总的相位移)φ):
(1)
Y1(t)=Acos(2πf0t0+φ0)
Y2D(t)=Acos(2πf0(t0+t2D)+φ0)
(2)
φ=(2πf0(t0+t2D)+φ0)-(2πf0t0+φ0)
φ=2πf0t2D
(3)
(4)
由式(3)、式(4)可知,在给定激光频率f0的条件下,如果要得出被测距离D需要得知N和Δφ;在相位式激光测距中的关于相位差计算一般是通过鉴相电路或者编写鉴相程序来比较测量反馈回路与接收信号回路之间信号的相位差,但是只能求出这个不足一个整周期的Δφ,而N值具体是多少是不确定的,同时如果想要使测量范围D值大,就需要通过降低激光调制频率f0,而测量误差又会随着调制频率的降低而增大,所以仅仅采用一把测尺是无法平衡测量范围和精度的问题,需要采用多测尺的方法来进行测量。本文系统整体设计如图1所示。
图1 系统整体设计框图
2 高精度激光测距仪系统实现
2.1 系统主从机及硬件设计
本设计采用意法半导体ST公司总线宽度32位的STM32系列单片机做主从机控制器。STM32单片机不仅具有性能强大、成本低、外设接口多、开发便捷的优点,而且因系统涉及到的通信方式主要是串行通信,需要较多串口支持,所以采用串口资源丰富的STM32单片机可以更好地满足系统的的设计[8]。为了提高系统灵活性,方便软硬件移植和模块化开发,整个系统硬件部分采用主从机两个部分去控制,主机选用的MCU型号是STM32F103ZET6,从机为STM32F030K6T6;其中主机需要同步实现多种功能,包括上位机通信,下位机搭载实时操作系统,控制LCD模块、按键模块,以及后期根据需要开发其它功能模块等,所以选择功能高度集成的STM32F103ZET6。从机只需要控制激光测距模块部分,为了进一步降低成本,适应更小组件及缩小PCB板的体积同时保持STM32的高端性能,所以选用入门级STM32F030K6T6。
主、从机和LabVIEW上位机PC端通过串行通信方式进行数据交互,其中上位机与主机之间的串行通信通过采用CH340芯片设计USB转串口电路实现。按键电路控制系统及各功能模块(比如LCD模块)的启动和关闭。LCD模块显示正确返回和错误返回测量数据值。
主机采用的是串口资源丰富的STM32F103ZET6作为主机控制器,可预留供后期其它功能开发的接口。主从机控制器STM32最小系统由对应的主从机芯片、电源电路、时钟晶振电路、下载电路、BOOT启动电路和复位电路等组成[9],如图2所示。
图2 主从机STM32FX最小系统框图
从机激光测距模块中通过从机控制器STM32F030K6T6控制由频率合成器件组成的信号产生调制电路来驱动发射激光信号,系统为了保持精度和测量范围采用的是多测尺方法测量,通过烧写于从机控制器STM32F030K6T6中的程序来控制测尺的切换。选择半导体激光器发射探测光源,产生的探测光源采用红色可见激光,满足人眼安全要求,同时便于观察瞄准目标。选择光电探测器中的雪崩光电二极管接收返回的激光信号,并完成光电信号的转换。模块采用差频测相技术设计鉴相电路来检测出两路混频信号中的相位差,通过从机控制器STM32F030K6T6的12位ADC对两路混频信号进行参数的分析处理,再根据已烧写于从机控制器中的自定义HEX通信协议解析函数将得到的距离测量数值转换成16进制表示的数据帧格式。从机激光控制块通过串行通信方式接收到主机发送的命令请求数据帧,将测量得到的16进制表示的响应命令数据帧通过串行通信方式返回给主机控制器STM32F103ZET6用于后续上位机数据通信和LCD模块实时显示,从而满足系统硬件设计要求,如图3所示。
图3 从机激光测距模块框图
2.2 系统软件设计
2.2.1 自定义HEX通信协议
本设计主从机控制器间采用10位通用异步收发器即波特率9600 bps,8位数据位,1位起始位,1位停止位,无奇偶校验的方式进行串行通信,该协议设定一个数据帧大小为11(12)字节,数据帧格式为:帧头、地址码、功能码、数据、校验码、(帧尾)。对于单次测量,连续测量等功能描述的命令请求数据帧,响应命令数据帧都是以16进制来表示,其中设置ADDR(80)为从机地址,设置从机地址是为了当有多个从机时,主机可通过对应地址找到从机,从而实现了一个测量系统中可同时使用多个从机激光测距模块。采用C语言编写完成该自定义HEX通信协议的主功能通信程序,其中主要包括发送接收基本操作函数,协议解析函数、返回特征标定识别函数以及各种功能模块函数等,并烧写于从机控制器STM32F030K6T6片上FLASH中。根据表1、2可知,其中基于硬件编写的功能模块函数包括不同精度下的单次测量、连续测量,以及测量前的设置地址、量程、频率、分辨率,控制激光打开关闭等。在该协议下,通过给从机控制器发送相应命令请求数据帧,然后通过观察显示的响应命令数据帧可知测量情况。
表1 自定义HEX通信协议部分命令表
表2 自定义HEX通信协议部分响应命令返回值表
在主从机间通信过程中,主机控制器STM32F103ZET6按照该自定义HEX通信协议规定数据帧格式通过串行通信方式发出命令请求数据帧给从机控制器STM32F030K6T6,从机控制器接收到命令请求数据帧后通过协议接收函数、协议解析函数的处理去控制激光模块进行测量并得到对应测量数据值,再经过STM32F030K6T6中12位ADC的处理,协议解析函数、协议发送函数将其按照规定数据帧格式转换为对应响应命令数据帧后并通过串行通信的方式发送给主机控制器。
在研究设计过程中,先采用单一的从机控制器STM32F030K6T6对激光测量模块进行开始测量,关闭测量等测量前动作的设定及控制,直接处理分析返回的测量数据值,然后通过大量分组实验测试,将测试结果中因测量环境、硬件故障、被测目标间差异等客观因素造成的错误返回数据值进行原因总结分类制表,最终用于自定义HEX协议标定数据返回特征,根据表3可知,根据实际测试情况列举出目前已知存在的造成错误返回的几类原因,将这些原因导致的错误返回的测量数据全部设置成’E’R’R’-’-’3X’3X’的返回特征(根据精度不同有11字节和12字节的区别)发送给主机控制器,主机控制器通过已烧录于Flash中的该协议对这种返回特征进行识别,判断数组存储或不存储,只有正确返回数据才能被存储以及通信给上位机及其它模块,从而达到剔除错误返回数据的目的,并同时在主机部分设计LCD模块进行实时显示以便观察,如图4可知。
2.2.2 上位机测量界面及主程序
PC端上位机测量界面采用虚拟仪器平台LabVIEW进行开发,界面面板控制功能包括:串口选择、波特率选择、测量开启关闭、实时测量值显示、测量单位切换以及波形图显示等[10-11]如图5所示,其中主程序源码以及通过其程序框图中文件I/O函数对测量数据进行存储并导出数据表格文件,便于后期用户对测量数据进行分析处理,如图6所示。
图6 上位机主程序
上位机通过设置实时测量数据显示控件可实现在单次测量下对测量数据的监测和调整,设置波形图可以实现在连续测量、批量采样下的有效测量数据波动状况,其中设置测量数据单位在实际测量中可随测量距离自动调整,测量数据曲线设置成虚实线两种,便于观察调整。
2.2.3 μC/OS-III在主机控制器上的移植及下位机主程序
下位机μC/OS-III实时操作系统移植和主程序开发选用Keil μVision5 IDE(集成开发环境),通过下载μC/OS-III源码、创建系统和工程目录(添加相关头文件和配置文件)、修改相关文件配置参数等步骤来完成准备工作[12-13],根据系统需要实现的具体功能在C源文件中编写,其中主要任务包括:主机控制从机测量任务、LCD显示任务、通信上位机任务等,如图7所示。
图7 下位机主程序
3 实验结果与分析
通过对测量环境和测量目标分组实验进行测试[14-15],结果表明本文设计的激光测距系统实测值与理论值最大相对误差不超过2%,测量范围0.05 m~50 m,单次测量时间0.05 s~1 s,测量精度(均方差)±2 mm,具有较高的测量精度,满足系统精度和稳定性的设计要求,部分测量数据结果、理论值与测量值对比如表4、图8所示。
表4 部分分组测试结果数据表
(a)光照强弱对比(b)表面粗糙度对比
4 结论
本设计将提出的自定义HEX通信协议运用到激光测距系统中,有效的解决了系统因在数据传送过程中产生的系统误差而影响系统测量性能的问题,提高了系统的测量精度和稳定性。同时在设计过程中运用模块化开发思想,系统软硬件结构采用主从机控制器,虚拟仪器LabVIEW以及搭载μC/OS-III实时操作系统来进行设计,提高了系统的灵活性。