基于stm32和soem的EtherCAT主站代码分享
看到网友对stm32 做 EtherCAT主站感兴趣,现分享我之前调试的代码其实就是吧开源的soem代码移植到了stm32上面而已,实在是没啥原创内容,但是走了弯路。
这个主站使用的stm32h743,nucleo-h743
伺服使用的是汇川伺服,io也是可以驱动的,某宝上随便买个io从站都可以用。
这个程序呢,也只是验证一下Ecat通讯是没问题的,至于伺服的加减速,插补等,是没有的,你们自己编写吧。
下面说说所走的弯路:这个汇川伺服,我刚开始调试的时候,就是可以使能伺服,但是就是不能正常运转,指令可以发过去,但是不返回数据。
后来不知道改了什么代码,伺服可以正常转了,可能是dc同步问题,也可能是我的初始化有问题,也可能是汇川的底层写的有问题。
为什么这么说呢,因为我做产品不使用汇川伺服,买了松下的伺服,调试的很顺利,没有汇川这么麻烦,汇川伺服至少耽误了我2个月的时间。
就是从可以使能伺服到伺服运转花了2个月的时间,一度想放弃,因为不知道哪里出了问题。如果一开始用松下伺服,就没这么多事情了。
欢迎交流
移植过程参考这篇论文(我不是作者),在此感谢一下作者。 谢谢共享,ethercat做插补的话可以达到 相当于 脉冲式控制多少M的插补速度? 本帖最后由 pmair 于 2020-9-9 13:11 编辑
支持,主站能够在MCU上 请问一下,这是双网卡吗? 感谢分享 阿豪博士 发表于 2020-9-9 13:09
请问一下,这是双网卡吗?
这个单网卡的 etherCAT也在考虑用,多谢分享 jianbo513 发表于 2020-9-9 14:04
etherCAT也在考虑用,多谢分享
ecat的伺服还是贵一些,我打算换成stm32发脉冲了{:lol:} whatcanitbe 发表于 2020-9-9 13:00
谢谢共享,ethercat做插补的话可以达到 相当于 脉冲式控制多少M的插补速度? ...
你说的插补速度我不懂,ecat通讯周期可以选择1ms 2ms 4ms,快的话500us 250us 125us,当然得伺服支持才行,有的伺服不支持这么快的通讯周期。
我这个程序是1ms通讯一次 这个厉害了,最近公司同事在用硬件芯片做,300多一片 asj1989 发表于 2020-9-9 14:16
你说的插补速度我不懂,ecat通讯周期可以选择1ms 2ms 4ms,快的话500us 250us 125us,当然得伺服支持才行 ...
非常感谢你
asj1989 发表于 2020-9-9 14:14
ecat的伺服还是贵一些,我打算换成stm32发脉冲了
stm32发脉冲完全没有问题,这个ecat就是远端控制方便 nucleo-h743 和 松下伺服,这两天就买了测试一下 这个我有印象,哈哈{:titter:} asj1989 发表于 2020-9-9 14:16
你说的插补速度我不懂,ecat通讯周期可以选择1ms 2ms 4ms,快的话500us 250us 125us,当然得伺服支持才行 ...
如果方便的话,还是想买块你的这个板子试试插补性能。 过来学习一下,感谢分享 落叶知秋 发表于 2020-9-9 17:43
这个我有印象,哈哈
多谢坛友相助 {:lol:} whatcanitbe 发表于 2020-9-9 17:58
如果方便的话,还是想买块你的这个板子试试插补性能。
实际上,我的项目由于特殊性,没有用到插补功能,虽然是4轴联动,但是我并没有去编写直线插补圆弧插补之类的算法,我只是在相应的时刻去运转停止电机而已
插补肯定是没有问题的,无论是发脉冲,还是走ecat,还是canopen等等,本质上就是告诉电机在指定的时刻走到指定的位置而已。
所以,如果你做过发脉冲之类的插补,移植一下也很容易的。
至于我的硬件,就是stm32f429+lan8720,和很多开发板一样的。 了解一下! asj1989 发表于 2020-9-10 12:19
实际上,我的项目由于特殊性,没有用到插补功能,虽然是4轴联动,但是我并没有去编写直线插补圆弧插补之 ...
好的,谢谢 谢谢。。。 谢谢,有空研究一下 xujihu 发表于 2020-9-9 15:44
这个厉害了,最近公司同事在用硬件芯片做,300多一片
什么芯片这么贵,LAN9252带两个PHY才三四十,NetX5X系列也不到百吧,最新的28388也很便宜啊 MCHP 有完整的方案啊.
https://www.microchip.com/developmenttools/ProductDetails/EVB-LAN9253-D51#additional-summary
soem是个好东西,我用的407+83848的开发板搞的主站,发现M4在1ms位置环周期跑2~3个轴已经比较吃力了(soem优化再优化的前提下),根本没多的cpu资源做速度规划和位置插补。这平台就只能是带着伺服动。 MoMo_avr 发表于 2020-9-11 09:16
soem是个好东西,我用的407+83848的开发板搞的主站,发现M4在1ms位置环周期跑2~3个轴已经比较吃力了(soem ...
这个和soem没有关系,soem只负责和驱动器通讯,实测pdo通讯一次的时间也就70多us,你说的吃力是不是电机位置算法比较耗时间,优化一下你的电机位置算法试试
MoMo_avr 发表于 2020-9-11 09:16
soem是个好东西,我用的407+83848的开发板搞的主站,发现M4在1ms位置环周期跑2~3个轴已经比较吃力了(soem ...
我以前用NXP的M4跑过4个轴,更新周期是1ms,只是EtherCAT协议的数据收发的话,大概200us以内,感觉还有时间去跑算法,多加几个轴应该也不会耗太多时间,都是立即写数据 suebillt 发表于 2020-9-10 22:53
什么芯片这么贵,LAN9252带两个PHY才三四十,NetX5X系列也不到百吧,最新的28388也很便宜啊 ...
是一个主站芯片,台湾产的 楼主您好,
有二个问题想请教您:
1:您分享的程式码为 ST STM32H743ZI所用,那在回答栏里您有提到你的硬件为stm32f429+lan8720,那请问可以分享此代码吗?
2:请问您有当初作者分享的移植程式吗?他是用stm32f767的硬件,您是否也能够分享呢?
以上二个问题,感激不尽。 leiga1029 发表于 2020-9-27 12:12
楼主您好,
有二个问题想请教您:
1:您分享的程式码为 ST STM32H743ZI所用,那在回答栏里您有提到你的硬件为 ...
1 最初我没有画板子,买的nucleo-h743测试的,测试成功之后 才自己根据需求自己画了一块板。
网络部分几乎一致,necleo的phy是lan8742,我用的是lan8720,我看了寄存器几乎一致,代码也基本上可以通用。
代码等我有空整理一下。
2 我不认识作者,所以没有代码。
asj1989 发表于 2020-9-27 15:00
1 最初我没有画板子,买的nucleo-h743测试的,测试成功之后 才自己根据需求自己画了一块板。
网络部分几 ...
{:handshake:}
nucleo-h743 买好了,还没有时间测试。
找了一台东元的伺服 感谢分享 asj1989 发表于 2020-9-27 15:00
1 最初我没有画板子,买的nucleo-h743测试的,测试成功之后 才自己根据需求自己画了一块板。
网络部分几 ...
感謝回覆,期待您之後的分享。 asj1989 发表于 2020-9-9 11:56
移植过程参考这篇论文(我不是作者),在此感谢一下作者。
你好,我看定时器里面的ethercat接收函数是阻塞的,这很占用cpu使用率吧?你实际产品也是这么做的吗? LCH201328 发表于 2020-9-29 08:03
你好,我看定时器里面的ethercat接收函数是阻塞的,这很占用cpu使用率吧?你实际产品也是这么做的吗? ...
确实是阻塞的,但是并没有占用很多,数据发出去,再收回来 大概70多us,所以不碍事。 LCH201328 发表于 2020-9-29 08:03
你好,我看定时器里面的ethercat接收函数是阻塞的,这很占用cpu使用率吧?你实际产品也是这么做的吗? ...
如果硬件性能不够,可以使用异步接收,中断里先收后发,这样基本不会有空等耗费
不过这样一来,当前次接收的数据是上一次周期的请求数据 asj1989 发表于 2020-9-29 08:58
确实是阻塞的,但是并没有占用很多,数据发出去,再收回来 大概70多us,所以不碍事。 ...
谢谢分享!有时间我测试下。 落叶知秋 发表于 2020-9-29 09:20
如果硬件性能不够,可以使用异步接收,中断里先收后发,这样基本不会有空等耗费
不过这样一来,当前次接 ...
我也这么想的。通讯占用的时间少点,才有更多的时间去做算法。你也有用过soem吗? ecat要留名,以后可能会用的到!!{:lol:}
记得几年前,山东大学有个教授好像出了国内标准的走网络的协议,号称比ecat更加先进,给我看过介绍,啥名字真忘记了,好像还是不错的!他们暂时是用fpga自己写的! 感谢分享,学习中 感谢分享,学习中+ 实际带东元伺服可以控制电机旋转停止,{:handshake:} heky_007 发表于 2020-10-19 08:10
实际带东元伺服可以控制电机旋转停止,
管用吗? {:lol:}
长时间跑一下试试,看看可报警 asj1989 发表于 2020-10-19 10:12
管用吗?
长时间跑一下试试,看看可报警
准备长时间测试的,目前看正常 接下来要测试多个伺服,定量脉冲控制 感谢分享! 感谢分享
EtherCAT要用的,感谢分享,正好手头有块板子 请问这个没有MDK的工程啊? 楼主 能发个MDK的工程出来参考一下么我用的STM32+DP83848 现在能接收和发送数据了卡在SOEM移植上好多东西不懂!
etherCAT也在学习,多谢分享 请问LAN8742和KSZ8081区别大不?质量都可以不? 撸主厉害 这个厉害了 本帖最后由 jinzhen107 于 2020-12-7 15:52 编辑
我买了个H743的板子,下载您的程序现在一直都卡在
__weak void HAL_Delay(uint32_t Delay)
{
}
PHY_Init();这个函数初始化不完 貌似倍福的插补插件是收费的,实现了ethercat貌似只是有了路,ethercat是主从方式,从机的同步也需要主机进行干预,想实现一个主站貌似路还需要很长…… 感谢楼主,好帖,正好要想搞ethercat 好贴,感谢楼主,正在学习 楼主这个需要1588支持吗
tang0571 发表于 2020-9-29 10:48
ecat要留名,以后可能会用的到!!
记得几年前,山东大学有个教授好像出了国内标准的走网络的协议, ...
你说的是POWERLINK,我们的国标就被忽悠用powerlink,用Altera +NIOS II。 楼主你好
我现在 在预操作状态 时候
接下来
清除 PDO 指定对象的 PDO 映射对象,即设置 1C12-00h/1C13-00h 为 0 的时候就会进入 HardFault_Handler
jinzhen107 发表于 2020-12-7 15:49
我买了个H743的板子,下载您的程序现在一直都卡在
__weak void HAL_Delay(uint32_t Delay)
{
8742初始化有问题吧 感谢楼主分享,不过里面问题还是有一些的,{:smile:}{:smile:} 感谢楼主分享 坛子里还有个Ethercat用FPGA实现的SoftIP,有没有人试过? marshallemon 发表于 2020-12-7 17:19
貌似倍福的插补插件是收费的,实现了ethercat貌似只是有了路,ethercat是主从方式,从机的同步也需要主机进 ...
ECAT主站不需要具有DC时钟功能,ECAT网络可以第1个具有DC时钟功能的从站作为同步时钟源。主站只需要计算各个从站之间的传送延时,配置延迟使各个从站和主站同步。 本帖最后由 zzh90513 于 2021-3-18 18:21 编辑
asj1989 发表于 2020-9-9 14:16
你说的插补速度我不懂,ecat通讯周期可以选择1ms 2ms 4ms,快的话500us 250us 125us,当然得伺服支持才行 ...
请教下,从机支持更快的扫描周期主要取决于什么,跟MCU的执行速度直接相关吗? 使用ET1100或者LAN9252这类独立芯片,SPI通信速度影响扫描周期吗? 是否能实现1ms的IO模块扫描周期吗? zzh90513 发表于 2021-3-18 18:20
请教下,从机支持更快的扫描周期主要取决于什么,跟MCU的执行速度直接相关吗? 使用ET1100或者LAN9252这 ...
用并行总线,1ms不是问题,SPI要50M以上,吃力。 snowy 发表于 2021-3-18 22:32
用并行总线,1ms不是问题,SPI要50M以上,吃力。
好的,谢谢!是否大循环调用MainLoop()的时间也要小于1ms才可以?因为程序还要做LED和KEY的动态扫描 谢谢,感谢分享 学习一下,谢谢分享。 zzh90513 发表于 2021-3-18 18:20
请教下,从机支持更快的扫描周期主要取决于什么,跟MCU的执行速度直接相关吗? 使用ET1100或者LAN9252这 ...
我没有开发过io从站,但是我买过io从站(8入8出),用的就只是一片lan9252,没有mcu,扫描周期1ms完全没问题。更快点也没问题。 lostid 发表于 2021-3-16 20:52
ECAT主站不需要具有DC时钟功能,ECAT网络可以第1个具有DC时钟功能的从站作为同步时钟源。主站只需要计算 ...
你说的没能明白,麻烦具体说下 感谢分享 请教一下大佬,这个从站好搞吗?貌似从站都是双网卡吧 阿豪博士 发表于 2021-3-22 13:00
请教一下大佬,这个从站好搞吗?貌似从站都是双网卡吧
从站有专门的从站芯片 学习了,下半年有可能有这方面的工作内容 asj1989 发表于 2021-3-19 09:38
我没有开发过io从站,但是我买过io从站(8入8出),用的就只是一片lan9252,没有mcu,扫描周期1ms完全没 ...
我拆过南京十点的他们耦合器里面有丛站芯片后面那个刀片是输入输出模块里面都有一片丛站芯片加一片stm单片机 NM2012 发表于 2021-4-28 14:15
我拆过南京十点的他们耦合器里面有丛站芯片后面那个刀片是输入输出模块里面都有一片丛站芯片加一片stm单 ...
那种是可以扩展的,一片lan9252最多只能扩展16个io,如果需要更多的io,就需要stm32,或者 用多片lan9252,我也测试过ax58100,一片58100可以扩展32个io,基本上不需要单片机了。 MoMo_avr 发表于 2020-9-11 09:16
soem是个好东西,我用的407+83848的开发板搞的主站,发现M4在1ms位置环周期跑2~3个轴已经比较吃力了(soem ...
你好,我用的一个407+Lan8720驱伺服,有一个品牌的伺服运转正常;另外一个品牌目前能使能,但是转不起来;还有第三个品牌,直接使能都使能不了,状态读回来都是错的;方便请教您一下吗 楼主,我现在用的一个407+Lan8720驱伺服,第一个品牌的伺服运转正常;另外一个品牌目前能使能,但是转不起来;还有第三个品牌,直接使能都使能不了,状态读回来都是错的。
想问下楼主还记得当时是怎么调试的吗?现在是怀疑fmmu逻辑映射有问题,但是还没搞清楚Soem是怎么映射的。 本帖最后由 MoMo_avr 于 2021-6-4 09:14 编辑
A_jie 发表于 2021-6-3 22:03
你好,我用的一个407+Lan8720驱伺服,有一个品牌的伺服运转正常;另外一个品牌目前能使能,但是转不起来 ...
SOEM的程序上对伺服操作,各家驱动不同,方式也不尽相同!用wireshark对比twincat抓包数据分析。 A_jie 发表于 2021-6-3 22:08
楼主,我现在用的一个407+Lan8720驱伺服,第一个品牌的伺服运转正常;另外一个品牌目前能使能,但是转不起 ...
我也遇到过这个问题,后来我没有解决。 只是我换了同品牌的伺服驱动器。
我怀疑是dc同步有问题,现在没有精力去研究了。
现在,我开始走发脉冲的方案了 A_jie 发表于 2021-6-3 22:03
你好,我用的一个407+Lan8720驱伺服,有一个品牌的伺服运转正常;另外一个品牌目前能使能,但是转不起来 ...
我遇到相同的问题,台达的能正常控制转动,雷赛的能使能但转不了,汇川的有时进入不了op模式。 MoMo_avr 发表于 2021-6-4 09:10
SOEM的程序上对伺服操作,各家驱动不同,方式也不尽相同!用wireshark对比twincat抓包数据分析。 ...
包能抓到,但是Soem和Twincat各部分初始化怎么对应起来对我来说还是有困难 asj1989 发表于 2021-6-6 17:06
我也遇到过这个问题,后来我没有解决。 只是我换了同品牌的伺服驱动器。
我怀疑是dc同步有问题,现在没 ...
之前一直是直接发脉冲的,后面才搞Ethercat的,感觉发脉冲还是直接很多 LCH201328 发表于 2021-6-6 19:05
我遇到相同的问题,台达的能正常控制转动,雷赛的能使能但转不了,汇川的有时进入不了op模式。 ...
雷赛的根据自己写的配置列表来配置应该没问题。现在我感觉最大的问题是一套主站能驱动这家伺服,不能驱动另一家伺服,一家伺服需要对应一套主站。应该是没把Soem完全搞懂。。。 MoMo_avr 发表于 2021-6-4 09:10
SOEM的程序上对伺服操作,各家驱动不同,方式也不尽相同!用wireshark对比twincat抓包数据分析。 ...
不知道那种自带协议栈的芯片怎么做的,那种做起来不同的从站都能驱动,感觉还是挺强的 igh ethercat有没有人研究过? 在移植SOEM到H7的板子时候,遇到有以下几个问题,问题一:想显调通SDO的邮箱收发,但不知道要不要DC配合。问题二:在使用ec_SDOread(uint16 slave, uint16 index, uint8 subindex, boolean CA, int *psize, void *p, int timeout)给函数时候,参数index的数值应该是参照哪里输入。 ETHERCAT 该如何做到断线重连啊? 为什么我连接第二个从站总不行 ,PDO 也配置过了
Slave 2 State=11 StatusCode=16 : Invalid mailbox configuration MoMo_avr 发表于 2020-9-11 09:16
soem是个好东西,我用的407+83848的开发板搞的主站,发现M4在1ms位置环周期跑2~3个轴已经比较吃力了(soem ...
大佬求助一下啊,407+LAN8720 接第二个从站时,第二个从站安全运行状态没切换成功
然后提示 Slave 2 State=11 StatusCode=16 : Invalid mailbox configuration
PDO也配置过了
PaulDE 发表于 2021-3-16 20:19
坛子里还有个Ethercat用FPGA实现的SoftIP,有没有人试过?
链接或者标题有么,我找一下原贴 本帖最后由 bsz84 于 2021-10-27 17:16 编辑
好像STM32F系列有支持Ethercat的芯片了 在调试过程种,有遇到以下问题吗?
1.当连接2个伺服从站时候,配置好PDO后,在进行PDO的过程数据交互中IO(Outpu+Input),发现IO数组中只有第一个伺服的input有数据,后面的伺服input的数据都是零。能大概定位是什么原因吗? 请问用这个主站控制伺服电机,电机速度大时会抖动吗?我现在控制电机,低速时感觉不到异常,高速时偶尔感觉电机会抖动。现在不知道是同步时钟的问题还是丢贞导致的。 汇川的伺服我还没有,用松下的伺服调试出现了能使能,拧轴的时候反馈的当前位置也能动,但是无论csp,csv,还是cst,都不能动。状态字6041一直是0x0A37,楼主能给点提示吗 A_jie 发表于 2021-12-25 18:37
汇川的伺服我还没有,用松下的伺服调试出现了能使能,拧轴的时候反馈的当前位置也能动,但是无论csp,csv, ...
调好了,打扰了{:lol:}
页:
[1]
2