3、SSI协议详解(上):物理层(RS-422)、时钟与数据时序、单周期数据传输

各位工程师朋友,咱们今天来聊聊SSI协议。说实话,在工业现场摸爬滚打这么多年,SSI协议是我见过最“皮实”的编码器接口之一。它不像某些协议那样花里胡哨,但胜在稳定可靠。我记得刚入行那会儿,调试一台进口机床的绝对式编码器,用的就是SSI接口。当时被时序问题折腾得够呛,后来才明白,搞懂物理层和时序,就等于抓住了SSI的命门。

3.1 物理层:RS-422差分信号

SSI协议的物理层,说白了就是RS-422标准。为什么选它?因为工业现场太“脏”了——电机干扰、变频器噪声、长距离传输,单端信号根本扛不住。

RS-422的核心特点:

  • 差分传输:用两根线传一路信号,一根正(A),一根负(B)。接收端看的是A-B的电压差,而不是对地电压。这样共模噪声就被抵消了。
  • 抗干扰能力强:我曾在一条50米的电缆上跑SSI,旁边就是变频器输出线,信号愣是没丢一个bit。换成TTL电平,估计早乱套了。
  • 传输距离远:标准RS-422能传1200米(取决于波特率)。实际项目中,我一般控制在100米以内,留点余量。
  • 多点接收:一个驱动器可以带最多10个接收器。不过编码器通常是一对一的,这个特性更多用在总线型设备上。

重要参数:

参数典型值说明
差分电压±2V ~ ±5V接收器阈值通常为±200mV
共模电压范围-7V ~ +12V允许地电位偏移
终端电阻100Ω ~ 120Ω必须接在接收端,防止信号反射
线缆类型双绞屏蔽线推荐使用,绞距越密越好

我的经验:终端电阻一定要加!我曾经在一个项目里偷懒没加,结果信号在长线上来回反射,时钟沿变得歪歪扭扭,数据错得一塌糊涂。后来老老实实焊上120Ω电阻,问题立刻消失。

3.2 时钟与数据时序

SSI的时序,其实挺简单的。它只有两根信号线:时钟(CLK+ / CLK-)和数据(DATA+ / DATA-)。主设备(比如PLC或运动控制器)发送时钟脉冲,编码器在时钟的每个上升沿或下降沿输出一位数据。

时序关键点:

  • 时钟频率:通常从100kHz到2MHz。频率越高,传输越快,但线缆长度要相应缩短。我一般用500kHz,兼顾速度和可靠性。
  • 数据采样:大多数SSI编码器在时钟的上升沿更新数据,下降沿保持。主设备则在下降沿采样数据。嗯,这里要注意:不同厂家的编码器可能相反,一定要看数据手册。
  • 空闲状态:时钟线空闲时为高电平。数据线空闲时通常为高电平(取决于编码器类型)。
  • 位序:SSI通常先传最高位(MSB),后传最低位(LSB)。这样主设备可以提前知道数据的量级。

避坑指南:我曾经遇到一个编码器,它的数据在时钟下降沿更新。我按上升沿采样的习惯去读,结果读出来的数据全是乱的。后来仔细看了手册才发现问题。所以,拿到编码器第一件事——看时序图!

3.3 单周期数据传输

单周期传输,就是一次完整的时钟脉冲序列,把编码器的所有数据位都读出来。SSI的数据帧结构很固定:

时钟脉冲:  |‾‾‾|___|‾‾‾|___|‾‾‾|___| ... |‾‾‾|___|
数据输出:  | MSB | ... | LSB | 0 | 0 | ... | 0 |
            ← 数据位 → ← 填充位 →

数据帧结构:

  1. 数据位:编码器的实际位置值,通常是12位、13位、25位等。比如一个13位编码器,分辨率就是8192线/圈。
  2. 填充位:数据位之后,编码器会输出若干个“0”作为填充。填充位的数量取决于编码器类型,常见的是1位或2位。
  3. 总位数 = 数据位数 + 填充位数。主设备必须发送足够多的时钟脉冲,才能读完所有位。

举个例子:一个13位单圈编码器,带1位填充位。那么总位数是14位。主设备需要发送14个时钟脉冲。前13个脉冲读取位置值,第14个脉冲读取填充位(通常是0)。

你想想看,为什么要有填充位?其实是为了让主设备知道数据帧结束了。当主设备看到连续几个“0”之后,就知道该停下来了。当然,也有编码器用其他方式标记结束,但SSI的填充位是最常见的。

3.4 时序参数详解

搞SSI,时序参数必须烂熟于心。我整理了一张表,大家收藏好:

参数符号典型值说明
时钟周期Tclk0.5μs ~ 10μs对应频率100kHz ~ 2MHz
时钟高电平时间Th≥ 200ns保证编码器有足够时间响应
时钟低电平时间Tl≥ 200ns同上
数据建立时间Tsu≥ 100ns数据在时钟沿之前必须稳定
数据保持时间Thd≥ 100ns数据在时钟沿之后必须保持
帧间隔时间Tf≥ 20μs两次传输之间的最小间隔

我的习惯:设计时,我会把时序参数留出30%的余量。比如编码器要求Tsu≥100ns,我就按≥130ns来设计。这样即使线缆老化、温度变化,系统依然稳定。

3.5 知识体系图

下面这张图,把SSI协议的核心逻辑串起来了。大家一看就明白:

SSI协议核心知识体系 物理层 RS-422差分信号 时钟与数据时序 上升沿/下降沿采样 单周期数据传输 数据位 + 填充位 差分传输 · 抗干扰 终端电阻 · 线缆选择 时钟频率 · 占空比 建立时间 · 保持时间 MSB先传 · 帧结构 填充位 · 帧间隔 核心要点 物理层保证信号质量 → 时序保证数据正确 → 帧结构保证数据完整

这张图把SSI的三个核心模块串起来了。物理层是基础,时序是桥梁,数据传输是目的。三者缺一不可。

3.6 实际项目中的注意事项

最后,分享几个我在项目中踩过的坑:

  • 线缆长度与时钟频率的关系:频率越高,线缆越短。2MHz时,线缆最好不超过20米。500kHz时,50米没问题。我一般按“频率(MHz) × 长度(m) ≤ 100”来估算。
  • 地环路问题:RS-422虽然抗共模干扰,但如果两端设备地电位差太大,还是会出问题。我习惯在接收端加共模扼流圈,或者用隔离器。
  • 上电时序:编码器上电后,需要一段时间稳定。我通常等100ms后再发第一个时钟脉冲。否则读到的数据可能是乱的。
  • 帧间隔时间:两次传输之间,一定要留够间隔。我见过有人连续发脉冲,结果编码器来不及响应,数据错位。Tf至少20μs,我习惯留50μs。

重要提醒:SSI协议没有校验位!数据错了就是错了。所以,如果你的应用对安全性要求很高(比如伺服驱动、机器人),建议在应用层加CRC校验,或者用多圈编码器自带的校验功能。

好了,SSI协议的上半部分就讲到这里。物理层、时序、单周期传输,这三个概念搞明白了,SSI就算入门了。下一节,咱们会深入多周期传输、数据格式解析,以及如何用FPGA或MCU实现SSI主设备。到时候见!


公众号:蓝海资料掘金营,微信deep3321