旋钮编码器相关(持续更新中... ...)

 

旋转编码器应用于角度定位或测量时,通常有A、B、Z三相输出。A相和B相输出占空比为50%的方波。编码器每转一周,A相和B相输出固定数目的脉冲。当编码器正向旋转时,A相比B相超前四分之一个周期;当编码器反向旋转时,B相比A相超前四分之一个周期。A相和B相输出方波的相位差为90°。编码器每转一周,Z相输出一个脉冲。由于编码器每转一周,A相和B相输出固定数目的脉冲,则A相或B相每输出一个脉冲,表示编码器旋转了一个固定的角度。当Z相输出一个脉冲时,表示编码器旋转了一周。因此旋转编码器可以测量角位移及位移方向。

 

我们通常用的是增量型编码器,可将旋转编码器的输出脉冲信号直接输入给单片机,利用单片机的高速计数器对其脉冲信号进行计数,以获得测量结果。不同型号的旋转编码器,其输出脉冲的相数也不同,有的旋转编码器输出A、B、Z三相脉冲,有的只有A、B相两相,最简单的只有A相。

编码器有5条引线,其中3条是脉冲输出线,1条是COM端线,1条是电源线(OC门输出型)。编码器的电源可以是外接电源。电源“-”端要与编码器的COM端连接,“+ ”与编码器的电源端连接。编码器的COM端与PLC输入COM端连接,A、B、Z两相脉冲输出线直接与PLC的输入端连接,A、B为相差90度的脉冲,Z相信号在编码器旋转一圈只有一个脉冲,通常用来做零点的依据,连接时要注意PLC输入的响应时间。旋转编码器还有一条屏蔽线,使用时要将屏蔽线接地,提高抗干扰性。

编码器-----------单片机

A,B,Z 分别接入PLC的输入点(按速计数器HSC的规定)

+24V------------+24V

COM-------------  -24V-----------COM

旋转编码器的应用电路为:

旋钮编码器相关(持续更新中... ...)_第1张图片

 

其中100pF的电容为去抖动的作用,但是软件处理的时候最好还是加上软件去抖动,以防止误判。软件去抖动最常用的就是延时和连续采样多次,在此不再详述。

A和B输出波形为

旋钮编码器相关(持续更新中... ...)_第2张图片

 旋转编码器编程

(未添加,后续添加)

通过输出波形图可知每个运动周期的时序为

 

顺时针运动

逆时针运动

A

B

A

B

1

1

1

1

0

1

1

0

0

0

0

0

1

0

0

1

 

静止状态为11 或00, A异或B的结果为0(注1)

单片机可利用定时器中断来检测A和B的状态,中断时间在5~20ms之间均可。

当检测到A^B = 0时,表示为静止状态,记下A和B的状态。

当检测到A^B = 1时,表示有转动,读取AB的状态,如果AB是从11到01或者是从00到10则为正转,反之如果AB是从11到10或者是从00到01则为反转。

此方法比较简单可靠,可以检测转动一格又可以检测快速转动。

注1: 异或运算

异或的运算方法是一个二进制运算,C语言中用A^B表示A异或B:

1^1=0

0^0=0

1^0=1

0^1=1

两者相等为0, 不等为1.

注意:

1.编码器有个转速上限,超过这个上限是不能正常工作的,这个是硬件的限制,原则上线数越多转速就越低,这点在选型时要注意,编码器的输出一般是开漏的,所以单片机的io一定要上拉输入状态.
2.定时器初始化好以后,任何时候CNT寄存器的值就是编码器的位置信息,正转他会加反转他会减这部分是不需要软件干预的,初始化时给的TIM_Period 值应该是码盘整圈的刻度值,在减溢出会自动修正为这个数.加超过此数值就回0.
3.如果要扩展成多圈计数需要溢出中断像楼主说的,程序上圈计数加减方向位就行了.
4.每个定时器的输入脚可以通过软件设定滤波
5.应用中如果没有绝对位置信号或者初始化完成后还没有收到绝对位置信号前的计数只能是相对计数.收到绝对位置信号后重新修改一次CNT的值就行了.码盘一般都有零位置信号,结合到定时器捕获输入就行.上电以后要往返运动一下找到这个位置.
6.即便有滤波计数值偶尔也会有出错误的情况,一圈多计一个或少计一个数都是很正常的特别是转速比较高的时候尤其明显,有个绝对位置信号做修正是很有必要的.绝对位置信号不需要一定在零位置点,收到这个信号就将CNT修正为一个固定的数值即可.
7.开启定时器的输入中断可以达到每个步计数都作处理的效果,但是高速运转的时候你可能处理不过来.

 

你可能感兴趣的:(单片机篇,编码器)