4. 编码器原理与接口:增量式编码器、式编码器、SSI/BiSS/CAN接口协议
编码器这东西,说白了就是机器人的「眼睛」。没有它,你的电机就是个瞎子,转没转、转了多少、转到哪了,一概不知。我最早做机器人那会儿,就吃过这个亏——电机嗡嗡转,关节纹丝不动,查了半天发现是编码器线松了。嗯,从那以后,我对编码器就格外上心。
4.1 增量式编码器:简单但有个致命缺点
增量式编码器,原理很简单。它内部有个码盘,上面刻着密密麻麻的条纹。转起来的时候,光栅会输出A、B两路脉冲信号。你数脉冲个数,就知道转了多少角度。
但这里有个坑——它不记录位置。断电重启后,你完全不知道关节在哪儿。我有个项目,机器人每次上电都要先「回零」,跑到限位开关那儿撞一下才能确定原点。说实话,挺笨的,但增量式便宜啊,精度也够用。
- 分辨率:每转脉冲数(PPR),常见500~5000
- 输出信号:A、B两相,相位差90°
- Z信号:每转一个脉冲,用于零点校准
4.2 式编码器:一劳永逸的选择
式编码器就聪明多了。它内部用格雷码或二进制码盘,每个位置对应唯一编码。断电再上电,位置信息还在。你想想看,这对机器人多重要——万一突然断电,重启后不用重新回零,直接干活。
我做过一个协作机器人项目,用的就是17位式编码器。单圈分辨率131072,精度0.0027°。说实话,这个精度对大部分工业场景都绰绰有余了。
| 类型 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|
| 增量式 | 便宜、简单、高速 | 断电丢位置、需回零 | 普通伺服、步进电机 |
| 式 | 断电记忆、无需回零 | 贵、接口复杂 | 协作机器人、精密转台 |
4.3 接口协议:SSI、BiSS、CAN
编码器选好了,怎么把数据读回来?这就涉及到接口协议了。我见过不少工程师,编码器买回来发现接口对不上,白折腾。下面我聊聊三种主流协议。
4.3.1 SSI协议:老牌经典
SSI(同步串行接口)是最常见的式编码器接口。它用时钟+数据两根线,主设备发时钟,编码器同步回传数据。说白了,就是一问一答的模式。
我曾经在一个老设备上用过SSI,时钟频率跑到1MHz,数据位25位(含CRC校验)。稳定是稳定,但速度上不去。你要读多个编码器,就得挨个轮询,效率不高。
// SSI读取示例(伪代码)
uint32_t ReadSSI(void) {
uint32_t data = 0;
for (int i = 0; i < 25; i++) {
CLK_HIGH();
delay(500ns);
data |= (DATA_IN() << (24 - i));
CLK_LOW();
delay(500ns);
}
return data;
}
4.3.2 BiSS协议:又快又准
BiSS(双向同步串行接口)是SSI的升级版。它支持更高的时钟频率(10MHz以上),而且能双向通信——你不仅能读位置,还能写参数进去。我最近做的项目全换BiSS了,一个字:爽。
BiSS还有个好处:支持「菊花链」拓扑。多个编码器串在一起,只用一组线就能读所有数据。布线省了一大半。
- BiSS时钟频率更高(10MHz vs 1MHz)
- BiSS支持双向通信,SSI只能读
- BiSS支持CRC校验,抗干扰更强
- BiSS支持多编码器菊花链
4.3.3 CAN接口:工业现场的王牌
CAN总线在工业领域太常见了。编码器直接输出CAN报文,控制器通过CAN总线读取。好处是距离远(几十米没问题),抗干扰强,而且一条总线能挂几十个编码器。
我记得有个项目,机器人工作半径8米,关节编码器全用CAN接口。一根双绞线从控制柜拉到末端,中间串了6个编码器,稳定跑了两年没出过问题。
// CAN报文格式示例(CANopen协议)
// ID: 0x181 + 节点ID
// 数据:4字节位置 + 2字节速度 + 2字节状态
// 例如节点1的位置数据:
// CAN ID: 0x182
// Data[0-3]: 0x00 0x12 0x34 0x56 (位置值)
// Data[4-5]: 0x01 0x00 (速度)
// Data[6-7]: 0x00 0x00 (状态)
- 低成本、短距离:增量式 + 差分线驱动
- 高精度、需断电记忆:式 + BiSS
- 远距离、多节点:式 + CAN
4.4 知识体系总览
下面这张图,是我自己整理的编码器选型逻辑。你照着走一遍,基本不会出错。
嗯,编码器这块内容不少,但核心就三点:选类型、定分辨率、配接口。我个人习惯是先确定要不要断电记忆,再考虑精度和距离。你按这个思路走,基本不会踩坑。
可可精品资料库