This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GH6PM: qei无法正常识别方向

Part Number: TM4C123GH6PM

麻烦大佬解答疑问。

电机实际方向没有改变但是读出来的方向一直在改变

尝试了一些方法,调用改变方向触发中断的中断服务函数发现一直在变化方向,

1.将连接线改短,

2.光电编码器和霍尔编码器都试了下 

3.打开qei自带的滤波器

都没效果

/resized-image/__size/640x480/__key/communityserver-discussions-components-files/96/BGTJ_5F00_Q_4000_0IOCR_7E005F005B007D00_3_5D00_O_7E00_LKE.png

void QEI0_IRQHandler(void)
{
	if(QEIIntStatus(QEI0_BASE,true) == QEI_INTTIMER)
	{
		QEIIntClear(QEI0_BASE,QEI_INTTIMER);
		left_speed_pid.Current = motor_speed_get(left);
	}
//	else if(QEIIntStatus(QEI0_BASE,true) == QEI_INTDIR)
//	{
//		QEIIntClear(QEI0_BASE,QEI_INTDIR);
//		//UARTprintf("error\r\n");
//	}
}
int16_t motor_speed_get(int8_t channel)
{
	int16_t speed;
	
		if(channel == left)
		{
			speed = (QEIVelocityGet(QEI0_BASE)*time_freq*60)/(freq_number*reduction*line_number);
				number_1 = speed;
			if(QEIDirectionGet(QEI0_BASE)==1)
			{
			
				//speed = speed;
				number_1 = number_1;
				UARTprintf("up:%d\r\n",number_1);
			}else if(QEIDirectionGet(QEI0_BASE)==-1)
			{
				number_1 = -number_1;
				//speed = -speed;
				UARTprintf("re:%d\r\n",number_1);
			}
			
		}else if(channel == right)
		{
			// 6000 448 30 
			speed = (QEIVelocityGet(QEI1_BASE)*time_freq*60)/(freq_number*reduction*line_number);
		}
	
	return speed;
}