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