旋转编码器与PIC单片机接口

2020-01-31来源: eefocus关键字:旋转编码器  PIC  单片机接口

在这里插入图片描述

旋转编码器 是一种输入装置,其帮助用户与系统进行交互。它看起来更像是一个无线电电位器旋转编码器是一种输入设备, 可帮助用户与系统交互。它看起来更像是一个无线电电位器, 但它输出一系列脉冲, 这使得它的应用独特。当编码器的旋钮旋转时, 它以小步的形式旋转, 这有助于它用于 stepper/servo 电机控制。


在本文中,我们将了解不同类型的旋转编码器及其工作原理。我们还将它与PIC单片机PIC16F877A连接,并通过旋转编码器控制整数值,并在16 * 2 LCD屏幕上显示其值。在本教程的最后, 您将会很乐意为您的项目使用旋转编码器。所以让我们开始吧…。


旋转编码器及其类型


旋转编码器通常称为轴编码器。它是一个机电传感器, 这意味着它将机械运动转换为电子脉冲, 或者换句话说, 它将角度位置或运动或轴位置转换为数字或模拟信号。它由一个旋钮组成, 当旋转时, 它将逐步移动, 并产生每个步骤具有预定宽度的脉冲列车序列。


市场上有很多种类型的旋转编码器, 设计师可以根据自己的应用选择一种。下面列出了最常见的类型


增量编码器


绝对编码器


磁性编码器


光学编码器


激光编码器


这些编码器是基于输出信号和传感技术进行分类的, 增量编码器和绝对编码器是根据输出信号进行分类的, 磁编码器和激光编码器是基于传感技术进行分类的。此处使用的编码器是增量类型的编码器。


绝对编码器即使在断电后也会存储位置信息, 当我们再次对其通电时, 位置信息也会可用。


另一种基本类型, 增量编码器提供数据时, 编码器更改它的位置。它无法存储仓位信息。


ky-040 旋转编码器夹头及说明


ky-040 增量型旋转编码器的针脚如下所示。在这个项目中, 我们将与来自微芯片的流行微控制器 pic16f877a 接口这个旋转编码器。

在这里插入图片描述

前两个引脚 (接地和 vcc) 用于为编码器供电, 通常使用 + 5v 电源。除了以顺时针和逆时针方向旋转旋钮外, 编码器还具有一个开关 (活动低), 可通过按内旋钮进行按压。此开关的信号是通过引脚 3 (sw) 获得的。最后, 它有两个输出引脚 (dt 和 clk), 产生波形, 如下所述。我们以前把这个旋转编码器与 arduino 接口过。


旋转编码器的工作原理


输出完全取决于内部铜垫, 提供与 gnd 和 vcc 与轴的连接。

在这里插入图片描述

旋转编码器有两个部分。轴轮, 它与轴连接, 并根据轴的旋转和完成电气连接的底座顺时针或逆时针旋转。基座具有连接到 dt 或 clk 的端口或点, 这样当轴轮旋转时, 它将连接基点, 并在 dt 和 clk 端口上提供方波。


输出将像轴旋转时

在这里插入图片描述

两个端口提供方波,但时序略有不同。因此,如果我们接受输出为1和0,则只能有四个状态,0 0,1 0,1 1,0 1.二进制输出的序列决定顺时针转动或逆时针转动。例如,如果旋转编码器在空闲状态下提供1 0并在此之后提供1 1,则意味着编码器将其位置向顺时针方向改变一步,但如果在空闲1 0之后提供0 0,则意味着轴一步一步地沿逆时针方向转动其位置。

所需组件


现在是确定我们需要什么接口旋转编码器与 pic 微控制器的时候了,


PIC16F877A


电阻器


1k电阻器


10k


4.7k电容器33pF陶瓷圆盘电容器 - 2个


20Mhz晶体


16x2显示


旋转编码器


5V适配器。


面包板


连接线。


PIC16F877A旋转编码器接口电路图

在这里插入图片描述

下面是根据电路图连接组件后的最终设置图:

在这里插入图片描述

在这里插入图片描述

我们使用单个1K电阻来代替LCD的对比度,而不是使用电位计。


代码说明


完整的PIC代码 在本项目的最后给出了 演示视频,这里我们将解释代码的一些重要部分。如果您是PIC微控制器的就遵循我们的 新手,请PIC教程 从一开始。


