0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NUC980 DIY项目大挑战 - EtherCAT实现

RTThread物联网操作系统 来源:未知 2023-02-02 11:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1.背景

最近计划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_usleeposal_gettimeofday两个函数。

我开始思路是自定义一个定时器用于EtherCAT,当时用了Timer4。等实现差不多了,发现系统时钟用的是Timer5,很多地方功能重复。最终和系统共用Timer5,省了个Timer,代码也简化了不少。下面就是改动过的相关代码,osal_timer_init这个初始化函数要在启动EhterCAT功能之前调用。

 1staticrt_uint32_tus_ticks;
2voidosal_timer_init(void)
3
{
4rt_uint32_tcmp=ETIMER_GetCompareData(5);
5us_ticks=1*cmp/(1000000/RT_TICK_PER_SECOND);
6rt_kprintf("rt-threadhwtimer51us=%dticks ",us_ticks);
7}
8intosal_usleep(uint32usec)
9
{
10//udelay(usec);
11/*ajustmentforprecision*/
12//usec-=usec/4080;
13usec-=usec/1500;
14/*rt_hw_us_delayworkforadelaylessthan16us*/
15do{
16if(usec>=1000)
17{
18rt_hw_us_delay(1000);
19usec-=1000;
20}else{
21rt_hw_us_delay(usec);
22usec=0;
23}
24}while(usec>0);
25return0;
26}
27intosal_gettimeofday(structtimeval*tv,structtimezone*tz)
28
{
29//returngettimeofday(tv,tz);
30RT_ASSERT(tv!=NULL);
31rt_uint32_ttimer_tick,rt_tick;
32rt_base_tlevel=rt_hw_interrupt_disable();
33timer_tick=ETIMER_GetCounter(5);
34rt_tick=rt_tick_get();
35rt_hw_interrupt_enable(level);
36tv->tv_sec=rt_tick/1000;
37tv->tv_usec=(rt_tick%1000)*1000+timer_tick/us_ticks;
38return0;
39}

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驱动器,下面是输出的部分内容:

 1Slave:1
2Name:IS620N
3Outputsize:96bits
4Inputsize:224bits
5State:4
6Delay:0[ns]
7HasDC:1
8DCParentport:0
9Activeports:1.0.0.0
10Configuredaddress:1001
11Man:00100000ID:000c0108Rev:00010001
12SM0A:1000L:128F:00010026Type:1
13SM1A:1400L:128F:00010022Type:2
14SM2A:1800L:12F:00010064Type:3
15SM3A:1c00L:28F:00010020Type:4
16FMMU0Ls:00000000Ll:12Lsb:0Leb:7Ps:1800Psb:0Ty:02Act:01
17FMMU1Ls:0000000cLl:28Lsb:0Leb:7Ps:1c00Psb:0Ty:01Act:01
18FMMUfunc0:11:22:03:0
19MBXlengthwr:128rd:128MBXprotocols:04
20CoEdetails:0dFoEdetails:00EoEdetails:00SoEdetails:00
21Ebuscurrent:0[mA]
22onlyLRD/LWR:0



4. 运动控制测试


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


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


a)初始化时钟 osal_timer_init

b)初始化网卡ec_init

c)等待进入INIT态


