3. 主站与从站架构解析

做EtherCAT这么多年,我见过不少工程师一上来就调通信,结果出了问题根本不知道是主站还是从站的问题。说白了,你得先搞清楚两边各自在干什么,才能谈得上调试。

这一节,咱们就掰开揉碎,看看主站和从站到底长什么样,它们之间是怎么配合的。

3.1 主站软件架构

主站这边,说白了就是一台带网口的计算机,跑着实时操作系统。我个人习惯把主站软件分成三层来看:RTOS、网卡驱动、应用层。

3.1.1 RTOS(实时操作系统)

为什么非得用RTOS?你想想看,EtherCAT的周期通常只有1ms甚至更短。Windows或者Linux普通内核,调度延迟动不动就几十毫秒,根本扛不住。

我常用的RTOS有这些:

  • RT-Linux / Xenomai:在Linux上打实时补丁,适合工业PC
  • RT-Kernel / INtime:Windows下的实时扩展,老项目里常见
  • FreeRTOS / RT-Thread:嵌入式平台,资源受限时用
我的经验: 如果项目对成本敏感,可以考虑RT-Linux。我在一个包装机械项目里用过,跑了两年没出过问题。但要注意,RT-Linux的调试工具不如商业RTOS丰富,前期开发会慢一些。

3.1.2 网卡驱动

EtherCAT对网卡驱动有特殊要求。普通网卡驱动会把数据包交给协议栈处理,延迟很大。EtherCAT需要驱动直接操作DMA,把数据从网卡搬到应用层,中间不经过TCP/IP。

我一般推荐这几类网卡:

网卡类型 特点 适用场景
Intel I210 / I350 原生支持EtherCAT,驱动成熟 大多数工业PC
Realtek RTL8169 便宜,但需要打补丁 成本敏感项目
专用EtherCAT网卡(如Beckhoff FC系列) 硬件加速,延迟最低 高性能运动控制
注意: 我曾经在一个项目里用了某款廉价USB网卡,结果周期抖动超过500μs,电机跑起来一顿一顿的。后来换成Intel I210,抖动直接降到10μs以内。网卡这块,真不能省。

3.1.3 应用层

应用层就是咱们写业务逻辑的地方。比如:

  • 读取编码器位置
  • 计算PID输出
  • 发送速度指令给伺服

应用层通过EtherCAT主站协议栈(比如SOEM、IgH、TwinCAT)来访问从站。协议栈会帮你处理好数据帧的封装和解析,你只需要读写PDO(过程数据对象)就行。

3.2 从站硬件架构

从站这边,核心是ESC芯片和微控制器。我画了个图,你看一眼就明白了:

EtherCAT从站硬件架构 ESC芯片 (如LAN9252、ET1100) 处理EtherCAT数据帧 提供PDO映射 微控制器 (如STM32、ARM Cortex-M) 运行从站协议栈 执行应用逻辑 从站协议栈 (SSC、Beckhoff Stack) SPI/并行 外部接口 (编码器、IO、驱动器) 数据流向:网线 → ESC → 微控制器 → 协议栈 → 应用

3.2.1 ESC芯片

ESC(EtherCAT Slave Controller)是从站的硬件核心。它负责:

  • 解析EtherCAT数据帧
  • 提取或插入PDO数据
  • 管理分布式时钟(DC)

市面上常见的ESC芯片有:

  • Beckhoff ET1100 / ET1200:老牌,稳定,但贵
  • Microchip LAN9252 / LAN9253:性价比高,我项目里用得最多
  • Renesas R-IN32M3:集成MCU,适合紧凑设计
关键点: ESC芯片决定了从站能支持多少PDO、多少同步管理器(SM)。LAN9252支持4个SM,ET1100支持8个。如果你的从站需要很多通道,选ET1100更合适。

3.2.2 微控制器

微控制器(MCU)负责运行从站协议栈和应用逻辑。它通过SPI或并行总线与ESC通信。

我常用的MCU选型:

MCU型号 主频 适用场景
STM32F407 168MHz 通用IO从站
STM32H743 480MHz 高性能伺服驱动
Infineon XMC4800 144MHz 集成EtherCAT,省ESC
避坑指南: 我曾经选了一款低端MCU做从站,结果SPI通信速率上不去,导致PDO更新周期超过500μs。后来换成STM32F4系列,问题就解决了。MCU的SPI时钟至少要到20MHz,否则会拖累整个系统。

3.2.3 从站协议栈

从站协议栈是运行在MCU上的软件,它负责:

  • 处理EtherCAT状态机(Init → Pre-Op → Safe-Op → Op)
  • 管理邮箱通信(SDO)
  • 映射PDO数据

常见的从站协议栈:

  • Beckhoff SSC(Slave Stack Code):官方出品,功能全,但授权费不低
  • 开源协议栈(如SOEM从站部分):免费,但需要自己移植
  • 芯片厂商提供的SDK:比如Microchip的LAN9252 SDK,上手快

3.3 主从站交互流程

主站和从站是怎么配合的?我拿一个典型的运动控制周期来举例:

  1. 主站发送数据帧:主站通过网卡发出一个EtherCAT帧,里面包含了所有从站的输出数据(比如速度指令)。
  2. 从站处理数据帧:帧经过每个从站时,ESC芯片会提取属于自己的数据,同时插入输入数据(比如当前位置)。
  3. 从站返回数据帧:帧走完所有从站后,回到主站。主站解析输入数据,更新应用层。
  4. 应用层计算:主站应用层根据输入数据计算新的输出指令,准备下一个周期。

整个过程在1ms甚至更短的时间内完成。你想想看,这要求主站和从站的时钟必须同步。EtherCAT通过分布式时钟(DC)来实现这一点。

核心要点: 主站和从站的交互,本质上就是「主站发帧 → 从站处理 → 从站回帧」的循环。调试时,如果发现通信异常,先检查帧是否完整,再检查PDO映射是否正确。

嗯,这一节的内容就到这里。主站和从站的架构,说白了就是「一个发号施令,一个执行反馈」。搞清楚了这两边各自在干什么,后面调试起来就顺多了。