基于FPGA的光电编码器接口设计
扫描二维码
随时随地手机看文章
光电编码器是许多传感器和自动控制系统的重要部件,可用来测量位移、速度、加速度等。近年来在研究和使用方面,不断有所创新和发展。由于光电编码器具有精度高、体积小、重量轻、响应速度快、可靠性高、抗干扰能力强等特点,因此在国防、科研及工业自动化等领域应用越来越广泛。
在导弹的舵机伺服控制系统中,采用光电编码器作为位置检测装置时,光电编码器固定在电机轴上,并跟随电机同轴转动。为了减小舵机的体积,采用1个控制器控制4个舵机。舵机控制器采用DSP+FPGA的架构,DSP作为主控CPU,FPGA用于做接口处理。本文以Altera公司的型号为EP3C40F48417的FPGA为基础,采用Verilog语言,设计了可与DSP相连的编码器计数器接口,该接口具有数字滤波、方向鉴别、双向计数、复位等功能。
1 光电编码器原理
光电编码器根据形成代码方式不同,分为增量式和绝对式两种。绝对式编码器是直接输出数字量的传感器,在任何时刻编码器的示值都是唯一固定的;增量式编码器根据中心轴所转过的角度,输出一系列脉冲,典型输出为两个相位相差为90°的方波脉冲信号A、B和基准点定位脉冲信号I。增量式编码器的A、B两路信号的脉冲数标志着编码器所转过的角度,A、B两路信号的相位关系标志着编码器的转向,A相超前B相90°时,编码器正转;A相滞后B相90°时,编码器反转;当I相输出一个脉冲时,表示编码器旋转了一周。增
量式光电编码器输出信号如图1所示。
由于光电编码器的转速随时间可能发生不断变化,所以脉冲周期T很难确定。但是在每个脉冲周期内,A、B两相方波之间的相位关系是确定的。
2 FPGA设计
光电编码器选择MAXON公司的MR型编码器,旋转一周的脉冲数为500个。舵机的舵偏角范围为±30°,速比为125。编码器A、B两相信号一个周期内信号产生四次变化,编码器旋转一圈对应的计数器值应为2000,所以当舵偏角从-30°到+30°变化时,计数值最大应为41667。FPGA与DSP相连的数据线为16位,最大数值为65536,计数器的初始值为32768,计数存在溢出的可能。所以每当舵机到达中心0°时,DSP发出复位指令,计数器值复位为32768,这样在计数过程中就不会产生数据的溢出。为了减小干扰,A、B两相信号计数之前要对其进行数字滤波。编码器接口结构图如图2所示。
2.1 数宇滤波设计
虽然编码器输出信号经过了硬件电路的前期处理,但是多数情况下仍然会产生噪声信号,从而严重影响了计数的准确性,降低了整个系统的精度。为了消除噪声信号,在FPGA内部设计了一个数字滤波器来滤除抖动脉冲,防止计数器的误计数。数字滤波电路如图3所示。
本设计采用4个D触发器、一个JK触发器和一些逻辑电路来实现滤波,原理为:A相信号经过4路D触发器锁存以后产生3路信号,3路信号相与之后作为JK触发器的J端输入,3路信号取反再做与逻辑之后作为JK触发器的K端输入。根据JK触发器的原理计算各个时刻的信号输出可知,当干扰信号频率大于主时钟频率的1/3时,干扰信号将会被滤除掉。如图4所示。A代表有干扰的编码器信号,CLK为主时钟信号,CHA为滤波之后的编码器信号。
时钟周期的选择与干扰信号的脉冲宽的有一定的关系,要根据多次试验结果确定干扰信号的频率范围,再结合编码器信号的脉冲频率合理选取,这样才能满足最后的要求,经过试验确定主时钟频率为75 MHz,也就是说25 MHz以上的干扰信号不会对计数器产生影响。
2.2 计数器设计
实现计数的过程一般有两种方法:一种方法是处理器内部定时计数器实现计数;另一种方法是由可逆计数器实现计数。第一种方法结构简单,较为容易实现,但是不具有通用性,而且一个处理器上面的接口数量有限,无法对多个编码器同时进行计数。后一种方案利用FPGA实现,具有较好的通用性,功能扩展方便,能够对多个编码器同时进行计数。
增量式编码器根据轴所转过的角度,输出一系列脉冲,通过计数电路,对脉冲进行计数,得到相对的角位移。在脉冲周期T内,A、B两相信号共产生四次变化,在每一次变化时计数器进行计数,这样计数脉冲的周期减小到T/4,从而使光电编码器的角位移测量精度提高4倍。
在采样主时钟的下降沿对A、B两相信号进行采样,采样值与前一时刻的采样值进行比较来判断计数器的加减。当电机正转时,A相超前B相90°,则在一个周期内,两相信号共有四次相对变化:00→10→11→01→00,每发生一次变化,计数器便实现一次加计数,一个周期内共可实现4次加计数,从而实现正转状态下的四倍频计数。当电机反转时,A相滞后B相90°,则在一个周期内,两相信号共有四次相对变化:00→01→11→10→00,每发生一次变化,计数器便实现一次减计数,一个周期内共可实现4次减计数,从而实现反转状态下的四倍频计数。当没有状态转换时,计数器不进行计数。如图5所示。
采用D触发器来进行旋转方向的判断,B相信号作为时钟输入,在B相信号的上升沿采样A相信号的状态,当输出为高电平时,A相超前B相,表示电机正转;当输出为低电平
时,A相滞后B相,表示电机反转。
FPGA与DSP之间通过16位数据线、12位地址线,片选信号、时钟信号和读写信号线相连。地址线上面不同的数据代表DSP对FPGA的不同操作,地址线协议如表1所示。计数器电路如图6所示。
3 实验结果
在实验室条件下,DSP通过串口将计数值发送到计算机上,采用十六进制表示,串口协议如下:发送周期为10 ms,波特率为115200kbit/s,无校验位,8位数据位,1位停止位。结果如图7所示。
通过串口发出的数据可以看出,计数器的初始值为32768(十六进制为8090)。当电机正转时计数器增加,当电机反转时计数器减少,当电机停止旋转时,计数器保持当前数值。可以根据DSP发出的复位指令,计数器复位到初始值32768。DSP和FPGA工作正常,DSP通过片选信号和读信号能够实时的读取计数器的数值,能够满足电机控制的要求。
4 结论
从以上可以看出,利用FPGA设计光电编码器的接口电路,减少了系统芯片的数量,仅用一片芯片即可完成整个系统的设计,降低了系统的功耗,缩小了系统的体积,提高了系统的可靠性和抗干扰能力,用Verilog设计电路,只需要修改程序语句即可,提高了系统维护和升级的便捷性。本文的设计方法结构简单,无溢出,无误码,能够准确的检测码盘位置的变化,运行可靠,能够与DSP相连。