旋转编码器 - 从零开始认识各种传感器【第八期】

旋转编码器|从零开始认识各种传感器

1. 什么是旋转编码器?

旋转编码器是一种能够将旋转位置变化转换为数字信号输出的装置,被广泛应用于机械设备、自动化控制、测量仪表等领域。它是电位计的现代数字等效产品,比电位计功能更广泛。 电位计只能旋转大约3/4的圆, 旋转编码器可以旋转多圈,适合用来感知位置角度的连续变化,比如汽车中控的旋转按钮。

图1  旋转编码器应用于汽车中控旋钮

2. 旋转编码器是如何工作的

旋转编码器的工作原理是利用光电传感器或磁电传感器,采集旋转盘的位移信息,将其转化成数字信号输出。根据信号的数量和类型,可以实现不同分辨率和不同输出形式的旋转编码器。其中,绝对式旋转编码器能够直接输出每个位置的绝对值,而增量式旋转编码器则只能输出相对位移和方向变化。 在编码器内部有一个开有槽孔的金属盘,它有一个接地管脚C链接到地。 还有两个金属探针a和b。当转动旋钮时,根据转动方向的不同,探针A和B会先后接触到地,产生的脉冲信号会有90度的相位差,形成一种正交编码。

图2  旋转编码器结构

通过检测信号A状态改变时,B信号的值,就可以确定旋转的方向:

1. 当A的状态改变时,如果B不等于A,则表示顺时针旋转。

2. 当A的状态改变时,如果B等于A,则表示逆时针旋转。

图3  旋转编码器工作原理

3. 常见的旋转编码器的种类

旋转编码器可分为绝对型(absolute)编码器及增量型(incremental)编码器两种。增量型编码器也称作相对型编码器(relative encoder),利用检测脉冲的方式来计算转速及位置,可输出有关旋转轴运动的信号,一般会由其他设备或电路进一步转换为速度、距离、每分钟转速或位置的信号。而绝对型编码器可以精确输出旋转轴相对于初始状态的位置,可视为一种角度传感器。

3.1 绝对型编码器

绝对编码器是能输出角度绝对值的一种编码器。绝对编码器的码盘与增量编码器有很大的不同,他的码盘上面每个角度都记录了不同的编码,唯一对应于当前转动位置。它的一大优点就是不怕断电,断电后由于编码的唯一性,上电后依然可以读取当前准确的位置。

图4  绝对型旋转编码器

对于需要多于一圈的角度记录,可以在码盘转轴上外加齿轮来进行多圈记录,类似钟表的机械原理。

图5   多圈记录旋转编码器

3.2 增量型编码器

增量型编码器,也称作相对编码器,他的码盘编码是均匀分布的。它是通过从初始位置开始转动后记录的脉冲数量确定当前转动位置。增量型编码器的信号可以很方便的转换为运动相关的速度等信号,且成本较低,其是最广为使用的编码器。但是它的原理也决定了它无法在断电时储存当前位置。

图6  增量型编码器原理

3.3 两种旋转编码器的比较

图7  旋转编码器的特性比较

从两种旋转编码器的比较表格可以看出,两者最大的区别就是是否具有断电记忆系统当前位置的功能。由于绝对旋转编码器的每个角度的编码是唯一的,它可以做到在断电重启时记住当前系统位置,使得它适用于需要高精度和即时位置信息的应用,如机器人手臂的位置、自动化工厂传送带的位置等等。而增量式编码器由于结构简单,价格便宜,是应用更为广泛的编码器。

4. 旋转编码器演示

最后,我们来演示如何使用配备显示屏的树莓派读取并显示旋转编码器的数据。实验中使用的是一款增量式旋转编码器,转动旋柱,可以看到屏幕显示转动角度增加,反方向转动,则显示转动角度减小,过零点后变成负值。

图8  树莓派读取旋转编码器展示

完整代码如下:

main.py

from breakout_colourlcd240x240 import BreakoutColourLCD240x240
from machine import ADC, Pin, Timer, PWM
from utime import sleep
import time, math,array
#------------------------------------------------------------------
from rotary import Rotary
rotary = Rotary(20,21,22)val = 0def rotary_changed(change):global valif change == Rotary.ROT_CW:val = val + 1print(val)elif change == Rotary.ROT_CCW:val = val - 1print(val)rotary.add_handler(rotary_changed)#显示屏
width = BreakoutColourLCD240x240.WIDTH
height = BreakoutColourLCD240x240.HEIGHT
display_buffer = bytearray(width * height*2)
display = BreakoutColourLCD240x240(display_buffer)#-------------------------------------------------------------------#屏幕基本图形绘制def display_init():  display.set_pen(0,255,0)display.rectangle(58,30,13,160)display.circle(64,190,6)display.set_pen(255,0,0)display.text("current", 150, 20, 194, 2)display.text("step", 150, 35, 194, 2)display.update()for i in range(6):display.set_pen(0,200,0)display.pixel_span(80,27 + i*30,10)display.text(str(50 - i *10), 100, 20+i*30, 194, 2)display.set_pen(0,0,220)if i < 5:for j in range(4):display.pixel_span(80,33 + j*6 + i * 30,5)display.update()display.update()def main():color = [0,255,0]      #温度计颜色timer1 = Timer()#基本图形绘制display_init()#timer1初始化,以5Hz刷新温度计绘制yvis0ztimer1.init(freq=5,mode=Timer.PERIODIC, callback=lambda t:display_change(round(val,1), color))while True:sleep(0.1 ) 
main()

 rotary.py

