ethercat主站soem开发板,stm32f407/stm32h7低成本主站方案,带台达伺服电机,ls伺服电机,三洋伺服电机,汇川伺服电机,雷塞智能步进电机等支持ethercat的设备。 支持DC同步,赠送原理图,源代码及相关资料
搞工业自动化的人都知道,EtherCAT这玩意儿是真香。但传统方案动不动就得上万的主站控制器,直接劝退不少小厂。最近折腾了基于STM32F407和H7的SOEM主站方案,成本直接干到三位数,实测带得动市面上90%的EtherCAT伺服。
先看硬件核心,STM32F407自带FSMC总线,挂个LAN9252之类的从站芯片妥妥的。H7性能更猛,跑个500μs周期毫无压力。PCB布局注意隔离和阻抗匹配就行,实测抗干扰能力比某些国产工控板还稳:
//LAN9252硬件初始化关键代码 void LAN9252_Init(void) { GPIO_ETH_RST_CLK_ENABLE(); HAL_GPIO_WritePin(ETH_RST_GPIO, ETH_RST_PIN, GPIO_PIN_RESET); delay_ms(10); HAL_GPIO_WritePin(ETH_RST_GPIO, ETH_RST_PIN, GPIO_PIN_SET); //SPI初始化省略... }这段操作重点在于复位时序,LAN9252上电后需要至少5ms复位时间。遇到过两次电机莫名报错,最后发现是复位时间不够导致的。
DC同步是灵魂,SOEM里配置时钟漂移补偿必须走起:
ec_dcsync0(TRUE, TRUE, 1000000); //开启DC同步,周期1ms实测STM32H743+LAN9252能做到±50ns以内的时钟同步精度,足够应付伺服插补运动。有个坑要注意:伺服参数里必须开启分布式时钟模式,台达ASDA-A2系列默认是关闭的。
针对不同品牌的伺服,PDO映射要灵活处理。比如三洋伺服默认只映射位置模式,想切转矩模式得重新配置SM:
//配置三洋伺服同步管理器 ec_siiSM(1, 0x1C32); //写SM3配置 ec_siiSM(0x1C33, 0x26); //输入PDO数量 ec_siiSM(0x1C34, 0x1600); //PDO映射起始地址而雷塞的步进电机会更简单,直接映射控制字和目标位置就行。建议用ESI文件生成对象字典,比手动配置靠谱得多。
遇到最奇葩的问题来自某国产伺服——每次上电对象字典地址会变!后来发现是固件bug,通过强制保存参数到EEPROM才解决。所以设备兼容性测试不能省,我们整理了个设备白名单放资料包里。
源码里最值钱的是状态机处理逻辑,特别是异常恢复机制:
if(ec_slave[0].state != EC_STATE_OPERATIONAL) { ec_readstate(); //读取从站状态 if(ec_slave[0].state == EC_STATE_SAFE_OP) ec_slave[0].state = EC_STATE_OPERATIONAL; ec_writestate(0); //强制状态切换 }这套逻辑能自动恢复90%以上的通信故障,比SOEM自带的demo稳定得多。目前实测连续运行72小时无丢帧,对于需要7x24运行的产线设备完全够用。
原理图和PCB用Altium Designer开源了,主控部分留了F4和H7两种封装。资料包里有针对各品牌伺服的配置文件,拿回去改改IP就能用。想省事的直接烧录预编译固件,支持通过串口指令修改同步周期和设备参数。