4、绝对式编码器输出协议:SSI协议、BiSS协议、EnDat协议、CANopen协议

绝对式编码器跟增量式最大的区别,就是它一上电就知道当前位置。不用找零点,不用回参考点。这个能力靠的是协议层面的设计。市面上主流的绝对式协议有四种:SSI、BiSS、EnDat、CANopen。我这些年基本都碰过,踩过坑也填过坑,今天跟你聊聊我的理解。

4.1 SSI协议——最老牌,也最基础

SSI(Synchronous Serial Interface)是起步最早的绝对式协议。1980年代就有了,现在很多工业现场还在用。说白了,它就是一根时钟线、一根数据线,主站发时钟,从站回数据。

SSI的核心特点:

  • 点对点通信,一主一从
  • 时钟频率一般100 kHz ~ 2 MHz
  • 数据长度可配置,常见12~32位
  • 单方向传输,主站只管发时钟,从站只管回数据

我在一个老式龙门铣项目里用过SSI编码器。当时选它就是因为简单——PLC自带的SSI模块直接接上就能用,连配置都不用改。但要注意,SSI的时钟线如果走得太长,信号反射会很严重。我建议时钟频率别超过1 MHz,线长超过10米时最好加差分驱动。

SSI的坑:

  • 时钟线跟数据线必须等长,否则时序会乱
  • 从站响应时间有限制,时钟间隔不能太短
  • 没有校验机制,数据错了就是错了

SSI的波形其实很简单。主站拉低时钟线,开始发送一串脉冲。从站在这串脉冲里逐位吐出位置数据。我见过不少工程师在调试时发现数据跳变,最后查出来是时钟线受到了电机驱动器的干扰。嗯,这里要注意:SSI的时钟线一定要跟动力线分开走。

4.2 BiSS协议——开源、高速、灵活

BiSS(Bidirectional Synchronous Serial Interface)是SSI的升级版。它由iC-Haus公司推出,但协议是开源的。你想想看,开源意味着什么?意味着你可以自己写驱动,自己定制数据内容。

BiSS跟SSI最大的区别在于:它是双向的。主站不仅能读数据,还能写配置。而且BiSS支持总线拓扑,一条线上可以挂多个编码器。

特性 SSI BiSS
通信方向 单向(只读) 双向(读写)
拓扑结构 点对点 点对点 / 总线
时钟频率 ≤ 2 MHz ≤ 10 MHz
校验 无 CRC
数据长度 固定 可配置
协议开放性 公开 开源

BiSS的波形比SSI复杂一些。它有一个帧起始信号(Start bit),然后是数据位,最后是CRC校验位。我个人习惯用示波器抓BiSS的时钟和数据线,先看Start bit的宽度对不对。如果Start bit宽度不对,后面的数据全白搭。

BiSS调试小技巧:

我曾经在一个伺服驱动器项目里调BiSS,编码器老是报CRC错误。查了两天,最后发现是时钟线的上升沿太缓了。BiSS对时钟边沿的陡峭度有要求,建议用差分信号(RS-422)传输,别用单端。

4.3 EnDat协议——海德汉的看家本领

EnDat是Heidenhain(海德汉)的专利协议。它跟BiSS有点像,也是双向、带CRC、支持高速。但EnDat是闭源的,只能用海德汉的编码器和海德汉的驱动接口。

EnDat目前有EnDat 2.1和EnDat 2.2两个版本。2.1是纯串行,2.2增加了并行传输模式,速度更快。我接触最多的是EnDat 2.1,用在一些高精度加工中心上。

EnDat的波形跟BiSS非常相似,但时序参数不一样。比如EnDat的时钟空闲状态是高电平,而BiSS是低电平。这个细节很容易搞混。我记得有一次帮客户排查故障,他们用BiSS的驱动去接EnDat的编码器,结果死活读不出数据。嗯,协议不兼容,硬件上虽然都是四根线,但时序完全两码事。

