4. 绝对式编码器原理

绝对式编码器与增量式编码器最本质的区别在于:上电即知位置。增量式编码器输出的是 A/B/Z 脉冲,控制器必须通过计数和回零才能确定机械角度;而绝对式编码器的码盘上刻有唯一的位置编码,任何时刻读取到的码字都直接对应一个确定的机械位置,无需寻零、不怕断电丢失。理解绝对式编码器,需要从三个维度展开:位置范围(单圈/多圈)、编码方式(二进制/格雷码)和通信协议(SSI/BiSS/EnDat)。

一、单圈与多圈:位置范围的两种尺度

单圈绝对式编码器在旋转一圈(360°)内提供唯一的位置编码。例如 17 位单圈编码器,把一圈分成 217=131072 个位置,分辨率约为 360°/131072≈0.0027°。它只能回答“当前在圈内的哪个角度”,一旦转轴转过一圈,码字会回绕重复,因此无法区分第 1 圈和第 5 圈。

多圈绝对式编码器在单圈角度信息之外,再叠加一个圈数计数器,记录转轴累计转过了多少整圈。多圈位数通常为 12 位(4096 圈)或 16 位(65536 圈)。多圈计数一般由齿轮组、韦根(Wiegand)能量收集或电池供电的计数器实现。韦根方案无需电池,靠转轴旋转时磁通翻转产生脉冲供电并计数,是当前工业主流。

选型口诀:只要设备在断电后仍需要知道“转了多少圈”,就必须选多圈;若每次上电都允许重新回零,单圈即可满足。

二、二进制码与格雷码:为什么不能直接用二进制

码盘上每个位置对应一组二进制位。若直接采用自然二进制码,相邻两个位置之间可能有多位同时翻转,例如从 0111 到 1000,四位全部变化。由于各光电接收管的响应时间、安装角度存在微小差异,多位同时翻转时极易在过渡区读出错误的中间码字,产生巨大的位置跳变,这就是多比特跳变误差。

格雷码(Gray Code)的核心特性是:任意相邻两个码字之间只有 1 位发生变化。这样即使过渡区采样时刻略有偏差,读到的码字也只会在相邻两个位置之间摇摆,最大误差仅为 1 个最小分辨单位(LSB),不会出现灾难性跳变。因此绝对式编码器的码盘几乎都采用格雷码刻划,控制器读取后再通过异或运算还原为二进制。

二进制转格雷码:G = B ^ (B >> 1)
格雷码转二进制:B = G; 然后 B ^= (B >> 1) 逐次右移异或,直到移位为 0

示例(4 位):
十进制  二进制  格雷码
  0     0000    0000
  1     0001    0001
  2     0010    0011
  3     0011    0010
  4     0100    0110
  5     0101    0111
  6     0110    0101
  7     0111    0100
  8     1000    1100   ← 仅最高位变化,过渡安全

三、主流串行协议:SSI、BiSS、EnDat

绝对式编码器需要把并行码字串行发送给控制器,以减少线缆数量。不同厂商发展出多种协议,下面这张表对比了三种最典型的协议。

协议线制数据方向典型速率特点与适用
SSI时钟+数据(RS-422)单向(编码器→控制器)100 kHz~2 MHz结构简单、通用性强,仅传位置,无寄存器读写
BiSS时钟+数据(双向)双向可达 10 MHz开放协议,支持寄存器、多从站、CRC 校验,实时性好
EnDat时钟+数据(双向)双向可达 16 MHz海德汉主导,可读位置、温度、诊断、电子铭牌

SSI(Synchronous Serial Interface)是最基础的同步串行接口。控制器发出时钟脉冲,编码器在时钟下降沿(或上升沿,视型号)逐位输出数据。一帧通常包含起始位、位置数据位、可选的错误位和校验位。SSI 只支持单向传输,控制器无法向编码器写入参数,因此功能单一但极其可靠,广泛用于伺服电机换向和一般位置反馈。

