怎样用launchpad采集增量式旋转编码器的信号,并确定位置

2019-03-24 11:15发布

1.我先把这个问题简单化了一下。自己先编了程序,让旋转编码器的AB两相输入进launchpad里面,当正转的时候红灯亮,反转时候绿灯亮。但是程序却一直绿灯亮。
2.如何确定编码器的位置?这个一直不会。
程序如下:

#include "msp430g2553.h"

unsigned int counter=0;   //编码器脉冲计数
/*******扫描编码器子函数****************************
在编码器引脚A为低电平期间:
编码器引脚B从0到1为正转,编码器引脚B从1到0为反转。
*****************************************************/
void scan_encode(void)
{
   static  unsigned int  Curr_encoder_b;  //定义一个变量来储存当前B信号
   static  unsigned int  Last_encoder_b;  //定义一个变量来储存上次B脚信号
   static  unsigned int  updata= 0;
   P2DIR&=~BIT1;
   P2DIR&=~BIT2;  //定义p2.1 p2.2为输入口
   if((P2IN&BIT1)&&(P2IN&BIT2))   //编码器无转动时退出
     {
      updata=0;
      return ;
     }
   Last_encoder_b=(P2IN&BIT1);   //记录B信号
   while(!(P2IN&BIT2))          //等待A由低变高
     {
      Curr_encoder_b =(P2IN&BIT1);     //记录等待期间的B信号(指当前B信号)
      updata=1;
     }
     if(updata)
       {
         updata = 0 ;
         if((Last_encoder_b == 0)&&(Curr_encoder_b== 1)) //B从0到1为正转
           {
              if(counter == 500)
                return;
              else
                {
                  counter++;          //正转计数加
                  P1OUT|=BIT0;
                }
           }
        else if((Last_encoder_b == 1)&&(Curr_encoder_b == 0)) //B从1到0为反转
               {
                 if(counter == 0)
                   return;
                 else
                   {
                    counter--;         //反转计数减
                    P1OUT|=BIT6;
                   }
                 
               }
       }
}

int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  P2DIR&=~BIT1;
  P2DIR&=~BIT2;  //定义p2.1 p2.2为输入口
  P1DIR|=BIT0+BIT6;
  scan_encode();
}


才上手,希望各位大神指点。谢谢///!!! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
sacq
2019-03-24 21:10
AB两相的波形,你的接法,现有思路可以简要画画、说说。
想一下子看懂别人的程序,猜测程序的意图也不是一件容易的事。

一周热门 更多>

相关问题

    相关文章