旋转编码器控制的另一种算法

本文详细阐述了一种算法,用于精确解读机械旋转编码器在开关弹跳问题下的输出,通过软件逻辑消除干扰并计算精确位移。介绍了编码器工作原理、处理机制以及Python和Arduino代码实现。

操作原理

旋转编码器是通常将轴的角运动转换为数字输出信号的设备。有许多 Web 资源解释了这些设备的机制以及如何将它们连接到微型计算机,但本页并非完整的概述。这个想法是提出另一种算法来正确读取机械旋转编码器的输出。

原则上,常见的旋转编码器通过交替闭合两个开关来产生信号,如上图所示。根据连接,中性状态可以是高 (1) 或低 (0)。我们在这里假设中性状态为高的最常见连接。对于顺时针运动,第一个开关的动作先于第二个开关的动作,而逆时针运动则相反。如果我们将每个状态表示为二进制数,两位数字表示两个开关的状态,则中性状态表示为11, 顺时针旋转由状态链表示11→01→00→10→11逆时针旋转由状态链表示11→10→00→01→11.

开关弹跳

 

问题是机械电气开关不完善,所以会出现开关弹跳的现象。当切换开关时,触点必须从一个位置物理移动到另一个位置。当开关的组件进入新位置时,它们会机械弹跳,导致底层电路多次打开和关闭。得到的信号如上图所示。

这个问题可以通过硬件或软件来解决。在软件的情况下,这涉及到某个主观确定的保持时间,在此期间开关的活动被忽略。然而,在旋转开关的情况下,我们可以完全避免保持时间。由于这对开关经过四个连续的状态,我们原则上可以准确地定义操作何时完成。

算法

 

微处理器一共可以读出四种不同的状态,连续两次读出总共给出了十六种可能的转换,如上图所示。四个过渡代表没有移动,四个过渡代表向右四分之一移动,四个过渡代表向左四分之一移动,四个过渡代表理论上不可能的过渡。

让我们将一个完整的周期定义为一个以中性状态开始和结束的过程。通过分配 0 表示没有移动,+1 表示向右移动四分之一,-1 表示向左移动四分之一,我们得到 +4 的总和表示向右一个完整的周期,-4 的总和表示一个完整的循环循环向左,总和为 0 表示没有移动。特别是,每个单独的开关弹跳,无论是向左还是向右,总和为 0,对结果没有影响。此外,聚合和 4 的模数为我们提供了确切的状态。例如,如果模数为零,则当前状态为中性状态。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值