打印
[新唐博主]

【优秀评测精选】NuMaker-IIoT-NUC980 测评之 EtherCAT 实现

[复制链接]
930|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21ic小管家|  楼主 | 2023-2-10 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
秀评测精选
NuMaker-IIoT-NUC980 测评之 EtherCAT 实现

1、背景

作者:lg28870983
最近计划DIY一个EtherCAT控制器,一直在看资料和选型,初步定了NUC980的方案,主要是看中NUC980的RAM比较大,采购还算方便(最近缺芯,大家都懂)。

选定硬件之后,NUC980跑什么系统呢?从以往经验来看,ARM9一般跑linux比较多,资源也好找,同时官方提供BSP。但这次任务有点特殊,EtherCAT对实时性要求比较高,linux不是最合适的。结合MCU开发经验,就准备上个RTOS,以前M3和M4的芯片,主要用FreeRTOS,最近也开始用RT-Thread。新唐官方也推出了NUC980的RT-Thread版BSP,对开发者非常友好,最终决定了NUC980+RT-Thread的方案。

刚好最近官方有个DIY项目官方活动,就报了名。


2、EtherCAT 主站软件方案
EtherCAT本身还是比较复杂的,我们就不自己造轮子了,考虑用开源方案,毕竟硬件成本这么低,商用方案是真的用不起啊!
现在开源主站主要就两种,SOEM和IGH(相关的资料网上很多,这儿就不展开了),IGH只支持linux,所以只能选SOME,最新版本是SOEM1.4,本次移植就基于该版本。


3、移植过程
3.1 RT-Thread 下载
本次移植基于最新发布的release4.1.0, 这个可以到github下载,最近Gitee也更新了。移植EtherCAT之前,首先把Nuvoton的BSP跑起来。这个参考官方的文档就可以了。

3.2 Some 移植
下载soem-1.4.0,将整个目录放在rt-thread项目里,下图是我的目录,供参考
在some-1.4.0及其子目录中需要手工编辑SConscript脚本,这儿就不展开了。后续我把源码打包发上来。

Some移植主要是三个文件 osal.c,oshw.c和nicdrv.c。
osal.c 主要是微秒及的延时和定时函数;
oshw.c 主要是网络端和本机端数据的大小端转换;
nicdrv.c 主要是网络数据收发。

Some已经给出了很多操作系统移植,我的移植是基于rtk,这个是嵌入式系统,和我们的开发环境最接近。

3.2.1 osal.c 移植
主要内容是实现osal_usleep和osal_gettimeofday两个函数。
我开始思路是自定义一个定时器用于EtherCAT,当时用了Timer4。等实现差不多了,发现系统时钟用的是Timer5,很多地方功能重复。最终和系统共用Timer5,省了个Timer,代码也简化了不少。下面就是改动过的相关代码 (请至评测原文网址),osal_timer_init这个初始化函数要在启动EhterCAT功能之前调用。

3.2.2 oshw.c 移植
不需做什么工作。

3.2.3 nicdrv.c 移植
主要修改就是调用自己的网络发送和接收函数,我把它们命名为net_send和net_recv。这两个函数最好的实现是直接操作网卡(或者叫emac),我现在的实现参考了tcpdump的方法,在协议栈中加钩子(hook)实现,这样对原来系统影响最小,网口除了EtherCAT,还可以当正常的网口用。

ecx_setupnic函数中创建mutex(这个按照rt-thread格式改一下即可),安装网络钩子
ecx_closenic函数中删除mutex,卸载网络钩子。

3.2.4 net_hook.c 实现
主要实现EtherCAT数据帧收发,中间加了个环形缓冲区用于接收。具体原理就是在网卡加个钩子函数,有数据来的时候先经过钩子函数,我们把EtherCAT数据帧截住,不传给原来的lwip协议栈;如果要发送数据,就直接调用发送函数,绕过lwip协议栈。这样也不影响lwip协议栈工作。

具体实现见附件。

3.2.5 some 基本功能测试
采用官方的slave_info测试代码,测试主要分为时钟测试和soem EtherCAT协议栈基本功能测试。在终端中输入 soem_test + 回车即可。
我接了一个汇川IS620N驱动器,下面是输出的部分内容:
Slave:1
Name:IS620N
Output size: 96bits
Input size: 224bits
State: 4
Delay: 0[ns]
Has DC: 1
DCParentport:0
Activeports:1.0.0.0
Configured address: 1001
Man: 00100000 ID: 000c0108 Rev: 00010001
SM0 A:1000 L: 128 F:00010026 Type:1
SM1 A:1400 L: 128 F:00010022 Type:2
SM2 A:1800 L:  12 F:00010064 Type:3
SM3 A:1c00 L:  28 F:00010020 Type:4
FMMU0 Ls:00000000 Ll:  12 Lsb:0 Leb:7 Ps:1800 Psb:0 Ty:02 Act:01
FMMU1 Ls:0000000c Ll:  28 Lsb:0 Leb:7 Ps:1c00 Psb:0 Ty:01 Act:01
FMMUfunc 0:1 1:2 2:0 3:0
MBX length wr: 128 rd: 128 MBX protocols : 04
CoE details: 0d FoE details: 00 EoE details: 00 SoE details: 00
Ebus current: 0[mA]
only LRD/LWR:0



4、运动控制测试
基础工作做好以后,我们就能真正的控制电机运行了。在控制电机运行之前,还需要了解CIA402相关的规范,启动伺服需要按照规范要求,按顺序来。

