首页 - 关于我们 - 新闻活动 - 编码器基础~格雷码的编码美学

编码器基础~格雷码的编码美学

2020-4-8新闻

编码器是一种测量角度(或直线长度)的传感器,它将需要测量的角度(或直线长度)预先在传感器内部编码,并以数字编码的方式向外发送传感器测量的数据。其中,格雷码就是其最常用的编码方式。

   一   

格雷码(Gray Code)因1953年公开的弗兰克.格雷的专利而得名。格雷码是二进制循环码,其编码最大的特点是任意上下相邻的两个码值间,只有一位码不同,这样在码值上下变化过程中,每次只改变一位码,从而传输、读数的错码率最小。格雷码还是循环码,其最大码到最小码同样遵循只改变一位码的编码原则,因而形成循环码。

每次只变一位的唯一性、循环性、图案化编码对称性是格雷码的编码原则,它的图案化编码形式犹如小孩子搭积木来搭建金字塔般简单,而又优美。

以下是以4位代码为例,对比格雷码与纯二进制码:

image.png


image.png

image.png


   二   

格雷码这样图案化编码的好处:

1,同步性多位数读码容错宽度最大,由于格雷码两个相邻码值变化时每次只变一位,那么在多码道位数同时读取(例如光学码盘)、输出(例如多芯电缆的并行输出)、以及后续设备的多位数的接收,在数值增加或减少时,编码与同步读取的误差最小。多位数的数据刷新是不可能做到完全同步的(由于物理位置精度的原因,以及时间精度瞬间有先后),格雷码因只有一位的变化,而可以“从容”分辨出这仅一位的变化,其余的没有改变,没有同步性偏差。而如果是纯二进制码,有多个数据改变了,这些刷新改变的数据读取会有同步性上的先后,就有可能有些已经读到刷新后的数据,有些还没有读到刷新后的数据,这样就会乱码,例如表1内的7到8,纯二进制有多个位0和1发生改变,如果有一位还停留在刷新前的,如第二位,那么读到的就不是8(1000),而是10(1010)了。而格雷码由于每次只改变一位,因为就只有一位在刷新,就不存在刷新先后的问题,也就不会发生错码了。

2,制作时容错宽度最大,格雷码编码的刻线宽度大,一条刻线容下了两个码值,一个刻线周期容下了4个码值。例如上图一个5位格雷码32个分辨位置,最密的刻线码道仅需8个刻线,宽度比纯二进制码宽一倍。同时,由于相邻两个格雷码只有一位的变化,刻线位置的误差宽度可达±1/2码而不会发生错码。这对于码盘的加工以及读取传感器的安装精度要求大大放宽,便于制作出在同样尺寸下更高分辨率的编码器。

3,编码与刻线有规律的图案化排列。格雷码以搭宝塔积木似的编码刻线,对于码盘设计极为的方便,也便于布排各个码道的传感器读取头。

4,循环码,便于多周期的旋转循环而不会发生错码。格雷码的最高两位是特别的,在一个循环周期里面,最高两位的刻线宽度是一样的,而位置错开了1/4周期,格雷码最高位的变化是在整个格雷码编码测量周期的中点和起始点。也就是在周期的1/2(180度相位)时,仅有最高位的码值从0到1,而在周期的终点循环到起始点,也仅有最高位的码值从1到0,其间的变化不会发生错码。

5,增量型编码器的AB相编码,也就是利用了格雷码最高2位为循环编码不易错码,并上述各项格雷码与刻线的优点。这样的编码可以分辨出进位与退位(编码器旋转的正转于反转),可以每个周期的2位格雷码编码的4个位置(四倍频),可以有刻线与读取的最大限度的容错。


例如一个光学增量型编码器,通过传感器内的光学码盘,分割有很多个分割刻线,通过度取刻线通与暗的规律,输出每圈的脉冲数(PPR)对一个360度圆周分割,也称为分辨率。每个脉冲周期的变化代表了一定角度变化,这样预先分割角度到每个周期并读取计数周期变化的方式为“增量编码”,增量编码器输出一般是A、B、Z三相信号,A和B的编码按格雷码一个周期内循环码最高2位的位置编排,输出相差1/4个周期的A和B,正转(进位)是1/4相差,而反转(退位)是3/4相差,以此可以判断编码器的正反转;另外一个信号Z相是每圈仅提供一个位置脉冲,以此可以设定零位值。

image.png

