从欧艾迪绝对值编码器说起:SSI 读到的是比特,可能现场输掉的是采样确定性

首发于公众号「如是有为」 · 查看原文

从欧艾迪绝对值编码器说起:SSI 读到的是比特,可能现场输掉的是采样确定性

前段时间聊一个国产设备项目,对方用的是欧艾迪这类 SSI 绝对值编码器。选它的理由其实很朴素:国产供应链响应快,价格和交期都更友好;绝对值输出对设备上电回零更方便;SSI 接口也足够标准,控制器侧好接,资料里把 CLOCK+/CLOCK-、DATA+/DATA-、电源和地写得很清楚。

从欧艾迪绝对值编码器说起:SSI 读到的是比特,可能现场输掉的是采样确定性

说实话,这类国产绝对值编码器这几年进步很明显。以前很多人一提绝对值编码器,第一反应就是海德汉、雷尼绍、库伯勒、倍加福。现在不少国产设备上,欧艾迪这类产品已经不是“能不能用”的问题,而是很自然地进入了机器人关节、自动化平台、伺服执行机构、测试设备这些真实现场。

欧艾迪公开资料里对 SSI 链路的描述也很典型:SSI 采用 RS422 电平,一对差分时钟信号、一对差分数据信号;典型接线包括 5–24V、GND、CLOCK+、CLOCK-、DATA+、DATA-;接收设备向编码器发送时钟脉冲,编码器在时钟同步下逐位输出角度位置、校验信号或工作状态。

从图纸上看,这套东西非常干净:控制器发 CLK,编码器回 DATA,位置值一位一位读回来。也正因为它干净,很多团队在选型会上会说一句:

先用 SSI 顶着,后面再优化。

这句话的问题不在“用欧艾迪”,也不在“用 SSI”。恰恰相反,这类国产编码器把绝对值、接口、供货和成本都做到了一个很实用的位置。真正容易出问题的是后半句:很多人把 SSI 当成一个简单协议,却没有把它当成一条完整的物理链路。

SSI 在低速、短线、干净环境里很好用;一旦进入高速、长线束、电机 PWM 干扰强、接地环境复杂的现场,最容易让你付出代价的,不是协议本身,而是采样确定性。

换句话说:

SSI 读到的是比特,现场输掉的是采样确定性。

一、资料里的 SSI 很清楚,现场里的 SSI 没那么简单

欧艾迪这类 SSI 绝对值编码器,资料本身并不难读。CLOCK+/CLOCK- 是一对差分时钟,DATA+/DATA- 是一对差分数据;控制器给时钟,编码器按节拍输出数据。这和很多 SSI 应用资料里的描述是一致的:SSI 通常用独立的时钟线和数据线,控制器产生时钟,编码器在时钟同步下返回位置数据,物理层常见为 RS422 差分链路。

问题是,资料里的 SSI 是“理想链路”,现场里的 SSI 是“系统链路”。

在资料里,CLOCK 和 DATA 是两个信号名;在现场,它们要经过驱动器、连接器、线束、拖链、屏蔽层、接地路径、差分接收器和控制器输入同步逻辑。编码器把数据准备好,只是第一步;控制器能不能在正确的采样窗口里把每一位读对,是另一件事。

这也是我想借欧艾迪这个例子讲清楚的地方:国产绝对值编码器越来越多地进入设备现场以后,问题不再只是“有没有绝对值输出”,而是系统工程师有没有能力把这条 SSI 链路做扎实。

换句话说,欧艾迪这类编码器可以把位置数据稳定地吐出来,但这并不自动等于控制器在几米、十几米线束另一端一定能稳定读对。中间这一段链路,才是很多现场问题真正发生的地方。

二、论坛里那些 SSI 问题,其实都在补同一堂课

如果你去看论坛和博客,会发现很多 SSI 讨论不是在研究多复杂的协议,而是在解决很基础、也很真实的问题:STM32 怎么模拟 SSI?RS422 怎么转 TTL?时钟应该发多少个?上升沿采还是下降沿采?格雷码怎么转二进制?DATA+/DATA- 和 CLOCK+/CLOCK- 到底怎么接?

