码盘参考设计

非 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