Part Number:TM4C123GH6PM
麻烦大佬解答疑问。
电机实际方向没有改变但是读出来的方向一直在改变
尝试了一些方法,调用改变方向触发中断的中断服务函数发现一直在变化方向,
1.将连接线改短,
2.光电编码器和霍尔编码器都试了下
3.打开qei自带的滤波器
都没效果
/resized-image/__size/640×480/__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;
}
foyu li:
找到原因了,pd7被锁住了
但是使用霍尔编码器还是会偶尔出现方向错误的情况,光电编码器不会
,
foyu li:
问题已经解决了
,
? ?:
我也出现这个问题,方便告诉一下怎样解决的吗?
,
Yale Li:
@foyu li
方便分享一下您的解决方案吗?
@ ? ?
可以点击提出相关问题来详细描述一下您碰到的问题的具体情况,我们在新的问题中讨论。
,
foyu li:
硬件上我的编码器出问题了
有个引脚被其他功能锁住了需要解锁
,
foyu li:
硬件上我的编码器出问题了
有个引脚被其他功能锁住了需要解锁
,
foyu li:
硬件上我的编码器出问题了
有个引脚被其他功能锁住了需要解锁
,
Yale Li:
好的,非常感谢您的分享!
TI中文支持网

