编码器主要分为光电编码器和磁编码器(霍尔编码器)。

一、主要原理:

对于编码器来讲,其本质在于测量距离,或者说路程。通过计算转一圈的脉冲个数,从而实现测速。

1.光电编码器:是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是目前应用最多的传感器,光电编码器是由光源、光码盘和光敏元件组成。光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。此外,为判断旋转方向,码盘可以包含AB相,相位差相差90度。

       

2. 霍尔编码器: 是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

优缺点: 光电编码器相对于霍尔编码器来说,多数在恶劣环境下无法使用,而且体积也比较大。此外,光电编码器精度不高,主要是由于码盘(光栅)无法划分的太细。但是,在磁场环境下,光电编码器不受磁场的影响。如果磁场不是很强的话,霍尔编码器可以采用磁屏蔽的方法(顺磁性材料:铁、坡莫合金。抗磁材料:热解石墨)。

二、    编码器参数:(以霍尔编码器为例)

基础脉冲数:指的是转一圈的脉冲个数。

磁环触发极数:14极指的是一共14个N/S极,总共7对。

其余参数很容易理解。

三、 测速方法:  位置差分法(即M法)/ 定角测时法(即T法)/    M/T法

根据脉冲计数来测量转速的方法有以下三种:
(1)在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速;
(2)测量相邻两个脉冲的时间来测量速度,称为T法测速;
(3)同时测量检测时间和在此时间内脉冲发生器发出的脉冲个数来测量速度,称为M/T法测速。

1. M法

2. T法

3. M/T法

为了兼顾高速与低速,实际使用中常常是 M 法和 T 法结合使用,称为 M/T 法测速。

M法、T法结合的 M/T 测速法:低速时测周期、高速时测频率。

四、判断正反转

针对具有AB两相的编码器。  只需要看QEP_A和QEP_B。AB具有90度的相位差,通过判断两者上升沿或者下降沿的关系即可。

假设QEP_A触发为高电平,QEP_B为低电平时为正转,反之为反转。

五、实验程序 (M法测速)     ESP32-Arduino

通过定时中断,记录一段时间内的脉冲数从而计算出速度。

#include<Ticker.h>

#define PI 3.1415926

/***************** 定时中断参数 *****************/
Ticker timer1;  // 中断函数
int interrupt_time = 10; // 中断时间
int timer_flag=0;               //定时器标志;
 
/***************** 编码器引脚及参数 *****************/
uint8_t R1 = 18, R2=19;    // 右轮编码器引脚
uint8_t L1 = 26, L2=25;    // 左轮编码器引脚   左右轮区分是以锂电池为底部区分
volatile long Rcounter1=0, Rcounter2=0; // 右轮脉冲计数  该变量用于存储编码器的值,所以用类型修饰符volatile;
volatile long Lcounter1=0, Lcounter2=0; // 左轮脉冲计数  该变量用于存储编码器的值,所以用类型修饰符volatile;

// void right_counter_encoder1(); // 右轮1 计数脉冲数
// void right_counter_encoder2(); // 右轮2 计数脉冲数
// void left_counter_encoder1();  // 左轮1 计数脉冲数   
// void left_counter_encoder2();  // 左轮2 计数脉冲数

void setup()

{

Serial.begin(115200);

/***************** 编码器初始化 *****************/
  pinMode(L1, INPUT);    pinMode(L2, INPUT);   
  pinMode(R1, INPUT);    pinMode(R2, INPUT);  
  attachInterrupt(R1, right_counter_encoder1, RISING);//设置编码器R1相位上升沿中断
  attachInterrupt(R2, right_counter_encoder2, RISING);//设置编码器R2相位上升沿中断      
  attachInterrupt(L1, left_counter_encoder1, RISING);//设置编码器L1相位上升沿中断
  attachInterrupt(L2, left_counter_encoder2, RISING);//设置编码器L2相位上升沿中断
   
/***************** 定时中断 *****************/   
  timer1.attach_ms(interrupt_time, timerIsr);  // 打开定时器中断
  interrupts();                      //打开外部中断

}

void loop()

{

if(timer_flag==1)

{        //判断是否发生定时器中断,这里是 interrupt_time ms发生一次
      timer_flag=0;       //清除标记
 }

}

//定时器中断处理函数,其功能主要为了输出编码器得到的数据
void timerIsr(){
   timer_flag=1;  //定时时间达到标志      
   readEncoder();   // 编码器
}

//编码器输出  mm
void readEncoder(){
  float L = Lcounter1/7/238*2*PI;  // 编码器旋转的角度(rad)编码器旋转一圈7个脉冲,减速比为238,
  float R = Rcounter1/7/238*2*PI; // 右轮
  Serial.print("左轮旋转的角度为:  ");  Serial.println(L);

//数值清零,重新计数
  Rcounter1 = 0; Rcounter2 = 0;   
  Lcounter1 = 0; Lcounter2 = 0;
}

// 编码器计数
void right_counter_encoder1(){  //右轮计数
    Rcounter1++;
  }