6,绝对值编码器的N位数编码,也就是利用了格雷码多码道同步读取时错码率最小,以及便于码盘设计、刻线以及传感器安装的宽容度最大。并行信号输出的格雷码,也便于后续设备读取变化时错码率最低。用格雷码制作绝对值码盘,物理制作最简单经济,同时又达到最大的宽容度容错性。

image.png

绝对值编码的编码器内部码盘已对应有整个测量行程预先有N位的大数据编码,在整个规定的测量行程中每一个位置都是唯一性的编码,与时间轴无关,任何时间读取或者不读取都可以根据数据下游指令,可直接一次输出与时间轴无关的编码大数据。在360度以内的唯一编码的为单圈绝对值编码器,超出360度有更多圈数量程的唯一编码的为绝对值多圈编码器。(下一篇我们专门继续介绍绝对值编码器)

image.png


   三   

image.png

解码过程:以“0”和格雷码的最高位以上表方法比较,结果保留在(纯二进制码)最高位,再以此结果与格雷码的第二高位比较,结果保留在(纯二进制码)第二高位;再以刚得到的值与第三高位比较,结果保留在(纯二进制码)第三高位;。。。。。。以此类推,直到最低位。

例如自然数14,格雷码为1001,向纯二进制码解码,最高位比较值(0与1)结果为1,第二高位比较(1与0),结果为1;第三高位比较(1与0),结果为1;最低位比较(1与1),结果为0,得到纯二进制代码1110。

格雷码的读取:由于格雷码是循环码,在读码时要确认多少位,一次完整地从高位向低位读取,而不能因为只改变低位,就仅仅只读低位而不读高位。

格雷码有规律的积木式编码方式,可以节省位数的解码。编码器在快速旋转中当需要快速读取码值而放弃了高分辨率的最后几位,仅读取高位,可大胆放弃最后几位的格雷码向二进制码的解码----格雷码的解码是从高位开始的,例如原先一个13位的格雷码编码,当放弃最后最后3位后可以成为一个10位的格雷码编码。

   四   


故事:国王的红酒,简单图案化的格雷码编码

故事里在中世纪欧洲某个小国的国王要宴请宾客,准备了1000瓶红酒,宴请请帖也广而发之,但是在宴请的前一天得到绝密情报,在这1000瓶红酒里面混入了一瓶毒酒,而且确认只有一瓶毒酒,据已被抓住的下毒者交代,这瓶毒酒在颜色与口味上无法和其他红酒分开,尝一口就会致命,而且喝下后不会立刻发作,而是大约要大半天时间发作而亡,以达到掩人耳目不易被察觉那瓶是毒酒。此时离国王宴请只有一天时间了,国王既来不及取消宴请,也不能将这个毒酒的消息透漏出去怕引起宾客混乱,怎么办呢?此时有个大臣建议用监狱里面的死囚来尝试这个红酒,可是监狱里面的死囚数量有限,究竟需要多少个死囚来可以试出这个1000瓶红酒里面的毒酒呢?


让我们一起来学习体会格雷码图案化的简单编码,来破解这个毒酒难题:

1,  将1000瓶红酒都以格雷码编号,需要用10位格雷码,每瓶酒做十次(10位)记号编码,由于格雷码是简单图案化的编码,稍作学习小学生都会,最初是每隔两瓶做一个记号,然后第二次是每隔4瓶做一个记号,再依次类推(格雷码从低位到高位的简单编码),做十次标记(10位格雷码),总共可有1024个不同的各自唯一性的编码,覆盖这1000瓶红酒,使每瓶酒都有了唯一性的格雷码。例如,假设那瓶毒酒的格雷码编号是00,,101,,0;

2,  找十个死囚犯,从低位到高位编号,轮到各自位数有记号的逢1便尝酒。如果有囚犯中毒,即可根据格雷码的编排图案化规律而找到了那瓶毒酒。

3,  半天后,有可能有死囚会死去,那样就有了毒酒的格雷码编码数。究竟有多少个死囚会被毒死?那要看这个毒酒的编号里有几个“1”,也就是“尝”到的有几个囚犯。根据几个死囚死去的位置编号,就能找到那瓶毒酒。

这是我编的一个故事,各位记住格雷码了吗?当然,你就不用试毒酒就可以记住它的编码图案规律了。




~~~~~~~~~~~~~~~~~~~


   每次只改变一位,带来最经济的物理制作、读取与解码,最大的容错性,格雷码是如此简单而又优美,搭建起编码器数学编码的基础。