《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 一种基于CPLD的编码器抗干扰电路设计
一种基于CPLD的编码器抗干扰电路设计
来源:微型机与应用2013年第14期
何远松, 谢明红
(华侨大学 机电学院,福建 厦门361021)
摘要: 在交流伺服系统中,准确可靠地获取编码器信号是整个闭环控制的关键;而编码器信号常受外界干扰,会产生误码脉冲,给伺服控制带来了偏差。在分析了增量式光电编码器的原理及误码产生原因、总结编码器信号处理方法后,设计了一种基于CPLD的具有编码器差分信号输入、误码滤除和鉴相功能的电路,提高了编码器信号检查的可靠性,并得到了很好的实际应用。具体分析了滤除误码原理,并给出了设计原理图和Quartus II下的仿真结果。
Abstract:
Key words :

摘  要: 在交流伺服系统中,准确可靠地获取编码器信号是整个闭环控制的关键;而编码器信号常受外界干扰,会产生误码脉冲,给伺服控制带来了偏差。在分析了增量式光电编码器的原理及误码产生原因、总结编码器信号处理方法后,设计了一种基于CPLD的具有编码器差分信号输入、误码滤除和鉴相功能的电路,提高了编码器信号检查的可靠性,并得到了很好的实际应用。具体分析了滤除误码原理,并给出了设计原理图和Quartus II下的仿真结果。
关键词: CPLD;增量式编码器;干扰;误码 

    在伺服系统中,编码器反馈信号对伺服闭环控制系统至关重要,不管是速度控制模式, 还是位置控制模式,实时、可靠地获取编码器反馈信号对整个闭环系统的精度和消除系统滞后都有着至关重要的作用。假定伺服周期为1 ms,那么需要每隔1 ms计算出编码器反馈脉冲的个数及其方向。编码器信号直接影响着整个控制系统的精度和可靠性,整个系统的控制精度不可能高于编码器检测元件的精度。
    参考文献[1]在设计了编码器信号处理时,实现了编码器输出信号的四倍频、鉴相,但编码器无法滤除误码。实际应用中,编码器干扰和抖动客观存在,误码的产生影响了检测的可靠性。在编码器的抗干扰、误码滤除设计中,常出现只能滤除某一相误码或换向丢脉冲现象。参考文献[2]给出的设计在电机高低速切换频繁时,单稳态触发器的脉冲宽度难以确定,计数脉冲容易丢失。以往设计处理的编码器输出信号都以集电极信号为对象,而实际上编码器输出大多为差分信号。本文利用CPLD设计了一种可靠的用于增量式编码器输出信号的检测电路,能直接处理编码器输出的差分信号,其结构简单,性能可靠,提高了控制系统的精度与可靠性。
1 增量式光电编码器结构及原理
    增量式编码器因结构简单、响应迅速、性价比高等优点而被广泛使用。增量式光电编码器利用光电转换原理将转子的角信息转换成脉冲信号,每输出一个脉冲在对应方向上产生一个增量的角度位移,通过统计脉冲信号的数量和方向计算旋转的角度和位置。由于采用相对编码,编码器输出的位置数据是相对的,因此,系统每次掉电后旋转角度数据会丢失,需重新复位。典型的增量式光电编码器由光源、光栅码盘、光敏元件和信号处理电路组成。如图1所示,码盘上刻有3条码道,由外向内分别是A、B、Z。在A、B码道上,等间距地刻有透光的缝隙(用白色表示);两条码道上相邻的缝隙互错半个缝宽(1/4节距),所以正常情况下,A相与B相是一组正交脉冲信号,即相位相差90°。在码道Z上只开有一个缝隙,每转输出1个脉冲,用来表示码盘的零位、校正每转编码器产生的脉冲个数,将脉冲误差控制在每一转之内,避免累积误差。轴承转动时,光源光束交替通过码盘上的缝隙,对应光敏元件交替接收光源输出的高电平或低电平信号,电信号经编码器内部处理电路放大、整形后输出脉冲序列。图2为码盘展开图(黑色为不透光部分)及码盘顺时针旋转下对应的电信号输出,此时A相超前B相90°,若逆时针旋转则B相超前A相90°。由于增量式编码器的固有结构,使得其输出信号不能自动判别码盘的旋转方向,需经硬件电路或软件处理后才能完成鉴相工作。

    目前,大多数编码器的输出信号是便于远距离传输的差分信号(即A+、A-、 B+、B-、Z+、Z-),且分辨率很高。比如,安川SGMJV-08ADD6S电机编码器输出为20 bit脉冲信号,即电机每旋转1圈, 编码器每相输出220=1 048 576个脉冲[3],运动控制器无法直接处理这些脉冲,一般将脉冲序列经驱动器分频并转换成集电极信号后反馈给控制器处理。本文将在CPLD中完成差分信号转集电极信号。