EnDat vs BiSS 关键差异:

  • EnDat是专利协议,BiSS是开源协议
  • EnDat的编码器只能配海德汉的驱动或授权芯片
  • EnDat 2.2支持最高16 MHz时钟,BiSS最高10 MHz
  • EnDat的指令集更丰富,可以读温度、报警、诊断信息

如果你选EnDat,就要做好被绑定的准备。编码器、线缆、驱动接口最好都用海德汉原厂。我曾经试过用第三方线缆,结果在高速下数据偶尔丢帧。换回原厂线缆就没事了。说白了,闭源协议就是让你用它的全套方案。

4.4 CANopen协议——总线型,多设备

前面三种都是点对点或简单总线。CANopen不一样,它是真正的现场总线。一条CAN总线上可以挂几十个编码器,每个编码器有独立的ID,通过报文通信。

CANopen编码器用的是CiA 301和CiA 406协议栈。数据通过SDO(服务数据对象)和PDO(过程数据对象)来传输。SDO用于配置,PDO用于实时数据。

我在一个AGV(自动导引车)项目里用过CANopen编码器。车上四个轮子各装一个绝对值编码器,全部挂到一条CAN总线上。主控通过PDO周期读取位置数据,周期可以设到1 ms。这个方案比SSI省线多了——四根线(CAN_H、CAN_L、电源、地)搞定所有编码器。

CANopen编码器的注意事项:

  • 总线终端电阻必须加,120 Ω,两端都要
  • 波特率越高,总线长度越短(500 kbps时最长约100米)
  • 每个编码器的Node ID必须唯一
  • PDO映射需要仔细配置,否则数据对不上

CANopen的波形分析比前面几种复杂。你不能只看物理层的电平,还得解析报文。我一般用CAN分析仪抓报文,先看有没有错误帧。如果错误帧太多,大概率是终端电阻没加或者总线电平有问题。

4.5 四种协议的选型建议

说了这么多,到底怎么选?我个人习惯按场景来:

  • 简单、低成本、单设备:选SSI。够用,便宜,调试简单。
  • 高速、高精度、单设备:选BiSS或EnDat。BiSS更灵活,EnDat更稳定。
  • 多设备、分布式:选CANopen。省线,灵活,但调试复杂一些。
  • 海德汉生态:没得选,EnDat。

下面这张图帮你理清四种协议的关系和适用场景:

绝对式编码器协议选型框架 绝对式编码器 SSI BiSS EnDat CANopen SSI 单向·点对点 无校验·低成本 BiSS 双向·开源 CRC校验·高速 EnDat 双向·专利 海德汉生态 CANopen 总线型·多设备 SDO/PDO 选型口诀:单点选SSI,高速选BiSS/EnDat,多点选CANopen 海德汉用户直接选EnDat,其他情况优先考虑BiSS

4.6 波形分析要点总结

不管用哪种协议,分析波形时我建议你抓住三个关键点:

  1. 时钟质量:频率对不对?占空比是不是50%?上升沿够不够陡?
  2. 数据对齐:数据位是不是在时钟的正确的边沿采样?有没有偏移?
  3. 帧结构:起始位、数据位、校验位、停止位,顺序对不对?长度对不对?

我曾经用示波器抓过一个BiSS编码器的波形,发现数据位比时钟边沿晚了200 ns。查了半天,原来是编码器端的线缆太长,信号延迟了。缩短线缆后问题解决。你想想看,200 ns在10 MHz时钟下就是两个位的偏差,数据全错位了。

我的调试习惯:

先用示波器看物理层,确认时钟和数据线的电平、时序没问题。再用协议分析仪看数据层,确认帧结构、CRC对不对。两层都过了,再怀疑编码器本身。别一上来就换编码器,八成是线或者配置的问题。

四种协议各有千秋,没有绝对的好坏。关键是搞清楚你的应用场景,选对了协议,后面的调试就顺了。选错了,嗯,那就等着加班吧。