单片机学习小组
直播中

香脆面

11年用户 575经验值
私信 关注

旋转编码器的主要原理是什么?

旋转编码器的主要原理是什么?

回帖(1)

苏丹

2022-1-21 09:51:16
材料清单

arduino nano(其他型号也可以)、旋转编码器、arduino下载数据线、杜邦线若干。
主要原理

旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。
在本篇文章中,我们使用的特定旋转编码器是增量式旋转编码器,它是测量旋转的最简单的位置传感器。该旋转编码器也称为正交编码器或相对旋转编码器,其输出是一系列方波脉冲。(如下图)

前两个引脚(接地和Vcc)用于为编码器供电,通常使用+ 5V电源。除了以顺时针方向和逆时针方向旋转旋钮外,编码器还有一个开关(低电平有效)编码器的按钮在未按下时为高电平,按下时则为低电平,对SW引脚进行电平检测即可判断按钮是否按下。最后它有两个输出引脚,产生脉冲波形。
要详细了解编码器,我们先看看它的工作原理。以下是方波脉冲的产生方式:编码器有一个带有均匀间隔的接触区的磁盘,它们连接到公共引脚C和另外两个独立的接触引脚A和B,如下图所示。

当磁盘逐步开始旋转时,引脚A和B将开始与公共引脚接触,并相应地产生两个方波输出信号。
如果我们只计算信号的脉冲,则可以使用两个输出中的任何一个来确定旋转位置。但是,如果我们想要确定旋转方向,我们需要同时考虑两个信号。

我们可以注意到,两个输出信号相位彼此之间相差90度。如果编码器顺时针旋转,则输出A将在输出B之前;如果编码器逆时针旋转,则输出A将在输出B之后。
进一步地,A信号从高到低或从低到高变化的时刻,我们注意到如果编码器顺时针旋转,那么两个输出信号的值相反;如果编码器逆时针旋转,则输出信号具有相等的值。因此,我们可以轻松地对控制器进行编程以读取编码器的位置和旋转方向。
Let’s get started
电路连接


程序代码



*  电路连接:
*  GND-G
*  + --5V
*  SW-D3:按钮检测
*  DT-D4:B信号序列
*  CLK-D5:A信号序列
*  参考:https://blog.csdn.net/weixin_42268054/article/details/104415067
*/
#define CLK 5
#define DT 4
#define SW 3
int counter = 0;
int aState;
int aLastState;  
int bState;
int bLastState;  
int SWState;
int SWLastState;  

void setup() {
  pinMode(CLK,INPUT);
  pinMode(DT,INPUT);
  pinMode(SW,INPUT_PULLUP);
  Serial.begin (9600);
  // Reads the initial state of the CLK
  aLastState = digitalRead(CLK);
  bLastState = digitalRead(DT);
  SWLastState = digitalRead(SW);
}

void loop() {
  SWState = digitalRead(SW); // 按钮输出状态
  aState = digitalRead(CLK); // CLK的输出状态0/1
  bState = digitalRead(DT); // DT的输出状态0/1
  if (aState != aLastState){ //变化检测
    delay(50);//消抖
    if (aState != bState) { // 如果A!=B,则表示编码器正在顺时针旋转
      counter ++;
    }
    else{ // 如果A=B,则表示编码器正在逆时针旋转
      counter --;
    }
    Serial.print("num: ");
    Serial.println(counter);
  }
  if (SWState == 0 and SWLastState == 1){
    delay(50);//消抖
    Serial.println("num: 0");
    counter = 0;
    while (digitalRead(SW) == 0);//等待按钮抬起
    delay(200);
  }
//  Serial.print("nowSW: ");
//  Serial.println(SWState);
  aLastState = aState;
  SWLastState = SWState;
}
程序运行效果
举报

更多回帖

发帖
×
20
完善资料,
赚取积分