2 增量式光电编码器误码的产生
    码盘缝隙边缘是编码器输出信号产生抖动误码脉冲的根源,这是由编码器固有物理结构所致。在安装基座的机械振动下,编码器码盘振动或转轴不稳都会引起输出误码;电机超低速运行或正反转频繁换向时,码盘缝隙边沿附近会产生小幅度晃动,也会产生干扰脉冲,导致计数错误。图3为编码器在图2的S1、S2、S3、S3和S4处,依次出现宽度小于半个正常脉冲宽度的干扰波形。当抖动产生时,A、B相脉冲相位不再是固定的90°关系,脉冲宽度和周期随抖动的不同而不同。本文将从编码器的鉴相方法入手,滤除误码脉冲,提取有效的计数脉冲信号。

3 光电编码器脉冲处理方法
    常用的编码器信号处理方法有:
   (1)基于硬件电路。有触发器、逻辑门等,比如通过74系列芯片、RC电路搭建硬件电路,实现脉冲的鉴相、计数。
 (2)基于软件算法。直接将编码器输出信号送至微处理器,由软件算法完成误码滤除、倍频、鉴相和计数任务。    
   (3)硬件和软件相结合。一般先由硬件完成倍频、鉴相,再由软件完成计数。
    基于硬件处理速度响应快,但系统器件增多,抗干扰性和可靠性差。基于软件算法虽实现简单,却对处理器要求高。例如参考文献[4]利用“同一边沿判断原则”,采用某相上升沿和下降沿时刻根据另一相电平的变化情况来消除抖动,很好地滤除了误码,但这一算法需频繁判断上升沿和下降沿,软件时间消耗大。参考文献[5]采用“散转地址的方法”,将所有的前一个A、B电平状态作为散转地址的高2 bit,所有后一个A、B电平状态作为散转地址的低2 bit,合成4 bit,排列组合出16种状态。由于每种状态对应了编码器的转相和计数脉冲是否有效,因此加快了软件执行速度,但同时增加了存储空间。
    本文采用软件和硬件结合的方法,由CPLD完成信号转换、误码滤除、倍频和鉴相等工作,最终将差分编码器信号转换为脉冲/方向信号。CPLD具有可用门电路多、处理速度快、可靠性和性价比高等优点;并且,将误码信号转换、误码滤除等电路集于同一芯片,提高了系统的通用性和灵活性。同时,CPLD支持可编程,方便现场对电路进行升级。
4 CPLD滤除编码器抖动及仿真结果
4.1误码滤除原理

    由编码器固有结构可知,A、B相电平不能同时突变。假设以A相为计数脉冲参考, 在A相脉冲相邻两个跳变沿时刻,比较B相信号电平逻辑,若B相电平不同,则认为编码器输出是正常计数脉冲信号,使能计数端对A相脉冲计数,此时B相有误码不影响脉冲计数;若B相电平相同,则认为A相出现了误码,不予计数。依据A相上升沿和下降沿时刻B相电平的高低,判断A、B相位关系,若A相上升沿处B为低电平,则A相超前B相;若A相下降沿处B相为低电平,则B相超前A相。A、B脉冲相异或产生倍频脉冲,作为触发器(上升沿触发)的时钟信号,A相脉冲经触发器输出计数A信号,如图4所示,计数A滤除了A相中的误码,将其作为计数脉冲。反之,以B相为参考可得同样结果。

