基于FPGA与有限状态机的高精度测角系统的设计与实现

分享到:

 激光跟踪测量系统(Laser Tracker System)是工业测量系统中常用的一种高精度的测量仪器,是近十年发展起来的新型大尺寸空间测量仪器,不仅对静止目标可以测量,而且对运动目标也可以进行跟踪测量。它集合了激光测距技术、光电技术、精密机械技术、计算机及控制技术等各种先进技术,对空间运动目标进行跟踪并实时测量目标的空间三维坐标。它具有快速、动态、精度高等优点,适合于大尺寸工件配装测量。在航空航天、机械制造、核工业、现代军事等测量领域得到广泛的应用。该系统的跟踪精度在很大程度上依赖于转台的旋转角度的测量精度。

为了提高系统转台旋转角度测量的精度,本系统采用高分辨率的光电编码器来测量角度。光电编码器是利用光栅衍射原理实现位移数字变换的,光电编码器作为一种高精度的测角传感器已普遍应用于伺服跟踪系统中,它具有精度高、响应快、性能稳定可靠等优点。光电编码器按编码方式主要分为两类:增量式与绝对式。由于增量式光电编码器成本低、测角的精度高,因此本系统的增量式光电编码器选用Renishaw公司的高精度圆光栅。

然而,由于机械振动或抖动等原因,增量式编码器的输出脉冲会出现抖动毛刺的现象,因此需要在对编码器输出脉冲进行计数的过程中采取有效的方法来去掉抖动干扰。本文介绍的有限状态机方法,在FPGA上可以有效消除抖动引起的计数干扰,提高计数的精度[1]。

1 方案设计

1.1 系统组成

激光跟踪测量系统的核心处理模块主要由ARM处理器,FPGA组成。为了充分利用ARM9微处理器的运算能力和FPGA的高速逻辑处理能力,在设计中对功能的实现进行了划分。ARM9 用于运动控制平台的控制并且与FPGA一起形成一个完整的应用平台。FPGA主要完成编码器的精确计数功能、与ARM9处理器数据通信、与激光测距仪数据通信功能。系统的组成框图如图1所示。本文重点介绍在FPGA上实现编码器的输出脉冲计数与角度测量。


1.2 增量式编码器原理

增量型编码器通常有3路信号输出:A、B和Z,每路都是差分信号,共6路信号,信号采用TTL电平,A脉冲在前,B脉冲在后,A、B脉冲相差90°,每旋转一圈发出一个基准脉冲Z,作为参考机械零位。Z相的波形中心对准A相输出的波形中心。利用A相B相的相位差来进行判相,A超前B 90°为正转,反之B超前A 90°为反转。
由于增量式编码器不带记忆功能,因此对外界因素引起的干扰非常敏感,在实际应用中,由于机械振动、工作环境,电机负载等都无可避免地会产生震动,编码器会在某一相的脉冲边缘的地方出现抖动的情况,因此有效滤掉脉冲的抖动和毛刺,是提高计数精度的关键技术。编码器输出真实信号的波形如图2所示[2-3]。



2 理论分析与算法

2.1 有限状态机原理

在编码器的一个输出周期内,A、B两相输出信号共产生4个跳变沿,在A、B方波信号的上升沿和下降沿分别计数,从而实现四倍频计数的操作。本文通过有限状态机FSM,对原始信号进行四倍频采样控制,状态机外加的一路高速同步时钟信号作为状态机的驱动时钟信号,从而有效滤掉抖动干扰。

有限状态机FSM(Finite State Machine)是一种时序电路,是数字系统中实现高效率可靠性逻辑控制的重要方法。标准状态机可分为摩尔型Moore和米利型Mealy两种类型。Mealy状态机的输出是当前状态和输入信号的函数。在本设计中,对编码器输出信号进行计数,采用的计数器是双向计数器,既与当前编码器所处于的电平组合有关,又与前一个状态有关。因此本设计采用Mealy状态机。Mealy状态机比Moore状态机在状态切换时提前一个同步时钟, 因而具有较高的实时性。A、B两相信号转换状态如图3所示[4]。



在理想情况下, 若编码器正向旋转,A、B 电平的值为:00-10-11-01-00 ; 若编码器反向旋转, 则A、B 电平的值为:00-01-11-10-00 。但是在实际应用中, 输入脉冲含有抖动和毛刺,A、B 相脉冲的电平状态会在状态机中有效地跳转, 抖动之后, 由于计数器能够正反向计数,因此最终的计数值会保持不变, 输出的结果也保持不变, 达到了去抖动的效果。有限状态机设置了5 个状态:IDLE (S0) ,ALBL (S1) ,AHBL (S2) ,AHBH (S3) ,ALBH (S4) 。其中IDLE 为初始状态, 用于初始化计数器的计数器状态。状态机的状态空间跳转图如图4 所示[5]。


