精华内容
下载资源
问答
  • 硬件 编码器:...//1024线编码器,encoder_B判断旋转方向,encoder_A记录步进脉冲的变化次数,1024线转1圈会有2048次变化,所以每次加0.5 int encoder_A= 2; //检测脉

    硬件

    编码器:https://item.taobao.com/item.htm?spm=a1z0k.7386009.0.d4919233.28275ed5nlaXMq&id=38701256712&_u=t2dmg8j26111
    规格选:带方向输出5v
    arduino uno板

    接线

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    代码

    //1024线编码器,encoder_B判断旋转方向,encoder_A记录步进脉冲的变化次数,1024线转1圈会有2048次变化,所以每次加0.5
    int encoder_A= 2; //检测脉冲
    int encoder_B=3;  //检测方向
    volatile float encoderCount=0; //用来记下走的步数,顺时针为正,long类型是4个字节 ,为volatile易变变量
    
    void setup() {
      Serial.begin(115200);
      pinMode(encoder_A, INPUT);
      pinMode(encoder_B, INPUT);
      //中断服务程序: 中断Arduino当前正在处理的事情而优先去执行中断服务程序,当中断服务程序完成以后,再回来继续执行刚才执行的事情
      attachInterrupt(digitalPinToInterrupt(encoder_A), ISR_EncoderA, CHANGE); 
    //  attachInterrupt(digitalPinToInterrupt(encoder_B), ISR_EncoderB, CHANGE);
    }
    
    void ISR_EncoderA() {
        if (digitalRead(encoder_B) == HIGH) 
        {
          encoderCount=encoderCount+0.5; }        //CCW,逆时针
        else 
        {
          encoderCount=encoderCount-0.5; }       //CW, 顺时针
         
     }
    void loop()
    {
      Serial.println(encoderCount);
    }
    
    

    注意

    串口波特率不能小了,小的话会丢失。
    中断服务程序参考:http://www.taichi-maker.com/homepage/reference-index/arduino-code-reference/attachinterrupt/
    易变变量参考:http://www.taichi-maker.com/homepage/reference-index/arduino-code-reference/volatile/

    上传出错

    如果出现上传程序报错:串口不存在等等,换一个usb口插试一试,或者上传的时候按一下板子上的reset键;
    如果出现上传一直卡住不动的情况,按一下板子上的reset键。

    展开全文
  • arduino光电编码器程序

    2016-12-04 10:07:48
    简单实现arduino接收光电编码器发出的脉冲并计算、显示转速
  • 编码器相关知识及ESP32-Arduino程序

    千次阅读 2020-09-27 16:32:06
    编码器主要分为光电编码器和磁编码器(霍尔编码器)。 一、主要原理: 对于编码器来讲,其本质在于测量距离,或者说路程。通过计算转一圈的脉冲个数,从而实现测速。 1.光电编码器:是一种通过光电转换将输出轴上的...

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

     

    一、主要原理:

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

    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++;
      }

    展开全文
  • 程序针对的是代编码器的直流减速电机,读取编码器产生的脉冲并上传至IDE的串口
  • 旋转或编码器是一个角度测量装置. 他用作精确测量电机的旋转角度或者用来控制控制轮子(可以无限旋转,而电位器只能旋转到特定位置)。其中有一些还安装了一个可以在轴上按的按钮,就像音乐播放器的控制按钮。
  • arduino编码器的使用 文章目录arduino编码器的使用一、编码器是什么?二、使用步骤1.连接编码器arduino开发板2.代码总结 一、编码器是什么? 编码器就是一种可以输出90度相位差A,B的两路信号,也就是图上的“CLK...

    arduino编码器的使用


    一、编码器是什么?

    编码器就是一种可以输出90度相位差A,B的两路信号,也就是图上的“CLK”和“DT”端口
    在这里插入图片描述
    编码器

    二、使用步骤

    1.连接编码器和arduino开发板

    编码
    展开全文
  • arduino+旋转编码器

    2020-07-27 14:37:39
    arduino nano(其他型号也可以)、旋转编码器arduino下载数据线、杜邦线若干。 主要原理 旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。 在本篇文章中,我们使用的...

    材料清单

    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;
    }
    

    程序运行效果
    在这里插入图片描述

    展开全文
  • 搜索了相关资料,发现STM32或者51单片机的编码器程序比较多。其中STM32有编码器接口,简单来说就是用来定时器来做脉冲的捕捉,但是我对于其中的周期还有计数方式一直不是很懂,而且下载的程序虽然能用,但是接线后...
  • arduino编码器

    千次阅读 2018-07-16 11:49:41
    突然接到一个要求 要用到编码器。(一直没用过)找了个600线的。网上找了很几篇帖子,拿来试了试,发现慢速的时候还好,转动一快就丢数。花了个把小时多琢磨可以做以下操作。。。。。。。。。。(具然不能截图复制,...
  • # 最简化编码器计数程序( 有效5行,验证于arduino ) 合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 介绍旋转或编码器是一个角度测量装置. 他用作精确测量电机的旋转角度或者用来控制控制轮子(可以无限旋转,而电位器只能旋转到特定位置)。其中有一些还安装了一个可以在轴上按的按钮,就像音乐播放器的控制按钮。...
  • Arduino学习笔记(14)-- Arduino使用增量编码器测速

    千次阅读 多人点赞 2019-10-11 13:42:45
    原理参考:https://www.arduino.cn/thread-42559-1-1.html ... 摘要: ...利用Arduino、增量式光电编码器测量速度、方向、位移。 材料: Arduino mega 2560 分辨率256ABZ相增量式编码器 pc 编码器...
  • 用于AS5600 12位电磁编码器Arduino库。 该库是为编写的。 特征 读取12位值(0-4095) 读取角度值,以度为单位(0-360度) 获得磁强度 获得收益 例子 以下示例以360/4096的增量读取磁体相对于AS5600编码器的...
  • 旋转或编码器是一个角度测量装置. 他用作精确测量电机的旋转角度或者用来控制控制轮子(可以无限旋转,而电位器只能旋转到特定位置)
  • 使用Arduino 连接旋转编码器

    千次阅读 2019-03-21 15:31:07
    1. 所需的材料 旋转编码器(KY-040) Arduino UNO开发板 字符型图形点阵液晶1602 电位器10k 面包板 ...有许多类型的编码器,每个编码器都有自己的工作机制,稍后我们将了解这些类型,但现在让...
  • 本人目前是一个大一菜鸟,零基础学的编码器方面,希望我的经验对你有些帮助。 分享一下霍尔编码器电机的使用与测速,我用的是25GA-310直流减速电机。先来看一下最基本的 接线方法——- ——S1与S2连接单片机上的S...
  • 使用Arduino开发板连接ec11旋转编码器

    千次阅读 2020-12-13 01:05:32
    使用Arduino开发板连接ec11旋转编码器 因为最近要用到旋转编码器,从网上花了好长时间找了好多关于arduino使用旋转编码器的资料,总是找不到合适的,最后总结了一下,分享给大家。 需要的元件: 杜邦线、arduino uno...
  • Arduino使用旋转编码器

    万次阅读 多人点赞 2017-11-12 19:59:59
    这次介绍的是我买的37款传感器套件中的旋转编码器。首先是实物图。 通过查阅资料,旋转编码器既可以左右旋转,又能当成按钮按下。首先测试一下按下的功能,该功能对应的输出引脚是SW。 测试代码如下:  int Led =4...
  • 旋转或编码器是一个角度测量装置. 他用作精确测量电机的旋转角度或者用来控制控制轮子(可以无限旋转,而电位器只能旋转到特定位置)。其中有一些还安装了一个可以在轴上按的按钮,就像音乐播放器的控制按钮。...
  • Arduino旋转编码器测试

    2018-12-27 12:00:00
    做为旋转编码器学习过程的记录,原理就不详细介绍了,网上有很多。 先上一张时序图 正常旋转时显示 顺时针时序 CLK:1 DT:1 CLK:1 DT:0 CLK:0 DT:0 CLK:0 DT:1 CLK:1 DT:1 逆时针时序 CLK:1 DT:1 ...
  • 旋转编码器判断正反转程序 http://www.openedv.com/thread-65126-1-1.html 原文链接:http://yehnan.blogspot.com/2014/02/arduino.html 旋转编码器应用电路图(注意电路图中电阻R20,R24,R25不能取太大,比如取1M,...
  • Arduino、AB相增量式光电编码器测位移和速度方向

    万次阅读 多人点赞 2019-05-10 14:33:09
    利用Arduino、增量式光电编码器测量速度、方向、位移。 学校的一个项目作业,实测有效,若有改进的地方还需大佬们指点。 材料: Arduino mega 2560 2个2k电阻(红白之间2k,红绿之间2k) 分辨率400 AB相增量...
  • 基于Arduino单片机的增量式编码器模拟装置设计.pdf
  • 玩一玩旋转编码器模块 我是代码小白,一个正在做毕设的秃头少年。鄙人拙作,有不当之处,还请指教。 正文 毕业设计已经OK啦,但是买的很多传感器都没用上,现在工作之余一个一个测试下,权当消遣吧。 废话不多说,今天...
  • 已经有一些库来支持旋转编码器的应用,但是为了让应用更加灵活,还是建议自己写一个编码器信号采集的程序,毕竟也不复杂。 A相连接开发板2脚,B相接4脚。只让A相的脉冲变化进入中断。 #define encoder0PinA 2 #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,070
精华内容 828
关键字:

编码器arduino程序