d)初始化驱动器(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,等待通过。有问题可通过本帖留言或邮件联系我,大家一起改进。


版权声明:本文为RT-Thread论坛用户「lg28870983」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


原文链接:

https://club.rt-thread.org/ask/article/160414965e80294e.html


———————End———————


你可以添加微信:rtthread2020 为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!



爱我就给我点在看

点击阅读原文


原文标题:NUC980 DIY项目大挑战 - EtherCAT实现

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    32

    文章

    1540

    浏览量

    44268

原文标题:NUC980 DIY项目大挑战 - EtherCAT实现

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    EtherCATEtherCAT协议转换网关实现欧姆龙PLC与汇川PLC通讯的配置案例

      一、 项目背景与挑战项目初期规划时,工程师面临一个严峻的技术挑战: 汇川PLC(AM600)与欧姆龙PLC(NJ)均原生支持高性能的Ethe
    的头像 发表于 11-19 15:25 904次阅读
    <b class='flag-5'>EtherCAT</b>转<b class='flag-5'>EtherCAT</b>协议转换网关<b class='flag-5'>实现</b>欧姆龙PLC与汇川PLC通讯的配置案例

    如何在 nuc980 上切换到持久文件系统?

    我遵循了“NUC980 Linux 4.4 BSP 用户手册EN.pdf”文档,但当我尝试取消选择“初始 RAM 文件系统和 RAM 磁盘 (initramfs/initrd) 支持
    发表于 08-29 07:58

    为什么无法将 PG.12、PG.13、PG.14 用作 NUC980 的 GPIO?

    无法将 PG.12、PG.13、PG.14 用作 NUC980 的 GPIO
    发表于 08-29 07:52

    NUC980是否可以对 EBI 进行 DMA?

    是否可以对 EBI 进行 DMA?我有从 USB 到 SDRAM 的 DMA 工作,但是当我将 DMA 目标地址更改为 EBI(60000000 美元)时,我没有收到任何外部总线活动。如果我将 DMA 到 SDRAM 中的临时缓冲区,然后将 CPU 复制到 EBI,它会按预期工作。
    发表于 08-29 07:05

    如何使用 NUC980 系列微处理器 (MPU) 构建具有带外 (OOB) 功能的简单远程监控应用?

    如何使用 NUC980 系列微处理器 (MPU) 构建具有带外 (OOB) 功能的简单远程监控应用。
    发表于 08-19 06:21

    耐达讯自动化EtherCAT转RS232:示波器连接的“开挂秘籍”

    一个复杂的电力系统测试项目,需要把多台RS232接口的示波器接入基于EtherCAT的自动化测试系统。可两者通信不兼容,数据传输成了大问题。后来他用了耐达讯自动化EtherCAT转RS232网关,把网关
    发表于 07-23 15:31

    医疗界的“万能转换器耐达讯EtherCAT转RS\\-232“协议互联的秘密武器

    采用EtherCAT时,如何让“老司机”搭上“新生代”的快车,就成了一个核心技术挑战。 两者的“性格”迥异。RS-232网关是低速、点对点的串行标准,简单可靠。而EtherCAT协议则是基于以太网的实时
    发表于 07-23 15:28

    RS232转EtherCAT网关让电力仪表开启\"躺赢\"模式

    在电力自动化领域,RS232仪表与Ethercat网络间的协议壁垒常令工程师头疼。如何低成本实现数据互通?本文从技术与应用角度解析这一问题的解决方案。 技术痛点与需求 RS232仪表凭借可靠性在
    发表于 07-21 15:31

    耐达讯RS232转Ethercat网关:建筑驱动连接的“秘密武器”

    ,能够让旧设备也能享受到Ethercat的优势,实现与现代控制系统的无缝对接。 在实际的建筑项目中,我们就遇到过这样的问题。某建筑项目中,有一批采用Rs232接口的驱动器,由于控制系统
    发表于 07-21 15:29

    让老旧医疗设备“听懂”新语言:CAN转EtherCAT的医疗行业应用

    与中央控制系统通信。工程师部署了耐达讯通信技术CAN转EtherCAT网关后,通过以下步骤实现连接: 硬件连接:将网关的CAN接口接入驱动模块,EtherCAT接口接入主控PLC; 参数配置:在
    发表于 07-18 15:27

    破界而立:CAN转EtherCAT在VAV系统的融合实践

    EtherCAT的100Mbps带宽,支持128个温控节点同步通信;3)通过标准以太网接口实现BAS系统的集中管理。在需要分阶段升级的项目中,该方案可使系统扩容周期缩短40%。 总结:在建筑智能化改造
    发表于 07-16 14:27

    打破协议壁垒,CAN转EtherCAT连接工业相机秒变跨国CP”!

    传感器控制;EtherCAT低延迟、高吞吐,适配实时图像传输。当需要将CAN相机接入EtherCAT网络时,耐达讯通信技术CAN转EtherCAT网关成为核心桥梁,通过数据帧解析与映射实现
    发表于 07-14 16:20

    PROFINET到EtherCAT主站协议转换网关的工程实现指引

    ethercat
    jf_69310483
    发布于 :2025年07月09日 11:25:48

    突破性技术:制药冻干机实现EtherCAT与Profinet网关模块无缝监控集成

    案例分享:冻干机EtherCAT 转 Profinet 实现温湿度监控 在现代医药生产过程中,冻干机作为关键设备,对温湿度的控制与监测尤为重要。某医药企业在其冻干机系统升级中,面临一个典型的通讯挑战
    的头像 发表于 03-19 13:55 397次阅读
    突破性技术:制药冻干机<b class='flag-5'>实现</b><b class='flag-5'>EtherCAT</b>与Profinet网关模块无缝监控集成

    科技绽放-EtherCAT转Profinet网关智能连接项目

    开疆智能EtherCAT转Profinet网关智能连接项目:直接体现了从Profinet到EtherCAT的连接核心内容,智能连接突出了该项目的技术特点。工业互联方案强调了该
    的头像 发表于 12-09 17:15 596次阅读
    科技绽放-<b class='flag-5'>EtherCAT</b>转Profinet网关智能连接<b class='flag-5'>项目</b>