4、绝对式编码器原理:SSI/BiSS协议简介、多圈与单圈、绝对位置读取
聊完增量式编码器,咱们得聊聊绝对式了。
说实话,我刚开始做电机控制那会儿,觉得增量式挺好用的,便宜又简单。直到有一次,设备断电重启,电机位置全丢了,机械臂直接撞了限位。嗯,从那以后,但凡有点预算的项目,我绝对优先考虑绝对式编码器。
绝对式编码器,说白了就是「一上电就知道自己在哪」。不需要找零位,不需要回参考点。这背后靠的是它的编码原理——每个位置都有唯一的二进制码。
4.1 单圈与多圈:位置信息的维度
先搞清楚一个基本概念:单圈和多圈。
- 单圈绝对式:只能记录一圈之内的绝对位置。比如一圈 4096 个位置,断电再上电,位置还在。但如果你转了好几圈,它就不记得了。
- 多圈绝对式:不仅能记录圈内位置,还能记录转了多少圈。一般用齿轮组或者磁传感器来累计圈数。
我个人的习惯是:如果电机只做有限角度运动(比如 360° 以内),单圈就够了。但如果是多圈旋转的关节或者丝杠,必须上多圈。否则断电后手动转了几圈,再上电位置就乱了。
| 类型 | 记录范围 | 典型位数 | 适用场景 |
|---|---|---|---|
| 单圈绝对式 | 0 ~ 360° | 12 ~ 18 bit | 有限角度、关节、阀门 |
| 多圈绝对式 | 多圈 + 圈内位置 | 单圈 12~18 bit + 圈数 12~16 bit | 多圈旋转、丝杠、机器人关节 |
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 的数据帧结构一般包含:
- 起始位:同步信号。
- 位置数据:单圈位置 + 多圈圈数。
- 状态位:编码器健康状态、报警信息。
- CRC 校验:保证数据传输的可靠性。
- 可选的寄存器数据:用于读写配置参数。
4.4 绝对位置读取:从协议到数值
不管用 SSI 还是 BiSS,最终目的都是拿到一个数值——绝对位置。
这个数值怎么用?我举个例子:
假设一个单圈绝对式编码器,分辨率是 17 位(即 131072 个位置)。读到的原始值是 32768。那么对应的机械角度就是:
角度 = (原始值 / 总分辨率) × 360°
= (32768 / 131072) × 360°
= 90°
如果是多圈编码器,还要加上圈数信息:
总位置 = 圈数 × 单圈分辨率 + 圈内位置
这里有个坑,我踩过:多圈编码器的圈数是有符号的还是无符号的?有些编码器把圈数当作有符号数,正转加、反转减。有些则是无符号的,反转时圈数会从最大值往下减。读数据之前,一定要看 datasheet,搞清楚圈数的编码方式。
4.5 知识体系总览
下面这张图,把绝对式编码器的核心知识点串起来了。你可以把它当作一个快速索引。
4.6 实战中的几个建议
最后,分享几个我在项目中积累的经验:
- 上电先读状态位:很多编码器有状态位,指示编码器是否正常。我习惯上电后先检查状态位,确认无误再读位置。否则读到错误数据,电机可能乱跑。
- 注意线缆长度:SSI 和 BiSS 都是高速同步通信,线缆长了信号会衰减。我一般控制在 10 米以内。超过 10 米,建议加中继器或者换 RS-485 方案。
- CRC 校验不能省:BiSS 协议自带 CRC,SSI 没有。如果用 SSI,我建议在应用层加一个简单的校验(比如和校验)。工业现场干扰多,多一层保护总没错。
- 多圈编码器要定期回零:虽然多圈编码器能记录圈数,但长时间运行后,齿轮磨损或者磁干扰可能导致圈数误差。我一般建议设备每运行 1000 小时或者每次大修后,做一次回零操作。
绝对式编码器,说白了就是给电机装了一个「永不丢失的记忆」。选对协议、读对数据、做好校验,你的系统就能稳稳地跑起来。