4、绝对式编码器原理:SSI/BiSS协议简介、多圈与单圈、绝对位置读取

聊完增量式编码器,咱们得聊聊绝对式了。

说实话,我刚开始做电机控制那会儿,觉得增量式挺好用的,便宜又简单。直到有一次,设备断电重启,电机位置全丢了,机械臂直接撞了限位。嗯,从那以后,但凡有点预算的项目,我绝对优先考虑绝对式编码器。

绝对式编码器,说白了就是「一上电就知道自己在哪」。不需要找零位,不需要回参考点。这背后靠的是它的编码原理——每个位置都有唯一的二进制码。

4.1 单圈与多圈:位置信息的维度

先搞清楚一个基本概念:单圈和多圈。

  • 单圈绝对式:只能记录一圈之内的绝对位置。比如一圈 4096 个位置,断电再上电,位置还在。但如果你转了好几圈,它就不记得了。
  • 多圈绝对式:不仅能记录圈内位置,还能记录转了多少圈。一般用齿轮组或者磁传感器来累计圈数。

我个人的习惯是:如果电机只做有限角度运动(比如 360° 以内),单圈就够了。但如果是多圈旋转的关节或者丝杠,必须上多圈。否则断电后手动转了几圈,再上电位置就乱了。

类型 记录范围 典型位数 适用场景
单圈绝对式 0 ~ 360° 12 ~ 18 bit 有限角度、关节、阀门
多圈绝对式 多圈 + 圈内位置 单圈 12~18 bit + 圈数 12~16 bit 多圈旋转、丝杠、机器人关节
小提示:多圈编码器的圈数是有上限的。比如 12 位圈数,最多记录 4096 圈。超过这个圈数,圈数计数器会溢出。选型时一定要算好最大行程。

4.2 SSI 协议:同步串行接口

SSI(Synchronous Serial Interface)是最常见的绝对式编码器通信协议之一。它简单、可靠,抗干扰能力强。

SSI 的通信方式是这样的:

  • 主设备(控制器)提供时钟信号。
  • 从设备(编码器)在时钟的每个上升沿或下降沿输出一位数据。
  • 数据格式一般是:先高位后低位,最后可能带校验位。

我记得第一次调 SSI 的时候,被时序折腾得够呛。时钟频率、数据建立时间、保持时间,稍微不对就读出来一堆乱码。后来我总结了一个经验:时钟频率别太高。很多编码器标称能跑 1 MHz,但实际线缆长了、干扰大了,跑 500 kHz 反而更稳。

SSI 的典型时序如下:

时钟:  ████░░░░████░░░░████░░░░████
数据:  ░░░░████░░░░████░░░░████░░░░
       ↑  MSB  ↑       ↑  LSB  ↑
       时钟上升沿采样数据

SSI 的优点是:

  • 硬件简单,只需要 3~4 根线(时钟+数据+电源+地)。
  • 差分传输(RS-422),抗干扰好。
  • 协议透明,没有复杂的帧结构。

缺点也很明显:

  • 单向通信,主设备只能读,不能写。
  • 没有地址概念,一条总线只能挂一个编码器。
  • 数据长度固定,灵活性差。

4.3 BiSS 协议:更灵活的替代方案

BiSS(Bidirectional Synchronous Serial Interface)可以看作是 SSI 的升级版。它保留了 SSI 的同步串行特性,但增加了双向通信能力。

BiSS 协议的特点:

  • 双向通信:不仅能读位置,还能写参数(比如设置零点、修改分辨率)。
  • 数据长度可变:可以根据需要配置数据帧长度。
  • 支持多从机:一条总线可以挂多个编码器,通过片选信号区分。
  • 更高的传输速率:理论上可以跑到 10 MHz 以上。

我在一个协作机器人项目里用过 BiSS 协议。当时需要同时读取 6 个关节的位置,如果用 SSI,每个关节都要单独走线,线缆又粗又重。换成 BiSS 之后,一条总线搞定,布线清爽多了。

BiSS 的数据帧结构一般包含:

  1. 起始位:同步信号。
  2. 位置数据:单圈位置 + 多圈圈数。
  3. 状态位:编码器健康状态、报警信息。
  4. CRC 校验:保证数据传输的可靠性。
  5. 可选的寄存器数据:用于读写配置参数。
核心对比:SSI 适合简单、低成本、单编码器的场景;BiSS 适合多编码器、需要配置、对实时性要求高的场景。选哪个,看你的系统复杂度。

4.4 绝对位置读取:从协议到数值

不管用 SSI 还是 BiSS,最终目的都是拿到一个数值——绝对位置。

这个数值怎么用?我举个例子:

假设一个单圈绝对式编码器,分辨率是 17 位(即 131072 个位置)。读到的原始值是 32768。那么对应的机械角度就是:

角度 = (原始值 / 总分辨率) × 360°
     = (32768 / 131072) × 360°
     = 90°

如果是多圈编码器,还要加上圈数信息:

总位置 = 圈数 × 单圈分辨率 + 圈内位置

这里有个坑,我踩过:多圈编码器的圈数是有符号的还是无符号的?有些编码器把圈数当作有符号数,正转加、反转减。有些则是无符号的,反转时圈数会从最大值往下减。读数据之前,一定要看 datasheet,搞清楚圈数的编码方式。

注意:绝对式编码器虽然「绝对」,但它的零点是可以重新设置的。很多编码器支持通过指令修改零点位置。修改之后,原来的绝对位置就变了。做系统标定时,一定要确认零点是否被改过。

4.5 知识体系总览

下面这张图,把绝对式编码器的核心知识点串起来了。你可以把它当作一个快速索引。

绝对式编码器知识体系 绝对式编码器 单圈 vs 多圈 SSI 协议 BiSS 协议 有限角度 多圈旋转 同步串行 单向通信 双向通信 多从机 核心:每个位置有唯一编码,断电不丢失 选型要点:单圈/多圈、协议类型、分辨率、圈数范围

4.6 实战中的几个建议

最后,分享几个我在项目中积累的经验:

  • 上电先读状态位:很多编码器有状态位,指示编码器是否正常。我习惯上电后先检查状态位,确认无误再读位置。否则读到错误数据,电机可能乱跑。
  • 注意线缆长度:SSI 和 BiSS 都是高速同步通信,线缆长了信号会衰减。我一般控制在 10 米以内。超过 10 米,建议加中继器或者换 RS-485 方案。
  • CRC 校验不能省:BiSS 协议自带 CRC,SSI 没有。如果用 SSI,我建议在应用层加一个简单的校验(比如和校验)。工业现场干扰多,多一层保护总没错。
  • 多圈编码器要定期回零:虽然多圈编码器能记录圈数,但长时间运行后,齿轮磨损或者磁干扰可能导致圈数误差。我一般建议设备每运行 1000 小时或者每次大修后,做一次回零操作。

绝对式编码器,说白了就是给电机装了一个「永不丢失的记忆」。选对协议、读对数据、做好校验,你的系统就能稳稳地跑起来。