当前位置: 首页 > news >正文

初出茅庐的小李博客之认识编码器

编码器是什么:

一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器通常由一个旋转部分和一个固定部分组成,旋转部分随着被测量的物体进行旋转,固定部分则保持不动。当旋转部分发生旋转时,编码器会产生一系列的电数字脉冲信号,这些脉冲信号可以用来确定旋转角度或角速度。

编码器输出类型分类:

编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。

绝对编码器(Absolute Encoder):

绝对编码器可以直接读取物体的绝对位置或角度,无需进行初始参考点的校准。绝对编码器通常具有高精度和准确性,适用于需要精确位置或角度信息的应用。

增量编码器(Incremental Encoder):

增量编码器测量的是物体相对于初始位置的增量角度或角速度。它们通常需要一个初始位置的参考点,因此在启动时需要进行校准。增量编码器适用于需要监测运动变化的应用,但相对于绝对编码器可能需要更多的处理来确定绝对位置

编码器检查原理分类:

从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)。

光学编码器(Optical Encoder):

光学编码器利用光学原理来测量旋转角度或线性位移。它包含一个光源(通常是发光二极管)和一个光敏元件(通常是光电二极管或光电传感器)。旋转部分上的编码盘或编码条上有一个特定的光学图案,当旋转发生时,光源会照射到光敏元件上,根据光敏元件接收到的光信号变化,可以测量出旋转角度或线性位移。

磁性编码器(Magnetic Encoder):

磁性编码器使用磁场来测量旋转角度或线性位移。它包括一个磁性编码盘或编码条,以及一个或多个磁敏传感器。编码盘上的磁性图案与传感器之间的磁场变化会导致输出信号的变化,从而测量出旋转角度或线性位移。

编码器的用途:

编码器在工业自动化、机器人控制、医疗设备、航空航天等领域都有广泛的应用,用于测量和控制旋转运动。它们的输出信号可以通过电子设备进行解码,从而得到准确的角度或角速度信息。

编码器检测原理:

光电编码器(Optoelectronic Encoder)是一种常见的增量式编码器,利用光学原理来测量旋转角度或线性位移。

它是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器是由光码盘和光电检测装置组成。光码盘是在一 定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一 定相位差的方波信号

它主要是根据光是否被遮挡来输出不同的信号检测物体运动的变化。

下面是光电编码器的检测原理:

  1. 编码盘或编码条:光电编码器的旋转部分上通常有一个编码盘或编码条,上面有特定的光学图案,如透明间隔和不透明条纹。这些图案会在旋转过程中使光线与光敏元件之间产生周期性的遮挡和透射,从而生成脉冲信号。

  2. 光源:光电编码器中的光源通常是发光二极管(LED),发射的光线照射到编码盘或编码条上的光学图案上。

  3. 光敏元件:光电编码器中的光敏元件通常是光电二极管或光电传感器。它们安装在固定位置,用于接收从编码盘或编码条反射回来的光线。当光线经过透明间隔或被不透明条纹遮挡时,光敏元件会产生电信号变化。

  4. 信号处理:光敏元件产生的电信号被放大和处理,通常经过电子电路进行脉冲计数。在旋转过程中,光敏元件会在透明间隔和不透明条纹之间切换,从而产生一系列脉冲信号。这些脉冲信号的数量和频率与旋转角度或线性位移成正比。

  5. 脉冲输出:光电编码器通过脉冲信号输出来表示旋转角度或线性位移的变化。通常,有两路正交的脉冲信号(通常称为A相和B相),用于测量方向和增量变化。此外,一些光电编码器还可能具有Z相信号,用于标记一个完整的旋转周期。

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

它主要是利用外部磁场对半导体材料中电子运动轨迹的影响来检测位置变化。

下面是霍尔编码器的工作原理:

  1. 霍尔效应:霍尔效应是一种基本的物理现象,当电流通过具有霍尔电阻率的半导体材料时,受外部磁场影响,材料的一侧会产生电势差,这个电势差称为霍尔电压。霍尔电压的大小和方向与外部磁场的强度和方向有关。
  2. 霍尔元件:霍尔编码器中的霍尔元件是基于霍尔效应工作的传感器。它通常是一个薄片状的半导体材料,具有两个侧面连接的电极。当电流通过霍尔元件时,外部磁场的作用会导致在材料的一侧产生霍尔电压,从而形成一个电势差。
  3. 霍尔码盘:霍尔码盘是一个磁性的圆盘或条状物,上面布置有不同的磁极。这些磁极的分布呈现一定的规律,可以是正交编码、格雷码等。当霍尔码盘随着机械运动旋转时,磁极的变化会引起周围磁场的变化。
  4. 工作过程:当霍尔码盘旋转时,产生的磁场变化会影响附近的霍尔元件。这将导致霍尔元件产生电势差,从而产生霍尔电压。根据霍尔电压的变化,可以判断旋转角度或线性位移的变化。
  5. 信号处理:霍尔元件产生的霍尔电压会被放大和处理,通常使用电子电路将其转换为脉冲信号或数字量。这些脉冲信号可以用于测量位置的变化和方向。