这类帖子放在欧艾迪这样的国产编码器场景里看,就很有意思。编码器资料已经把接口讲清楚了,但工程师真正落地时,还要把它接到自己的控制器、自己的线束、自己的电机系统里。SSI 的门槛低,低在协议;SSI 的坑深,深在现场。

很多人第一次做 SSI,只关心“读通”:时钟发够了吗?数据位数对了吗?格雷码转了吗?采样沿对了吗?RS422 转 TTL 的模块能不能用?这些当然重要,但它们只是第一步。真正到设备现场,还要继续问:线束多长,时钟跑多快,有没有终端,电机相线离编码器线多近,屏蔽层怎么接地,控制器和编码器之间有没有地电位差,接收器输入共模范围够不够,DATA 在采样点前后稳定多久。

SSI 这个接口最有迷惑性的地方就在这里:它很容易在实验桌上读通,但不代表它已经具备整机现场可靠性。

30 cm 线读通,不代表 10 m 线读通;空载读通,不代表重载读通;低速读通,不代表高速读通;电机不使能时读通,不代表 PWM 打开后还能读通;实验室读通,不代表客户现场还能读通。

所以,欧艾迪这类编码器不是“接上就完事”的器件,而是一个需要系统工程配合的反馈源。编码器负责把位置数据吐出来,线束和接收器负责把边沿送干净,控制器负责在正确窗口采样。任何一环掉链子,最后都会表现为“位置值不对”。

三、这类现场最怕的,不是完全读不到,而是偶尔错一位

在欧艾迪这类 SSI 绝对值编码器的应用里,完全读不到数反而好查。电源没接对、CLOCK+/CLOCK- 反了、DATA+/DATA- 反了、帧长配错、格雷码没转、采样沿不对,这些问题虽然烦,但通常是稳定地错。

真正麻烦的是另一类:桌面上 30 cm 线很好,装到设备上几米线束也能跑;低速很好,空载很好;一旦速度上去、负载加大、电机 PWM 更激烈,绝对值读数开始偶发跳变。

更难受的是,它不是一直错。可能十几分钟跳一次,可能某个姿态才跳,可能客户现场跳、自己实验室不跳,可能换一根线束就好了、换回来又复现,可能你把采样频率降一点,它又好了。

这时很多人第一反应是怀疑编码器:是不是磁钢偏心?是不是传感器噪声?是不是内部算法波动?是不是国产编码器一致性不够?于是开始加滤波、做平均、加异常值剔除、限制速度跳变。

但很多时候,这不是噪声,而是错误比特。

噪声可以被滤波压下去,错误比特不一定能。因为 SSI 的某一位一旦被采错,控制器得到的是一个格式上合法、数值上错误的位置值。它不像通信彻底失败那样容易暴露,它可能看起来很像真实角度,只是突然跳了一下。

我更建议先看物理层。因为同一颗编码器,换一套线束、换一个接收器、加对终端、改一下屏蔽接地,问题就可能消失。这时你以为自己修好了编码器,其实你修好的是 SSI 链路。

所以我一直觉得,SSI 现场最危险的状态不是“完全不能通信”,而是:

大多数时候都对,偶尔错一位。

这种故障最像玄学,也最容易把排查方向带偏。

四、示波器扎上去以后,真相往往很直观

很多人查欧艾迪这类 SSI 编码器的现场跳变,会先看软件:寄存器值有没有变化,位置值是不是连续,校验或状态位有没有报错,控制器有没有超时,上位机曲线有没有跳点。这些当然要看,但软件看到的是结果,不是原因。

真正查 SSI 错码,示波器要尽量往物理层扎,尤其要看接收器输入脚前的差分波形,而不是只看 MCU 或 FPGA 里面已经数字化之后的 0/1。

我通常会关心几个位置:控制器端发出去的 CLOCK+/CLOCK-;编码器端实际收到的 CLOCK+/CLOCK-;编码器端推出去的 DATA+/DATA-;控制器端接收器输入脚前的 DATA+/DATA-。很多问题只在最后这个位置暴露。你在逻辑分析仪上看到的是一个规规矩矩的数字波形,但在接收器输入脚前,DATA 可能已经在门限附近晃了两三次。

