增量编码器的测速及辨向处理
一、增量编码器简介编码器一般有5根线,分别是VCC,GND,A相,B相,Z相。有500线,1024线等等,线数即编码盘刻的槽数,线数越多,测速越准确。A,B两相均为测速脉冲,但他们相差90度相位,我们可以利用这90度相位差来实习辨向,具体作法请看下面。Z相是机械零位,编码器转一周,Z相输出一个脉冲,所以一般用它来测编码器转了几周或者告知微处理器已经回到机械零位。
二、如何辨向
有些单片机本身具有正交解码功能,如飞思卡尔K60,STM32,可以直接把A,B相 接入正交解码模块,然后软件就可以处理了。对于没有正交解码模块的单片机,可以这样处理进行处理,将A相的下降沿作为中断触发端,当中断发生时判断B相的电平。如B想为高电平,则编码器正转(或反,看你自己怎么定义正反),若B相为低电平,则编码器反转。
三、如何计转速
测转速就一句话,辨向中有提到,PULSEL_1(对应A相)一方面接到单片机的IO口上(配置其为下降沿触发),另一方便接在D触发器的1D脚上,为什么要这样呢?原因就是接到单片机上要测速,测速即测在一定时间内测出脉冲的个数,脉冲个数/一段时间,就是转速。如何测脉冲,将A相所接引脚配置为下降沿触发,如果说编码器是500线的,那么编码器转一圈产生500个下降沿脉冲。如何产生定时,用定时器即可。
举个例子来说,500线的编码器,100ms的定时,下降沿触发,单片机里定义整形变量pulse。正转时,每产生一个下降沿脉冲,pulse++;反转时,每产生一个下降沿脉冲,pulse--。定时100ms时间到,读取变量pulse的个数,换算之后即可得到转速。
四、单位换算
经过以上几步就可以得到一个这样的单位,脉冲数/一段时间。那么如何得到转速单位 r/s 呢?
编码器一转(1 r)产生500个脉冲,当100 ms定时时间到,读取到pulse = 50000 时,说明100 ms时间内编码器正转了50000/500 = 100转(r),即 100
r/100 ms,也即 1 r/ms = 1000 r/s。