Arrow Electronics Components Online

使用旋转编码器与Arduino板

旋转编码器20 5月 2021
在网格化工作区上,显眼地展示了一个标记为“LPD3806-600BM-G5-24C”的旋转编码器。
Jeremy S Cook
出版商Jeremy S Cook
查看所有文章

您可以使用按钮或滑块输入等组件控制许多项目,但如果您的构建需要旋钮怎么办?如果您的项目需要旋转输入,您有两个选择:电位器或旋转编码器。

电位计,其电阻值根据旋钮位置变化,设计简单,并且通常是一个不错的选择,但你只能顺时针或逆时针旋转它们。如果你需要一个可以持续旋转的装置,旋转编码器是最佳选择。如果你在两者之间犹豫不决,我们的编码器与电位计讨论可能会帮助你找到答案。
 
编码器有两种基本样式:
 
1. 增量编码器使用四分之一排列的脉冲系列来指示轴转动的距离和方向。
2. 绝对编码器固有地知道它们的角位置。
 
本文主要关注增量编码器,这种编码器是最常见的。也有单输出编码器(又称测速计)可供选择,但它们的用途较少,因为它们只指示轴移动了多远而非方向。您可以查看我们关于编码器类型的文章以获取更详细的讨论,但今天我们将涵盖增量编码器的基本工作原理以及如何将其与 Arduino板连接。

旋转编码器:教程与概述

The image displays two square wave signals labeled A and B, representing typical quadrature encoder outputs.

编码器信号A和B的正交图。在此模式中,B的上升沿和A的低信号表示向右移动,而A的下降沿和B的高信号表示向左移动。

大多数编码器的核心是“A”和“B”输出,它们稳定且逐步地脉冲。这些输出与电源和地结合在一起,视需要而定。A和B输出是“正交编码”的,这意味着每个信号的占空比是50%(一半时间为开,一半时间为关)。其工作原理如下:
- 每个占空比与另一个相比相位差为90°;一个输出在另一个输出的状态改变时间的一半中改变。
- 一个连接的 微控制器 或专用板卡可以将这些脉冲转换为旋转增量,脉冲序列将表明轴旋转的方向。
 
如上图所示,如果B信号在A处于低状态时上升,则该模式上的位置向右推进。然而,如果B信号在A已经处于高状态时上升,则会向左推进。结合A信号的上升和下降,这给每条线提供了四个不同的状态:
对A信号而言,同样的信号模式也适用,提供了八种不同的可能过渡,并在每个方向上各有四种。随着此模式环绕并循环,您现在拥有一个正交旋转编码器的基础。
1. B上升,A低
2. B下降,A高
3. B上升,A高
4. B下降,A低

在 Arduino 上使用旋转编码器

我们将把两种类型的编码器与Arduino配对:
- 接触编码器:较小,通常用作接口设备。
- 光学编码器 (LPD3806-600BM-G5-24C):较大款式,带有轴承支撑,通常用于电机速度测量。
如果您使用较小的编码器,请执行以下步骤:
1. 将中间线连接到地。
2. 将一个外侧连接接到D2,另一个接到D3;不需要正电压。
对于较大的编码器,请按以下步骤操作:
1.  将红色电源线连接到+5V,黑线接地。
2. 将A和B线(绿色和白色)连接到Arduino D2和D3。
3. 请注意,连接、电压要求和颜色方案可能因您的实现而异。

Arduino Encoder Code

A close-up view of a breadboard circuit featuring a rotary encoder and a small microcontroller module.

图片:Jeremy S. Cook

一旦你了解了编码器的A和B线如何随旋转产生脉冲后,将此输入转换为代码就是获取有用输出的问题。理论上这一步很简单,但在实践中可能会有些棘手。你可以在 这里找到示例代码 (以及一个3D打印的顶部来辅助测试)。虽然这个顶部并不完美,但在方向上是准确的,并且展示了编码器的工作原理。当Arduino的微控制器检测到任意一条线上从高到低的转变时,它会比较两条线的状态并适当增加或减少一个增量。
 
请务必选择D2和D3,因为在许多Arduino板子的ATmega328中,它们是唯一可以产生中断的两个输入。这意味着当这里看到转换时,它会立即进入读取例程,而不是等待程序的逻辑调用它。
 
同时也要考虑到millis()去抖动代码,它适用于在转换期间快速改变状态的输入,并可能在短时间内快速连接和断开。虽然此代码在某些应用中可以接受,并可以帮助你理解编码器的工作原理,但要获得100%准确的读数并不容易。

使用 Arduino Encoder Library

Arduino 编码器代码将帮助您了解编码器的工作原理,但如果您只想在项目中使用编码器,可以利用 Paul Stoffregen 提供的现成库。以下是入门步骤:
 
1. 从 GitHub 下载编码器库
2. 在 Arduino IDE 中,导航到 Sketch ==> Include Library ==> Add .ZIP Library,添加“Encoder-master.zip”。
3. 安装完成后,您会看到在 File ==> Examples ==> Encoder 下列出了四个程序。加载“Basic”示例并将其传输到您的 Arduino 板。
4. 将编码器接上,正极和负极与之前一样连接,这次将 A 和 B 信号线连接到 D5 和 D6。
5. 在串行监视器中以 9600 波特率打开,您将看到位置准确增减。
 
与光学编码器一样,位置应在不做任何调整的情况下改变。为了更多乐趣,以相同的波特率打开 Arduino IDE 的串行绘图器。它不仅仅显示位置数字,还会自动生成数值的图表。

The image shows the Arduino IDE interface on the left, displaying code for handling encoder states and debouncing.

无论是作为自定义接口还是用于测量速度和距离,编码器为您的Arduino项目提供了出色的旋转输入方法。虽然它们比许多其他类型的设备需要更多的设置工作,但结果是值得的。

文章标签

全球
电阻微调器、电位器和变阻器
编码器
数字电位器
Arduino S.r.l.
机电编码器

相关内容