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:
好的,非常感谢您的分享!