搞定100ns抖动:ARM+FPGA混合EtherCAT主站实战方案

一.混合架构总体设计

总体架构图(无 MUX 架构 - MII 直接挂 FPGA):架构选择理由: PHY 的 MII 总线只接 FPGA,STM32 不占用 ETH MAC 外设。STM32 通过 FMC→DPRAM→FPGA 透传访问网络,避免 MII 总线冲突,消除 SAFEOP→OP 切换风险,SDO 路径统一。

二.分工模式

关键设计原则

原则 1:FPGA 只做"硬实时"任务

凡是"非周期"或"协议复杂"的,统统交给 SOEM。FPGA 只负责"在每个 2ms 周期必须发生、且时序必须精确到 ns"的事。

原则 2:SOEM 只做"软实时"任务

协议处理、SDO 配置、应用逻辑,由 SOEM 在 STM32 上运行。STM32 中断响应 ~100ns 是可接受的,因为这些任务不在 Sync0 关键路径上。

原则 3:DPRAM 作为唯一数据通道

STM32 与 FPGA 之间不使用 SPI/UART,而使用 FMC 总线映射的双端口 RAM。原因:FMC 访问 ~20ns,SPI 访问 ~1μs,差 50 倍。32 轴 PDO 数据 ~700 字节,FMC 一周期内可读完。

关键澄清:三层帧归属

核心澄清: OP 模式下,周期 PDO 帧不是 STM32 构造的,是 FPGA 自己构造的。这正是本方案的核心设计------STM32 是"大脑"(决策+协议),FPGA 是"手脚"(定时+收发+装配),DPRAM 是"神经"(数据通道)。

OP周期内的详细分工

为什么不能让 STM32 构造 OP 帧

注意OP 期间,FPGA 不只是定时发送,而是独立完成完整的帧装配、发送、接收、解析、数据落盘全流程,STM32 只负责"喂数据"和"吃数据"。这样才能保证 100ns 抖动。

三.工作流程时序

阶段1: FPGA DC同步 (ARM上电后触发)

ARM写 REG_DC_START=1

→ FPGA ECAT_DC.v 启动

→ 读各从站0x0918/0x0920 (纳秒级时间戳)

→ 计算传播延迟 EscRecTime3 = EscRecTime1 - EscRecTime2

→ 写0x0910 偏移补偿

→ sync_done=1, 释放后续模块复位

阶段2: ARM伺服初始化 (SOEM, sync_done后启动)

ec_config_init() → 扫描32轴, 分配站地址

ec_config_map() → 配置SM/FMMU/PDO (C代码改伺服只改这里)

ec_configdc() → SOEM跳过DC(FPGA已做), 只配Sync0寄存器

ec_SDOwrite() → 下发伺服参数(模式/齿轮比等)

ec_writestate(OP) → 推进所有从站到OP态

控制字6→7→15 → 逐轴使能

阶段3: FPGA周期运行 (OP后自动启动)

cycle_trigger(2ms) → 发LRW帧(含ref_sys_time)

→ 解析响应(状态字+编码器) → 写共享RAM

→ ARM读共享RAM, 计算轨迹, 写目标位置到共享RAM

→ FPGA下周期读取目标位置, 嵌入LRW帧发送

相关推荐
智感子2 小时前
测控链路:从传感器到上位机
人工智能·嵌入式硬件·fpga开发
恒锐丰科技林技术员6 小时前
EG2129 带过流保护全桥驱动芯片解析
经验分享·嵌入式硬件·硬件工程
女神下凡8 小时前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
电子元器件选型哥9 小时前
MOS管驱动电阻怎么选?阻值大小到底影响什么?
单片机·嵌入式硬件·硬件工程师·半导体·电子元器件
白搞电子9 小时前
ESP32-S31 上做可在线安装的 WASM 应用平台:0.4.9 Beta 发布
单片机·嵌入式硬件·物联网
水果里面有苹果10 小时前
48-AS5600旋转磁编码器
嵌入式硬件
iCxhust10 小时前
8088的nmi中断能关闭吗?
嵌入式硬件·8088单板机
黑妹天下第一乖14 小时前
第 08 讲:阿加犀 AidGenSE 端侧大模型服务化与 OpenAI 兼容接口
人工智能·嵌入式硬件·深度学习·机器人·iot
辰哥单片机设计15 小时前
漏水传感器(STM32)
stm32·单片机·嵌入式硬件
szxinmai主板定制专家15 小时前
基于Zynq的高精度多通道数据采集卡完整解决方案(工业振动/高速采集/边缘传输)
fpga开发·zynq·数据采集卡