磁致伸缩位移传感器 SSI 帧结构:时钟、位宽与格雷码

SSI 一共就四根信号线:时钟一对、数据一对。很多人第一次接上就能读到数,于是以为这东西没内容——直到某天换了个行程、或者把线加长了二十米,读数开始乱,才发现"能读到数"和"读对了"是两件事。

SSI 的配置项只有三个:数据位数、编码格式、时钟频率。前几篇讲的是这三项怎么配、配错了怎么查;这篇往下走一层,讲清楚一个字:主站发出去的那串时钟,到底从传感器里读走了哪几位,每一位代表什么。搞明白这一层,位数为什么这么配、格雷码为什么不能当二进制解,就不是背参数了。

SSI 一帧的时钟与数据时序:锁存点、采样沿与单稳态复位
一帧四步:锁存、逐位移出、高位在前、单稳态复位

一帧四步,每一步都有一条硬规矩

SSI 是点对点的单向接口:时钟由主站给,数据由传感器回。没有地址、没有仲裁、没有协议栈,正因为它简单,所以每一步的边界条件都很死。

  • 空闲。时钟线保持高电平。传感器内部一直在更新位置值,但此时数据线的内容不作数。
  • 锁存。主站发出第一个时钟下降沿,传感器把当前位置值扣进移位寄存器,位置值从这一刻起被冻结。
  • 移出。主站继续发时钟,传感器在每个时钟周期移出一位,最高位先出。时钟个数就是主站"买"的位数,多发几位就多读几位。
  • 复位。时钟串停止后必须留出单稳态时间,接口才回到空闲、才认下一次读取。这个时间在 192 上是最小 48 μs。

第二条规矩最容易被忽略,也最有工程意义:读数对应的是"发起读取那一刻"的位置,不是时钟串结束那一刻。时钟发得越长,这个差别越大。在注塑机射胶、压机下死点这种高速段上,几十微秒就是零点几毫米——所以不是"位数配得越多越好",读得越长,读到的是越早的那个位置。

位宽只有两档:25 位,或者 24 位

SSI 是同步串行,主站发多少时钟,传感器就移多少位,听起来像可以随便配。实际产品只做两档:192 出厂按订单定成 25 位或 24 位,型号编码里对应的那一位是 1 就是 25 位、是 2 就是 24 位。主站必须按订的那一档配,多一位少一位都读错。

两档能装多少格,直接算得出来:

位宽可表示的格数适用场合
24 位16,777,216(2²⁴)常用量程配常用分辨率,绝大多数场合够用
25 位33,554,432(2²⁵)量程与分辨率的组合超过 16,777,216 格时

判断该订哪一档,看"量程 ÷ 分辨率"这个格数落在哪:

量程分辨率格数24 位够不够
300 mm5 μm60,000够
1000 mm10 μm100,000够
2000 mm1 μm2,000,000够
7600 mm1 μm7,600,000够

表里能看出来:连 7600 mm 配 1 μm 也只占到 16,777,216 格里的一半不到,24 位仍有余量。所以常规订货选 24 位就够,25 位是给更长行程、更细分辨率的组合留的。这一项不该自己猜——把量程和分辨率报清楚,由厂家按这个算。

位数配错的表现,和"位宽不够装"是两回事:

  • 主站按 24 位配、传感器是 25 位。少发一个时钟,最低位被丢掉,读数值只有实际的一半。这个"一半"很稳定,容易被误判成量程或分辨率订错。
  • 主站按 25 位配、传感器是 24 位。多发一个时钟,多读到的是填充位,位置值整体变成实际的两倍(填充为 0 时),或者尾数出现无规律跳动。

这也是为什么调试顺序永远是"先位数、再编码格式、最后时钟频率":位数错了,后面两项怎么调都读不对。

型号编码里这几位决定主站怎么配

192 的订货码每一位对应一个可选项,主站要跟它对上的是其中三项:数据长度、代码类型、分辨率。另外两项(功能、比例方向)决定的是行为,不是通信参数。

编码项取值含义
数据长度1 / 21 = 25 位,2 = 24 位
代码类型B / GB = 二进制,G = 格雷码
分辨率1 / 2 / 3 / 4 / 5 / 6 / 8依次是 5 / 10 / 50 / 100 / 20 / 2 / 1 μm
功能1标准
比例方向00 / 0100 = 正向,01 = 返回

分辨率那一串数字不是按顺序排的:1 是 5 μm、2 是 10 μm、3 是 50 μm、4 是 100 μm、5 是 20 μm、6 是 2 μm、8 是 1 μm,中间没有 7。对着表核型号,不要按"数字越大越细"去猜,抄错一位就是整段比例错。

比例方向这一项最容易被忽略。它决定读数往哪个方向增大:正向是磁环远离电子仓时数据变大,返回是磁环靠近电子仓时数据变大。这一项订货时就定死了,和控制器里有没有"方向取反"是两个层面的事——订的是 01,主站就得按反向理解;现场想换,只能在控制器侧再翻一次。

格雷码:相邻的两个值只翻一位

位置是连续变化的量,传感器内部按格计数,输出的却是二进制或格雷码两种格式之一。

二进制的问题出在跨位进位:从 127 走到 128,七位一起翻。这七位不是同时到达主站的,线与线之间的延迟差、边沿抖动,都能让主站在翻位的那一瞬读到 255 或者 0——一个只该变化 1 个最小格的时刻,读数跳出几百格。

格雷码把相邻两个值编码成只差一位的形式,跨越进位时也只有一位在动,所以最坏情况只差 1 个最小格。位置测量用它,就是为了这个。

代价是主站必须做转换,读到的不是直接的数值:

