[求助] 用msp430f5529 launchpad做正交计数的一些问题

lchaooo   2017-6-24 16:21 楼主
现在在做一个双轮平衡小车,要读取两个电机编码器的数据,连线如下: // ----------------- // -| 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 编辑

回复评论 (1)

改成了捕获模式的异步模式 好像没问题了 本帖最后由 lchaooo 于 2017-6-25 17:07 编辑
点赞  2017-6-25 10:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复