BiSS(Bidirectional Synchronous Serial)是开放协议,在 SSI 的时钟/数据线基础上实现了双向通信。控制器可以在数据帧中插入寄存器地址,读取编码器内部的状态、温度、分辨率等参数,也支持多从站菊花链连接。BiSS-C 是连续模式,适合高速实时采集;BiSS 还带 CRC 校验,数据完整性优于 SSI。

EnDat 是海德汉(HEIDENHAIN)的专有协议,功能最丰富。除了位置值,还能读取电子铭牌、温度、诊断信息,并支持对编码器内部寄存器的读写。EnDat 2.2 采用纯串行双向传输,时钟频率高,适合高精度数控机床和高端伺服系统。使用 EnDat 通常需要专用的协议芯片或 FPGA IP 核。

绝对式编码器位置生成与协议传输链路 码盘刻划 单圈格雷码轨道 多圈计数轨道 相邻仅 1 位变化 光电/磁电读取 并行码字采样 格雷码→二进制 消除多比特跳变 协议编码 SSI / BiSS / EnDat 起始位+数据+CRC 串行差分输出 控制器 FPGA / 协议芯片 解码与校验 输出绝对位置 三种协议信号特征对比 SSI 时钟+数据,单向 仅位置值,无寄存器 简单可靠,通用性强 BiSS 双向,支持多从站 寄存器+CRC 校验 开放协议,实时性好 EnDat 双向,高速串行 位置+温度+诊断 功能最丰富,需专用IP

四、典型采集场景与配置要点

以一台采用 17 位单圈 + 12 位多圈、BiSS-C 接口的伺服电机为例,控制器侧 FPGA 需要配置以下参数:

# BiSS-C 采集配置示例(伪代码)
BISS_CLK_FREQ   = 5_000_000      # 5 MHz 时钟
SINGLE_TURN_BITS = 17            # 单圈位数
MULTI_TURN_BITS  = 12            # 多圈位数
CRC_POLY         = 0x43          # BiSS-C 校验多项式
FRAME_BITS       = 1 + 17 + 12 + 1 + 6   # 起始+单圈+多圈+错误+CRC

# 读取流程
1. 拉低 CDS(片选),启动一帧
2. 发送 FRAME_BITS 个时钟脉冲
3. 在时钟下降沿采样数据线
4. 拆分字段:单圈码、多圈码、错误位、CRC
5. 格雷码转二进制,拼接为绝对位置
6. 校验 CRC,失败则丢弃并重读

若使用 SSI 编码器,则流程更简单:只需发送固定数量的时钟脉冲,读取数据位并做奇偶校验即可,但无法读取编码器温度或诊断信息。若使用 EnDat 2.2,则需要先发送模式命令字,再根据返回的帧结构解析位置和附加数据。

常见误区:把多圈编码器的“圈数”误认为“圈内角度”。多圈数据只记录转过的整圈数,圈内角度仍由单圈数据提供,两者拼接时要注意位序和字节对齐,否则会出现位置跳变或溢出。

五、排障复盘:位置跳变与通信失败

在实际调试中,绝对式编码器最常见的问题有两类。第一类是位置跳变:表现为电机静止时位置值偶尔跳动几个 LSB 甚至大幅跳变。原因可能是格雷码转换错误、CRC 校验未启用、时钟频率过高导致采样错误,或线缆屏蔽不良引入干扰。排查时应先降低时钟频率,确认 CRC 是否通过,再用示波器观察数据线眼图。

第二类是通信完全失败:控制器读不到任何数据。应检查差分对 A+/A-、B+/B- 是否接反,终端电阻是否匹配(通常 120Ω),编码器供电是否正常,以及协议模式是否与编码器铭牌一致。EnDat 和 BiSS 都有模式切换命令,若控制器发送的模式字与编码器不匹配,编码器会保持静默。

核心结论:绝对式编码器的价值在于“上电即知位置”。单圈/多圈决定位置范围,格雷码保证过渡安全,SSI/BiSS/EnDat 决定通信能力与诊断深度。选型时先确定圈数需求,再根据控制器接口能力选择协议,最后核对分辨率与时钟频率是否匹配。