孙可森
(四川大学机械工程学院,四川 成都 610044)
工业现场环境会给缺陷在线检测系统带来噪声干扰,为提高系统的稳定性,降低误报率,系统必须对周边噪声进行抑制,其中流水线编码器就是一个较大噪声源。当前在线检测系统往往采用将编码器接入视频采集卡,由视频采集卡通过一定的逻辑处理触发相机拍照的方式,但视频采集卡通常假设编码器产生的A/B 相信号是理想信号,忽略了工业现场环境的噪声干扰,常常造成相机的误触发,使得在线检测系统误报率较高。为了提高系统的稳定性,系统必须对编码所产生的噪声进行抑制。但视频采集卡针对编码器的处理逻辑处于未知状态,很难通过修改视频采集卡的程序来提升系统的稳定性。
基于上述考虑,针对编码器的处理单独设计成系统,取代视频采集卡的部分功能,并在此基础上扩展一些功能模块,降低缺陷在线检测系统的误报率。
印刷品企业为了提高生产效率,往往将流水线以较高的速度运行,速度通常高达300 m/min,如此高的速度需要在线检测系统在短时间内处理较大的数据,普通CPU 往往基于冯诺依曼结构,对指令的处理通常经过取指令、译码、运算等步骤,并且不同的指令处理时间不同,这就造成了通用芯片对数字信号的处理效率低下、响应时间不能达到系统要求、脉冲信号的处理时间难以估计等劣势[1]。不同于普通CPU,FPGA采用可编程的逻辑列阵,具有处理速度快、容易仿真、处理时间可以估算等优点,因此本此系统设计选用FPGA 作为主控芯片[2]。根据系统需要实现的功能,结合FPGA 自顶而下的设计方法,硬件描述语言要实现的模块主要有4 个,分别为滤波、脉冲信号处理、测速、通信。系统结构设计如图1 所示。
图1 系统整体结构设计
系统内部全部模块均是在滤波模块的基础上实现的自身功能,系统整体则采用松耦合的设计模式,不同功能模块之间不存在信息共享。采用这种设计的优点是当系统出现故障时有利于排查问题,方便维护人员快速定位,提高系统的健壮性和可维护性。
滤波模块的主要功能是对编码器输入的脉冲信号A、B 相进行滤波。采用示波器观察编码器原始脉冲波形发现,编码器输出脉冲波形并不理想,存在尖峰脉冲,猜想是由于尖峰脉冲的存在导致视频采集卡对脉冲的处理结果不理想,因此设计滤波模块以消除尖峰脉冲对系统的影响。
脉冲信号处理模块基于滤波模块处理之后的编码器波形,根据在线检测系统的要求对编码器双相信号进行舍弃或倍频。舍弃脉冲是指舍弃任意个脉冲,包含奇数个和偶数个;同时也可以对编码器双相信号进行倍频,倍频的数值可以在1~32 间任意指定。
测速模块依据编码器信号对传送带的速度和方向进行实时监测,并实时发送给在线检测系统。
通信模块设计的主要目的是建立编码器处理系统与在线检测系统的之间的通信机制。
滤波模块主要功能是将编码器双相信号存在的尖峰脉冲滤除,这里采用判决滤波的方式。判决滤波是一种应用广泛的设计方法,它的思想是基于数理统计,实际应用时具有运算速度快和高可靠性的优势。假设系统针对编码器波形的采样周期是t,判决周期是T0,那么系统在整个判决周期内采样的个数为:
在实际算法设计时,由于后续判决过程需要前面采样时刻点获得的采样值,因此需要在FPGA 中定义n位寄存器作为采样值的缓冲区[3]。寄存器的模型如图2 所示。
图2 寄存器模型
在上图中,每一小方块代表寄存器的一位,也就是采样值。寄存器将采样数据划分为3 部分,寄存器内数据为判决滤波需要处理的数据,左右侧分别为已经处理过的数据和即将处理的数据。每经过一个采样周期,判决算法对寄存器内的数据求和,如果这n个采样值的和大于n/2,滤波模块就输出高电平。相反,如果n个采样值的和小于n/2,则输出低电平。同时将寄存器向右滑动一位,将新的采样值更新到寄存器。然后等待下一个采样时刻采样点,继续重复这一过程。由于干扰脉冲的随机性,采到高电平和低电平的概率是相等的,所以,作为判断依据的百分比不能小于50%,也就是n位寄存器和的判决数量是在n/2 以上。本设计采用11 位寄存器(n=11),每次判断时将n位寄存器求和,如果求和结果大于6,则滤波模块输出高电平,否则输出低电平。在Modelsim 软件对这种滤波方式进行仿真时,发现滤波效果比较理想。判决滤波程序的流程图如图3 所示。
图3 滤波程序流程图
脉冲信号处理模块设计流程是对编码器脉冲边沿进行计数,计数器达到所要舍弃的脉冲边沿个数的时候,所要产生的目标脉冲进行翻转。而倍频模块的设计流程则是采用检测滤波之后的编码器A、B 相脉冲周期,产生下一周期倍频信号的方法。设计框架较为简单,但在设计时应考虑FPGA 特有的一些属性,避免出现竞争冒险,产生毛刺的现象,并进行时序约束。
针对竞争冒险现象,采用状态机的设计方式。使用状态机可以实现信号的同步和消除毛刺的目的。只要在状态机的触发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。
对于时序约束,在赛灵思软件约束文件中增加时钟约束 create_clock-name clk-period 20 [get_ports sys_clk]。设计完成后,查看赛灵思软件所给的静态时序约束文件报告,发现建立时间、保持时间等都是符合要求的。
由于在线测试系统与编码器处理系统之间的数据通信量较少,采用串口通信协议就可以满足带宽需求,需要说明的是,由于在线检测系统需要发2 种指令,一种是舍弃脉冲数,一种是倍频数,需要占用串口一位进行区分。
编码器通常输出相差为90°的两路方波信号,按照转向的不同,A 相超前B 相,或B 相超前A 相。编码器测速的算法主要有M 法、T 法、M/T 法,相对于M法和T 法的精度受速度的影响较大的缺陷,M/T 法对速度的适应性较好,具有较高精度,本文设计采用M/T法测速[4]。
在算法设计方面,采用Mealy 型状态机。在接收到复位信号以后,状态机进入(00)状态,也就是初始化状态。在这一状态中,主要完成计时器T 和计数器m1、m2的复位。当第一个脉冲到来的时刻,状态机改变状态,进入(01)状态,开启计时器T 和计数器m1、m2。计时器T 计时结束,状态机再次改变状态,进入(10)状态,此时计数器m1、m2计数不间断。当最后一个脉冲到来时,状态机进入(11)状态,计数器m1和m2的数值锁存,然后状态机复位到(00)状态[5]。状态转换图如图4 所示。
图4 状态转换图
由于通信模块采用R232 串口通信的方式,每次发送的数据只能是8 位,另外FPGA 计算乘除法会消耗大量资源。对于测速算法而言,捕获脉冲数目越多,测得速度越精准。由于有这些约束条件的存在,最终采用向主机发送传输0.5 ms 内捕捉到的编码器发出的脉冲数的方法,在线检测系统需要根据传输的数据做进一步换算才能得到速度,串口传输的脉冲数是n,已知编码器转轮直径d=9.579 cm,编码器5 000 线,采用四倍频的方式,那么速度测算公式为[6-11]:
系统各个模块之间采用松耦合的设计方式,模块之间的相互依赖的程度较低,可以针对各个模块采用单独测试的方式。实验测试环节,首先按照赛灵思引脚约束文件,将编码器和在线测试系统接线成功,然后逐步测试各个模块的输出与输入信号,最后对编码器处理系统与在线检测系统进行联合测试,检测编码器处理系统的整体性能。
对于滤波模块,在实际运行中,多次随机采集编码器经过滤波之后的波形,发现波形较好,没有出现尖峰脉冲。实际波形如图5 所示,在图中可看到滤波之后编码器A 相、B 相信号。
图5 滤波后A 相、B 相
针对脉冲信号处理模块,在实际运行中进行测试时发现,编码器处理系统对编码器A、B 相脉冲边沿计数时出现偏差,造成产生的目标脉冲不理想。例如,当在线检测系统向编码器处理系统下发舍弃3 个脉冲的指令时,编码器处理系统接收到指令后对编码器A、B 相进行处理,正常情况下所产生目标脉冲边沿无论是下降沿还是上升沿始终和编码器信号中的一相的边沿一致,但在实际运行中却发现目标信号边沿始终在上升沿和下降沿之间跳变。目标脉冲产生跳变如图6所示。
图6 目标脉冲产生跳变
图6 中箭头所指的位置就是开始出现跳变的时候。分析此时对应的编码器A、B 相信号,发现编码器A、B 相信号没有出现幅值和相位异常,另外也没有出现尖峰脉冲。猜想造成这种现象的原因是以下2 个:①外界对示波器产生干扰,造成波形输出不稳定;②编码器信号被干扰。
不采用示波器,采用工具SignalTap Ⅱ,直接查看FPGA 芯片内部寄存器状态,发现目标脉冲依然会出现跳变。通过示波器分析编码器A、B 相信号,发现编码器A、B 相信号没有出现幅值和相位异常,另外也没有出现尖峰脉冲,可以排除编码器信号被干扰的情况。在对编码器单相信号进行测试时,发现舍弃脉冲任意数目,都能产生较为理想的目标脉冲,没有出现跳变的情况。采用以下方式进行处理,对单相编码器脉冲进行处理,实际舍弃脉冲数目为要求数目的1/2。当舍弃脉冲数目为奇数时,可以对单相脉冲边沿进行舍弃,例如舍弃脉冲数目为7 时,可以对A 相信号舍弃3 个。但当舍弃脉冲数目为偶数时,却无法对单相脉冲进行舍弃,此时依然对双相脉冲进行舍弃。这样的解决方案只能保证舍弃脉冲数目在奇数情况下是正常的。
另外一种解决方案是将A 相进行二倍频,产生倍频信号,模拟出将A、B 相两相信号整合成一相的信号,再进行舍弃。这样处理缺点是倍频信号的边沿信号会出现与B 相信号不一致的情况,但通过检测A 相信号的周期进行调整,可以将影响降低。倍频在设计之初采用锁相环的方法,但发现锁相环无法应对周期时刻改变的信号[12]。实际设计时采用检测脉冲周期,产生下一周期倍频信号的方法。实验结果表明,这种方式没有目标脉冲出现跳变的情况。
通信模块与测速模块的测试较为简单,在顶层模块中与其他模块进行耦合,进行一些测试,没有出现问题。
编码器处理系统与在线检测系统联合测试时,能够产生较为理想的相机触发信号,相对于只使用视频采集卡,在线检测系统误报率明显降低。
本文设计将视频采集卡针对编码器处理的功能移至FPGA 来执行,并加入一些改进算法,有效降低了由于编码器引入的噪声对在线检测系统的干扰,明显提高了系统的可靠性。