增量式编码器是直接利用光电转换原理输出三组方波脉冲A、B和Z相;A、B两组脉冲相位差90度,从而可方便地判断出旋转方向,而Z相为每转一个脉冲,用于基准点定位。它的优点是原理构造简单,机械平均寿命可在几万小时以上,抗干扰能力强,可靠性高,适合于长距离传输。其缺点是无法输出轴转动的绝对位置信息。
以(NPN)集电极开路输出的波形如下:
如何读出编码器的输出波形和如何判断编码器的正转和反转是编码器应用的关健问题。网上有很多关于编码器硬件抗干扰的文章,加上外围电路,对编码器输出的波形进行转换,转换成正传是只输出一组脉冲,反转时只输出另外一组脉冲。我对这种方法没去验证过,也感觉在硬件上大动手脚提高了产品的成本。我的方法是用软件的方法直接读出编码器的波形并判断正转和反转,同时进行正转的计数,反转计数。在软件上下点功夫,也可以达到很强的抗干扰能力。
细细看输出的波形,正转的时候,在A上升沿时B处于L,当反转的时候,在A上升沿的时B处于H。输出波形是由于编码器内部光栅盘的结构决定的,B通道的每一个栅刚好在A通道的两个栅中间,因此输出的波形刚好相位相差90度.抓住这一特点,轻松地读出编码器的信息了。
我用ATmega48单片机来读出数据,ATmega48的每一个引脚都可以用电平变化来产生中断,这样就可以使用PCINT中断来读取波形(Extern Interrupt已经用在其他方面)。在程序中定义一个全局变量SCNT,作为编码器脉冲的计数器。正转的时候,SCNT++。反转的时候,SCNT--。只要ATmega48的晶振够大(我用11.0592MHZ),指令周期足够短,软件适当加上去抖动,就算分辨率很高也可以做到准确计数,误差少。把编码器的原点定下来(SCNT=0)并能保持不变,其实不一定要用到Z ,那么增量式编码器也可以准确定位。