4367|6

6

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

怎样用launchpad采集增量式旋转编码器的信号,并确定位置 [复制链接]

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();
}


才上手,希望各位大神指点。谢谢///!!!

最新回复

这个问题解决了么  详情 回复 发表于 2015-7-23 14:07
 
点赞 关注

回复
举报

1453

帖子

18

TA的资源

纯净的硅(高级)

沙发
 
用430玩这个,LZ确实有点为难自己。
用DEBUG查查看吧。

点评

不是我难为自己,是老师难为我。。。  详情 回复 发表于 2014-7-20 20:30
 
个人签名http://weibo.com/u/1391449055
 

回复

6

帖子

1

TA的资源

一粒金砂(初级)

板凳
 
sacq 发表于 2014-7-20 12:20
用430玩这个,LZ确实有点为难自己。
用DEBUG查查看吧。

不是我难为自己,是老师难为我。。。
 
 
 

回复

1453

帖子

18

TA的资源

纯净的硅(高级)

4
 
AB两相的波形,你的接法,现有思路可以简要画画、说说。
想一下子看懂别人的程序,猜测程序的意图也不是一件容易的事。

点评

A,B的波形就是相差90度,我想在A为高电平的时候,检测B是由0变到1的,还是由1变到0的,通过这种方法才判断正反转。上面的程序,通过改动,可以在51上运行并测试成功,但430就不行了。我就不知道为啥了?  详情 回复 发表于 2014-7-21 16:37
 
个人签名http://weibo.com/u/1391449055
 
 

回复

6

帖子

1

TA的资源

一粒金砂(初级)

5
 
sacq 发表于 2014-7-20 23:54
AB两相的波形,你的接法,现有思路可以简要画画、说说。
想一下子看懂别人的程序,猜测程序的意图也不是一 ...

A,B的波形就是相差90度,我想在A为高电平的时候,检测B是由0变到1的,还是由1变到0的,通过这种方法才判断正反转。上面的程序,通过改动,可以在51上运行并测试成功,但430就不行了。我就不知道为啥了?

1.jpg (13.66 KB, 下载次数: 0)

1.jpg
 
 
 

回复

1453

帖子

18

TA的资源

纯净的硅(高级)

6
 
有时候,问题可以简单的看。
先把51忘了吧,这先给个思路:
判别方向——在B路的上升沿,判别此时A路的电平。
(另外,你的图我没太看懂,至少左边的图看着不对;去百度搜一下,否则我们说的可能不是同一件事)
 
个人签名http://weibo.com/u/1391449055
 
 

回复

1

帖子

2

TA的资源

一粒金砂(初级)

7
 
这个问题解决了么
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表