程序主要流程如下,具体代码见附件。

a)初始化时钟 osal_timer_init
b)初始化网卡ec_init
c)等待进入INIT态

d)初始化驱动器(is6(is620n)ec_config_init
e)DC配置

f)申请并等待进入Pre-OP态
g)配置过程数据TxPDO/RxPDO(自定义函数process_data_config)
h)配置FMMU ec_config_map

i)申请并等待进入Safe-OP态

j)设置CSP模式
k)发送和接收过程数据1次,触发SLAVE
l)申请并等待进入OP态

m)进入过程数据收发循环

在进入数据数据收发循环后,按次序发送控制字启动伺服(6040h发送6,7和15),然后就可以不断发送新的控制位置让电机转起来了!


5、总结
整个移植过程还是充满了挑战,主要也是因为今年才开始接触EtherCAT,很多概念是边学边用,网上也参考了不少同学的帖子。很多人反应汇川的伺服用SOEM驱动DC同步模式总是有问题,确实遇到了很多奇奇怪怪的问题。经过这两个月的折腾,总算开了个头,基础打好了。

下一步可优化的就是现在的网络移植改用直接操作emac,这样可以减少网络抖动。

附件程序里还参考本站贴子移植了uffs文件系统,编译如果有问题,可能还需要下载uffs、ramdisk、optparse和netutils包。

链接: https://pan.baidu.com/s/1uWbiUfzX1R061OJQ5LG6OQ?pwd=wdtt
提取码: wdtt

SOEM已经提交PR #1260,等待通过。有问题可通过本帖留言或邮件联系我,大家一起改进。



使用特权

评论回复
沙发
ssmm1228| | 2023-2-11 10:37 | 只看该作者
大神,留个足迹,跟着学习。

使用特权

评论回复
板凳
515192147| | 2023-2-16 15:17 | 只看该作者
EtherCAT从站开发板及源程序:
简化XML生成,简化编程,快速入门,详细见:
https://bbs.21ic.com/icview-3263284-1-1.html

使用特权

评论回复
地板
中国龙芯CDX| | 2023-2-28 15:00 | 只看该作者
NuMaker-IIoT-NUC980 能跑时实linux系统嘛?有相关的系统支持嘛

使用特权

评论回复
5
beacherblack| | 2023-3-11 21:34 | 只看该作者
NuMaker-IIoT-NUC980 性能不错。

使用特权

评论回复
6
zerorobert| | 2023-3-14 10:25 | 只看该作者
都支持哪些操作系统的运行              

使用特权

评论回复
7
mattlincoln| | 2023-3-14 11:42 | 只看该作者
这个是自带wifi功能的吗?              

使用特权

评论回复
8
nomomy| | 2023-3-14 14:14 | 只看该作者
NUC980 的价格是否美丽?              

使用特权

评论回复
9
backlugin| | 2023-3-14 14:56 | 只看该作者
NUC980的RAM比较大,应用代码也就越强大了。

使用特权

评论回复
10
七毛钱| | 2023-3-15 10:37 | 只看该作者
跟着各路大神一起学习

使用特权

评论回复
11
duo点| | 2023-3-20 14:57 | 只看该作者
学习一下各路大神的优质测评

使用特权

评论回复
12
1988020566| | 2023-4-18 10:19 | 只看该作者
可以使用Keil MDK或GCC等工具进行NUC980的开发,同时需要选择合适的调试器和烧录器。

使用特权

评论回复
13
51xlf| | 2023-4-18 11:15 | 只看该作者
在实现EtherCAT功能时,需要充分了解EtherCAT协议规范

使用特权

评论回复
14
xiaoyaodz| | 2023-4-18 12:11 | 只看该作者
将数据通过EtherCAT传输需要用到一个数据处理函数。在该函数中,需要完成数据的打包、解包、校验等操作,保证数据的正确性和完整性,并且控制数据的发送和接收。

使用特权

评论回复
15
pentruman| | 2023-4-18 19:20 | 只看该作者
EtherCAT是一种实时以太网通信协议,可以实现高效、低延迟的数据交换。

使用特权

评论回复
16
juliestephen| | 2023-4-18 19:29 | 只看该作者
NUC980包括DDR、SDRAM、NOR Flash、NAND Flash等多种存储器类型,在编程时需要合理管理内存,避免重复定义变量、优化代码等。

使用特权

评论回复
17
wwppd| | 2023-4-18 20:43 | 只看该作者
在NUC980编程过程中需要掌握相关的硬件知识和软件技能

使用特权

评论回复
18
minzisc| | 2023-4-18 20:49 | 只看该作者
在EtherCAT通信过程中,需要对错误和异常情况进行监测和处理。可以使用相应的状态标志位或者回调函数等方式进行监测,确保通信的可靠性和稳定性。

使用特权

评论回复
19
claretttt| | 2023-4-18 20:56 | 只看该作者
需要选择支持EtherCAT协议的硬件设备,如基于FPGA的EtherCAT主机芯片、支持EtherCAT从站协议的MCU等。

使用特权

评论回复
20
janewood| | 2023-4-18 22:13 | 只看该作者
NUC980是瑞萨电子推出的一款ARM Cortex-A5内核的高性能嵌入式处理器。以

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:祝大家天天开❤ ///w/// 有问题咨询联系QQ:3326242524

2555

主题

6230

帖子

228

粉丝