关于使用欧姆龙的绝对值旋转编码器 E6CP-AG5C 输出不稳定-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 427|回复: 0

[未解决] 关于使用欧姆龙的绝对值旋转编码器 E6CP-AG5C 输出不稳定

[复制链接]
发表于 2022-2-7 13:09 | 显示全部楼层 |阅读模式
本帖最后由 leofok 于 2022-2-7 13:25 编辑

本人有一点点编程经验, 电子零件基本是个新手, 想学习使用欧姆龙的绝对值旋转编码器 E6CP-AG5C, 编码器的资料如下:
https://www.fa.omron.com.cn/products/family/494/specification.html
我手上的是1024解释度的版本, 所以它除了两条接电源线之外(外接了八颗1.2V AA电池的电源盒), 其余十条线则输出由个位至十位二进数的格雷码(Grey code), Arduino接脚与旋转编码器接线用接线器直接接上中间并没加上其他电子零件, 由Pin2顺序接到Pin11, 程式码如下:

  1. #define PIN_0 (2) //2^0
  2. #define PIN_1 (3) //2^1
  3. #define PIN_2 (4) //2^2
  4. #define PIN_3 (5) //2^3
  5. #define PIN_4 (6) //2^4
  6. #define PIN_5 (7) //2^5
  7. #define PIN_6 (8) //2^6
  8. #define PIN_7 (9) //2^7
  9. #define PIN_8 (10) //2^8
  10. #define PIN_9 (11) //2^9
  11. #define TO_INVERT_SIG (1) //In my case, I need to invert the signal to get the correct result.
  12. const int offset = 0; //angle offset
  13. const int numPins = 10;
  14. int8_t pinArray[numPins] = {
  15.   PIN_0,
  16.   PIN_1,
  17.   PIN_2,
  18.   PIN_3,
  19.   PIN_4,
  20.   PIN_5,
  21.   PIN_6,
  22.   PIN_7,
  23.   PIN_8,
  24.   PIN_9
  25. };

  26. void setup() {
  27.   // put your setup code here, to run once:
  28.   Serial.begin(9600);

  29.   for(int i = 0;i < numPins;i++) {
  30.     pinMode(pinArray[i], INPUT_PULLUP);
  31.   }
  32. }

  33. void loop() {
  34.   // put your main code here, to run repeatedly:
  35.   Serial.println(ConvertGrayCode(), DEC);
  36.   delay(50);
  37. }

  38. int ConvertGrayCode() {
  39.   int finalResult = 0;
  40.   int val = 0;
  41.   int curXORVal = 0;
  42.   int i = numPins - 1; //start from MSB

  43.   //assign first value
  44.   #if TO_INVERT_SIG == 1
  45.   val = 1 - digitalRead(pinArray[i]);
  46.   #else
  47.   val = digitalRead(pinArray[i]);
  48.   #endif
  49.   
  50.   finalResult = ((val & 1) << i);
  51.   for(i = numPins - 2;i >= 0;i--) {
  52.     #if TO_INVERT_SIG == 1
  53.     val = 1 - digitalRead(pinArray[i]);
  54.     #else
  55.     val = digitalRead(pinArray[i]);
  56.     #endif
  57.     curXORVal = ((finalResult >> (i + 1)) & 1) ^ (val & 1);
  58.     finalResult |= ((curXORVal & 1) << i);
  59.   }
  60.   
  61.   return finalResult - offset;
  62. }
复制代码


大致使用没问题, 但旋转途中会突然出现 0 的结果:

a.jpg

b.jpg
求问各位高手这输出正常吗, 还是我连接的方式有问题?


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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 15:51 , Processed in 0.078015 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表