在 VisionFive2 实现 EtherCAT 主站控制器设备

大家好,

虽然我对工控这个领域的知识还是很有限,但我想尝试探索 VisionFive2 或 RISC-V 架构在工控领域的潜能。 :grinning:

这是我购买的EtherCAT 设备,
1.) OL3-E57H EtherCAT 步进驱动器
2.) LC42HS60 步进电机

应用软件方面,我选择了开源的 Simple Open EtherCAT Master Library (SOEM),
然后再用它编写程序应用(Application)

备注:我的操作系统是 Debian , 但 EtherCAT 主站最好是用实时操作系统。

请看下面这个是我上传的视频。当步进电机能按照命令转动起来时,还是很开心的 :grinning:

如果有网友不清楚什么是 EtherCAT, 请看这个

6 Likes

真棒!赛昉科技也积极在探索工业控制方面的应用,RVspace应用中心罗列了我们推荐的应用文章,正在持续更新中,有好的点子欢迎推荐。

2 Likes

非常高质量的分享!!! 我对这块也非常感兴趣,非常期待您能进一步分享在Debian系统上关于EtherCat主站控制设备的应用程序的实现,非常期待呀!!!

1 Like

好的,最近工作有点忙,等过一阵子我再分享。

3 Likes

OK, 能先简单科普一下比较基础的知识吗? 比如您基于Visionfive 2 移植EtherCat协议的时候,在内核做了哪些工作呀? 然后用户空间使用开源的Simple Open EtherCAT Master Library (SOEM),是通过socket接收/发送EtherCat协议报文吗?

内核不需要更改。

只是要参考驱动器的datasheet, 并根据驱动器支持的协议 (CoE) 来写代码。

我选择了 PV mode (velocity mode),当然还有其他的 mode 可以选择

那么根据 驱动器的datasheet

这是参数:

这是流程 :

例如 : 在 SOEM 那边的代码

#define WRITE(slaveId, idx, sub, buf, value, comment)
{
int __s = sizeof(buf);
buf = value;
int __ret = ec_SDOwrite(slaveId, idx, sub, FALSE, __s, &buf, EC_TIMEOUTRXM);
printf(“Slave: %d - Write at 0x%04x:%d => wkc: %d; data: 0x%.*x\t{%s}\n”, slaveId, idx, sub, __ret, __s, (unsigned int)buf, comment);
}

下面是设置加速度 (0x6083 是加速度, 可以参考上面的截图)
WRITE(l_slaveId, 0x6083, 0, buf32, acceleration, “Target Accerelation”)


ec_SDOwrite 是 SOEM 的 API 接口

2 Likes
  1. 您提到您选择的Simple Open EtherCAT Master Library (SOEM),但是EtherCAT还有另外一个开源主站源代码Igh EtherCAT Master,请问您选择之前是否有一些对比?
  2. 主站Visonfive 2:您提到用SOAM编写Application, 这个Application是否仅仅包含主站功能方面的吗,对于主站的控制界面是否要额外进行编写的图形界面?
  3. 从站OL3-E57H:在从站OL3-E57H您做了哪些工作来让它工作呢?