3. 从站硬件基础

核心原理:ESC 在从站硬件中的角色与选型依据

EtherCAT 从站协议栈的物理载体是从站控制器(ESC,EtherCAT Slave Controller)。ESC 是一颗专用 ASIC 或 FPGA IP,负责在硬件层面完成 EtherCAT 数据帧的识别、转发、处理与回写。协议栈软件(如 SOEM、SSC 生成的代码)运行在主控 MCU 上,通过 ESC 的寄存器接口与数据通路完成过程数据交换。因此,ESC 的选型直接决定了从站支持的功能类型(如是否支持分布式时钟 DC、是否支持热连接)、最大过程数据长度、以及主控接口的通信带宽。

选型时需关注以下核心参数:

  • ESC 类型:ASIC(如 ET1100、ET1200)或 FPGA IP(如 Beckhoff 的 ESC IP)。ASIC 成本低、时序固定;FPGA 灵活但需自行验证时序。
  • 支持的 PDI(过程数据接口):SPI 从接口、8/16 位并行接口、或本地总线(如 Intel/Motorola 模式)。
  • FMMU 数量:通常 3~8 个,决定可映射的逻辑地址段数量。
  • SM(Sync Manager)通道数:通常 4~8 个,用于管理邮箱和过程数据的同步方向。
  • 分布式时钟(DC):是否支持 64 位同步时钟,用于精确同步运动控制。
  • EEPROM 接口:是否内置 EEPROM 控制器,以及支持的容量(如 16Kbit~1Mbit)。

选型速查清单:

需求场景推荐 ESCPDI 接口关键理由
数字量 I/O 从站ET1200SPI低成本、小封装、支持 4 个 FMMU
模拟量采集/伺服驱动ET1100并行 16 位大过程数据、DC 支持、8 个 FMMU
自定义协议扩展FPGA IP自定义总线灵活集成私有逻辑

硬件接口:SPI 与并行接口的设计要点

ESC 与主控 MCU 之间的接口称为 PDI(Process Data Interface)。最常见的两种是 SPI 从接口和并行总线接口。SPI 接口引脚少、适合低功耗和小型从站;并行接口吞吐量大、适合过程数据长度较大的从站(如伺服驱动器)。

SPI 接口设计要点:

  • ESC 作为 SPI 从设备,主控 MCU 作为 SPI 主机。
  • 典型速率:ET1100 支持最高 20 MHz SPI 时钟。
  • 需注意 SPI 模式(CPOL/CPHA)必须与 ESC 数据手册一致,通常为 Mode 0 或 Mode 3。
  • 中断引脚(IRQ)用于通知主控有新的过程数据或事件。

并行接口设计要点:

  • 使用 8 位或 16 位数据总线,配合地址线、读写控制信号(RD、WR、CS)。
  • 适合主控有外部存储器接口(如 STM32 FSMC)的场景。
  • 并行接口的时序必须满足 ESC 的建立/保持时间要求,必要时插入等待周期。
// SPI 读取 ESC 寄存器示例(伪代码,基于 ET1100)
uint16_t esc_read_reg(uint16_t addr) {
    uint16_t data = 0;
    SPI_CS_LOW();
    SPI_TransferByte(0x00);          // 读命令
    SPI_TransferByte((addr & 0xFF00) >> 8); // 地址高字节
    SPI_TransferByte(addr & 0x00FF); // 地址低字节
    data = SPI_TransferByte(0x00);   // 读取高字节
    data = (data & 0xFF) << 8;
    data |= SPI_TransferByte(0x00);  // 读取低字节
    SPI_CS_HIGH();
    return data;
}

设计建议:SPI 接口务必在 PCB 上串联 22~33Ω 电阻以抑制振铃,并保持走线短而直。并行接口则需注意数据总线方向控制,避免总线冲突。

外部存储与 EEPROM:从站信息与启动配置

每个 EtherCAT 从站必须外接一颗 EEPROM(通常为 16Kbit 或 32Kbit),用于存储从站信息接口(SII,Slave Information Interface)数据。SII 中保存了厂商 ID、产品码、修订号、序列号、SM 配置、FMMU 配置、PDO 映射等关键信息。主站(如 TwinCAT)在上电后通过 ESC 的 EEPROM 端口读取这些数据,从而自动识别从站类型并建立过程数据映射。