import machine
import utime as time
from machine import Pin
import micropythonclass Rotary:ROT_CW = 1ROT_CCW = 2SW_PRESS = 4SW_RELEASE = 8def __init__(self,dt,clk,sw):self.dt_pin = Pin(dt, Pin.IN)self.clk_pin = Pin(clk, Pin.IN)self.sw_pin = Pin(sw, Pin.IN)self.last_status = (self.dt_pin.value() << 1) | self.clk_pin.value()self.dt_pin.irq(handler=self.rotary_change, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING )self.clk_pin.irq(handler=self.rotary_change, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING )self.sw_pin.irq(handler=self.switch_detect, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING )self.handlers = []self.last_button_status = self.sw_pin.value()def rotary_change(self, pin):new_status = (self.dt_pin.value() << 1) | self.clk_pin.value()if new_status == self.last_status:returntransition = (self.last_status << 2) | new_statustry:if transition == 0b1110:micropython.schedule(self.call_handlers, Rotary.ROT_CW)elif transition == 0b1101:micropython.schedule(self.call_handlers, Rotary.ROT_CCW)except:passself.last_status = new_statusdef switch_detect(self,pin):if self.last_button_status == self.sw_pin.value():returnself.last_button_status = self.sw_pin.value()if self.sw_pin.value():micropython.schedule(self.call_handlers, Rotary.SW_RELEASE)else:micropython.schedule(self.call_handlers, Rotary.SW_PRESS)def add_handler(self, handler):self.handlers.append(handler)def call_handlers(self, type):for handler in self.handlers:handler(type)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1483804.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——堆,堆排序

前提 我们都知道内存分布中的堆区(Heap section)&#xff0c;new出来的空间都在堆区上。和堆区有一个名字很相近的数据结构——堆(Heap)&#xff0c;虽然名称相近&#xff0c;但两者是完全不同的东西。 因为十大排序算法中有一个堆排序&#xff0c;所以从头开始了解下堆这个数…

JAVASE-医疗管理系统项目总结

文章目录 项目功能架构运行截图数据库设计设计模式应用单列设计模式JDBC模板模板设计模式策略模式工厂设计模式事务控制代理模式注解开发优化工厂模式 页面跳转ThreadLocal分页查询实现统计模块聊天 项目功能架构 传统的MVC架构&#xff0c;JavaFX桌面端项目&#xff0c;前端用…

Linux如何正确安装MySQL数据库

对于Linux安装mysql,如果大家有不会的可以来参考小编的详细安装步骤哦&#xff0c;小编带你一步步走向成功~ 首先对于Linux系统&#xff0c;我们通过小编的上一篇文章中知道安装软件的命令为wget&#xff0c;所以首先需要写出命令获取mysql&#xff1a; wget https://cdn.mys…

高频面试题-CSS

BFC 介绍下BFC (块级格式化上下文) 1>什么是BFC BFC即块级格式化上下文&#xff0c;是CSS可视化渲染的一部分, 它是一块独立的渲染区域&#xff0c;只有属于同一个BFC的元素才会互相影响&#xff0c;且不会影响其它外部元素。 2>如何创建BFC 根元素&#xff0c;即HTM…

【Git远程操作】向远程仓库推送 | 拉取远程仓库

目录 1.向远程仓库推送 ​1.1本地仓库的配置 1.2remote-gitcode本地仓库 1.3推送至远程仓库 2.拉取远程仓库 现阶段以下操作仅在master主分支上。 1.向远程仓库推送 工作区☞add☞暂存区☞commit☞本地仓库☞推送push☞远程仓库注意&#xff1a;本地仓库的某个分支 ☞推…

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

小白新手搭建个人网盘

小白新手搭建个人网盘 序云服务器ECS重置密码远程连接ECS实例 安装OwnCloud安装Apache服务PHP运行环境NAS挂载挂载验证操作体验 序 阿里云文件存储NAS&#xff08;Apsara File Storage NAS&#xff09;是一个可大规模共享访问&#xff0c;弹性扩展的分布式文件系统。本文主要是…