正如我们之前讨论的那样,我们需要 检查输出并区分DT和CLK的二进制输出,因此我们创建了一个 if-else为操作部分。


if (Encoder_CLK != position){


            if (Encoder_DT != position){


           // lcd_com (0x01);


            counter++; // Increase the counter which will be printed on the lcd


            lcd_com (0xC0);


            lcd_puts("            ");


            lcd_com (0xC0);


            lcd_bcd(1,counter);


            }




            else{


          // lcd_com (0x01);


            lcd_com (0xC0);


            counter--; // decrease the counter


            lcd_puts("            ");


            lcd_com (0xC0);


            lcd_bcd(1,counter);


            //lcd_puts("Left");


            }       


        }


我们还需要在每一步上存储位置。为此, 我们使用了一个存储当前位置的变量 “position”。


position = Encoder_CLK; // It is to store the encoder clock position on the variable. Can be 0 or 1 


除此之外,还提供了一个选项,用于 通知开关按压LCD上的。


if (Encoder_SW == 0)


{             


    sw_delayms(20); //debounce delay            


    if (Encoder_SW == 0)


          {                //lcd_com(1);                


                          //lcd_com(0xC0);                


                         lcd_puts ("switch pressed");


//                itoa(counter, value, 10);


//                lcd_puts(value);


            }


}


系统 _ init 函数用于初始化引脚 ito 操作、lcd 和存储旋转编码器位置。


void system_init() 


    {    


        TRISB = 0x00; // PORT B as output, This port is used for LCD        


        TRISDbits.TRISD2 = 1;    


        TRISDbits.TRISD3 = 1;    


        TRISCbits.TRISC4 = 1;    


        lcd_init(); // This will Initialize the LCD    


       position = Encoder_CLK;// Sotred the CLK position on system init, before the while loop start.


}


lcd 功能写在 lcd. h 库上, 其中声明了 lcd _ put ()、lcd _ cmd ()。


完整代码:



/*


 * File:   main.c


 * Author: Sourav Gupta


 *


 * Created on 18 Dec 2018, 18:57


 */




/*


 * Configuration Related settings. Specific for microcontroller unit.


 */


#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)


#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)


#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)


#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)


#pragma config LVP = OFF         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)


#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)


#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)


#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


#define _XTAL_FREQ 20000000


/*


 * System Header files inclusions


 */




#include


//#include


#include


#include "supporting c files/lcd.h"




#define Encoder_SW PORTDbits.RD2


#define Encoder_DT PORTDbits.RD3


#define Encoder_CLK PORTCbits.RC4




/*


 * Program flow related functions


 */


int counter; // It will hold the count of rotary encoder.


int position; // It will store the rotary encoder position.


void sw_delayms(unsigned int d);


int value[7];




/*


 * System Init Function


 */




void system_init ();




/* Main function single Thread*/


