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

EC11编码器有S1,S2,A,B,C五个引脚,其中S1和S2引脚类似于普通的按键,A,B,C引脚用来检测旋钮的转动方向。总共可以输出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、检测结果

本文详细介绍了EC11编码器的结构、基本工作原理、电路连接方法,并提供了驱动代码,通过实测结果展示了如何检测旋钮的转动方向。
2万+

被折叠的 条评论
为什么被折叠?