这时候你会看到一些很典型的东西:边沿变慢,过冲,反射,振铃,共模扰动,地弹,差分电压在接收器门限附近二次穿越。然后控制器刚好在那个“不该采”的瞬间采样了。

于是本来应该读 0 的位,被读成了 1;本来应该读 1 的位,被读成了 0。最后你看到的是一个绝对值跳变,但根因不是绝对值算法跳了,而是 SSI 的某一位在接收端被错误地判决了。

这就是为什么我说:

SSI 读到的是比特,现场输掉的是采样确定性。

五、把 5 MHz + 10 m 线束粗算一遍,问题就不玄学了

很多工程师低估 SSI,是因为没有把时序预算完整算过。

假设 SSI 跑到 5 MHz,CLK 周期就是 200 ns。如果占空比接近 50%,半周期约 100 ns。再假设线缆传播延迟按常见工程估算 5 ns/m 来算,10 m 线缆单程就是约 50 ns。

SSI 是主站发 CLK,从站回 DATA。也就是说,光线缆传播延迟就有:CLK 从控制器到编码器约 50 ns,DATA 从编码器回控制器约 50 ns,线缆往返接近 100 ns。

注意,这还没算控制器端 CLK 驱动器延迟、编码器端输入识别延迟、编码器内部数据输出延迟、编码器端 DATA 输出驱动延迟、控制器端差分接收器传播延迟、控制器输入同步链路延迟,以及边沿畸变带来的实际门限穿越时间偏移。

如果你用 AM26C32 这类差分线接收器,它本身也有传播延迟。AM26C32 这类器件看起来只是“差分转单端”的小料,但在几 MHz 的 SSI 里,十几纳秒到几十纳秒量级的传播延迟、通道 skew、门限变化,都会进入时序预算。

17 ns 听起来不大,但在 5 MHz SSI 里,一个周期只有 200 ns。如果你本来以为自己有几十纳秒采样裕量,接收器延迟、线缆延迟、边沿偏移叠在一起,就会变得非常敏感。

更关键的是:传播延迟是固定项,至少能算;现场真正要命的是动态项。比如线缆阻抗不连续导致反射,连接器处阻抗突变,终端电阻没有放对,屏蔽层接地路径不合理,编码器线束和电机相线长距离平行,驱动器 PWM 边沿带来共模扰动,控制柜和电机端存在地电位差,电机负载变化导致噪声谱变化,温度和供电变化导致驱动器边沿速度变化。

这些东西不会每一帧都一样。所以你会看到非常典型的现场现象:低速不跳、高速跳;空载不跳、重载跳;桌面不跳、整机跳;短线不跳、长线跳;实验室不跳、客户现场跳;同一颗欧艾迪编码器,换一套线束就好了。

这不是编码器突然变差了,而是物理层裕量被现场工况一点一点吃掉了。

六、不要把“RS422 差分”理解成“怎么接都稳”

欧艾迪资料里写 SSI 采用 RS422 电平,一对差分时钟,一对差分数据,这是很标准的做法,也是 SSI 能在工业现场广泛使用的重要原因。

但很多人看到“RS422 差分”,会产生一种误解:既然是差分,那抗干扰应该没问题。

这句话只对了一半。差分确实能提高抗干扰能力,比单端更适合长线,也能抑制一部分共模噪声。但差分不是魔法。差分接收器最后仍然要做一件很朴素的事:判断输入差分电压到底跨没跨过门限。

它不会知道哪个边沿是你真正想要的边沿,也不会知道哪个边沿是反射造成的假动作,更不会知道“这次系统负载很大,PWM 干扰很强,我应该宽容一点”。

它只看输入。输入跨过门限,它就翻转;输入在门限附近晃,它也可能跟着晃。

所以,在长线高速场景里,真正的问题不是“有没有用差分”,而是:差分对有没有成对走线,线缆阻抗是否匹配,终端位置是否正确,接收器输入共模范围是否足够,接收器迟滞是否足够,反射有没有在采样点附近叠加,接收器输出有没有窄脉冲,采样点是否避开了边沿不确定区。

差分只是物理层工程的开始,不是结束。