EC11编码器:

在这里插入图片描述

EC11编码器是一种常见的增量式旋转编码器,广泛应用于各种电子设备和产品中,例如旋钮、开关、控制器等。它通常用于检测和测量旋转角度变化,以及提供用户界面控制。

以下是EC11编码器的工作原理:

  1. 机械结构:EC11编码器通常由一个中心旋钮、编码盘和内置的旋转传感器(通常是霍尔元件)组成。编码盘上通常有一系列的磁极或光学标记,这些标记随着旋钮的旋转而变化。
  2. 正交脉冲输出:当用户旋转EC11编码器的旋钮时,编码盘上的磁极或标记会在旋转传感器附近引发磁场或光信号的变化。旋转传感器会感知这些变化,并生成两组相位差90度的正交脉冲信号,通常称为A相和B相。这些脉冲信号的变化频率与旋钮的旋转速度成正比,而脉冲的相位关系则可以用于确定旋转方向(顺时针或逆时针)。
  3. 脉冲计数和处理:EC11编码器的输出脉冲信号通常被输入到微控制器、编码器接口电路或其他数字电子设备中。这些设备会对脉冲信号进行计数和处理,以测量旋转角度的变化。通过计数脉冲的数量,可以确定旋转的步数,从而获得旋转角度的信息。同时,根据A相和B相脉冲信号的相位差,可以判断旋转的方向。
  4. 按压功能:许多EC11编码器还具有中心按压按钮功能。当用户按下旋钮时,内置的开关会触发,产生一个用于触发操作的信号,如确认或选择。

编码器的信号输出:

编码器的信号通常由两组脉冲信号(A相和B相)组成,用于测量旋转角度或线性位移的变化。这些信号是编码器工作原理的核心部分,用于产生计数和判断旋转方向。

以下是关于编码器信号的一些重要信息:

  1. A相和B相脉冲信号:编码器通常输出两组相位差90度的脉冲信号,称为A相和B相。这些信号是正交的,意味着它们的变化情况可以用于判断旋转的方向(顺时针或逆时针)。

  2. Z相信号:一些编码器还可能输出一个Z相信号,也称为索引信号。Z相信号在一个完整的旋转周期内只产生一个脉冲,用于标记一个旋转周期的起始点。当编码器旋转到零点时,Z信号会发出一个脉冲表示现在是零位置 表示编码器转了1圈,可用来记录编码器转了多少圈

在这里插入图片描述
3. 脉冲数量:脉冲信号的数量与旋转角度或位移的变化成正比。通过计数这些脉冲,可以确定物体的旋转角度或线性位移的变化。

如果一个编码器是500线,说明这个编码器转一圈对应的信号线会输出500个脉冲

  1. 脉冲周期:脉冲信号的周期取决于编码器的分辨率。分辨率越高,每度或每单位位移产生的脉冲就越多,从而提供更精确的测量。

  2. 脉冲宽度:脉冲信号的宽度通常是固定的,但也可以在某些编码器中进行调整。脉冲宽度影响到信号的频率和精度。

编码器的信号可以通过适当的电子电路进行捕获和处理,以获取旋转角度或位移的信息。在微控制器或其他数字系统中,这些信号可以进一步用于计数、方向判断和实际的应用控制。

编码器正反旋转输出信号:

在这里插入图片描述

波形特点总结:

正转的时候信号线A先输出信号,信号线B后输出 A相超前B相90度 证明是正转
反转的时候信号线B先输出信号,信号线A后输出 B相超前A相90度 证明是反转

STM32的编码器工作模式:

STM32的定时器编码器模式包括三种。这三种编码器模式是:

  1. 仅在TI1计数(A相):在这种模式下,定时器仅根据A相信号(TI1输入通道)进行计数,B相信号(TI2输入通道)不会被计数。

  2. 仅在TI2计数(B相):在这种模式下,定时器仅根据B相信号(TI2输入通道)进行计数,A相信号(TI1输入通道)不会被计数。

  3. 在TI1和TI2都计数(A相和B相都计数):这种模式下,定时器会同时根据A相和B相信号(TI1和TI2输入通道)进行计数,通过相位差来判断旋转方向。

