AVR单片机教程——旋转编码器

2019-12-31来源: eefocus关键字:AVR  单片机教程  旋转编码器

旋转编码器好像不是单片机玩家很常用的器件,但是我们的开发板上有,原因如下:


旋转编码器挺好用的。电位器能旋转的角度有限,旋转编码器可以无限圈旋转;旋转时不连续,有卡点,适合对应离散数据。


开发板上选用的旋转编码器,使用起来简单、方便。


本来旁边的电位器(旋钮,以后会讲)一枝独秀,挺孤单的,我就配一个高度大致相同的旋转编码器陪伴它。


今天我想写旋转编码器,于是在网络上搜索了一下,相关资料很少。最基本地,旋转编码器的作用是将角位移、角速度等机械量转换为电信号。本文不求成为旋转编码器的百科全书,但会把 触点电刷式 增量式 旋转编码器的原理讲清楚。这里出现了两个定语,是对类别的限定;关于旋转编码器的分类,请自行百度。


开发板上的旋转编码器是从淘宝买的,淘宝商家提供了资料,这是本讲的主题。为避免广告嫌疑,我不能放链接上来,所以我就把它转换成图片放在文章里(请在新页面中查看):

我们从旋转编码器的原理开始。旋转编码器的内部是触点与电刷,可以看作按键:当两者接触时,开关闭合;反之断开。实际上它们的本质是一样的。在旋转时,按键会周期性地闭合、断开;如果一端接地,另一端接上拉电阻,就会有周期性高、低电平的脉冲信号产生。我们使用的旋转编码器每转过一圈会输出24个脉冲。


通过对脉冲进行计数,可以知道编码器转过的角度。如果不管方向,测量角度或角加速度等,用一个输出就够了。但是如果考虑方向,无论是顺时针还是逆时针转动,电平都是“高低高低高……”。为了获得方向的信息,需要使用两个输出,它们的相位相差90°,如图所示:

A和B是两个输出端,C端接地。当程序检测到A端由高电平变为低电平时(方法在按键那里讲过了),如果检测到B端是高电平(这就更简单了),那就是顺时针旋转;如果是低电平,那就是逆时针旋转。实际上不一定要检测A端的下降沿,只要按照这张图来,怎么都对。


库函数使用的检测方法是:A、B端由低低变为高低时,判为顺时针转过一格;由低低变为低高时,判为逆时针转过一格。这不是最好的方法(你可以想一下怎样改进,但是不要低估它的难度),但从实际使用上来看,只要用户不故意在两个卡点之间扭来扭去,这种方法是可以胜任的。


我们写一个用旋转编码器控制数码管显示数字的程序,也可以理解为对旋转编码器进行计数并用数码管显示。旋转编码器A和B端分别连接端口4和5,数码管连接6和7。程序的思路是:每隔一毫秒调用rotary_rotated(它和button_pressed函数类似——如果你还记得的话)检测编码器是否被转动以及转动的方向,并根据方向对计数器变量num进行增减。(为什么让num为uint8_t类型?)为了凸显旋转编码器的主题,数码管就用segment_auto来解决了。


#include

#include

#include


int main()

{

    rotary_init(PIN_4, PIN_5);

    segment_init(PIN_6, PIN_7);

    segment_auto();

    uint8_t num = 0;

    while (1)

    {

        switch (rotary_rotated())

        {

        case ROTARY_CW:

            ++num;

            break;

        case ROTARY_ACW:

            --num;

            break;

        default:

            break;

        }

        segment_hex(num);

        delay(1);

    }

}


注意相邻卡点之间挤了4个AB端口的状态,因此延时不能过长。你可以试试更长的间隔。


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

上一篇:AVR单片机教程——串口发送
下一篇:LCD1602液晶显示模块的单片机驱动深入详解之软件篇(AVR)

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

推荐阅读