void main(void) {


    system_init();


    lcd_puts ("Circuit Digest");


    lcd_com(0xC0);


    counter = 0;


    while(1){


        lcd_com(0xC0);


        if (Encoder_SW == 0){


            sw_delayms(20);


            if (Encoder_SW == 0){


                //lcd_com(1);


                //lcd_com(0xC0);


                lcd_puts ("switch pressed");


//                itoa(counter, value, 10);


//                lcd_puts(value);


            }


        }                       


       if (Encoder_CLK != position){


[1] [2]
关键字:旋转编码器  PIC  单片机接口 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic486802.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PIC单片机之定时器(TMR0)
下一篇:PIC单片机调试总结

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用PIC单片机连接旋转编码器的方法
旋转编码器(Rotary Encoder)是一种帮助用户与系统交互的输入设备。它看起来更像是一个无线电电位器,但它输出一系列脉冲,使其应用独特。当旋转编码器的旋钮时,它以小步进的形式旋转,这有助于它用于步进/伺服电机控制、导航菜单序列和增加/减少数字的值等等。在本篇文章中,我们将了解不同类型的旋转编码器及其工作原理。我们还将它连接到PIC单片机PIC16F877A,并通过旋转编码器控制整数值,然后在LCD液晶屏1602显示其值。在本文结束时,您将熟悉为项目使用旋转编码器。让我们开始吧…旋转编码器及其类型旋转编码器通常称为轴编码器。它是一种机电换能器,意味着它将机械运动转换为电子脉冲,或者换句话说,它将角位置或运动或轴位置转换为数字
发表于 2020-01-29
使用PIC单片机连接<font color='red'>旋转编码器</font>的方法
AVR单片机教程——旋转编码器
旋转编码器好像不是单片机玩家很常用的器件,但是我们的开发板上有,原因如下:旋转编码器挺好用的。电位器能旋转的角度有限,旋转编码器可以无限圈旋转;旋转时不连续,有卡点,适合对应离散数据。开发板上选用的旋转编码器,使用起来简单、方便。本来旁边的电位器(旋钮,以后会讲)一枝独秀,挺孤单的,我就配一个高度大致相同的旋转编码器陪伴它。今天我想写旋转编码器,于是在网络上搜索了一下,相关资料很少。最基本地,旋转编码器的作用是将角位移、角速度等机械量转换为电信号。本文不求成为旋转编码器的百科全书,但会把 触点电刷式 增量式 旋转编码器的原理讲清楚。这里出现了两个定语,是对类别的限定;关于旋转编码器的分类,请自行百度
发表于 2019-12-31
AVR单片机教程——<font color='red'>旋转编码器</font>
基于STM32的旋转编码器
表  #ifdef  VECT_TAB_RAMMY_NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else   MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif..\SYSTEM\sys\sys.c(127): error:  #20: identifier "NVIC_VectTab_FLASH" is undefined用8位的单片机,一般C语言中可以对某寄存器或输出端口进行移位操作和位取反操作,可以使LED灯流水或闪烁.我想问下:1. STM32对GPIO操作一般
发表于 2018-09-16
风力涡轮机设计中的旋转编码器
编码器技术是风能获取的关键 旋转编码器在风能产业中起着非常重要的作用,它提供了使用当前涡轮机中非常动态灵活的控制系统所必不可少的高分辨率反馈。选择合适的编码器将能够极大地增强系统以最佳功率输出运行的能力,并使投资的回报最大化。 美国Lawrence Berkeley国家实验室的数据表明,在2008年,美国风能产量激增了51%,新增容量达8545MW,新增投资超过160亿美元。新建离网型涡轮机 7800台、并网型涡轮机1292台。每台涡轮机的平均产能大约是1.7MW。风能产能比2007年增加了约46%。 风力涡轮机的剖面图展示了一种常用的控制系统,如图1所示。这类系统通常使用5个编码器,它提供反馈,以维持发电机
发表于 2016-10-09
旋转编码器还可以这样设计
  智能旋转换向编码器提供输出选项、简单调零、简化BOM和基于PC的见解   新方法开启新机遇   一直以来编码器用户都不愿意改变,因为一些声称可提供卓越性能和可靠性的创新电机控制技术,必须拥有出色的纪录和往绩来作为支持,才可以用于工作场地或工业装置。虽然光学编码器和磁编码器历史悠久,而且基于看似“更具体”的物理概念,但是电容式编码器亦是基于经过全面试验的原理,并且已经通过多年来在现场的成功实际应用中得到证明。这种不同于运动感测的数字式交替方法提供了许多益处,为利用旋转换向编码器的设计人员提供了全新的智能水平。   旋转编码器对于几乎所有运动-控制应用来说都很关键,由于无刷直流电动机(BLDC)使用增加,使得旋转编码器的需求
发表于 2016-10-09
Pico推出三款新型4通道混合信号示波器,可提供免费软件更新
 PicoScope 6000E 系列紧凑型 4+16 个通道 MSOs 可为工程师、开发人员和科学家提供高成本效益的测试和调试解决方案。      Pico Technology 今天宣布进一步开发其 PicoScope 6000E 系列示波器,推出三款新型 4 通道产品型号,每种型号可配置 16 个可选数字通道。这些产品具有 300 或 500 MHz 的带宽、8 位或 8/10/12 位灵活分辨率以及高达 4 GS 的深度捕捉内存,进一步提升了现有 PicoScope 6000E 系列产品的功能,在年初推出的 8 通道产品型号基础上添加了新的产品。 
发表于 2020-06-01
Pico推出三款新型4通道混合信号示波器,可提供免费软件更新
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved