碼盤參考設計

非 2ⁿ 解析度絕對碼盤:360、1000 位置的迴圈格雷碼

非 2ⁿ 解析度絕對碼盤:360、1000 位置的迴圈格雷碼

要 360 或 1000 個絕對位置且首尾只變一位,可擷取反射格雷碼中間的對稱段,兩端各去 (2ⁿ − M)/2 個碼。本文推導對稱性、擷取與解碼公式,說明奇數位置數為何做不到,給出 360、1000 位置的碼道數、碼元寬、解碼錶與版圖檢查項。

分度盤、閥門執行器、十進位制顯示的儀器常要每轉 360 個(每位置 1°)或 1000 個絕對位置。格雷碼的位數決定了一圈 2ⁿ 個碼,360 和 1000 都不是 2 的冪。最直接的做法是取 9 位格雷碼的前 360 個,可是首碼 G(0) = 000000000 與末碼 G(359) = 111010100 有 5 位不同,轉過接縫時各位翻轉的先後稍有偏差,就會讀出離真實位置很遠的中間碼。本文給出讓首尾也只差一位的構造方法、解碼公式和版圖要注意的地方。

9 位反射格雷碼 512 個,去掉首尾各 76 個,保留序號 76…435;碼盤轉過 359 → 0 的接縫時只有最高位 b8 變化,紅色為每一步變化的位
圖1 9 位反射格雷碼 512 個,去掉首尾各 76 個,保留序號 76…435;碼盤轉過 359 → 0 的接縫時只有最高位 b8 變化,紅色為每一步變化的位

反射格雷碼的對稱性

n 位反射格雷碼 G(i) = i XOR (i » 1),i = 0…2ⁿ − 1。把 i 換成它的映象 i′ = 2ⁿ − 1 − i,即 i 的 n 位按位取反:

i′ = i XOR (2ⁿ − 1),i′ » 1 = (i » 1) XOR (2^(n−1) − 1)

兩式異或得

G(2ⁿ − 1 − i) = G(i) XOR 2^(n−1)

也就是說,關於中點對稱的兩個碼只差最高位。這就是“反射”一詞的來源:低 n − 1 位在後半段是前半段的映象,最高位從 0 變成 1。

擷取條件與解碼

要得到 M 個位置的迴圈碼,保留中間序號 i = s … 2ⁿ − 1 − s,兩端各去掉

s = (2ⁿ − M) / 2

個碼。段首 G(s) 與段尾 G(2ⁿ − 1 − s) 正好是一對映象,只差最高位,首尾閉合處也滿足相鄰只變一位;段內本來就逐個只變一位。位數取 n = ⌈log₂M⌉,s 必須是整數,所以 M 必須是偶數。

解碼分兩步:先把格雷碼轉成二進位制,b(n−1) = g(n−1),b(k) = b(k+1) XOR g(k);再減去偏移 p = B − s。若 B < s 或 B > 2ⁿ − 1 − s,讀到的是被截掉的碼,可以直接判為讀碼錯誤。機械零位如需另定,再加一個常數取模 M 即可。

對稱擷取並非僅有的一種截法。我們對 9 位碼逐個起點搜尋,長度 360 且首尾只差一位的連續段有 4 個,起點為 76、204、332、460,後三個都跨過 511 → 0 的接縫,解碼要多一次取模。對稱段的二進位制值連續,解碼只需一次減法,最方便。

奇數位置數為什麼做不到

把 n 位碼看成 n 維立方體的頂點,“只變一位”就是沿一條稜走一步,每走一步碼字中 1 的個數的奇偶性翻轉一次。走一圈回到起點,奇偶性必須復原,所以步數,也就是位置數 M,必須是偶數。這個結論與構造方法無關,任何每步只變一位的迴圈碼都做不到奇數個位置。

需要奇數個位置(例如 125)時有兩種出路:一是做 2M 個位置的迴圈碼,輸出時除以 2,125 位置用 8 位碼的 250 段,s = 3;二是允許接縫處一次變兩位,靠與增量道同步來保證讀數,這要額外分析接縫處的讀數容差。