EEPROM 的访问方式有两种:

  1. ESC 内置 EEPROM 控制器:主控 MCU 通过 ESC 寄存器(如 0x0500~0x050F 区域)间接读写 EEPROM。这是最常用的方式,无需额外占用 MCU 的 I2C 引脚。
  2. 主控直接外接 EEPROM:若 ESC 不支持内置控制器(如某些 FPGA IP),则需 MCU 通过 I2C/SPI 直接读写 EEPROM,并在启动时手动加载配置到 ESC。

EEPROM 的写入流程通常分为两个阶段:

  • 离线烧录:使用 SSC 工具或第三方软件(如 ET9000)生成 EEPROM 镜像,通过 JTAG/编程器写入。
  • 在线更新:主站通过 FoE(File over EtherCAT)协议将新镜像下载到从站,由从站固件写入 EEPROM。

常见误区:不要将 EEPROM 与 ESC 的配置寄存器混淆。EEPROM 存储的是上电初始化数据,而寄存器是运行时的动态状态。若 EEPROM 内容损坏,从站将无法被主站识别,表现为“设备无响应”或“找不到从站”。

案例场景:基于 ET1100 的伺服驱动器从站设计

以一个典型的伺服驱动器从站为例,其硬件架构如下:

  • ESC:ET1100(BGA 封装,支持 8 个 FMMU、8 个 SM、DC)。
  • PDI:16 位并行接口,连接 STM32F407 的 FSMC 总线。
  • EEPROM:AT24C32(32Kbit),通过 ET1100 内置控制器访问。
  • 过程数据:位置指令 4 字节 + 速度指令 4 字节 + 状态字 2 字节 + 实际位置 4 字节,共 14 字节输入/输出。

在该设计中,并行接口的地址映射如下:

// FSMC 地址映射示例
#define ESC_BASE_ADDR     0x60000000  // FSMC Bank1
#define ESC_ALE_OFFSET    0x00000000  // 地址锁存使能
#define ESC_DATA_OFFSET   0x00100000  // 数据端口

// 读取 ESC 寄存器 0x0100(AL Control)
uint16_t al_control = *(volatile uint16_t *)(ESC_BASE_ADDR + ESC_ALE_OFFSET + 0x0100);

EEPROM 中的 SII 数据布局(部分关键字段):

偏移地址内容示例值
0x0000PDI 配置0x0010(并行 16 位)
0x0004厂商 ID0x0000002C(Beckhoff)
0x0008产品码0x12345678
0x000C修订号0x00000001
0x0010SM0 配置邮箱写通道
0x0018SM2 配置过程数据输出

误区与复盘:ESC 硬件设计中的常见问题

误区一:SPI 接口的片选信号处理不当。有些设计将 ESC 的 CS 引脚直接接地,导致 SPI 通信无法区分帧边界。正确做法是由 MCU 的 GPIO 控制 CS,每次访问前拉低、访问后拉高。

误区二:忽略 EEPROM 的写保护引脚。AT24C32 的 WP 引脚若悬空或接错电平,可能导致在线更新 EEPROM 失败。应将 WP 引脚通过 10kΩ 电阻上拉或下拉,并确保在 FoE 更新时能由 MCU 控制。

误区三:并行接口时序不满足建立/保持时间。ET1100 对并行读写的时序有严格要求,若 FSMC 配置不当,会出现偶发读写错误。建议在调试时使用逻辑分析仪抓取时序,并对照数据手册中的 AC 特性表逐项核对。

复盘建议:在从站硬件调试阶段,应首先使用 ET9000 或 TwinCAT 扫描工具读取 EEPROM 内容,确认 SII 数据正确。若扫描不到从站,优先检查 ESC 的 PDI 接口配置引脚(如 ET1100 的 PDI 类型选择引脚)是否与硬件连接一致。此外,务必在 PCB 上预留 ESC 的调试引脚(如 ERROR、RUN 指示灯),便于快速定位通信状态。