仅在TL1计数(A相)特点:

当TI2(B相)为高电平时:

1时刻: TI1(A相)下降沿, 则向上计数(正转)。

2时刻:TI1(A相)上升沿, 则向下计数(反转)

当TI2(B相)为低电平时:

3时刻: TI1(A相)上升沿, 则向上计数(正转)。

4时刻:TI1(A相)下降沿, 则向下计数(反转)
波形图:
在这里插入图片描述

仅在TL2计数(B相)特点

当TI1(A相)为高电平时:

1时刻: TI2(B相)上升沿, 则向上计数(正转)。

2时刻:TI2(B相)下降沿, 则向下计数(反转)

当TI2(B相)为低电平时:

3时刻: TI2(B相)下降沿, 则向上计数(正转)。

4时刻:TI2(B相)上升沿, 则向下计数(反转)
波形图:
在这里插入图片描述
在TL1和TL2都计数(A相和B相都计数)特点
一个脉冲信号周期完成4次跳变。精度提高

1时刻:TI2为低电平,TI1上升沿跳变,计数器向上计数;

2时刻:TI1为高电平,TI2上升沿跳变,计数器仍然向上计数;

3时刻:TI2为高电平,TI1下降沿跳变,计数器仍然向上计数;

4时刻:TI1为低电平,TI2下降沿跳变,计数器仍然向上计数。
在这里插入图片描述

三种工作模式如何选择:

需要增加测量的精度时,可以采用4倍频方式,即分别在A、B相波形的上升沿和下降沿计数,分辨率可以提高4倍,如果只是测速,不要求方向,那么只需要用单片机随意选择一个信号线就行了,然后定时器边沿触发,检测脉冲计数即可
一般是定时器的通道1和2才能作为编码器输入口,对应编码器输出的两相。
GPIO配置为配置为上拉输入模式一个定时器做一种工作,如果你配置了编码器模式,那么剩下的通道就不能配置其他模式两相计数模式下, 读出来数需要/4

STM32的编码器接口介绍:

定时器A相引脚B相引脚编码器模式
TIM1PA8PA9TI12
TIM2PA0PA1TI12
TIM3PA6PA7TI12
TIM4PB6PB7TI12
TIM5PA0PA1TI12
TIM8PC6PC7TI12

总结:

EC11是一种增量式编码器,其实生活中鼠标的中间的滚轮,汽车用CD上调整频率和音量的旋钮,用的都是编码器 ,了解了编码器是怎样工作之后,下期写一遍文章详细讲讲如何用STM32的定时器来识别编码器的旋转方向跟计数值。

相关文章:

初出茅庐的小李博客之认识编码器

编码器是什么: 一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器通常由一个旋转部分和一个固定部分组成,旋转部分随着被测量的物体进行旋转,固定部分则保持不动…...

NVIDIA TX2 NX编译及更新设备树

在NVIDIA官网下载相关文件 官网网址:https://developer.nvidia.com/embedded/jetson-linux-archive 我选择的版本为R32.7.4 需要下载3个文件,BSP、根文件系统、BSP源码: 解压 将Tegra_Linux_Sample-Root-Filesystem_R32.7.4_aarch64文件夹下的内容提取到Jetson_Linux_R32.…...

从零开始学Python(二)运算符、if、循环结构

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Python的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.运算符 1.基本运算符 2.比较运算符 …...

Sentinel整合Spring Cloud Gateway、Zuul详解

Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入了 Sentinel API Gateway Adapter Common 模块,此模块中包含网关限流的规则和自定义 API 的实体和管理逻辑: GatewayFlowRule:网关限流规则…...

wsl2安装mysql环境

安装完mysql后通过如下命令启动mysql service mysql start 会显示如下错误: mysql: unrecognized service 实际上上面显示的错误是由于mysql没有启动成功造成的 我们要想办法成功启动mysql才可以 1.通过如下操作就可以跳过密码直接进入mysql环境 2.如果想找到my…...

C#质检工具(StyleCop、SonarLint)

1、StyleCop StyleCop工具主要类似java中的checkStyle,是检查代码样式规范的工具。 1.1、StyleCop安装流程: 图1.1 图1.2 图1.3 安装StyleCop插件时可能会遇到下载特慢或卡住不动的情况,需注意: 1)网上说的关闭IPV6功能不管用 2)网上说的自动指定dns不管用 3)网上…...

PyTorch翻译官网教程-NLP FROM SCRATCH: GENERATING NAMES WITH A CHARACTER-LEVEL RNN

