麻烦大佬解答疑问。
电机实际方向没有改变但是读出来的方向一直在改变
尝试了一些方法,调用改变方向触发中断的中断服务函数发现一直在变化方向,
1.将连接线改短,
2.光电编码器和霍尔编码器都试了下
3.打开qei自带的滤波器
都没效果
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;
}