二进制数学和绝对编码器

绝对编码器虽然必要且有用,但如果用户不理解其工作和功能的数学原理,则可能会带来一些挑战。

通过杰夫·蒙福顿,Maverick科技公司 2016年7月12日

编码器在自动化控制中有许多应用。目的不胜枚举。然而,有一种编码器的使用确实给那些不熟悉其工作原理的人带来了一些挑战:绝对编码器。

绝对编码器提供了反映旋转角度的唯一数字,通常耦合到轴上。这些编码器的特点通常是它们的分辨率,反映在每转的增量数,以及输出的类型,二进制或灰码。分辨率很重要,因为这反映了轴的完整旋转被切割成的切片数;例如16(4位)、256(8位)、4096(12位)等。编码的类型与传感器的配置方式有关,我们目前不会讨论这方面的内容。只要说最终结果只是监控编码器的控制器中的一个数字就足够了。

出于本例的目的,我们将假设分辨率为8位。这主要是为了保持数字和位模式易于管理。

如果编码器从来没有进行过一次完整的旋转,就没有必要走得更远。然而,这种情况几乎从未发生过。因此,我们必须考虑如何确定已经经历的旋转量,或者根据所需的旋转确定最终的编码器值。编码器将“翻转”的事实可能会给那些不熟悉二进制数学的人带来一些担忧,这导致编写复杂的代码来解决这个问题。好消息是,这种情况不需要发生;这就是二进制算术可以介入并挽救局面的地方。

对于所讨论的编码器,返回值的范围将从0到255(8位)。假定该单元所连接的控制器类型支持其十进制数和2的补码数值处理的各种位分辨率。我们还将假设“向前”旋转;后面会提到相反的情况。现在舞台已经准备好了,让我们来看看这些数字。

对于第一个例子,让我们假设初始值/读数为192,新值为225。这很简单(假设它没有完全改变),很容易用减法处理。225 - 192 = 33。

下一个例子有点复杂。在这种情况下,编码器已经翻转。

根据控制器的类型,二进制表示中可能有超过16位;但是操作是一样的。

在这些情况下,将应用逻辑,试图确定是否有滚转,并随后用一些进一步的数学进行补偿。虽然额外的数学计算无法避免,但额外的逻辑可以避免。逻辑与指令的使用产生了预期的结果。由于这是一个8位编码器,我们只需要对十进制数255(二进制11111111)执行一个布尔与运算。

在这种情况下,编码器前进了101个单位。

这样做的优雅之处在于,该原则在另一个方向上也适用。在这种情况下,如果我们想前进一个特定的数字(这是一个加法操作),我们想看看新的读数会是什么。

通过不断地将此属性应用于方程,无论是通过加减,都允许开发一致的代码,而不需要应用额外的分支逻辑,以保持代码尽可能简洁。在乘法的情况下,可以迭代地应用此步骤。

此时应该很明显,无论编码器在哪个旋转方向上与轴耦合,唯一需要考虑的是给定操作(确定旋转量或计算新位置)是否应用加法或减法。这种方法适用于任何二进制一致编码器,这意味着值在位边界上是均匀可除的。诸如0到355(用于度)之类的值将不会以相同的方式工作。

绝对编码器不仅可以确保完全的角度再现性,而且所需的操作简单直接。我们只需要记住这个简单的数学原理。

本文由Jeff Monforton撰写。杰夫是高级工程师和顾问特立独行的技术是一家领先的自动化解决方案提供商,为流程工业提供工业自动化、战略制造和企业集成服务。Maverick提供广泛领域的专业知识和咨询,包括工业自动化控制、分布式控制系统、制造执行系统、运营战略、业务流程优化等。

Maverick科技是一家2016年12月7日会员。