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:嵌入式平台,资源受限时用
3.1.2 网卡驱动
EtherCAT对网卡驱动有特殊要求。普通网卡驱动会把数据包交给协议栈处理,延迟很大。EtherCAT需要驱动直接操作DMA,把数据从网卡搬到应用层,中间不经过TCP/IP。
我一般推荐这几类网卡:
| 网卡类型 | 特点 | 适用场景 |
|---|---|---|
| Intel I210 / I350 | 原生支持EtherCAT,驱动成熟 | 大多数工业PC |
| Realtek RTL8169 | 便宜,但需要打补丁 | 成本敏感项目 |
| 专用EtherCAT网卡(如Beckhoff FC系列) | 硬件加速,延迟最低 | 高性能运动控制 |
3.1.3 应用层
应用层就是咱们写业务逻辑的地方。比如:
- 读取编码器位置
- 计算PID输出
- 发送速度指令给伺服
应用层通过EtherCAT主站协议栈(比如SOEM、IgH、TwinCAT)来访问从站。协议栈会帮你处理好数据帧的封装和解析,你只需要读写PDO(过程数据对象)就行。
3.2 从站硬件架构
从站这边,核心是ESC芯片和微控制器。我画了个图,你看一眼就明白了:
3.2.1 ESC芯片
ESC(EtherCAT Slave Controller)是从站的硬件核心。它负责:
- 解析EtherCAT数据帧
- 提取或插入PDO数据
- 管理分布式时钟(DC)
市面上常见的ESC芯片有:
- Beckhoff ET1100 / ET1200:老牌,稳定,但贵
- Microchip LAN9252 / LAN9253:性价比高,我项目里用得最多
- Renesas R-IN32M3:集成MCU,适合紧凑设计
3.2.2 微控制器
微控制器(MCU)负责运行从站协议栈和应用逻辑。它通过SPI或并行总线与ESC通信。
我常用的MCU选型:
| MCU型号 | 主频 | 适用场景 |
|---|---|---|
| STM32F407 | 168MHz | 通用IO从站 |
| STM32H743 | 480MHz | 高性能伺服驱动 |
| Infineon XMC4800 | 144MHz | 集成EtherCAT,省ESC |
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 主从站交互流程
主站和从站是怎么配合的?我拿一个典型的运动控制周期来举例:
- 主站发送数据帧:主站通过网卡发出一个EtherCAT帧,里面包含了所有从站的输出数据(比如速度指令)。
- 从站处理数据帧:帧经过每个从站时,ESC芯片会提取属于自己的数据,同时插入输入数据(比如当前位置)。
- 从站返回数据帧:帧走完所有从站后,回到主站。主站解析输入数据,更新应用层。
- 应用层计算:主站应用层根据输入数据计算新的输出指令,准备下一个周期。
整个过程在1ms甚至更短的时间内完成。你想想看,这要求主站和从站的时钟必须同步。EtherCAT通过分布式时钟(DC)来实现这一点。
嗯,这一节的内容就到这里。主站和从站的架构,说白了就是「一个发号施令,一个执行反馈」。搞清楚了这两边各自在干什么,后面调试起来就顺多了。