欧艾迪这类编码器把 CLOCK+/CLOCK-、DATA+/DATA- 提供出来,说明它给了你一个适合工业现场的差分接口入口;但后面的线束、端接、屏蔽、接地、接收器和采样策略,仍然是系统工程师自己的作业。

七、控制器侧也一样:能接 SSI,不等于读得可靠

再看控制器或采集模块侧。很多国产设备里,欧艾迪这类绝对值编码器会接到运动控制卡、PLC 模块、伺服驱动器反馈口,或者自己做的 MCU/FPGA 板卡上。这个时候,SSI 就不再是编码器的一项参数,而是整条控制链路的一部分。

一条 SSI 链路至少包括编码器、线缆、连接器、差分驱动、差分接收、终端匹配、屏蔽接地、控制器采样逻辑、帧格式配置和软件解析。

编码器输出正确,不代表模块一定读对;模块支持 SSI,不代表所有线束都能稳定跑高频;帧长可配,不代表随便填都不会出事;支持格雷码和二进制,不代表系统集成时不会配反。

这里要把两类错误分开。

第一类是协议层错误,比如帧长错了、单圈位数错了、多圈位数错了、格雷码和二进制搞反了、MSB/LSB 顺序理解错了、校验位和状态位没处理、时钟极性和采样沿没对上。这种错误一般是稳定地错。

第二类是物理层错误,比如边沿抖动、过冲反射、共模扰动、地弹、接收器门限附近晃动、采样窗口被压缩、最差工况下 setup/hold 裕量不够。这种错误一般是偶发地错。

第一类问题,靠手册、参数、组态和逻辑分析仪,通常能查出来。第二类问题,必须拿示波器去看物理波形,尤其要看差分接收器输入脚前的波形。否则你看到的只是“已经被判决过的结果”。

这也是很多现场复盘时容易忽略的地方:大家会问“欧艾迪编码器有没有问题”,却不一定会问“控制器接收端的 DATA 在采样点附近是不是干净”。前一个问题容易变成甩锅,后一个问题才是工程。

八、接收器不是“小料”,它可能决定最后一位是 0 还是 1

很多原理图里,SSI 的差分接收器只是一个小芯片。比如 AM26C32 这类四路差分线接收器,经常被当成“差分转单端”的普通器件来看。还有一些项目会用 RS422/RS485 收发器或隔离收发器做中间转换,觉得“只要速度够,应该就没问题”。

但在高速长线场景里,它一点都不普通。它是模拟世界和数字世界之间的门卫。它前面是线缆、反射、共模噪声、过冲、地弹;它后面是 MCU、FPGA、CPLD、运动控制芯片里的 0 和 1。

如果接收器输入端的差分信号足够干净,它输出的数字信号就很确定。如果输入端在门限附近来回晃,它仍然会按照自己的门限和迟滞去翻译。它不会告诉你:“我刚才其实犹豫了一下。”它只会给你一个干脆的结果。这个结果可能是对的,也可能是错的。

尤其对 SSI 来说,最危险的情况不是 DATA 完全坏掉,而是某一位刚好在采样瞬间被读错。比如第 17 位本来应该是 0,反射和共模扰动叠加后,接收器输出短暂翻成 1,控制器刚好在这个窗口采样,最后得到一个只错了一位的绝对值。

如果这个 bit 权重比较高,位置值会明显跳变;如果这个 bit 权重比较低,位置值可能只是轻微毛刺;如果还有格雷码转换,错误传播方式可能更让人迷惑。

所以我不太喜欢把这类问题简单叫“噪声”。它不是普通意义上的模拟噪声,而是物理层边沿不确定,最终被数字系统判成了错误比特。

九、线长—时钟频率降额表,才是工程师真正该看的东西

很多编码器资料会写:支持 SSI,最高时钟多少,最大线长多少,RS422 差分输出,适合长距离传输。这些信息当然要看,但真正有经验的工程师,会特别留意一类表:

线缆长度 vs. 最高时钟频率。

这张表背后就是物理层现实。短线可以跑高频,线越长,时钟越要降;负载越复杂,裕量越要留;现场干扰越强,越不能贴着极限跑。

