顾晓威,胡 毅,占瑜毅
(合肥工业大学 仪器科学与光电工程学院,合肥 230009)
关节臂坐标测量机为一类应用广泛的三坐标测量机,其测量范围不受导轨、标尺和工作台尺寸限制,具有测量空间开阔的特点,更容易深入到正交坐标测量机不易深入的工件部位去测量,并且具有灵活、便携、经济、采集数据速度快等优点,适宜于车间现场使用,深受业界人士的好评,其中对多路光栅传感器输出信号进行处理和传输的研究是很重要的一方面。传统多光栅采集系统多使用分立的逻辑电路和芯片,即把每路信号分别放在一片专用芯片中处理,再加上通信接口芯片等电路元件,容易造成系统结构复杂,可靠性和通用性差,不利于调试,处理速度慢等缺点。如果在一片FPGA芯片上集成多路光栅信号的处理与传输功能,可以抗干扰,减少系统的复杂度,从而提高系统的可靠性和速度。由于单片芯片体积小,还可以嵌入到其他系统中。而且FPGA芯片设计周期短,成本低,灵活性高,可以方便地对电路进行修改,必要的时候可以加入其它模块[1],比如在各种不同总线的系统中使用时,对于数据传输的接口,不会再受到专用芯片接口单一且固定的限制,可以随时增加或修改接口模块以适应不同总线数据传输的需要。
图1 光栅输出信号特征Fig.1 Grating output signal characteristics
图2 系统整体结构Fig.2 Overall structure of the system
在坐标测量机的设计中,测头定向位置由3个关节6个圆光栅传感器确定,对圆光栅输出脉冲计数可实现角度的测量[2]。本设计采用FPGA芯片EP4CE6F17C8作为核心控制器,实现对关节式坐标测量机光栅信号数据采集处理系统,以取代价格贵、功能单一的专用芯片。光栅信号首先通过前置差分处理电路,再由FPGA进行整形、细分辨向、计数处理,最终串口通信发送到上位机软件,并根据FPGA模块化的特点,后期可实现多个光栅角度的采集。
增量式圆光栅编码器一般有A相、B相及Z相3个输出。A相、B相信号包含了圆光栅编码器的旋转方向、旋转速率等信息[3]。每移动一个栅距,就会输出两路相位相差90°的A、B脉冲方波信号(如图1),只需准确记录这些脉冲的数目,就能够精确计算出相对位移以及方向。除了A、B信号外,还有一个Z脉冲信号,这个脉冲信号作为参考点,用于异步清零,可以矫正系统的计数数据,避免累计误差,确保了计数的准确度[4]。
本系统本质上就是实现对AB脉冲数的采集以及AB相位判断,其整体结构如图2所示,系统分为整形、细分辨向、计数、串口通信4大模块。整形模块主要是为了滤除高频干扰对系统的影响;细分辨向模块主要完成4倍频和辨向功能;通信模块主要作用是把角度信息上传到上位机,便于后续处理。
图3 整形模块电路Fig.3 Shaping module circuit
信号整形模块主要的作用是完成光栅信号的整形,防止一些信号毛刺的干扰,本质上是一个实现去抖滤波的数字滤波器(RTL电路如图3)。其核心功能是用时钟信号CLK_50M检验输入方波信号的脉冲宽度,将小于3个CLK周期的窄脉冲视为抖动干扰加以过滤。一般情况下,时钟信号CLK_50M频率远大于光栅信号频率。因此,可以用时钟信号的边沿去采样光栅输出信号电平状态。稳定的光栅信号会在一定时间内电平保持一致,也即脉冲宽度会大于一定时间。因此,若设置一个3位的寄存器数据类型值,每一个时钟上升沿采样当前光栅信号电平状态送入寄存器内,连续3个时钟周期内采样值均一致,则可认为当前为有效信号,并输出相应电平值,否则输出信号电平状态保持不变。
光栅正向运动时的A、B电平总是以(0,1),(0,0),(1,0),(1,1)循环变换,而反向运动时电平变化又是以(1,0),(0,0),(0,1),(1,1)循环变换。每个周期内都能检测到4次电平跳变,因此可以输出4次计数脉冲,实现四细分,且由于运动方向不同,每两次跳变转换都是不同的,若检测每一次产生跳变时的前后电平状态,就可以在固定的循环中对应上当前的运动方向信息。考虑到一般使用情况下,时钟信号频率仍可作为采样信号,用其上升沿去采样每个周期内的4次电平跳变,存入寄存器内,比较当前值与前一状态值,状态不变,暂不输出脉冲,状态跳变,根据多种电平状态变化,输出对应增减脉冲,用于后续处理。该模块RTL级电路如图4所示,输入端时钟信号CLK_50M,光栅输入信号a、b,输出端增计数up,减计数down。
图4 细分辨向模块电路Fig.4 Fine resolution to module circuit
图5 计数模块电路Fig.5 Counting module circuits
可逆计数器模块将前一模块产生的增减计数作为触发信号,每检测到一个增或减计数脉冲上升沿,就先在两个计数器中独立地进行计数。最终计数值通过比较增减计数值得到,当增计数值大于减计数值,即正转角度多于反转角度时,最终计数值为增减计数值绝对差值;当减计数值大于增计数值,即反转角度大于正转角度时,最终计数值为光栅最大脉冲数同减计数值的绝对差值再合上增计数值,RTL电路如图5所示。rst为复位输入,up,down为增减脉冲输入,z为零位信号输入,d为计算出的脉冲数,angle为换算得到的角度信息。
本论文中,光栅传感器采用的是Mercury 3000系列编码器,转满一圈输出的最大脉冲数为524288,经过软件四细分后可达2097152。理论上,21位以上的计数器能满足要求,因而采用22位可逆计数器。
图6 串口发送示意图Fig.6 Serial sending diagram
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,简称UART)是一种异步收发传输器,其将并行数据转换成串行数据以便传输;将接收到的串行数据转换成并行数据。它包括了RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位,通信原理如图6所示。将一个字节一位一位地通过串行总线按照一定的频率(波特率)发送出去,该模块主要作用是与上位机通讯,将光栅采集到的数据发送到上位机,RTL电路如图7所示。
图7 串口发送模块电路Fig.7 Serial sending module circuit
图8 整形模块仿真Fig.8 Simulation of shaping module
图9 细分辨向模块仿真Fig.9 Detailed resolution module simulation
图10 计数模块仿真Fig.10 Counting module simulation
图11 串口发送模块仿真Fig.11 Serial transmission module simulation
完成以上设计后,编写testbench仿真文件并用Modelsim进行仿真验证。整形模块Testbench仿真结果如图8所示,图中可以看出,连续3个时钟周期内采样值均一致,则可认为当前为有效信号,并输出相应电平值,噪声可能引起的误计数很大程度上可以被消除,否则输出信号电平状态保持不变。图3可以看出输入信号u1,u2的毛刺在对应的输出a,b中已经滤除。
图9为四细分辨向电路模块的testbench仿真结果,当信号a滞后于b时,表示光栅传感器正在反向运动,则该模块会在每个电平跳变处输出一个减计数脉冲;当信号a超前b时,表示光栅传感器正在正向运动,则该模块会在每个电平跳变处输出一个增计数脉冲,实现辨向目的。
图10为计数模块Testbench仿真,当复位键按下后,可以检测到复位信号下降沿,并对增减计数值清零。正转时,计数值增加,反之减少。当正转过零时,零位信号自动置位,增减计数值清零;当反转过零时,零位信号也自动置位,计数值变为光栅传感器满圈的最大脉冲数。
图11为串口发送模块的仿真结果,由于角度为360°大于串口一帧发送的8位最大值255,因而一次发送两帧数据,待发送数据为0xAAAA时,UART_TX分两次从高电平开始,依次发送起始位0,01010101(由低到高),以及停止位。待发数据为0x5555时,UART_TX则分两次从高电平开始,依次发送起始位0,10101010(由低到高),以及停止位,皆符合设计要求。
本文针对关节臂坐标测量机,以FPGA为平台设计了一种光栅编码器信号采集系统,克服了使用专用集成电路带来的通用性差、电路复杂、实时性差等问题。该采集系统设计主要由4个模块构成,分别为滤波模块、细分辨向模块、可逆计数模块、串口通信模块。仿真结果表明,该采集方案在保证精度的同时,能够有效消除干扰和抖动现象,准确无误地进行脉冲计数,并且用Verilog硬件描述语言设计电路,改变电路,只需要修改程序即可,比较方便和灵活。相比传统采用单片机的设计方法,该方法结构简单、集成度高、可移植性强、功耗低、抗干扰强、所用器件数目少,适用于各种需要光栅编码器测量速度和位置的领域,目前该程序已成功下载到实验平台,并对系统进行了硬件仿真验证,运行情况良好。