// 格雷码转二进制:把所有右移值异或起来
uint32_t gray_to_bin(uint32_t g) {
    uint32_t b = 0;
    for (; g; g >>= 1) b ^= g;
    return b;
}

// 二进制转格雷码
uint32_t bin_to_gray(uint32_t b) { return b ^ (b >> 1); }

格式选错的特征很明显:曲线不单调,出现折返。因为在格雷码的位模式被当作二进制读时,相邻两个格对应的数值会大幅跳变,画成位置-时间曲线就是锯齿。与之对应的另一种形态是"读数看起来像被随机打乱",而不是整体偏移——整体偏移属于零点问题,不是格式问题。

192 出厂按订货指定的格式,两种都支持。主站侧的格式设置在换传感器时必须重新确认,这一项和位数一样,不会自己跟着变。

时钟频率、线长、更新频率,三个数一起看

时钟频率不是主站想给多少就给多少,它被两件事夹住:线有多长,传感器自己多久更新一次。

线长决定上限。信号在电缆上有传播延迟,边沿也会被电容磨钝,线越长,允许的最高时钟越低。192 与 162 用的是同一套数字:

电缆长度最高数据速率
< 3 m1000 kBd
< 50 m400 kBd
< 100 m300 kBd
< 200 m200 kBd
< 400 m100 kBd

行程决定下限。传感器内部的测量是周期性的,行程越长,波导丝上传回来的时间越久,更新频率就越低。192 的更新频率随行程变化:300 mm 时 3.7 kHz,750 mm 时 3.0 kHz,1000 mm 时 2.3 kHz,2000 mm 时 1.2 kHz,5000 mm 时 0.5 kHz。

把两件事的账算一遍就很清楚,以 1000 kBd(一位约 1 μs)、17 位、1000 mm 行程为例:

  • 一帧时钟串本身约 17 μs;
  • 加上单稳态 48 μs,一次完整读取约 65 μs,理论最快约 15 kHz;
  • 但传感器只以 2.3 kHz 在更新,所以真实上限是 2.3 kHz,约 430 μs 一次。

结论是反直觉的:在常用行程上,瓶颈几乎永远是传感器的更新频率,不是时钟频率。把时钟拉到 1000 kBd 却按 1 μs 的间隔去读,读到的会是同一帧重复值,或者干脆被单稳态挡住返回异常。主站的读取周期应当取"更新周期"与"单稳态加时钟串"两者中的较大值,再留一点余量。

线超过 200 米还要跑 500 kBd,就是这一类现场问题的起点——现象是偶发跳大数,而不是彻底不通。降频的做法与判据见 SSI 长线跳数:按时钟速率降频。

差分信号与七针接法

SSI 的时钟和数据都是差分对,这是它能跑几十米、上百米的前提。192 用 7 针 D70 公接头,针脚定义如下:

针脚定义线色
1数据 −黑
2数据 +白
3时钟 +黄
4时钟 −绿
5+24 V红
60 V蓝
7不接—

两条现场经验:时钟对与数据对各自双绞,不要拆成四根散线走;屏蔽层焊在插头外壳上,只在控制器一侧接地,两头都接就形成地环流,反而把干扰引进来。

差分对极性接反不会烧设备,但表现很典型:数据对反接,读到的位全翻转,位置值变成"满量程减去真实位置";时钟对反接,多数主站直接收不到帧。遇到"读数正好是反的"这种规律性错误,先查线序,不要去调位数。

它在接口谱系里的位置

SSI 的优势是读取时刻完全由主站决定,采样点确定、延迟确定,适合与其他动作严格对齐的场合;代价是每轴一根线,轴数一多线束成本就超过总线方案。与 4-20 mA、CANopen 的横向对照见 八种输出接口对照;想用自制板子直接做主站,见 CANopen 主站实现里的同类思路。

162 是 16 系列的 SSI 输出,位宽、速率、48 μs 单稳态这一套数字与 192 完全相同,差别在机械与耐压,不要订混,见 162 与 192 的区别。三项配置项怎么对齐,见 192 SSI 配置;SSI 输出地信号为什么不能随便转成模拟量,见 输出地信号与转接限制。192 系列是这类现场最常用的一款。

一句话

位数管"装得下",分辨率管"分得细",时钟管"来得及",格雷码管"翻位不出错"。四件事分工不同,混在一起调就会一直调不通。

常见问题

Q:SSI 的位宽可以随便配吗

不能。192 只做 25 位和 24 位两档,订货时按型号编码里那一位定(1 = 25 位,2 = 24 位)。判断依据是“量程 ÷ 分辨率”是否超过 16,777,216 格:不超过就选 24 位,超过才需要 25 位。

Q:位数配多了会怎样?

位置值本身不会错,多出来的时钟在尾部读到填充位或状态位。如果程序直接把整帧当数值换算,就会看到末几位忽高忽低的抖动。反过来位数配少,读数会在行程某一点之后再不变大,卡在 2 的整数次幂上限。

Q:格雷码和二进制,选哪个?

两者都能用,取决于主站愿不愿意做转换。格雷码在跨位进位时只有一位在动,最坏误差是 1 个最小格;二进制在进位时多位同时翻转,读错可能跳出几百格。振动大、位置值频繁经过进位点的场合,格雷码更稳。

Q:时钟频率给到最高是不是读数最快?

不是。常用行程上瓶颈是传感器的更新频率,不是时钟。192 在 1000 mm 行程时更新率只有 2.3 kHz,时钟拉到 1000 kBd 也读不出更多次。读取周期要取更新周期与单稳态加时钟串两者中的较大值。

这篇讲的问题,说到底都绕不开磁致伸缩位移传感器本身。磁致伸缩位移传感器产品中心按行程、安装方式与输出接口把全部系列排开,选型从这里进最省事。

← 返回行业动态