当前位置:文档之家› 基于FPGA的光电编码器信号的处理方法

基于FPGA的光电编码器信号的处理方法

《计量与测试技术》2∞1年第30'卷第1期 基于FPGA的光电编码器信号的处理方法 Study of Signal Processing Method fo,Encorder Based on FPGA 

孙敬先 李长星 郑 敏 (西安石油大学电子工程学院,陕西西安,710065) 

摘要:细分与辨向是光电编码器这类长度、位置、位移检测仪器中对原始信号处理的一个必需环节。本文针对光电编码器信号的特点,介绍了一种 在FPGA中基于VHDL语言的、采用RTL描述方式的细分与辨向电路的设计与实现,它对提高光电编码器分辨率与实现高精度、高稳定性的信号检测 及位置伺服控制具有一定的现实意义。 关键词:光电编码器;细分与辨向;FPGA;VHDL 

0引言 光电编码器是一种集光、机、电为一体的数字检测装 置,利用光电转换原理将转子的轴角信息转换为电信息, 并以数字代码输出,具有输出信号强、反差高,体积小、重 量轻,成本低,可与电子计算机的灵活配接等优点;主要 用于空间位置测量、线位移测量、角位移测量、自动控制、 速度测量等领域。在实际应用中,为了提高光电编码器的 分辨率,获取电机的实际转动方向(或工作台移动方向),提 高抗干扰能力,常对其脉冲进行四细分及辨向处理。 1在FPGA中实现细分与辨向电路的优越性 以往对光电编码器数据信号进行四倍频以及辨向处 理时,多采用由RC电路及门级电路搭建的电路板,该电 路体积大且稳定性、可靠性差、调试烦琐,而且当电阻R、 电容C等组件参数变化时,会导致脉宽发生变化或不能 产生具有稳定宽度的脉冲。此外,RC电路抗干扰能力 差,反馈部分易受外界的干扰,在实际应用中会出现丢失 脉冲现象,以至影响控制系统的精度和可靠性。 随着电子设计技术的飞速发展,现场可编程门阵列 (FPGA)的复杂程度越来越高,其所具备的功能也越来越 多,芯片也向小型化发展,逐步成为复杂数字硬件电路设 计的理想选择。FPGA既继承了ASIC的大规模、高集成 度、高可靠性的优点,又克服了普通ASIC设计周期长、投 资大、灵活性差的缺点。目前FPGA的集成度很高,可完 成极其复杂的时序和组合逻辑电路功能,适用于高速度、 高密度的高端数字逻辑电路设计领域。 VHDL作为IEEE所规范的硬件描述语言,可以描述 电路功能、信号连接关系及定时关系,它比电路原理图能 更有效地表达硬件电路的特征,具有设计安全、方法灵 活、支持广泛、语言标准规范、易于共享和复用等优点。 运用VHDL语言在FPGA中实现对光电编码器信号的四 细分与辨向的处理具有一定的优越性:一方面,克服了的 门电路、触发器的参数特性可能不完全一致的缺点,能保 证在相同转速下四细分脉冲信号的周期保持一致;另一 方面,采用VHDL语言在FPGA中以RTL描述方式实现, 设计者只需了解电路的外部特性和功能就可以正确描 述,而不需了解电路结构,使得其抗干扰能力比分离器件 有了很大提高。此外,由于其现场可编程,增强了系统的 灵活性、通用性和可靠性。 2光电编码器信号特点 光电编码器应用于角度的定位或测量时,随控制对 象发生角位移变化时通常有A、B、z三相信号输出。编 码器恒速旋转时,A相和B相输出占空比为50%的方 波。编码器每旋转一周,Z相输出一个脉冲,A相和B相 输出固定数目的脉冲(如10130个脉冲)。编码器的A相 或B相每输出一个脉冲,表示编码器旋转了一个固定的 角度。当z相输出一个脉冲时,表示编码器旋转了一周。 

A广]厂]A I L__J L I L—————..... . .——j L 一一]厂———] 

B l B l I l l l L

——__J L_ a b a.A信号相位超前B信号90。;b.A信号相位落的B信号90。 

图1两路相差90 ̄的方波 光电编码器A相和B相的输出波形如图1所示,为 两路相位差为90。的方波。设一参考方向,假设相对位移 方向与参考方向一致时,A信号超前B信号90。,代表光 电编码器正转,如图la所示;相对位移方向与参考方向 相反时,A信号落后B信号0,代表光电编码器反转,如 图1b所示。 