void right_counter_encoder2(){
    Rcounter2++;
  }
void left_counter_encoder1(){  // //左轮计数
    Lcounter1++;
  }
void left_counter_encoder2(){
    Lcounter2++;
  }

编码器相关知识及ESP32-Arduino程序相关推荐

  1. 单片机小白学步系列(十) 单片机程序下载相关知识

    注:本篇在写<单片机入门指南系列>之前就已经写过,现在发现这篇比较合理的位置,应该是放在<单片机入门指南系列(六) 单片机最小系统--麻雀虽小,五脏俱全>之后的,但是由于之前考 ...

  2. 小程序 长按api_微信小程序API相关知识科普

    微信小程序API(Application Programming Interface),即应用程序编程接口.API是一种接口函数,把函数封装起来,给开发者,这样好多的功能就不需要你去实现了,只要会调用 ...

  3. 微笑小程序的相关知识

    现在的前端工程师职责越来越重要,很多新的技术都是从前端领域分离出来,微信小程序就是一个很好的前端技术的实践.开发微信小程序前,总觉得神秘面纱不可及,但经过前端团队一个月辛苦奋战,微信小程序从此不再陌生 ...

  4. STC15F2K60S2单片机的串口通信程序及相关知识

    一.STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的,且与MCS-51兼容的STC系列单片机.它完全兼容51单片机,是新一代增强型单片机 ...

  5. Android 音视频流媒体相关知识导航

    文章目录 Android 音视频流媒体相关知识导航 相关博客专栏 RTP RTCP RTSP SRS SRT 等的含义 H264编码参数的设置 Zookeeper相关 ffmpeg 相关 SRS(Si ...

  6. shell的相关知识(变量、脚本定义)

    一.shell的相关知识: 1.对于shell编程语言大体分为:机器语言.汇编语言.高级语言 2.shell变量类型:事先确定数据的存储格式和长度 shell变量分为:字符型.数值型 数值型又分为:整 ...

  7. 视频压缩算法的相关知识

    视频压缩算法的相关知识 MPEG-1 MPEG 视频压缩编码后包括三种元素:I帧(I-frames).P帧(P-frames)和B帧(B-frames).在MPEG编码的过程中,部分视频帧序列压缩成为 ...

  8. WinForm开发,窗体显示和窗体传值相关知识总结

    以前对WinForm窗体显示和窗体间传值了解不是很清楚 最近做了一些WinForm开发,把用到的相关知识整理如下 A.WinForm中窗体显示显示窗体可以有以下2种方法: Form.ShowDialo ...

  9. 转载:关于错排的相关知识

    转载:关于错排的相关知识 杭电2048相关知识充电 转自:错排公式 分类: 数论 关于程序2012-06-08 19:07 335人阅读 评论(0) 收藏 举报 n2 错排问题 错排问题 就是一种递推 ...

最新文章

  1. Keypress - 捕获键盘输入的JavaScript库
  2. java海康sdk_java 集成 海康 SDK
  3. 华为通过债券转换收购Bakrie Telecom公司16.83%股份
  4. MySQL中varchar所占字节大小是多少
  5. 如何诊断crs 安装时 root.sh 脚本执行错误
  6. python args_Python可变参数*args和**kwargs用法实例小结
  7. mysql2014授权设置_mysql权限管理(2014-09-15)
  8. [ FAILED ] SGDSolverTest/0.TestSnapshotShare, where TypeParam = caffe::CPUDevicefloat解决方案
  9. 关于FPGA软件quartus仿真出现cannot launch the modelsim software问题的解决
  10. EasyDSS流媒体服务器如何解决5G超高清4k视频直播卡顿的问题解决方案
  11. 未来几年,谁能拯救手机拍照功能? 1
  12. 海洋CMS采集-内置接口的海洋CMS采集
  13. 时钟芯片 服务器,通用实时时钟芯片
  14. 新手做电商直播带货怎么和快递合作谈价格
  15. 模拟一个火车站售票小例子
  16. 《心流》| 写作反熵
  17. win10任务栏透明_Win10原生实现全透明任务栏
  18. Tableau:如何对任意两个时间段的数据进行对比
  19. 凸轮表(ECAM)的本质-运动控制轨迹规划(线性插值、3次样条插值、5次样条插值)
  20. 二、定义函数及其导数,绘制双Y轴曲线

热门文章

  1. 代数几何:消元(Elimination)、扩展(Extension)
  2. STM32的复位与电源管理
  3. 去除网站讨厌的 javaScript 脚本
  4. node.js安装后输入“node -v”提示‘node‘ 不是内部或外部命令,也不是可运行的程序的解决方法
  5. 双系统删除Linux引导(MbrFix.exe)
  6. 宝马汽车528i间歇性熄火的故障诊断与排除
  7. MFC 调用系统ping工具检测网络
  8. proxifier注册码
  9. 微软首次向 Beta 频道发布Win11预览版
  10. 《盘点软件设计中的七大原则》