编码器四倍频电路单片机高速算法设计
Fourfold Frequency Circuit Design of Encoder Based on MCU with Speedy Arithmetic
收稿日期:2007-10-16
作者简介:王子博(1986-)。男,辽宁大连人,大连理工大学电子信息工程学院学生
摘要】文章针对增量式光电编码器输出信号的倍频鉴向处理问题,介绍了一种用单片机设计的编码器四 倍额电路。通过分析软件倍频鉴向的原理,详细介绍了一种新颖的高速处理算法。该设计不仅电路简单,响应速度也比一般单片机设计方案大为提高。
关键词】编码器;四倍频;单片机;高速算法
引言
增量式光电编码器是一种高精度的角位置测量传感器,具有体积小、精度高、响应速度快、性能稳定等优点,被广泛应用于数控机床、工业机器人等伺服控制系统中。对编码器输出信号的处理,是测控系统要解决的常见问题。
    编码器通常有A相、B相、Z信号等三路输出信号。Z信号是一个代表零位的脉冲信号,可用于调零、对位,一般不须作额外处理。A、B相信号则包含了被测对象的旋转方向、旋转角度等信息,通常要经过倍频鉴向处理之后再进行有效利用。
    编码器的A、B相输出信号如图1所示。A、B相信号是相位相差90º的正交方波脉冲串,每个脉冲代表被测对象旋转了一定的角度,A、B之间的相位关系则反映了被测对象的旋转方向。当A相超前B相,转动方向为正转,当B相超前A相,则为反转。对A、B相信号典型的处理是:将信号四倍频,并分离出正转脉冲P+与反转脉冲P-,再进行计数,最后得到被测对象的位置。倍频鉴向有多种方法,并且各具特。概括来讲,用数字电路方案的,速度高,但硬件复杂;用单片机方案的,硬件较简单,但响应速度较低。本文提出的四倍频单片机设计方案,采用了独特的高速算法,结合功能先进速度快的AVR系列的单片机,具有硬件电路简单,并且响应速度高的双重优点。

图1编码器的A、B相输出信号及倍频鉴向后的正、反转脉冲输出
倍频与鉴向原理
如图l所示,编码器正转时,AB相电平状态的变化顺序为:00->10->11->01->00…;编码器反转时,变化顺序为:00->01->11->10->00…。用单片机编程实现倍频与鉴向时,一般算法是:设定一个寄存器存放上次电平状态,一个寄存器存放本次电平状态,将两个寄存器进行比较,即可判断是正转还是反转。正转时输出正向脉冲,或者进行加计数;反转时,输出反向脉冲,或者进行减计数。再将本次电平状态存到上次电平状态寄存器中,为下次处理作准备。按此算法设计的程序,由于判断比较指令较多,运行时间较长,因而导致总体的响应速度较低。为了克服这一缺点,这里采用了利用先后两个电平状态组成一个地址向量,进行程序散转的方法。这就去掉了繁琐的判断与比较,使运行时间大大缩短,从而使响应速度得到了提高。
组成散转地址的方法是:将所有的前一个AB电平状态作为散转地址的高2位,所有后一个AB电平状态作为散转地址的低2位,合在一起共4位,排列组合共有16种状态,或者说有16个地址。每个地址都对应一种输出处理操作,见表1。其中00->11,01->10,10->01,11->00这4种状态属于异常状态,是不应该出现的,程序处理时将其忽略。
表1 AB相电平状态组合表
前一个AB相电平
状态(记为A0B0
后一个AB相电平
状态(记为A1B1
组成散转地址向量
(二/十六进制)
处理内容
00
00
0000
0x00
状态无变化,不处理
00
01
0001
0x01
输出反转脉冲P-
00
10
0010
0x02
输出正转脉冲P+
00
11
0011
0x03
异常状态,不处理
01
00
0100
0x04
输出正转脉冲P+
01
01
0101
0x05
状态无变化,不处理
01
10
0110
0x06
异常状态,不处理
01
11
0111
0x07
输出反转脉冲P-
赵英俊个人资料简介10
00
1000
0x08
输出反转脉冲P-
10
01
1001
0x09
异常状态,不处理
10
10
1010
0x0A
状态无变化,不处理
10
11
1011
0x0B
输出正转脉冲P+
11
00
1100
0x0C
异常状态,不处理
11
01
1101
0x0D
输出正转脉冲P+
11
10
1110
0x0E
输出反转脉冲P-
11
11
1111
0x0F
状态无变化,不处理
除了要有好的算法之外,指令还要有一定技巧,才能使程序更精简。程序流程见图2。
图2中,16个散转目标地址的处理程序,都按表1进行。虽然限于篇幅仅画出了3个,但不影响理解。每个目标地址的处理内容虽然都要占用一段程序,指令的总数比较多,但程序执行速度却加快很多。这种算法,实际上是采用了用程序容量来换取执行速度的思路。用AVR系列单片机汇编语言。从头到尾任何一个流程(包括子程序返回指令)最长只需要12条汇编指令,执行时间不到2us,可见其处理速度是相当快的。
典型设计方案
    对于检测控制一体的应用场合,例如用ATmega32等单片机实现位置检测,并完成定位输出功能的,可以采用外部中断的方案。AB两相信号可分别接到单片机的两个外部中断输入口INT0与INT1上。中断方式设置为电平变化触发中断。即只要AB相电平状态发生变化,就会触发中断。在中断程序中,采用上述高速算法进行处理。与上述不同的是,最后不需要输出正反转脉冲,而是正转时位置量加1,反转时位置量减1。
图2高速算法子程序流程图
采用AVR系列8引脚的单片机的ATtiny13.结合上述高速算法,可构成硬件电路非常简单的独立四倍频鉴向电路,见图3。图中的CD40106为施密特触发器,对信号进行整形处理,使整个电路更可靠。如果省略,电路将更简单。
图3 ATtiny13接线图
由于ATtiny13单片机仅用于倍频鉴向,没有别的任务,因此可采用反复循环扫描AB相电平状态的方式。ATtiny13的典型主频是9.6MHz,采用上述高速算法,利用汇编语言编程,完成一次AB相电平状态扫描处理,只需不到2us的时间,相当于500KHz的响应速度。而ATtiny13单片机的价格约为5元,可见这是一个电路简单、成本低廉的设计方案。而ATtiny13本身是一款高性能、高可靠的单片机,并且内含看门狗电路。 经实用验证,该电路工作可靠,性能优良,是一款不可多得的优秀设计。
结束语
本文提出的高速算法,对任何一款单片机都是有效的。由于指令少速度快,即使对运行速度较慢的51系列单片机,也可以取得较好的效果。对采用单片机进行四倍频鉴向的设计,具有很好的参考价值。
参考文献
〔1〕 许理、赵英俊.基于单片机的增量式光电编码嚣接口的设计(J).机械与电子,2006(1
2):9-11.
〔2〕 韩壮志、李伟、王田苗等.光电码盘四倍频分析(J).电子技术应用,2000(12):38-40.
〔3〕 王立锦、刘亚东、焦让等.磁旋转编码器四倍频电路分析与集成化设计(J).电子器件,2005(6):358-360.
〔4〕 Atmel Corporation.ATtiny13数据手册(S).1997.