搞定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帧发送

相关推荐
HZZD_HZZD2 小时前
CSDN_批发市场水电漏损归因算法LAM的原理与落地
嵌入式硬件·物联网·算法
H_oRIZoN_3 小时前
Linux入门DAY40(51 单片机入门:GPIO、中断、定时器、PWM、蜂鸣器完整梳理)
单片机·嵌入式硬件
LCG元4 小时前
STM32F103 复位来源诊断实战:RCC_CSR 标志位判优、BKP 复位计数持久化与六种复位源注入实测
stm32·单片机·嵌入式硬件
HUI-4745 小时前
EG1177|SOP‑7 内置 100V‑NMOS 异步降压,20‑90V 高压恒压恒流小功率电源优选
嵌入式硬件·硬件工程
Doraemomo6 小时前
IMX6ULL裸机开发——I2C通信协议
arm开发·嵌入式硬件·imx6ull
国产HT1621B6 小时前
显示省不了电,休眠才见真章:1621 低功耗实操
驱动开发·单片机·嵌入式硬件·led驱动·lcd驱动
free-elcmacom6 小时前
FPGA学习笔记<2>Verilog输入
fpga开发·硬件工程
尼喃8 小时前
Type-C快充取电芯片工作流程:从适配器识别到电压输出
嵌入式硬件
昌原的儿子LEO8 小时前
ARM 汇编核心知识点总结
嵌入式硬件·学习