现在在做一个双轮平衡小车,要读取两个电机编码器的数据,连线如下:
// -----------------
// -| P2.4|<-------左电机a相
// | P6.4|<-------左电机b相
// -| P2.3|<-------右电机a相
// | P6.6|<-------右电机b相
// | |
我用ta2的捕获模式获取两个电机a相脉冲
TA2CCTL1 = CM_1+CCIS_0+SCS+CAP+CCIE;//p2.4
TA2CCTL0 = CM_1+CCIS_0+SCS+CAP+CCIE;//p2.3
TA2CTL = TASSEL_2 + MC_2 + ID_1;
中断处理函数如下:
#pragma vector=TIMER2_A0_VECTOR
__interrupt void Timer2_A0_ISR(void)
{
if(P6IN&BIT6)
{ ++tempERight;
} else
{
--tempERight;
}
}
#pragma vector=TIMER2_A1_VECTOR
__interrupt void TIMER2_A1_ISR(void)
{
switch(__even_in_range(TA2IV,14))
{
case 0: break; // No interrupt
case 2:
if(P6IN&BIT4)
{
++tempELeft;
} else
{
--tempELeft;
}
break; // CCR1 not used
case 4: break; // CCR2 not used
case 6: break; // reserved
case 8: break; // reserved
case 10: break; // reserved
case 12: break; // reserved
case 14:
//P1OUT ^= BIT1;
break; // overflow
default: break;
}
}
然后我用ta0定时中断,更新转速:
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
Encoder_Left = tempELeft;
Encoder_Right = tempERight;
tempELeft = 0;
tempERight = 0;
}
现在的问题是我每次上电获取的每个电机的方向似乎不是确定的,时而是正时而是负,我不太清楚我写的代码哪里有问题,希望能有人帮我解答一下
本帖最后由 lchaooo 于 2017-6-24 16:24 编辑
改成了捕获模式的异步模式 好像没问题了 本帖最后由 lchaooo 于 2017-6-25 17:07 编辑