4. 编码器与反馈:关节的“眼睛”
做机器人关节控制,说白了就是两件事:让电机转,和知道电机转到了哪。前者靠驱动器,后者就靠编码器。
我刚开始做关节模组时,觉得编码器不就是个角度传感器嘛,随便选一个就行。结果第一次上电,电机嗡嗡响,位置就是锁不住。查了半天,发现是编码器分辨率不够,加上信号抖动,导致控制器一直在“追”一个不存在的误差。嗯,从那以后我再也不敢小看编码器选型了。
4.1 增量式 vs 式:本质区别在哪?
这两种编码器的核心差异,我习惯用一个比喻来解释:
- 增量式:像一把只有刻度的尺子。你知道自己走了多少格,但不知道起点在哪。断电再上电,你就得重新找零位。
- 式:像一把每格都标了数字的尺子。任何时候看一眼,就知道当前位置。断电再上电,位置信息还在。
关键结论:人形机器人关节,必须用式编码器。为什么?因为人形机器人断电后关节会被重力拉动,上电时如果不知道位置,电机一启动就可能“抽风”,轻则抖动,重则伤人。
我在一个协作机器人项目里就踩过这个坑。当时为了省钱,用了增量式编码器加电池备份的方案。结果有一次电池没电了,机器人上电后直接往桌子上砸下去……从那以后,所有关节项目我都是式编码器起步。
4.2 分辨率与精度:别搞混了
这两个概念,我见过太多工程师搞混了。你想想看:
- 分辨率:编码器能“感知”到的最小角度变化。比如17位编码器,分辨率就是 360° / 2^17 ≈ 0.0027°。这只是一个理论值。
- 精度:实际测量值与真实值之间的偏差。它受机械安装、温度漂移、信号噪声等因素影响。
| 参数 | 分辨率 | 精度 |
|---|---|---|
| 含义 | 能分辨的最小变化 | 测量值与真实值的偏差 |
| 单位 | 位(bit) 或 线数(PPR) | 角秒(arcsec) 或 度(°) |
| 影响因素 | 码盘刻线数、细分电路 | 机械公差、温度、信号质量 |
| 典型关系 | 高分辨率 ≠ 高精度 | 高精度需要高分辨率支撑 |
| 我的建议 | 选分辨率比控制精度高 4~8 倍 | 精度要满足关节重复定位要求 |
举个例子:你有一个17位编码器,分辨率很高。但如果安装时编码器轴和电机轴有0.1°的偏心,那实际精度可能连0.1°都达不到。分辨率再高也救不了机械误差。
个人经验:我一般选编码器时,先定精度需求(比如关节重复定位精度要0.01°),然后选分辨率比它高一个数量级(0.001°级别,约19~20位)。这样控制环路才有足够的“余量”去处理噪声和延迟。
4.3 多圈编码器:什么时候用?
多圈编码器,就是不仅能记录当前圈内的位置,还能记录转了多少圈。它内部有一个机械齿轮组或电子计数器,可以记录4096圈甚至更多。
用人形机器人来说,多圈编码器主要用在两个场景:
- 关节限位保护:有些关节(比如肩关节)可以连续旋转。如果没有多圈记录,一旦超过一圈,控制器就不知道关节实际位置了,可能撞到机械限位。
- 断电位置保持:机器人断电后,如果外力推动关节转了多圈,上电时单圈编码器只能知道圈内位置,不知道转了几圈。多圈编码器可以完整恢复。
注意:多圈编码器也有坑。机械多圈编码器内部有齿轮,长时间振动可能导致齿轮磨损或卡死。电子多圈编码器依赖电池或非易失存储器,电池没电或写入次数超限都会丢失圈数。我建议在关键关节(如髋、膝)使用电子多圈+定期回零策略,既可靠又省心。
4.4 SPI vs ABZ:接口怎么选?
编码器跟控制器通信,主流就两种接口。我直接说结论:
| 接口 | 特点 | 适用场景 | 我的推荐 |
|---|---|---|---|
| ABZ | 脉冲信号,A/B相差90°判方向,Z脉冲归零 | 增量式编码器、低成本方案 | 不推荐用于人形关节 |
| SPI | 同步串行,直接读取位置值(二进制) | 式编码器、高精度关节 | 首选 |
ABZ接口的问题在于:
- 脉冲计数容易受干扰,长线传输时尤其明显
- 上电需要找零位(Z脉冲),不适合式需求
- 分辨率受限于脉冲频率和计数器位数
SPI接口的优势:
- 直接读取位置,上电即用
- 数据帧包含CRC校验,抗干扰能力强
- 可以同时读取温度、诊断信息等附加数据
我个人的习惯是:所有关节都用SPI接口的式编码器。ABZ我只在调试时用来测速,或者在一些非关节的辅助电机上用。
4.5 知识体系总览
下面这张图,把编码器选型的核心逻辑串起来了。你可以把它当作一个决策流程:
4.6 实际选型建议
最后,我总结一下人形机器人关节编码器的选型清单:
- 类型:式编码器(必须)
- 分辨率:不低于17位,推荐19~21位
- 精度:优于0.02°(约72角秒)
- 圈数:髋、肩关节用多圈(≥4096圈),其他关节单圈即可
- 接口:SPI(首选),带CRC校验
- 附加功能:最好内置温度传感器和诊断寄存器
一个小技巧:如果你用的编码器是SPI接口,记得在PCB布局时把SPI时钟线尽量短,并且用地线包围。我遇到过因为时钟线太长导致数据错位的问题,折腾了两天才发现是信号反射。嗯,高速信号布线,细节决定成败。