我已经阅读了格雷码,但实际上我不明白它比二进制码有什么优势。
一些绝对编码器制造商提供这两种类型,因此必须在购买前做出决定。例如,我需要测量一个非常缓慢旋转的杆和许多固定的旋转角度。格雷码输出在什么情况下或应用中有优势?
我已经阅读了格雷码,但实际上我不明白它比二进制码有什么优势。
一些绝对编码器制造商提供这两种类型,因此必须在购买前做出决定。例如,我需要测量一个非常缓慢旋转的杆和许多固定的旋转角度。格雷码输出在什么情况下或应用中有优势?
想象一下,编码器是一个 12 位编码器,位于 0x7FF 和 0x800 之间的中间转换。如果编码器的内部工作由带有 12 个独立光电二极管的码盘之类的东西组成,那么所有 12 位都必须立即更改,以实现微不足道的移动。由于存在机械公差,因此某些钻头会先于其他钻头发生变化,并且在该特定角度会有很多混乱。同样的问题存在于一次改变不止一个位的每个其他位置。
使用格雷码作为码盘可以完全消除这个问题,前提是容差不超过 LSB 的一小部分,因为一次只有一位变化,最坏的情况是,您可以忽略不计的运动会导致等于分辨率的变化编码器。
现代高分辨率编码器可以使用其他方法(例如非常快速的相机读取编码条)并正确进行采样,以便您始终获得有意义的结果。
在格雷码中,两个相邻值之间的转换只改变一位。这对于任何类型的机械或光学编码器来说都是一个巨大的优势,因为您几乎不可能在所有情况下同时使两个或多个位改变状态。
如果您要通过例如在寄存器中捕获数据来对数据进行采样,这将变得更加重要。数据可能会在您为寄存器计时的同时发生变化,从而导致正在变化的位出现亚稳态。在格雷码中,由于一次只有一位在变化,因此模糊度在两个相邻值之间,并且绝对误差限制在 ±1 计数。
从灰色转换为二进制很容易,如果编码器提供二进制输出,很可能他们只是在为您进行转换。
您提到您看到该值波动 1。我们现在假设这是由于测量中的物理限制。
对于二进制代码,在某些情况下您可能会不走运。假设您几乎完全停止在值 15 和 16 之间的转换(二进制,01111 和 10000)。所以它在两个值之间切换。但是,由于多种原因(机械/光学/电气),这些位不能完全同时切换。它们切换的时间可以非常接近,但有时下一个电路会得到一个值,每个值中只有一些位。这就像为每个位随机选择一个位值。例如,它可以读取 01001 或值 9。这甚至不接近所需的值 15 或 16。
另一方面,使用格雷码,只有一位会在 15 和 16 之间变化。我不知道它们会是什么,但为了举例,将两个格雷码值设为 01011 (15)和 11011 (16)。现在,对于每个位,在两个选项之间随机选择,您将看到唯一的可能性是两个所需的值。
如上所述,格雷码一次只允许一个位(可能是也可能不是 LSb)改变。这可以防止多个位同时变化的值故障;尤其是组合逻辑。多年前,当我开始设计比我们可用的 CPU 更快的运动控制和传感系统时,这一点非常重要。许多算法都是在具有离散逻辑的硬件中实现的,如果幸运的话,还有 PLA(PAL、GAL、原始 FPGA 或 FPLA)。另一个优点是串扰和线路噪声大大降低。
总是有可能发生抖动。如果编码器恰好在两个稳定点之间的过渡边缘停止,单个位很可能会在 0 和 1 之间反弹。原因可能很简单,例如运行中的电机产生的振动,该电机执行的功能无关紧要。用编码器做。编码器的分辨率越高,这种情况发生的可能性就越大。这只是野兽的本性。一个很好的例子是使用 10 位编码器的每转 200 步的步进电机。电机步进和编码器步进永远不会完全对齐。