旋转编码器以及如何结合 Arduino 板使用

发布人是

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

 电位计, 根据旋钮位置而改变电阻,更简单,常常是不二之选,但只能顺时针或逆时针转动(到目前为止)。如果您需要能够在任何方向上连续旋转的东西,最好的选择是旋转编码器。如果您需要帮助在编码器和电位计这两者之间作出选择,进行讨论可以帮助您找到答案。

编码器有两种基本款式:

1.增量式编码器使用一系列正交排列的脉冲来指示轴转动的距离和方向。

2.绝对编码器天生就知道其角位置。

本文将重点阐述增量式编码器,这也是您最常见到的编码器类型。单输出编码器(AKA 转速计)也可提供,但它们没有多大用处,因为它们只能指示轴移动的距离,而不能指示方向。关于更详细的讨论,您可以查看我们关于编码器类型的文章,但今天我们只探讨增量式编码器如何工作以及如何将其与 Arduino 板连接的基础知识。

解释的正交编码器

文字说明:编码器信号 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 编码器代码

图片:Jeremy S. Cook

一旦您理解了编码器 A 线和 B 线如何通过旋转来产生脉冲,那么获得有用的输出就是将这种输入转换为代码。这一步在理论上很简单,但在实践中可能会很棘手。您可以在此处找到示例代码(以及可帮助进行测试的 3D 可打印顶部)。虽然顶部不完美,但它的方向是准确的,并说明了编码器的工作原理。当 Arduino 的微控制器检测到任一条线上存在高低转换时,它会比较两种线路状态并酌情增加或减少增量。

确保选择 D2 和 D3,因为它们是许多能够为 Arduino 板上的 ATmega328 产生中断的唯一两个输入。这意味着当发现此处有转换时,它会立即进入读取例程,而不是等程序的逻辑来调用它。

同时保持 millis() 防反跳代码,这适用于在转换期间在状态之间快速变化的输入,并且可以在短时间内快速连接和断开连接。尽管该代码在某些应用程序中工作还过得去,并且能帮助您了解编码器的工作原理,但获得 100% 准确的读数并非易事。

简单方法:编码器库

Arduino 编码器代码能帮助您了解编码器的工作原理,但是,如果您只想在项目中使用一个,请利用 Paul Stoffregen 的现成库。下面介绍如何开始使用:

1.从 GitHub 下载编码器库

2.在 Arduino IDE 上,导航到“框架”==> “包含库” ==>“添加 .ZIP 库”,然后添加到“Encoder-master.zip”。

3.安装后,您会在“文件” ==>“示例” ==> “编码器”下看到,它列出了四个程序。载入“基本”示例,将其转移到 Arduino 板。

4.跟以前一样,将编码器连接到正负极线,但这次将 A 和 B 信号线排布到 D5 和 D6。

5.以 9,600 波特率打开串口监视器,您会准确地看到位置递增和递减。

与光学编码器一样,位置变化时应该没有任何摆动。为了获得额外的乐趣,以相同的波特率打开 Arduino IDE 的串行绘图仪。它不仅仅告诉您位置编号,还会自动创建值的图形。