EC11编码器原理以及驱动程序

本文详细介绍了EC11编码器的结构、基本工作原理、电路连接方法,并提供了驱动代码,通过实测结果展示了如何检测旋钮的转动方向。
AI助手已提取文章相关产品:

EC11编码器

  • 本文就从EC11编码器的结构,基本原理,电路连接,驱动代码和结果五个方面介绍EC11编码器的使用方法

1、结构

结构图
EC11编码器有S1,S2,A,B,C五个引脚,其中S1S2引脚类似于普通的按键,ABC引脚用来检测旋钮的转动方向。总共可以输出5种不同的操作信息:按下、正转、反转、按下正转、按下反转

2、一般电路连接方法

一般连接方法

3、基本原理

把编码器的A,B引脚接入逻辑分析仪,D4为A,D7为B。检测过程正转一格,反转一格得到如下波形。
所以检测旋转的方法有两种
①在A引脚的下降沿检测B引脚的电平
②在A引脚的上升沿检测B引脚的电平
实测②的误触律较小
逻辑分析仪

4、驱动代码

Arduino平台,C++编写的简易读取方法

#include <Arduino.h>

#define EC11_DATA_key digitalRead(D5)  //GPIO14
#define EC11_DATA_A  digitalRead(D4)   //GPIO2
#define EC11_DATA_B  digitalRead(D3)   //GPIO0

int16_t Encoder_EC11_Scan(int16_t key,int16_t EC11_A,int16_t EC11_B);  

void setup() {
  pinMode(D3,INPUT_PULLUP); //输入上拉
  pinMode(D4,INPUT_PULLUP); //输入上拉
  pinMode(D5,INPUT_PULLUP); //输入上拉  

  Serial.begin(115200);   
}
 
void loop() {
	Encoder_EC11_Scan(EC11_DATA_key,EC11_DATA_A,EC11_DATA_B);
}

int16_t Encoder_EC11_Scan(int16_t key,int16_t EC11_A,int16_t EC11_B) 
{
  static int8_t sta=0,sta_key=0;
  int16_t ScanResult = 0;   
  if(sta_key==0 && key==1){sta_key=1;}
  else if(sta_key==1){
    if(key==0){sta_key=2;}
  }
  else if(sta_key==2){
    if(key==1){
      sta_key=0;
      ScanResult=3;
    }
  }
  if(EC11_A==0 && sta==0){
    sta=1;
  } 
  else if(sta==1){
    if(EC11_A==1){
      if(EC11_B==1){
        if(key==0){ScanResult=2;sta_key=0;}
        else {ScanResult=1;}
      }      
      else if(EC11_B==0){
        if(key==0){ScanResult=-2;sta_key=0;}
        else {ScanResult=-1;}
      }
      sta=0;
    }
  }
  if(ScanResult!=0)printf("%d\r\n",ScanResult);	//输出查看,不需要可删除
  return ScanResult;      //返回值的取值:   0:无动作;  1:正转; -1:反转;  2:按下正转; -2:按下反转; 3:只按下并松开
}

5、检测结果

结果

您可能感兴趣的与本文相关内容

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值