AVR单片机控制继电器吸合与断开的仿真设计
继电器(Relay),作用是用弱电控制强电。比如,我们用avr单片控制一个220V电压的灯泡,这就必须用到继电器。本课用avr单片机来控制继电器的吸合与断开。Proteus仿真实验器件:1 atmega128一块2 button,按键一个3 relay,通用继电器一个,并把继电器的Component Value设置为5V4 pnp三极管一个5 LAMP,灯泡一个改为220V6 resistor 1k7 DIODE 二极管一个这个程序实际上很简单,主要要学习继电器的用法,注意的是,继电器必须接一个二极管。仿真程序如下:#include#include#define int8u unsigned
发表于 2020-01-19
AVR单片机控制继电器吸合与断开的仿真设计
AVR单片机在工业控制系统中的应用
远离仪表机壳,实测结果电容效应几乎为零。从而乱码和花屏现象不再出现。2.6外部看门狗与外部时钟看门狗也称程序监视定时器。尽管 AVR单片机系统内也有该功能的设置,但在应用实践中发现当干扰严重时该功能会失效,即系统死机后单片机内部的看门狗也无法复位。故有必要在单片机外部单独设计看门狗电路。如图 5所示,由 MC4060芯片及外围电路构成一个看门狗电路。MC4060是一个带外接振荡的 14分频定时计数器,R18和 C2时间常数决定振荡频率。采用如图 5所示的参数时,该振荡频率经过 2秒左右时间后 14分频计数器将被记满,Q14由低电平变高电平经三极管 Q3构成的反相器使输出变为低电平,M16单片机被复位。程序正常运行时,会在
发表于 2020-01-19
AVR单片机在工业控制系统中的应用
AVR单片机外部中断实例及下载烧录的方法
的。Notes:1.在编程锁定位前先编程熔丝位。2.“1”表示未被编程,“0”表示被编程。。下载方法与使用STK500的几乎完全一样。在上面的介绍中,设备不选STK500,改成选JTAGICE 就能进入。支持的芯片:仅支持带JTAG接口的芯片。按官方文档的描述,支持的芯片清单为:ATmega128, ATmega64, ATmega32,ATmega16, ATmega162, ATmega165, ATmega169, ATmega323可见JTAG下载很有局限。另外由于通信协议的不同,感觉JTAG下载的速度,尤其是瞬时反应速度,没有STK500快。(但如果大量的数据传输,速度感觉差不多)。AVR单片机熔丝位(Fuse)快速入门
发表于 2020-01-19
AVR单片机外部中断实例及下载烧录的方法
AVR单片机的监控系统设计方案
众所周知,安全是电力企业一个永恒的主题,而安全工器具的好坏,将直接影响着电力企业在生产过程中的人身和设备安全。笔者提出了一种基于AVR单片机的安全工器具监控系统的设计方案,主要是对安全工器具的离就位状态信息、有效使用期限和安全工器具柜内的温湿度状况等进行监控,可以根据实现安全工器具柜内温湿度的自动调节,能够自动记录安全工器具的相关信息。本文首先阐述了系统的总体结构,然后详细论述了系统的硬件设计和软件设计。1 安全工器具监控系统的总体结构1.1 系统结构本文所设计的安全工器具监控系统主要分为下位机数据采集和上位机数据管理两个部分,两者之间通过网络进行通信。系统首先通过数据采集板对安全工器具柜的相关量进行采集,然后将采集得到的数据进行
发表于 2020-01-19
AVR单片机的监控系统设计方案
AVR单片机详细介绍
ATMEL公司的AVR单片机,是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。AVR单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力。AVR单片机工作电压为2.7-6.0V,可以实现耗电最优化。AVR的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域。ATMEL公司的90系列单片机 是基于新的精简指令RISC结构的。这种结构是在90年代开发出来的,综合了半导体集成技术和软件性能的新结构。这种结构使得在8位微处理器市场上
发表于 2020-01-19
AVR单片机详细介绍
AVR单片机模拟比较器的设计
模拟比较器对正极PB2(AINO)和负极PB3(AINI)的输入电压进行比较,当PB2的电压高于PB3的电压时,模拟比较器输出脚ACO置l。模拟比较器的控制和状态寄存器ACSR地址为$018($28),复位时值为$O。各位定义如下:ACD:模拟比较器禁止。置l时,模拟比较器的电源被关闭。改变ACD时,必须清ACIE位,否则将产生中断。ACO:模拟比较器输出。ACO直接与模拟比较器的输出脚相连接。ACI:模拟比较器中断标志。有模拟比较器输出事件时,该位置1。若ACIE置1,且SREG中的1置1,产生中断。中断执行后,ACI由硬件清O。ACIE:模拟比较器中断使能位。ACIE置l允许中断,清O禁止中断。ACIC:模拟比较器输入捕获使能。
发表于 2020-01-19
AVR单片机模拟比较器的设计
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 nvwayi.com, Inc. All rights reserved
送彩金的网址怎么找 送彩金棋牌网站 大唐APP 棋牌游戏送彩金38 什么平台送彩金的 送彩金100可提款mg游戏 送彩金500的网站大白菜不看id 真人百家乐送彩金 澳客彩票开户 送彩金棋牌平台大全