标题: 格雷码编码器测试 [打印本页]

作者: liuqq    时间: 2015-5-21 22:32
标题: 格雷码编码器测试
本帖最后由 liuqq 于 2015-5-21 22:34 编辑

搞到一个格雷码输出的1024分辨率的光洋编码器,之前没看手册,然后用直接接线读取,然后将格雷码转成2进制,发现数据就是不对,
后面到光洋网站上下载了编码器文档,仔细一看才知道,这玩意是PNP输出的,恍然大悟,终于知道为什么处理出来的角度数据是错的。原来就是输出类型的问题没有主意。电平翻转后转成2进制,nice。数据就正确了。


格雷码百科






  1. #include "RobotLib.h"
  2. int temp=0;
  3. long int GrayData=0;
  4. long int Data=0;
  5. long int DecData=0;  
  6. float Angle;

  7. static unsigned int GraytoDecimal(unsigned int x)
  8.     {
  9.      int i;
  10.      for(i=0;(1<<i)<sizeof(x)*8;i++)
  11.      {
  12.        x^=x>>(1<<i);
  13.      }
  14.      return x;
  15.     }

  16. void main()
  17. {


  18. int i=0;
  19. int count=10;
  20. unsigned char GrayBit[10];
  21. GrayData=0;
  22. Data=0;
  23. DecData=0;
  24. Angle=0;
  25.   for (i = 0; i < count; i++)
  26.   {
  27.     GrayBit[i]=0;
  28.   }
  29. while(1)
  30. {
  31.   for (i = 0; i < count; i++)//Read GrayBit
  32.   {
  33.     GrayBit[i]=DI(i);
  34.   }
  35.     for (i = 0; i < count; i++)//this encoder is  PNP type,so need overturn
  36.   {
  37.     if (GrayBit[i]==1)
  38.        GrayBit[i]=0;
  39.      else GrayBit[i]=1;
  40.    
  41.   }
  42.       //Assembly the Graybit
  43.       Data=((GrayBit[9]<<0)|(GrayBit[8]<<1)|(GrayBit[7]<<2)|\
  44.       (GrayBit[6]<<3)|(GrayBit[5]<<4)|(GrayBit[4]<<5)|\
  45.       (GrayBit[3]<<6)|(GrayBit[2]<<7)|(GrayBit[1]<<8)|\
  46.       (GrayBit[0]<<9));
  47.      
  48.      //Gray  transform to Bin
  49.     DecData=GraytoDecimal(Data);
  50.     Angle=0.3515625*DecData;
  51.     printf("    Gray bit\r\n %d %d %d %d %d %d %d %d %d %d\n   count=%d\n \r   Angle=%f\n",
  52.     GrayBit[0],GrayBit[1],GrayBit[2],GrayBit[3],GrayBit[4],GrayBit[5],\
  53.     GrayBit[6],GrayBit[7],GrayBit[8],GrayBit[9],DecData,Angle);
  54.    
  55.   
  56. }
  57. }
复制代码








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1