3 系统设计与实现

3.1 软硬件平台

根据以上分析,编码器输出的原始信号经过有限状态机处理后,得到了四倍频的输出信号。本系统采用FPGA实现四倍频控制和计数功能,与用分立器件构成的倍频计数电路相比,具有稳定度高,移植性灵活,可靠性好的特点。

硬件采用Altera公司的Cyclone系列FPGA芯片EP1C12Q240,编译环境为Quartus II 5.1集成开发环境。在Quartus II的开发环境中,可以通过两种方法来实现Mealy有限状态机。第一采用硬件描述语言,第二通过Quartus II中的状态机编辑工具来完成。本设计采用硬件描述语言来实现状态机设计。

3.2 程序设计

为了提高系统的实用性和稳定性,滤掉信号上的毛刺,在A、B相信号进入状态机前,先设计一个滤波器进行初次滤波,每个信号用4个D触发器和1个判决器来滤波;触发器由时钟SCLK驱动。小于一个SCLK时钟周期的毛刺,都被滤波器滤掉了。滤波器的原理图如图5所示[6-7]。

整个程序的设计是采用图形和语言相结合的方法来实现的。顶层设计采用图形文件,顶层模块的结构图如图6所示。

内部的状态机模块采用VHDL语言来实现。顶层模块包含两个模块,一个滤波器模块,该模块根据三选二判决的原理来滤掉毛刺;另一个模块是状态机模块,最终输出编码器计数的结果。Input[0]和input[1]输入引脚分别连接增量型编码器A相和B相信号。q[31..0]为32位的计数器,输出当前编码器的计数值,dirout是编码器的旋转方向信号。

程序设计完成后,在仿真工具modelsim下进行波形仿真。仿真结果如图7所示。从图中看出,计数器能够实现正向与反向计数,可以有效滤除脉冲上的抖动,获得精确的计数值。

本文提出了一种基于有限状态机的高精度测量系统,在FPGA上用有限状态机实现了编码器输出脉冲的去抖,并通过32位计数器实现精确计数。最终在ARM处理器上完成角度的计算。通过大量反复试验,试验结果表明本文介绍的方法具有精度高、成本低、接口兼容性高、可靠性高、可移植性好等优点,可以有效抑制噪声干扰,获得高精度的角度数据。该方法已经成功应用在激光跟踪测量系统中,该技术的推广可以取得良好的经济效益,具有重要实用意义。

 

 

 
 
继续阅读
马云快买下中国AI芯片的半壁江山了 直怼腾讯和百度

前几天爆出来的阿里15亿投资商汤科技,不知道Face++作何感想?营长不禁琢磨,原本被Face++所拿下的支付宝刷脸业务,会不会因此改旗易帜?阿里大手笔啊,CV赛道,两个领头羊都纳入麾下,阿里这背后到底有没有什么投资逻辑?

有限状态机的嵌入式Linux按键驱动设计

一般的按键驱动程序通常非常简单。在程序中一旦检测到按键输入口为低电平时,就采用软件延时10 ms后再次检测按键输入口。如果仍然是低电平则表示有按键按下,便转入执行按键处理程序;否则,当按键输入口为高电平,就会放弃本次按键的检测,重新开始一次按键检测过程。这种方式不仅由于采用了软件延时而使得MCU的效率降低,同时也不容易同系统中其他功能模块协调工作,且系统的实时性也差。本文把单个按键作为一个简单的系统,根据状态机的原理对其动作的操作和确认的过程进行分析,并用状态图表示出来,然后根据状态图编写出按键接口程序

基于DMA的并行数字信号高速采集系统

本系统采用基于FPGA的DMA技术高速缓存多路并行数据,通过数据重组将数据有序发送给处理系统,用于数据的显示与分析。系统采用了嵌入式技术,达到了便携效果,从而更好地适应设备的工作环境。

FPGA/CPLD设计思想与技巧

本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPL

用状态机原理进行软件设计

本文的重点就在于,怎样利用状态机原理进行程序设计。本文会先给出普通的、一个平面上的FSM(有限状态机)的概念和实例,并指出其中的一些缺点,然后引出本文的重点HSM(层次状态机)的概念和设计方法。