(三)原生js案例之滚动到底部解锁按钮状态

业务主要是注册页面&#xff0c;有很长的条款需要用户去读&#xff0c;必须确认用户是不是看到全部的条款&#xff0c;这个场景下可以使用 效果 代码实现 必要的css <style>*{padding: 0;margin: 0;}ul{list-style: none;width: 330px;height: 100%;/* height: 200px;…

Adobe国际认证详解-影视后期

在当今的数字媒体时代&#xff0c;影视后期制作作为创意产业的核心环节&#xff0c;对于专业技能的要求日益提高。Adobe国际认证&#xff0c;作为全球创意设计领域的重要标杆&#xff0c;为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期&#xff1f;…

在学习使用LabVIEW的过程中,需要注意哪些问题?

在学习使用LabVIEW的过程中&#xff0c;需要注意以下问题&#xff1a; 1. 基础知识 图形化编程思维&#xff1a; LabVIEW采用图形化编程方式&#xff0c;与传统的文本编程语言有很大不同&#xff0c;需要适应这种新的编程思维方式。数据流概念&#xff1a; 理解LabVIEW的核心数…

【Git标签管理】理解标签 | 创建标签 | 查看标签 | 删除标签 | 推送标签

目录 1.理解标签 2.创建标签 3.查看标签 4.删除本地仓库的标签 5.推送标签 6.删除远程仓库的标签 1.理解标签 Git提供一个打标签的功能tag&#xff0c;对某一次事务/提交的表示&#xff08;作用/意义&#xff09;。标签 tag &#xff0c;可以简单的理解为是对某次 comm…

免费的数字孪生平台助力产业创新,让新质生产力概念有据可依

关于新质生产力的概念&#xff0c;在如今传统企业现代化发展中被反复提及。 那到底什么是新质生产力&#xff1f;它与哪些行业存在联系&#xff0c;我们又该使用什么工具来加快新质生产力的发展呢&#xff1f;今天我将介绍一款为发展新质生产力而量身定做的数字孪生工具。 新…

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序&#xff0c;使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…

酷炫末世意境背景404单页HTML源码

源码介绍 酷炫末世意境背景404单页HTML源码&#xff0c;背景充满着破坏一切的意境&#xff0c;彷佛末世的到来&#xff0c;可以做网站错误页或者丢失页面&#xff0c;将下面的代码放到空白的HTML里面&#xff0c;然后上传到服务器里面&#xff0c;设置好重定向即可 效果预览 …

PyTorch 深度学习实践-循环神经网络(高级篇)

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限&#xff0c;重看几遍吧&#xff0c;第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…&#xff0c;一个名字是一个序列 rnn用GRU 用ASCII表作为词典&#xff0c;长度为128&#x…

OceanBase:引领下一代分布式数据库技术的前沿

OceanBase的基本概念 定义和特点 OceanBase是一款由蚂蚁金服开发的分布式关系数据库系统&#xff0c;旨在提供高性能、高可用性和强一致性的数据库服务。它结合了关系数据库和分布式系统的优势&#xff0c;适用于大规模数据处理和高并发业务场景。其核心特点包括&#xff1a; …

源码分析SpringCloud Gateway如何加载断言(predicates)与过滤器(filters)

我们今天的主角是Gateway网关&#xff0c;一听名字就知道它基本的任务就是去分发路由。根据不同的指定名称去请求各个服务&#xff0c;下面是Gateway官方的解释&#xff1a; Spring Cloud Gateway&#xff0c;其他的博主就不多说了&#xff0c;大家多去官网看看&#xff0c;只…

<数据集>蛋壳裂缝检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2520张 标注数量(xml文件个数)&#xff1a;2520 标注数量(txt文件个数)&#xff1a;2520 标注类别数&#xff1a;2 标注类别名称&#xff1a;[crack, egg] 序号类别名称图片数框数1crack245128352egg25142514 使…

最新 Docker 下载镜像超时解决方案:Docker proxy

现在Docker换源也下载失败太常见了&#xff0c;至于原因&#xff0c;大家懂得都懂。本文提供一种简洁的方案&#xff0c; 利用 Docker 的http-proxy&#xff0c;代理至本机的 proxy。 文章目录 前言Docker proxy 前言 这里默认你会安装 clash&#xff0c;然后有配置和数据库。…

LLM大模型实战项目--基于Stable Diffusion的电商平台虚拟试衣

本文详细讲解LLM大模型实战项目&#xff0c;基于Stable Diffusion的电商平台虚拟试衣 一、项目介绍 二、阿里PAI平台介绍 三、阿里云注册及开通PAI 四、PAI_DSW环境搭建 五、SDLORA模型微调 一、项目介绍 AI虚拟试衣是一种创新的技术&#xff0c;利用人工智能和计算机视觉技…