360 與 1000 位置的引數

專案360 位置1000 位置
碼道數 n910
偏移 s7612
保留序號76…43512…1011
每位置角度1°0.36°(21.6′)
示例最低位半徑15 mm18 mm
碼元弧長 2πr/M261.8 μm113.1 μm
最細條寬(2 個碼元)523.6 μm226.2 μm
首碼 / 尾碼001101010 / 1011010100000001010 / 1000001010
無效碼佔比152/512 = 29.7%24/1024 = 2.3%

360 位置的解碼錶(節選):

位置 p序號 i碼字 b8…b0二進位制 BB − 76
076001101010760
177001101011771
179255010000000255179
180256110000000256180
359435101101010435359

碼道圖形見圖2。擷取後每道的跳變數相應減少:360 位置時 b0 為 180 次,b1 為 90 次,b8 仍是半圈明、半圈暗。

360 位置擷取格雷碼的 9 條碼道展開圖:左為整圈,右為接縫附近放大,只有 b8 在接縫處變化,b4 跨接縫的透光段只有 8 個位置寬
圖2 360 位置擷取格雷碼的 9 條碼道展開圖:左為整圈,右為接縫附近放大,只有 b8 在接縫處變化,b4 跨接縫的透光段只有 8 個位置寬

版圖要注意的兩處

**接縫處的非常規條寬。**擷取後,每道跨接縫的那一段由段首和段尾兩截拼成,寬度不再是該道的常規值。360 位置時 b4 的常規條寬為 32 個位置,跨接縫的透光段只有 8 個位置;b6、b7 也出現 232、104 個位置的非常規段。最細線寬仍由 b0 的 2 個碼元決定,不影響可製造性,但版圖核對和 AOI 規則不能按“每道條寬固定”來寫,要按整圈逐位置比對碼錶。

**無效碼的檢錯能力有限。**被截掉的碼不會在正常讀數中出現,讀到即可報錯。但單個位讀錯時,360 位置只有約 9.9% 的情況會落進無效碼,1000 位置只有約 1.4%;最高位讀錯則正好變成映象碼,永遠是合法碼,檢不出來。需要讀碼診斷時仍要另加校驗手段。

工程要點

  • 擷取公式:n = ⌈log₂M⌉,s = (2ⁿ − M)/2,保留 i = s…2ⁿ − 1 − s;360 位置 s = 76,1000 位置 s = 12。
  • 解碼只需格雷轉二進位制後減 s;二進位制值落在 s…2ⁿ − 1 − s 之外即判為讀碼錯誤。
  • 不要直接取前 M 個碼:360 位置時首尾相差 5 位,接縫處可能讀出遠離真實位置的碼。
  • 奇數位置數沒有單步迴圈碼,需改做 2M 位置再除以 2,或在接縫處與增量道同步。
  • 版圖按整圈碼錶逐位置核對,不按“每道固定條寬”檢查:360 位置的 b4 在接縫處有一段只有 8 個位置寬。
  • 截掉的碼只能兜住約 10% 以下的單個位錯誤,且最高位錯誤永遠檢不出,診斷要另加措施。

小結

反射格雷碼關於中點對稱的兩個碼只差最高位,擷取中間的對稱段就能得到任意偶數個位置的迴圈格雷碼,解碼只多一次減法。奇數個位置受奇偶性限制無法實現單步迴圈。360、1000 位置分別需要 9、10 條碼道,版圖上要特別核對接縫處的非常規條寬。

延伸閱讀:ENC7 編碼器碼盤生產廠家(中文首頁) · 碼盤技術文庫


關於我們:晶正光電專注編碼器碼盤研發製造,玻璃、金屬、PC 碼盤均可按圖客製。

官網:https://enc7.com

© 廊坊晶正光電技術有限公司 版權所有,未經書面許可不得轉載、摘編。本文藉助 AI 輔助創作。

Have a drawing? Get an engineer's review.

Send your outer diameter, bore, line count or bit count, substrate and readhead wavelength. Our engineers check manufacturability and reply with a quotation and sample lead time.

WhatsApp