4.2 编码器鉴相和滤除误码设计
    根据以上分析,采用图形与语言结合的方法进行设计,内部的逻辑子模块采用VHDL语言实现。顶层模块结构如图5所示,信号A+、A-和B+、B-经DIFF4_2模块转换为A、B集电极信号,B信号经2个D触发器在A信号上升沿和下降沿处相“异或”,“异或”结果作为Counter的使能端并配合两个“与门”完成A、B相位的判断;A、B信号直接“异或”产生倍频时钟信号,滤除误码恢复正常的A相脉冲,提供可靠计数脉冲。Counter模块用于控制脉冲输入方向,其输出为编码器旋转方向信号和计数脉冲信号。

    A与B分别是 A1、A2和B1、B2差分转换后的集电极信号,DIR和PULSE_OUT为编码器旋转方向和计数脉冲输出。根据DIR可判断编码器正反转,当A超前B时,DIR为低电平;当B超前A时,DIR始终为高电平。PULSE_OUT输出为滤除误码后的A相波形,作为计数脉冲。主要VHDL程序如下:
    comb1<=A1&A2;
    comb2<=B1&B2;
    comb<=EN&CLR;
    begin
        case comb1 is
            when "10" => A<=′1′;
            when "01" => A<=′0′;        
            when others=> A<=′Z′;
        end case;        
        case comb2 is
        when "10" => B<=′1′;
            when "01" => B<=′0′;        
            when others=> B<=′Z′;
        end case;  
    case comb is
    when"11"=> DIR<=′0′;PULSE_OUT<=′0′;
    when "10" =>
        IF rising_edge(CLK) AND AB<=′1′
               THEN DIR<=′0′; PULSE_OUT <= CLK;
             END IF;
            IF rising_edge(CLK) AND BA<=′1′ 
            THEN DIR<=′0′; PULSE_OUT <= CLK;
       END IF;
    when others => DIR<=′Z′; PULSE_OUT <=′Z′;
    end case;
4.3实验结果
    本文CPLD芯片选用与编码器输出电平兼容的Altera公司MAX3000A系列EPM7128A,编译环境采用QuartusⅡ。其仿真分析结果如图6所示,差分信号A1、A2和B1、B2转换为了A、B相集电极信号;在A、B相信号出现干扰的情况下,输出信号PULSE_OUT很好地恢复了正常A相脉冲信号,为后续处理器检查提供了可靠脉冲源。

 

    本文分析了编码器误码产生原因,比较了编码器信号处理方法,应用CPLD设计了一种具有编码器差分信号转换、误码滤除和鉴相功能的可靠电路,并在交流伺服系统中得到了很好的验证。在系统出现较大抖动和干扰时,仍能获得可靠的计数脉冲,提高了位置检测精度和速度可靠性。
参考文献
[1] 姬岩鹏,刘卫东,徐建宁,等.交流伺服控制系统中脉冲抗干扰算法研究[J]. 微电机,2007,40(2):62-65.
[2] 崔晓红,陈宏利.光电编码器抗干扰防振动电路的设计[J].交通与计算机,2005,23(1):110-112.
[3] 株式会社. AC伺服驱动器∑-Ⅴ系列用户手册[S].安川电机,SIPC S800000 45C, 2009.
[4] 赵哲身. 光电旋转编码器的软件鉴相及其使用技巧[J].自动化仪表,1998,19(2):17-18.
[5] 王子博. 编码器四倍频电路的单片机高速算法设计[J].控制与检测,2007(11):73-74.

此内容为AET网站原创,未经授权禁止转载。