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.
发布评论