+PⅢ P 一P l u 一 正向位移‘反向位移 正向位移 反向位移 

图2 a.正向与反向四细分信号;b.四细分信号与方向信号 光电编码器输出的两路相位差为9oo的方波信号经 孙敬先等:基于FPGA的光电编码器信号的处理方法 四细分与辨向电路处理后,一般有两种输出方式:一种是 正向四细分信号+P加反向四细分信号一P,图2a所示; 另一种是四细分信号P加方向信号D,图2b所示。选取 那种输出形式取决于后续处理对信号的要求。 3应用硬件编程VHDL语言的电路设计 当相位差为9O。的信号A和信号B在一个周期内, 两信号的电平组合状态有4组:00,0l,10,11。当A相超 前B相90。时,A,B两相信号的电平状态相对变化为o0 —10—11一O1,即sl—s2一S3一S4,如图3a所示;当A相 落后B相9o。时,A,B两相信号的电平状态相对变化为 O0_ 01一ll一1O,即S4一S3一S2一S1,如图3b所示。 S2 S3 S4 S1 S2 S3 0-*+P 0--*+P ‘ 。 。 ‘ ‘O—+一P O— 一P A I : : L +P 

B 南 F 吾 

a.信号超前B信号9O。 S3 S2 S1 S4 S3 S2 

A ]o.I o ] B 1 0 0_1 1 B:I:l: 

b.信号超前A信号90。 图3 A.B信号相差不同时状态 变化的顺序 

l l 

—P l『l i —P f l+P 

通过图3,我们可以看出两路方波信号A和B的相 位差为90 ̄时,不会出现状态0o一11,11—0o,10—01,01 一lO之间的状态转换。组合状态00—1O一11—01转换 时,每发生一次变化,+P有相应脉冲输出,1个周期内, +P有4个脉冲输出,而一P则无相应脉冲输出,方向信 号D=1,代表光电编码器正转。组合状态0o一01—1l一 1O转换时,每发生1次变化,一P有相应脉冲输出,1个 周期内,一P有4个脉冲输出,而+P则无相应脉冲输出, 方向信号D=0,代表光电编码器反转。这样就构成了四 细分与辨向。根据状态转换,输出一P,+P的电平变化 如图4所示。 四细分辨向电路的VHDL语言描述程序部分如下: library ieee; use ieee.std—logic一1164.all; use ieee.s【d—logic—arith.all: use ieee.std.1ogic—unsigned.all; entity xf is port(elk:in std—logic; a,b:in std—logic; upan:out std—logic; pp,np:out std.1ogic; dir:out std.1ogie); end entity; 

0’; 1’; 0’; 

architecture rtl xfis signal state:std—logic—vector(1 downto 0); signal ab,abl:std—logic—vector(1 downto 0); signal spp,snp:std—logic; begin ul:process(ab,abl,clk) begin ab<=a&b: if clk’event and clk=’0’then 

abl<=ab: end if; end process; u2:process(abl,ab,clk,state) begin if clk’event and clk=’1’then if ab1=“0o”then case state is when“10"=>state<=“00”;snp<=’l’;dir<=’ 

when“01"=>state<=“O0";spp<=’1’;dir<=’ when others=>state<:“O0”;spp<=’0’;snp<=’ end case; ……其他状态变化的描述原理与此相同 

end if; end if; end process; updn<=spp or snp; PP<=spp: np<=snp: end rtl; 4仿真及结果分析 3 P 10 9M 9M 30 9 ns 40 9 n iII聊硎1眦I『IlfIl哪硼硼町瑚啊硼肌 哪啊哪棚mIilI『I唧删哪啪iII『iI哪mIII盯I唧硼 广—]厂—] 厂]广]厂_-1 厂]厂一 ——]广]厂] n几 n n n n 八几 几n n n n n n 几n n 

n n n.几 丌n 几 n八 n n n n n几 几兀 n 

图5仿真渡形图 在Quartus119.1环境下完成编码、调试后,进行编译、 

仿真。仿真波形如图5所示,其中clk为时钟信号,a、b 为光电编码器输出的两路相位差为90。的方波信号,pp、 np分别为正向四细分信号和反向四细分信号,upan为四 细分信号,dir为方向信号。四细分与辨向电路设计包含 了细分与辨向电路的两种输出形式,便于信号的后续处 理。从仿真波形中可以看出,当A相信号超前B相信号

相关主题