很多人看到“最高 2 MHz”,就想在自己的设备上直接跑 2 MHz。但问题是:这个 2 MHz 是在什么线长下、什么线缆下、什么终端下、什么接收器下、什么环境下、什么温度和供电条件下成立的?

如果这些条件和你的现场完全不一样,最高频率就不能直接照搬。在 SSI 这种同步接口里,跑得越快,周期越短,采样窗口越小。1 MHz 周期是 1000 ns,2 MHz 周期是 500 ns,5 MHz 周期是 200 ns。线缆传播延迟、接收器延迟、边沿抖动,到了 1 MHz 可能只是小扰动;到了 5 MHz,就可能变成决定系统稳定性的关键因素。

所以,工程上不要只问“这个欧艾迪编码器支不支持 SSI”,更应该问:

在我的线束长度、我的控制器、我的接收器、我的电机干扰环境里,SSI 还能不能稳定采样?

这才是选型会后面真正要补上的问题。

十、我会怎么验收一条 SSI 链路?

如果一个项目真的要把欧艾迪这类 SSI 绝对值编码器用在长线、高速、电机强干扰环境里,我一般会把验收分成两层。

第一层是协议层。先确认帧长度、单圈位数、多圈位数、格雷码还是二进制、MSB first 还是 LSB first、有没有奇偶校验或 CRC、错误位和报警位有没有被正确处理、控制器读取周期是否合理、时钟极性和采样沿是否符合编码器要求、超时之后系统怎么处理、异常帧是丢弃重读还是直接参与控制。

协议层要先清干净,否则你后面看物理层,很容易被假问题干扰。比如位宽错了,你怎么调终端都没用;格雷码没转,你怎么看波形都觉得“角度不对”;采样沿错了,低速可能还能蒙混过去,高速一定会暴露。

第二层是物理层。重点看 CLOCK+/CLOCK- 的差分幅度、DATA+/DATA- 的差分幅度、边沿上升/下降时间、过冲和欠冲、振铃持续时间、接收器门限附近有没有二次穿越、终端电阻位置和阻值、线缆是否为合适的双绞屏蔽线、差分对有没有被拆散、屏蔽层接地方式、编码器端和控制器端地电位差、电机 PWM 打开前后的波形变化、最大负载下 DATA 是否仍然稳定、最高温度和最低供电下边沿是否变慢、最长线束下采样窗口还剩多少。

这里有一个关键原则:

不要只在数字端看“有没有方波”,要在接收器输入脚前看“采样点附近是否干净”。

“看起来像方波”不够。真正要回答的是:在控制器采样点前后,DATA 是否有足够稳定时间?这个“足够”,最好不要靠感觉,要用示波器量出来。

十一、几个现场最容易踩的坑

第一个坑,是 CLK 和 DATA 差分对被拆散。SSI 至少应该保证 CLOCK+/CLOCK- 是一对,DATA+/DATA- 是一对。不要为了接线方便,把差分对拆开,也不要让其中一根绕远路。差分对一旦不平衡,共模噪声就更容易转成差模噪声。

第二个坑,是编码器线和电机相线长距离并行。电机相线上的 PWM 边沿很凶,欧艾迪这类编码器的 SSI 线束如果长距离贴着电机相线走,屏蔽和差分也不一定救得回来。尤其在拖链、关节、紧凑型驱控一体结构里,这个问题很常见。

第三个坑,是没有终端,或者终端位置不对。短线低速时,不加终端可能也能跑;长线高速时,反射会直接叠在边沿附近。终端电阻不是装饰件,它决定反射能不能被压住。

第四个坑,是终端太多,把信号幅度拉低。有些现场为了“保险”,编码器端、控制器端、中间转换板上都加终端。结果反射是小了,但驱动器负载变重,差分幅度被拉低,接收器门限裕量反而变差。

第五个坑,是屏蔽层接地靠习惯,不靠系统。一端接地、两端接地、电容接地、连接器壳体接机壳,没有一种方案永远正确。要看设备结构、地电位差、噪声回流路径和 EMC 要求。最怕的是图纸上一套,现场装配又变成另一套。

