編碼器基礎(chǔ)~格雷碼的編碼美學(xué)
2020-4-8新聞
編碼器是一種測(cè)量角度(或直線(xiàn)長(zhǎng)度)的傳感器,它將需要測(cè)量的角度(或直線(xiàn)長(zhǎng)度)預(yù)先在傳感器內(nèi)部編碼,并以數(shù)字編碼的方式向外發(fā)送傳感器測(cè)量的數(shù)據(jù)。其中,格雷碼就是其最常用的編碼方式。
一
格雷碼(Gray Code)因1953年公開(kāi)的弗蘭克.格雷的專(zhuān)利而得名。格雷碼是二進(jìn)制循環(huán)碼,其編碼最大的特點(diǎn)是任意上下相鄰的兩個(gè)碼值間,只有一位碼不同,這樣在碼值上下變化過(guò)程中,每次只改變一位碼,從而傳輸、讀數(shù)的錯(cuò)碼率最小。格雷碼還是循環(huán)碼,其最大碼到最小碼同樣遵循只改變一位碼的編碼原則,因而形成循環(huán)碼。
每次只變一位的唯一性、循環(huán)性、圖案化編碼對(duì)稱(chēng)性是格雷碼的編碼原則,它的圖案化編碼形式猶如小孩子搭積木來(lái)搭建金字塔般簡(jiǎn)單,而又優(yōu)美。
以下是以4位代碼為例,對(duì)比格雷碼與純二進(jìn)制碼:
二
格雷碼這樣圖案化編碼的好處:
1,同步性多位數(shù)讀碼容錯(cuò)寬度最大,由于格雷碼兩個(gè)相鄰碼值變化時(shí)每次只變一位,那么在多碼道位數(shù)同時(shí)讀?。ɡ绻鈱W(xué)碼盤(pán))、輸出(例如多芯電纜的并行輸出)、以及后續(xù)設(shè)備的多位數(shù)的接收,在數(shù)值增加或減少時(shí),編碼與同步讀取的誤差最小。多位數(shù)的數(shù)據(jù)刷新是不可能做到完全同步的(由于物理位置精度的原因,以及時(shí)間精度瞬間有先后),格雷碼因只有一位的變化,而可以“從容”分辨出這僅一位的變化,其余的沒(méi)有改變,沒(méi)有同步性偏差。而如果是純二進(jìn)制碼,有多個(gè)數(shù)據(jù)改變了,這些刷新改變的數(shù)據(jù)讀取會(huì)有同步性上的先后,就有可能有些已經(jīng)讀到刷新后的數(shù)據(jù),有些還沒(méi)有讀到刷新后的數(shù)據(jù),這樣就會(huì)亂碼,例如表1內(nèi)的7到8,純二進(jìn)制有多個(gè)位0和1發(fā)生改變,如果有一位還停留在刷新前的,如第二位,那么讀到的就不是8(1000),而是10(1010)了。而格雷碼由于每次只改變一位,因?yàn)榫椭挥幸晃辉谒⑿拢筒淮嬖谒⑿孪群蟮膯?wèn)題,也就不會(huì)發(fā)生錯(cuò)碼了。
2,制作時(shí)容錯(cuò)寬度最大,格雷碼編碼的刻線(xiàn)寬度大,一條刻線(xiàn)容下了兩個(gè)碼值,一個(gè)刻線(xiàn)周期容下了4個(gè)碼值。例如上圖一個(gè)5位格雷碼32個(gè)分辨位置,最密的刻線(xiàn)碼道僅需8個(gè)刻線(xiàn),寬度比純二進(jìn)制碼寬一倍。同時(shí),由于相鄰兩個(gè)格雷碼只有一位的變化,刻線(xiàn)位置的誤差寬度可達(dá)±1/2碼而不會(huì)發(fā)生錯(cuò)碼。這對(duì)于碼盤(pán)的加工以及讀取傳感器的安裝精度要求大大放寬,便于制作出在同樣尺寸下更高分辨率的編碼器。
3,編碼與刻線(xiàn)有規(guī)律的圖案化排列。格雷碼以搭寶塔積木似的編碼刻線(xiàn),對(duì)于碼盤(pán)設(shè)計(jì)極為的方便,也便于布排各個(gè)碼道的傳感器讀取頭。
4,循環(huán)碼,便于多周期的旋轉(zhuǎn)循環(huán)而不會(huì)發(fā)生錯(cuò)碼。格雷碼的最高兩位是特別的,在一個(gè)循環(huán)周期里面,最高兩位的刻線(xiàn)寬度是一樣的,而位置錯(cuò)開(kāi)了1/4周期,格雷碼最高位的變化是在整個(gè)格雷碼編碼測(cè)量周期的中點(diǎn)和起始點(diǎn)。也就是在周期的1/2(180度相位)時(shí),僅有最高位的碼值從0到1,而在周期的終點(diǎn)循環(huán)到起始點(diǎn),也僅有最高位的碼值從1到0,其間的變化不會(huì)發(fā)生錯(cuò)碼。
5,增量型編碼器的AB相編碼,也就是利用了格雷碼最高2位為循環(huán)編碼不易錯(cuò)碼,并上述各項(xiàng)格雷碼與刻線(xiàn)的優(yōu)點(diǎn)。這樣的編碼可以分辨出進(jìn)位與退位(編碼器旋轉(zhuǎn)的正轉(zhuǎn)于反轉(zhuǎn)),可以每個(gè)周期的2位格雷碼編碼的4個(gè)位置(四倍頻),可以有刻線(xiàn)與讀取的最大限度的容錯(cuò)。
例如一個(gè)光學(xué)增量型編碼器,通過(guò)傳感器內(nèi)的光學(xué)碼盤(pán),分割有很多個(gè)分割刻線(xiàn),通過(guò)度取刻線(xiàn)通與暗的規(guī)律,輸出每圈的脈沖數(shù)(PPR)對(duì)一個(gè)360度圓周分割,也稱(chēng)為分辨率。每個(gè)脈沖周期的變化代表了一定角度變化,這樣預(yù)先分割角度到每個(gè)周期并讀取計(jì)數(shù)周期變化的方式為“增量編碼”,增量編碼器輸出一般是A、B、Z三相信號(hào),A和B的編碼按格雷碼一個(gè)周期內(nèi)循環(huán)碼最高2位的位置編排,輸出相差1/4個(gè)周期的A和B,正轉(zhuǎn)(進(jìn)位)是1/4相差,而反轉(zhuǎn)(退位)是3/4相差,以此可以判斷編碼器的正反轉(zhuǎn);另外一個(gè)信號(hào)Z相是每圈僅提供一個(gè)位置脈沖,以此可以設(shè)定零位值。
6,絕對(duì)值編碼器的N位數(shù)編碼,也就是利用了格雷碼多碼道同步讀取時(shí)錯(cuò)碼率最小,以及便于碼盤(pán)設(shè)計(jì)、刻線(xiàn)以及傳感器安裝的寬容度最大。并行信號(hào)輸出的格雷碼,也便于后續(xù)設(shè)備讀取變化時(shí)錯(cuò)碼率最低。用格雷碼制作絕對(duì)值碼盤(pán),物理制作最簡(jiǎn)單經(jīng)濟(jì),同時(shí)又達(dá)到最大的寬容度容錯(cuò)性。
絕對(duì)值編碼的編碼器內(nèi)部碼盤(pán)已對(duì)應(yīng)有整個(gè)測(cè)量行程預(yù)先有N位的大數(shù)據(jù)編碼,在整個(gè)規(guī)定的測(cè)量行程中每一個(gè)位置都是唯一性的編碼,與時(shí)間軸無(wú)關(guān),任何時(shí)間讀取或者不讀取都可以根據(jù)數(shù)據(jù)下游指令,可直接一次輸出與時(shí)間軸無(wú)關(guān)的編碼大數(shù)據(jù)。在360度以?xún)?nèi)的唯一編碼的為單圈絕對(duì)值編碼器,超出360度有更多圈數(shù)量程的唯一編碼的為絕對(duì)值多圈編碼器。(下一篇我們專(zhuān)門(mén)繼續(xù)介紹絕對(duì)值編碼器)
三
解碼過(guò)程:以“0”和格雷碼的最高位以上表方法比較,結(jié)果保留在(純二進(jìn)制碼)最高位,再以此結(jié)果與格雷碼的第二高位比較,結(jié)果保留在(純二進(jìn)制碼)第二高位;再以剛得到的值與第三高位比較,結(jié)果保留在(純二進(jìn)制碼)第三高位;。。。。。。以此類(lèi)推,直到最低位。
例如自然數(shù)14,格雷碼為1001,向純二進(jìn)制碼解碼,最高位比較值(0與1)結(jié)果為1,第二高位比較(1與0),結(jié)果為1;第三高位比較(1與0),結(jié)果為1;最低位比較(1與1),結(jié)果為0,得到純二進(jìn)制代碼1110。
格雷碼的讀取:由于格雷碼是循環(huán)碼,在讀碼時(shí)要確認(rèn)多少位,一次完整地從高位向低位讀取,而不能因?yàn)橹桓淖兊臀?,就僅僅只讀低位而不讀高位。
格雷碼有規(guī)律的積木式編碼方式,可以節(jié)省位數(shù)的解碼。編碼器在快速旋轉(zhuǎn)中當(dāng)需要快速讀取碼值而放棄了高分辨率的最后幾位,僅讀取高位,可大膽放棄最后幾位的格雷碼向二進(jìn)制碼的解碼----格雷碼的解碼是從高位開(kāi)始的,例如原先一個(gè)13位的格雷碼編碼,當(dāng)放棄最后最后3位后可以成為一個(gè)10位的格雷碼編碼。
四
故事:國(guó)王的紅酒,簡(jiǎn)單圖案化的格雷碼編碼
故事里在中世紀(jì)歐洲某個(gè)小國(guó)的國(guó)王要宴請(qǐng)賓客,準(zhǔn)備了1000瓶紅酒,宴請(qǐng)請(qǐng)?zhí)矎V而發(fā)之,但是在宴請(qǐng)的前一天得到絕密情報(bào),在這1000瓶紅酒里面混入了一瓶毒酒,而且確認(rèn)只有一瓶毒酒,據(jù)已被抓住的下毒者交代,這瓶毒酒在顏色與口味上無(wú)法和其他紅酒分開(kāi),嘗一口就會(huì)致命,而且喝下后不會(huì)立刻發(fā)作,而是大約要大半天時(shí)間發(fā)作而亡,以達(dá)到掩人耳目不易被察覺(jué)那瓶是毒酒。此時(shí)離國(guó)王宴請(qǐng)只有一天時(shí)間了,國(guó)王既來(lái)不及取消宴請(qǐng),也不能將這個(gè)毒酒的消息透漏出去怕引起賓客混亂,怎么辦呢?此時(shí)有個(gè)大臣建議用監(jiān)獄里面的死囚來(lái)嘗試這個(gè)紅酒,可是監(jiān)獄里面的死囚數(shù)量有限,究竟需要多少個(gè)死囚來(lái)可以試出這個(gè)1000瓶紅酒里面的毒酒呢?
讓我們一起來(lái)學(xué)習(xí)體會(huì)格雷碼圖案化的簡(jiǎn)單編碼,來(lái)破解這個(gè)毒酒難題:
1, 將1000瓶紅酒都以格雷碼編號(hào),需要用10位格雷碼,每瓶酒做十次(10位)記號(hào)編碼,由于格雷碼是簡(jiǎn)單圖案化的編碼,稍作學(xué)習(xí)小學(xué)生都會(huì),最初是每隔兩瓶做一個(gè)記號(hào),然后第二次是每隔4瓶做一個(gè)記號(hào),再依次類(lèi)推(格雷碼從低位到高位的簡(jiǎn)單編碼),做十次標(biāo)記(10位格雷碼),總共可有1024個(gè)不同的各自唯一性的編碼,覆蓋這1000瓶紅酒,使每瓶酒都有了唯一性的格雷碼。例如,假設(shè)那瓶毒酒的格雷碼編號(hào)是00,,101,,0;
2, 找十個(gè)死囚犯,從低位到高位編號(hào),輪到各自位數(shù)有記號(hào)的逢1便嘗酒。如果有囚犯中毒,即可根據(jù)格雷碼的編排圖案化規(guī)律而找到了那瓶毒酒。
3, 半天后,有可能有死囚會(huì)死去,那樣就有了毒酒的格雷碼編碼數(shù)。究竟有多少個(gè)死囚會(huì)被毒死?那要看這個(gè)毒酒的編號(hào)里有幾個(gè)“1”,也就是“嘗”到的有幾個(gè)囚犯。根據(jù)幾個(gè)死囚死去的位置編號(hào),就能找到那瓶毒酒。
這是我編的一個(gè)故事,各位記住格雷碼了嗎?當(dāng)然,你就不用試毒酒就可以記住它的編碼圖案規(guī)律了。
~~~~~~~~~~~~~~~~~~~
每次只改變一位,帶來(lái)最經(jīng)濟(jì)的物理制作、讀取與解碼,最大的容錯(cuò)性,格雷碼是如此簡(jiǎn)單而又優(yōu)美,搭建起編碼器數(shù)學(xué)編碼的基礎(chǔ)。