官网链接 NLP From Scratch: Generating Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用字符级RNN生成名字 这是我们关于“NLP From Scratch”的三篇教程中的第二篇。在第一个教程中</intermediate/char_rnn_classification_tutor…...

【C语言】结构体详解

现实生活中一个事物&#xff0c;会有许多属性连接起来。而C语言引入一种构造数据类型——结构体 将属于一个事物的多个数据组织起来以体现其内部联系。 一、结构体类型的定义 结构体类型 是一种 构造类型&#xff0c;它是由若干成员组成的&#xff0c;每个成员可以是一个基本…...

leetcode242. 有效的字母异位词

题目&#xff1a;leetcode242. 有效的字母异位词 描述&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s “…...

Unity 编辑器资源导入处理函数 OnPostprocessAudio :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPostprocessAudio 用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;我们可以使用编辑器资源导入处理函数&#xff08;OnPostprocessAudio&#xff09;来自定义处理音频资源的导入过程。这个函数是继承自AssetPostprocessor类的&#xff…...

uniapp开发(由浅到深)

文章目录 1. 项目构建1.1 脚手架构建1.2 HBuilderX创建 uni-app项目步骤&#xff1a; 2 . 包依赖2.1 uView2.2 使用uni原生ui插件2.3 uni-modules2.4 vuex使用 3.跨平台兼容3.1 条件编译 4.API 使用4.1 正逆参数传递 5. 接口封装6. 多端打包3.1 微信小程序3.2 打包App3.2.1 自有…...

QT-基于Buildroot构建系统镜像下实现QT开发

QT-基于Buildroot构建系统镜像下实现QT开发 BuildRootUboot的仓库地址和commit idKernel 的仓库地址和commit id BuildRoot已编译库在Windows上的Create上创建项目编译QT项目 BuildRoot 这部分按照100ask官网的教程走即可: Uboot的仓库地址和commit id https://e.coding.net/…...

优雅地处理RabbitMQ中的消息丢失

目录 一、异常处理 二、消息重试机制 三、错误日志记录 四、死信队列 五、监控与告警 优雅地处理RabbitMQ中的消息丢失对于构建可靠的消息系统至关重要。下面将介绍一些优雅处理消息丢失的方案&#xff0c;包括异常处理、重试机制、错误日志记录、死信队列和监控告警等。…...

Vim入门教程vimtutor1.7总结

vimtutor命令可以打开教程文档 原文特别提示 ⬇⬇⬇ 特别提示&#xff1a;切记您要在使用中学习&#xff0c;而不是在记忆中学习 Vim模式 正常模式&#xff08;Normal Mode&#xff09;&#xff1a;默认模式&#xff0c;可以使用基础命令进行操作命令模式&#xff08;Command…...

Stephen Wolfram:让 ChatGPT 真正起作用的是什么?

What Really Lets ChatGPT Work? 让 ChatGPT 真正起作用的是什么&#xff1f; Human language—and the processes of thinking involved in generating it—have always seemed to represent a kind of pinnacle of complexity. And indeed it’s seemed somewhat remarkabl…...

CTF-Flask-Jinja2(持续更新)

放心&#xff0c;我会一直陪着你 一.知识一.在终端的一些指令1.虚拟环境2.docker容器二.SSTI相关知识介绍1.魔术方法2.python如何执行cmd命令3.SSTI常用注入模块(1)文件读取(2)内建函数eval执行命令(3)os模块执行命令(4)importlib类执行命令(5)linecache函数执行命令(6)subproc…...

linux文件I/O之 fcntl() 函数用法:设置文件的 flags、设置文件锁(记录锁)

头文件和函数声明 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 函数功能 获取、设置已打开文件的属性 返回值 成功时返回根据 cmd 传递的命令类型的执行结&#xff0c;失败时返回 -1&#xff0c;并设置 errno 为相…...

黑马项目一完结后阶段面试45题 JavaSE基础部分20题(一)

一、Java数据类型 基本数据类型——四类八种 整数型 byte short int long 浮点型 float double 字符型 char 布尔型 boolean 引用数据类型 String字符串 类&#xff08;对象&#xff09; 接口类型 数组类型 枚举类型 二、面向对象的三大特性 1.封装 把同一类事物…...

(一)创建型设计模式:3、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…...

指针进阶大冒险:解锁C语言中的奇妙世界!

目录 引言 第一阶段&#xff1a;&#x1f50d; 独特的字符指针 什么是字符指针&#xff1f; 字符指针的用途 演示&#xff1a;使用字符指针拷贝字符串 字符指针与字符串常量 小试牛刀 第二阶段&#xff1a;&#x1f3af; 玩转指针数组 指针数组是什么&#xff1f; 指针…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...