大家好、
我使用的是两相正交增量旋转编码器、具有集电极开路 NPN 输出和每转600个脉冲。 我正在检测端口1.2和1.4上的 A 和 B 值。 该程序如下所示、
#include
#define PHASEA BIT2
#define PHASEB BIT4
Int 顺时针;
逆时针;
void update (void);
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
顺时针= 0;
逆时针= 0;
P1DIR &=~Ω(PHASEA + PHASEB);//将 P1.2和 P1.4设置为输入
P1IFG &=~(PHASEA);//清除 P1.2的中断标志
P1IE |= PHASEA;// 启用 P1.2中断
P1IES &=~PHASEA;//在上升沿产生中断
_ENABLE_INTERRUPT ();//启用所有中断
}
#pragma vector=Port1_vector
_interrupt void Port_1 (void)
{
IF (PHASEA!= PHASEB)
{顺时针++;}
否则 {逆时针++;}
P1IFG = 0;
}
当编码器轴顺时针旋转360度时、 顺时针可变表示 精确计数为600。 但是 ,当逆时针方向旋转360度时,顺时针方向可变显示为1200。逆时针方向可变,但顺时针方向可变。是否有任何建议?