第六个坑,是时钟频率贴着上限跑。很多时候 SSI 不需要跑极限。控制周期允许的话,把 CLK 从 2 MHz 降到 1 MHz,甚至 500 kHz,可能比后面写一堆滤波和异常处理更可靠。

第七个坑,是把错码交给软件兜底。软件可以做连续性检查、速度约束、异常帧丢弃、重复读取、CRC 校验。但如果物理层长期处在临界状态,软件只是在替硬件问题擦屁股。

这些坑听起来都不高级,但现场最容易死在这些“不高级”的问题上。因为它们不是单点失效,而是多个小裕量一起被吃掉。线束稍长一点,终端差一点,PWM 凶一点,采样点偏一点,最后就变成偶发错码。

十二、软件能做什么,不能做什么?

软件当然不是没用。好的软件策略可以让 SSI 链路更可诊断、更可控。比如连续读取两帧比对,超出速度上限的跳变做异常标记,启用编码器的错误位和报警位,能用 CRC 或校验就不要裸读,通信超时后不要直接沿用旧值,异常帧不要悄悄送进控制环。

但软件不能替你修好边沿。它可以降低错误值进入控制环的概率,却不能改变 DATA 在接收器门限附近晃动的事实。它可以帮你发现错码,却不能让一条没有裕量的长线链路突然变可靠。

这在用欧艾迪这类国产编码器做设备时尤其要注意。国产器件进入真实设备,是好事;但系统工程不能靠“软件兜底”来掩盖物理层没有验收。否则最后问题一出现,大家很容易把锅甩给编码器、甩给算法、甩给客户现场环境,却没有人认真去量接收端 DATA 在采样点附近到底稳不稳。

所以我对这类问题的判断顺序通常是:先把协议层配对,再把物理层测清楚,最后再谈软件兜底。顺序反过来,就会变成算法团队给硬件问题背锅。

十三、从一个国产 SSI 场景,回到系统链路

欧艾迪这类绝对值编码器,在国产设备里其实很有代表性:编码器装在电机端、关节端或执行机构上,控制器在电柜里,中间隔着线束、拖链、连接器和复杂的接地环境。

图纸上看,SSI 只是几根线:电源、地、CLOCK+/CLOCK-、DATA+/DATA-。但到了现场,这几根线要穿过电机 PWM、地电位差、屏蔽层接地、终端匹配、接收器门限和控制器采样逻辑。

所以真正的问题不是“能不能读到数”,而是这条同步串行链路有没有被当成一个完整系统来设计和验收。CLK 从控制器出去,经过线缆到编码器;DATA 再从编码器回来,经过接收器进入控制器。中间任何一个环节没有裕量,最后都可能表现为绝对值读数偶发跳变。

工程上真正该问的是:最长线束下,最高时钟下,最大负载下,电机 PWM 最激烈的时候,DATA 在采样点附近还有多少稳定窗口?

如果这个问题回答不上来,“支持 SSI”就只是说明能接上,不代表每一位都能稳定读对。

这也是我愿意从欧艾迪说起的原因。它不是一个遥远的进口样本,也不是教科书上的接口框图,而是很多国产设备里真的会用到的编码器场景。越是这种看起来朴素、好接、标准的接口,越容易让人忽略它背后的物理层细节。

十四、最后一句话

从欧艾迪绝对值编码器,到论坛里各种 STM32 读 SSI 的工程讨论,再到工业控制器里的 SSI 输入模块,本质上都在提醒同一件事:

SSI 不是只要协议读通就结束了,它是一条从控制器时钟、线缆、编码器输出、接收器门限到采样点的完整链路。

很多现场错码,不是编码器坏了,也不是协议错了,更不是简单的“传感器噪声”。它可能是长线、高速、电机干扰、终端不匹配和接收器门限一起,把原本应该稳定的采样窗口挤没了。

所以我最想提醒做伺服、机器人、平台控制和工业自动化的工程师一句:

错码不是噪声,滤波救不了错误比特。

你真正要修的,可能不是算法,也不是编码器,而是那条你一直以为“只是几根线”的 SSI 物理层。

应作如是观
公众号「如是有为」二维码

关注公众号「如是有为」

微信扫一扫,新文章先在公众号发出。