================================================================================ ECM-XF EtherCAT 主站控制器 - PCB功能使用手册 ================================================================================ -------------------------------------------------------------------------------- 1. 产品概述 -------------------------------------------------------------------------------- 1.1 产品简介 本产品是基于 STM32F401RE 微控制器的 EtherCAT 主站控制器,通过 SPI 接口驱动 ECM-XF 芯片(NEXTW TECHNOLOGY 公司)实现完整的 EtherCAT 通信协议栈,支持控制符合 CIA402 标准的伺服电机驱动器。 1.2 主要特性 MCU : STM32F401RE,ARM Cortex-M4,84MHz EtherCAT协议 : ECM-XF 芯片实现数据链路层 SPI通信 : SPI1,656.25kHz(预分频/128),软件片选 网络接口 : RJ45,支持 DC 同步 调试接口 : J-Link RTT + USART1/USART2 DC同步周期 : 默认 500μs(可配置) 支持协议 : CIA402 伺服协议 -------------------------------------------------------------------------------- 2. 硬件接口定义 -------------------------------------------------------------------------------- 2.1 引脚分配表 引脚 功能 方向 说明 -------- -------------------- -------- ----------------------------------- PA4 ECM-XF 复位 / SPI片选 输出 低电平复位,正常工作时作为软件 CS PA5 SPI1_SCK 输出 SPI 时钟 PA6 SPI1_MISO 输入 SPI 数据输入 PA7 SPI1_MOSI 输出 SPI 数据输出 PB6 通用输出 输出 默认高电平,备用 PB14 LED 状态指示 输出 绿色 MCU 状态灯,系统运行状态指示(500ms 闪烁) PC13 用户按钮 B1 输入 下降沿中断触发 PA9 USART1_TX 输出 用户交互命令行(115200bps) PA10 USART1_RX 输入 用户交互命令行 PA2 USART2_TX 输出 调试输出(115200bps) PA3 USART2_RX 输入 调试输入(备用) PB13 SPI2_SCK 输出 备用 SPI 接口 PB14 SPI2_MISO / LED 输入/输出 双重用途:SPI2_MISO(备用)、绿色 MCU 状态灯 PB15 SPI2_MOSI 输出 备用 SPI 接口 2.2 SPI 通信时序 STM32 (Master) ECM-XF (Slave) | | |-- [PA4 = LOW] ----------------------->| // 拉低片选 |-- SPI 发送数据 ---------------------->| // 全双工收发 |<-- SPI 接收数据 <---------------------| |-- [PA4 = HIGH] ---------------------->| // 拉高片选 SPI 配置参数: - 模式:Master,全双工 - 数据宽度:8-bit - 时钟极性/相位:CPOL=0, CPHA=0 (Mode 0) - 预分频:128(APB2=84MHz,SPI 时钟=656.25kHz) 2.3 ECM-XF 芯片连接 ┌─────────────────────────────────────────────────────────────┐ │ STM32F401RE │ │ ┌───────────────────────────────────────────────────────┐ │ │ │ PA4 ────────── CS#/RESET ────────────┐ │ │ │ │ PA5 ────────── SCK ──────────────────┤ │ │ │ │ PA6 ────────── MISO ─────────────────┤ ECM-XF 芯片 │ │ │ │ PA7 ────────── MOSI ─────────────────┤ │ │ │ └──────────────────────────────────────┴────────────────┘ │ │ │ │ │ └─── RJ45 ────> EtherCAT 网络 │ └─────────────────────────────────────────────────────────────┘ 2.4 供电要求 电源 电压 电流 说明 ---------- ------ ------ ----------------------------------- 主电源 3.3V ≥500mA STM32 及 ECM-XF 芯片供电 以太网供电 - - 由 ECM-XF 内部处理,通过 RJ45 接口 2.5 PCB 物理接口 2.5.1 电源接口 引脚 名称 功能 说明 -------- ------ -------- ----------------------------------- VCC 3.3V 电源输入 建议使用稳压电源,纹波 ≤ 100mV GND GND 地 模拟地与数字地共地 2.5.2 SWD 调试接口 标准 4 针 SWD 接口,用于 J-Link 调试器连接: 引脚 名称 功能 -------- ------ ----------------------- 1 SWDIO SWD 数据输入/输出 2 SWCLK SWD 时钟输入 3 GND 地 4 VCC 电源(可选,由调试器提供) 2.5.3 RJ45 网络接口 特性 说明 ---------- --------------------------- 接口类型 标准 RJ45,支持 10/100Mbps 连接器 带 LED 指示灯的屏蔽网口 RJ45 LED 指示灯含义: LED 颜色 状态 含义 ---------- ------ ------ ------------------- 链接灯 绿色 常亮 网络连接正常 链接灯 绿色 闪烁 数据传输中 速度灯 黄色 常亮 100Mbps 连接 速度灯 黄色 熄灭 10Mbps 连接 -------------------------------------------------------------------------------- 3. 软件架构 -------------------------------------------------------------------------------- 3.1 项目文件结构 ECM-XF/ ├── Core/Src/main.c # 用户交互式主程序(标准 main() 入口,含 UART/RTT 命令行) ├── Core/Inc/main.h # STM32 HAL 标准头文件 ├── MOTOR/ │ ├── main.c # NEXTW 官方参考示例(ex_main() 入口,纯自动运行) │ ├── platform.c # 硬件抽象层(SPI通信 + 延时) │ ├── EcmUsrDriver.c # ECM-XF 驱动核心 │ ├── EcmDriver.h # SPI 协议定义 │ ├── Utility.c # CIA402 工具函数 │ ├── PdoMapping.c # PDO 映射配置 │ └── PdoDefine.h # PDO 数据结构定义 └── MDK-ARM/ECM-XF.uvprojx # Keil 项目文件 3.2 启动入口说明 项目包含两套主程序,通过编译配置选择: 版本 入口函数 特点 使用场景 -------------- ---------- -------------------------------- -------------------------- Core/Src/main.c main() 交互式控制,支持 UART/RTT 命令行输入 用户开发调试、手动控制电机 MOTOR/main.c ex_main() 纯自动运行,无交互界面 生产环境、自动化测试 注意:当前工程默认使用 Core/Src/main.c 的 main() 入口,ex_main() 通过 main() 内部调用执行。 3.3 核心驱动模块 模块 文件 功能 ------------ ---------------------------- ------------------------------------------- 硬件抽象层 MOTOR/platform.c SPI 收发、微秒延时、GPIO 操作 ECM-XF 驱动 MOTOR/EcmUsrDriver.c 70+ 条 SPI 命令封装、错误处理 CIA402 工具 MOTOR/Utility.c 伺服使能、运动控制、梯形速度曲线 PDO 映射 MOTOR/PdoMapping.c CIA402 标准 PDO 映射配置 -------------------------------------------------------------------------------- 4. 上电启动流程 -------------------------------------------------------------------------------- 4.1 初始化阶段 1. HAL_Init() / SystemClock_Config() ├── HSI 16MHz → PLL → SYSCLK 84MHz ├── AHB = 84MHz, APB1 = 42MHz, APB2 = 84MHz 2. 外设初始化 ├── GPIO (PA4=复位/CS, PB14=LED, PC13=按钮) ├── SPI1 (主模式, 656.25kHz) ├── TIM2 (微秒级延时) ├── USART1 (115200bps, 用户命令行) └── SEGGER_RTT (J-Link 调试) 3. ECM-XF 硬件复位 ├── PA4 拉低 10ms (assert reset) └── PA4 拉高 100ms (deassert reset) 4. ECM_InitLibrary() ├── 发送初始化命令 ├── 检测 SPI 包大小(默认 992 字节) └── 设置 CRC 校验模式 5. SPI 包大小调整 ├── GETSPIDATASIZE: 读取当前大小 ├── SETSPIDATASIZE: 设置为 112 字节 └── ECM_InfoUpdate() x3: 同步帧头,清除 CRC 错误 6. EtherCAT 初始化 ├── ECM_SetEcatIntEnable(): 使能所有中断 ├── ECM_EcatInit(): 初始化网络,配置 DC 同步 └── 等待网络链路连接 7. 从站扫描与配置 ├── ECM_EcatSlvCntGet(): 检测从站数量 ├── ECM_SlaveInfoGet(): 读取 VendorID/ProductID ├── 状态转换: Init → Pre-Op → Safe-Op → Operational └── DC 同步稳定检查 8. FIFO 初始化 ├── ECM_InitFIFO(): 初始化 PDO FIFO 缓冲区 └── ECM_EnableFIFO(1): 启用 FIFO 模式 9. CIA402 电机使能(自动执行) ├── 0x6060 = 8: 设置操作模式为 CSP(循环同步位置) ├── 控制字: 0x0006 → 0x0007 → 0x000F └── 状态字: 0x40 → 0x21 → 0x23 → 0x27 10. 进入主循环 └── ECM_EcatPdoFifoDataExchangeAdv(): 周期性 PDO 数据交换 4.2 启动日志示例 === ECM-XF Initialization === UART1 Interrupt RX started UART Welcome message sent 1. Resetting ECM-XF... - Asserting RESET (PA4)... - Deasserting RESET... ECM-XF reset completed 2. Waiting for ECM-XF to boot... 3. Initializing ECM-XF Library... ECM_InitLibrary SUCCESS! Version: 35 4. Reading ECM-XF Firmware Version... Firmware Version: 35.0 Version read successfully! 5. SPI Data Size Operations... GETSPIDATASIZE: Current SPI Data Size = 992 bytes SETSPIDATASIZE: Set SPI Data Size to 112 bytes SUCCESS GETSPIDATASIZE: Updated SPI Data Size = 112 bytes 6. Enabling EtherCAT Interrupts... ECM_SetEcatIntEnable SUCCESS! 7. Initializing EtherCAT... DC_ACTIVE_CODE: 0x300, CycTime: 500000 ns ECM_EcatInit SUCCESS! 8. Waiting for network link... ..................Network link detected! 9. Waiting for network stabilization... 10. Scanning EtherCAT Network... Detected EtherCAT Slaves: 1 11. Reading Slave Information... Slave 1: VendorID=0x0000067B, ProductID=0x00000000 12. Changing Slave State to Pre-Operational (0x02)... Slave 1: State change to Pre-Operational SUCCESS 13. Changing Slave State to Safe-Operational (0x04)... Slave 1: State change to Safe-Operational SUCCESS 14. Waiting for DC Stable... DC Stable! 15. Initializing FIFO PDO... ECM_InitFIFO SUCCESS! 16. Changing Slave State to Operational (0x08)... Slave 1: State change to Operational SUCCESS 17. Verifying Slave States... Slave 1: Current State = 0x08 (Operational) 18. Detecting CIA402 Motor Slaves... Slave 1: CIA402 Motor Detected (Status Word: 0x0040) 19. Enabling FIFO... ECM_EnableFIFO SUCCESS! 20. Reading Actual PDO Sizes from Slave... Actual RX PDO Size: 8 bytes Actual TX PDO Size: 16 bytes === Starting DC-Cycled PDO Exchange (Cycle: 200 us) === Motor Control Commands: '1' - Forward (CW) '0' - Stop '2' - Reverse (CCW) -------------------------------------------------------------------------------- 5. DC 同步配置 -------------------------------------------------------------------------------- 5.1 当前配置 #define DC_ACTIVE_CODE 0x300 // DC 激活码 #define BASE_CYCTIME 10000000UL // 基础周期时间 (10ms) #define TEST_CYCTIME_MULTI 1 // 周期乘数 #define TEST_CYCTIME_DIVID 20 // 周期除数 #define PDO_CYCLE_TIME_US 200 // PDO 循环时间 (软件延时) 5.2 实际周期计算 参数 值 说明 -------------- -------- --------------------------------------------------- DC 同步周期 500μs 硬件同步周期,由 ECM-XF 芯片管理,决定 EtherCAT 网络的同步精度 PDO 循环延时 200μs 主循环软件延时,STM32 每 200μs 调用一次 PDO 数据交换 重要区别说明: - DC 同步周期(500μs):EtherCAT 网络层面的硬件同步周期,由 ECM_EcatInit() 配置,影响所有从站的时钟同步精度 - PDO 循环延时(200μs):STM32 软件层面的 PDO 数据交换间隔,主程序通过 delay_us(PDO_CYCLE_TIME_US) 实现,用于控制发送新位置指令的频率 - 两者独立配置,PDO 交换频率应大于或等于 DC 同步频率,以确保数据及时更新 5.3 修改周期方法 如需修改 DC 同步周期,修改 Core/Src/main.c 中的宏定义: #define BASE_CYCTIME 10000000UL // 基础周期 10ms #define TEST_CYCTIME_MULTI 1 // 乘数 #define TEST_CYCTIME_DIVID 10 // 修改此值改变周期 示例: - DIVID=10 → 周期=1ms - DIVID=20 → 周期=500μs - DIVID=50 → 周期=200μs -------------------------------------------------------------------------------- 6. 调试接口 -------------------------------------------------------------------------------- 6.1 J-Link RTT 推荐调试方式,通过 J-Link 调试器实时输出,不占用串口资源。 配置: - 输出通道:Channel 0 - 输出模式:阻塞模式(数据量较大时) 使用方法: 1. 连接 J-Link 调试器到 SWD 接口 2. 使用 J-Link RTT Viewer 或 Keil 调试窗口查看输出 3. 支持实时输入命令(0/1/2 控制电机) 6.2 USART1 用户命令行 用户交互接口,用于电机控制和状态查询。 配置: - 波特率:115200 - 数据位:8 - 校验位:无 - 停止位:1 命令列表: 命令 说明 示例 -------- -------------------- ------------------------ 0 电机停止 直接发送字符 '0' 1 电机正转(+10步) 直接发送字符 '1' 2 电机反转(-10步) 直接发送字符 '2' info 从站信息(回车) 发送 info\r\n status 系统状态(回车) 发送 status\r\n pdo PDO 数据(回车) 发送 pdo\r\n help 帮助信息(回车) 发送 help\r\n rxN=XX 设置 RXPDO 第 N 字节 发送 rx0=FF rxall=XX 设置所有 RXPDO 字节 发送 rxall=AA 6.3 USART2 调试输出 备用调试接口,用于 MOTOR 版本的调试输出。 配置: - 波特率:115200 - 数据位:8 - 校验位:无 - 停止位:1 -------------------------------------------------------------------------------- 7. 电机控制操作 -------------------------------------------------------------------------------- 7.1 CIA402 状态机 程序自动执行电机使能流程: SwitchOnDisabled(0x40) ↓ [控制字 0x0006] ReadyToSwitchOn(0x21) ↓ [控制字 0x0007] SwitchedOn(0x23) ↓ [控制字 0x000F] OperationEnabled(0x27) ← 电机可运行 7.2 操作模式 当前配置为 CSP(循环同步位置模式): 参数 值 说明 ---------- ---------- --------------------------- 操作模式 8 (0x08) 循环同步位置模式 目标位置 int32_t 32 位有符号整数 控制字 uint16_t 16 位控制字 7.3 位置控制 程序采用步进控制方式,每次命令移动 10 个单位: // 正转 targetPosition = currentPosition + 10; // 反转 targetPosition = currentPosition - 10; // 停止 targetPosition = currentPosition; 7.4 PDO 数据映射 RXPDO(主站 → 从站): 字节偏移 对象索引 名称 位宽 说明 ---------- ---------- ------------ -------- ---------- 0-1 0x6040 Control Word 16-bit 控制字 2 0x6060 Operation Mode 8-bit 操作模式 3-6 0x607A Target Position 32-bit 目标位置 TXPDO(从站 → 主站): 字节偏移 对象索引 名称 位宽 说明 ---------- ---------- -------------- -------- ------------ 0-1 0x603F Error Code 16-bit 错误码 2-3 0x6041 Status Word 16-bit 状态字 4 0x6061 OpMode Display 8-bit 当前操作模式 5-8 0x6064 Actual Position 32-bit 实际位置 9-10 - Velocity Demand 16-bit 速度 11-14 0x60B9 Position Actual 32-bit 位置实际值 -------------------------------------------------------------------------------- 8. 状态指示 -------------------------------------------------------------------------------- 8.1 电源指示灯(红色) 硬件直接连接,无需 MCU 控制。 状态 含义 ------ -------------------- 常亮 PCB 电源正常供电 熄灭 PCB 未上电或电源故障 8.2 MCU 状态灯(PB14,绿色) 由 MCU 软件控制,指示系统运行状态。 状态 闪烁频率 含义 ------------ ---------- -------------------- 500ms 闪烁 500ms 系统正常运行 常亮 - 初始化阶段 熄灭 - 系统未启动或出错 8.3 从站状态检测 程序每 50 个 PDO 周期(约 25ms)输出一次状态信息: [12345 ms] PDO #247: Ret: 1, FIFO: 1, CRC Err: 0, WKC Err: 0, Alive: 1 RXPDO: 0F 00 08 00 00 00 0A 00 ControlWord=0x000F (SwitchOn,EnableVoltage,QuickStop,EnableOperation) OpMode=0x08 (Cyclic Sync Position) TargetPosition=10 TXPDO: StatusWord=0x0027 (Ready,SwitchedOn,OperationEnabled,VoltageEnabled) ErrorCode=0x0000 ActualPosition=10 VelocityDemand=0 -------------------------------------------------------------------------------- 9. 故障排除 -------------------------------------------------------------------------------- 9.1 常见错误码 错误码 含义 排查方向 ---------- ------------ ------------------------------- 0x40 CRC 校验错误 SPI 通信时序问题,检查接线和时钟 0x80 通用错误 ECM-XF 芯片内部错误 0x08 从站故障 检查电机驱动器状态字 9.2 网络连接问题 现象:"Network link timeout!" 排查步骤: 1. 检查 RJ45 网线连接 2. 确认从站设备已上电 3. 检查 ECM-XF 芯片复位时序 4. 确认 DC 同步周期配置正确 9.3 电机不运行 现象:电机已使能但不响应位置命令 排查步骤: 1. 确认状态字为 0x0027(Operation Enabled) 2. 检查 RXPDO 数据是否正确发送 3. 确认目标位置值在电机行程范围内 4. 检查电机驱动器是否有报警 -------------------------------------------------------------------------------- 10. 附录 -------------------------------------------------------------------------------- 10.1 CIA402 控制字位定义 位 名称 功能 -------- ---------------- ---------------- 0 Switch On 开关电源 1 Enable Voltage 使能电压 2 Quick Stop 快速停止 3 Enable Operation 使能运行 4 Fault Reset 故障复位 5 Halt 停机 10.2 CIA402 状态字位定义 位 名称 功能 -------- -------------------- ------------ 0 Ready 准备就绪 1 Switched On 已开关 2 Operation Enabled 运行使能 3 Fault 故障 4 Voltage Enabled 电压使能 5 Quick Stop 快速停止 6 Switch On Disabled 禁止开关 10 Target Reached 到达目标 10.3 版本信息 ECM-XF v1.0.0 (Build 20260509) ECM-XF Firmware Version: 35.0 ECMDRVVER: 0x21010600 -------------------------------------------------------------------------------- 文档版本: v1.0 生成日期: 2026-07-15 适用项目: ECM-XF EtherCAT 主站控制器 ================================================================================