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 核。
四、典型采集场景与配置要点
以一台采用 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 都有模式切换命令,若控制器发送的模式字与编码器不匹配,编码器会保持静默。