IgH EtherCAT主站开发案例分享——基于NXP i.MX 8M Mini
前 言
本文档适用开发环境:
(1) Windows开发环境:Windows 7 64bit、Windows 10 64bit
(2) Linux开发环境:Ubuntu 18.04.4 64bit
(3) 虚拟机:VMware15.1.0
(4) Linux SDK:5.4.70_2.3.0
(5) Kernel:linux-5.4.70-xenomai-g8d94618-v1.0
(6) IgH EtherCAT:ethercat-stable-1.5-gcd0d17d-20210723
(7) Xenomai:xenomai-v3.1.1-g8b2052e
(8) 伺服驱动器:台达ASD-A2-0121-E
(9) 伺服电机:台达ECMA-C10401GS
我司提供的IgH EtherCAT主站开发案例位于产品资料“4-软件资料\Demo\igh_ethercat_dc_motor\”目录下,主要包含igh_ethercat、kernel-xenomai、xenomai等文件夹,具体说明如下。
表 1
案例目录 |
目录说明 |
bin |
存放igh_ethercat_dc_motor应用程序镜像 |
src |
存放igh_ethercat_dc_motor应用程序源码 |
igh_ethercat |
存放IgH EtherCAT开发包源码和镜像,该开发包可用于生成EtherCAT驱动和igh_ethercat_dc_motor应用程序所需要的头文件、链接库文件 |
kernel-xenomai |
存放案例配套的linux-5.4.70内核(已打xenomai实时补丁)源码和镜像 |
xenomai |
存放xenomai开发包源码和镜像,该开发包可用于生成测试Linux系统实时性的工具和链接库 |
1
IgH EtherCAT简介
IgH EtherCAT为运行于Linux系统的免费开源EtherCAT主站程序,框架如下所示,官方文档:https://www.etherlab.org/download/ethercat/ethercat-1.5.2.pdf。
1
IgH EtherCAT主站通过构建Linux字符设备,应用程序通过对字符设备的访问实现与EtherCAT主站模块的通信。
IgH EtherCAT开发包提供EtherCAT工具,该工具提供各种可在Linux用户层运行的命令,可直接实现对从站的访问和设置,如设置从站地址、显示总线配置、显示PDO数据、读写SDO参数等。
IgH EtherCAT官网:https://www.etherlab.org/en/ethercat。
2
案例说明
案例功能:控制伺服电机正转和反转。
(1)
正转:伺服电机目标速度从0加速到10000,当达到10000速度后,控制伺服电机减速至0,循环运行。
(2)
反转:伺服电机目标速度从0加速到-10000,当达到-10000速度后,控制伺服电机减速至0,循环运行。
图
2
为便于测试,我司提供已验证的基于Xenomai编译生成的内核镜像文件和设备树镜像文件,位于案例"igh_ethercat_dc_motor\kernel-xenomai\images\linux-5.4.70-xenomai-g8d94618-v1.0\"目录下,请替换至Linux系统启动卡BOOT分区下。同时将linux-5.4.70-xenomai-g8d94618-v1.0目录下的module驱动压缩包5.4.70-g8d94618.tar.gz,解压至Linux系统启动卡rootfs分区"lib/modules/"目录下。
备注:如需使用由内核源码重新编译生成的内核镜像文件、设备树文件和modules驱动,请参考Linux系统使用手册将编译的module驱动安装至Linux系统启动卡中,默认安装后module驱动目录为5.4.70。
3
3
案例测试
请按下图所示使用网线连接评估板RGMII ETH网口和伺服驱动器A的IN网口,将伺服驱动器A的OUT网口使用网线连接至伺服驱动器B的IN网口。
4
5
为便于测试,我司提供的经验证的IgH EtherCAT主站程序为案例"igh_ethercat_dc_motor\igh_ethercat\images\ethercat-stable-1.5-gcd0d17d-20210723\"目录下的ethercat-stable-1.5-gcd0d17d-20210723.tar.gz压缩包,在Ubuntu下解压即可得到IgH EtherCAT主站程序文件夹。
将IgH EtherCAT主站程序文件夹整个拷贝至评估板文件系统,执行如下命令查询评估板网卡物理地址。本次测试将IgH EtherCAT主站程序文件夹命名为__install。
Target# ifconfig
图
6
执行如下命令,加载驱动模块。
Target# insmod
/home/root/EtherCAT/__install/modules/ec_master.ko main_devices=ce:bb:9d:3b:d3:6b
7
执行如下命令,拷贝EtherCAT主站相关文件至评估板文件系统。
Target# cp /home/root/EtherCAT/__install/etc/sysconfig/ethercat
/etc/sysconfig
Target# cp /home/root/EtherCAT/__install/modules/ec_master.ko
/lib/modules/5.4.70-g8d94618 //模块驱动名称可通过"uname -r"查看
Target# depmod //同步模块依赖关系
图
8
执行如下命令,启动EtherCAT主站。
Target# /home/root/EtherCAT/__install/etc/init.d/ethercat start
图
9
执行如下命令,加载ec_generic.ko驱动文件。
Target# insmod /home/root/EtherCAT/__install/modules/ec_generic.ko
图
10
执行如下命令,添加IgH动态链接库路径。
Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/root/EtherCAT/__install/lib
v
图
11
将案例igh_ethercat_dc_motor可执行文件拷贝至评估板文件系统,执行如下命令查看参数信息。
Target# ./igh_ethercat_dc_motor --help
12
执行如下命令,控制两台伺服电机同时正转。
Target# ./igh_ethercat_dc_motor -d 0
13
14
按下"Ctrl + C",停止运行程序。
图
15
执行如下命令,控制两台伺服电机同时反转。
Target# ./igh_ethercat_dc_motor -d 1
16
17
按下"Ctrl + C",停止运行程序。
18
参数解析:
(1)
latency:等待唤醒时间(ns)。
(2)
period:EtherCAT通讯周期时间(ns)。
(3)
exec:接收和发送EtherCAT数据时间(ns)。
备注说明:
(1)
使用评估板千兆网口测试时,需设置EtherCAT通讯周期时间为1.1ms,即将igh_ethercat_dc_motor.c中的FREQUENCY配置为900(如下图所示)。如设置EtherCAT通讯周期时间为1ms时,会出现数据丢失的问题,原因在于IMX8官方千兆网口驱动兼容性不够完善,NXP官方正计划修复此问题。
图
19
(2)
使用评估板USB2 ETH百兆网口,设置EtherCAT通讯周期为1ms测试正常。
(3)
为获得更高的实时性能,亦可通过PCIe接口外扩IgH EtherCAT专用集成网卡进行测试,IgH EtherCAT支持外扩集成网卡如下所示。
图
20
4
案例编译
4.1
IgH EtherCAT主站程序编译
IgH EtherCAT主站程序的编译需依赖于基于Xemomai生成的内核,请参考Linux系统使用手册将案例"igh_ethercat_dc_motor\kernel-xenomai\src\"目录下的linux-5.4.70-xenomai-g8d94618-v1.0内核源码进行编译后,再编译IgH
EtherCAT主站程序。
请将案例"igh_ethercat_dc_motor\igh_ethercat\src\"目录下的IgH EtherCAT主站程序开发包ethercat-stable-1.5-gcd0d17d-20210723.tar.gz拷贝至Ubuntu工作目录,执行如下命令进行解压。
Host# mkdir EtherCAT
Host# tar -xvf ethercat-stable-1.5-gcd0d17d-20210723.tar.gz
-C EtherCAT/
图
21
进入解压目录,执行如下命令生成configure文件。
Host# ./bootstrap
图
22
执行如下命令,加载SDK环境变量并进行配置。
Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux
Host# mkdir
__install //创建__install文件夹用于存放生成的文件
Host# ./configure --prefix=/home/tronlong/EtherCAT/__install
--with-linux-dir=/home/tronlong/kernel-xenomai/ --enable-8139too=no
--enable-generic=yes --host=aarch64-poky-linux
备注:"/home/tronlong/kernel-xenomai/"为案例提供的内核源码目录。
23
24
执行如下命令,进行编译。
Host# make
25
26
执行如下命令,编译驱动。
Host# make modules
27
28
执行如下命令,将生成的IgH EtherCAT主站程序安装至指定路径下。
Host# make install
systemdsystemunitdir=/home/tronlong/EtherCAT/__install
图
29
图
30
执行如下命令,将驱动文件拷贝至"__install/modules/"目录下。
Host# mkdir
-p __install/modules
Host# cp
./master/ec_master.ko ./__install/modules/
Host# cp
./devices/ec_generic.ko ./__install/modules/
31
4.2
igh_ethercat_dc_motor案例编译
igh_ethercat_dc_motor案例的编译需基于IgH EtherCAT主站程序,请先编译IgH EtherCAT主站程序。
请将案例"igh_ethercat_dc_motor\src\"目录拷贝至Ubuntu工作目录下,进入src目录执行如下命令修改Makefile相关内容为IgH EtherCAT主站程序对应目录。
Host# vi Makefile
32
33
然后执行如下命令,加载SDK环境变量并进行编译。编译完成后,将在当前目录下生成可执行文件。
Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux
Host# make
图
34
5
关键代码
(1)
创建EtherCAT Master。
图
35
(2)
创建域。
图
36
(3)
配置PDO。
37
(4)
为域注册PDO条目。
38
(5)
激活Master。
图
39
(6)
修改当前进程优先级。
图
40
(7)
进入循环周期任务。
图
41
(8)
在周期任务中设置驱动器操作模式、加速度和减速度,分别发送0x6、0x7、0xF使驱动器处于ON状态。
图
42
(9)
发送目标速度,转动电机。
43
6
Xenomai简介
Xenomai是一个免费开源的Linux平台实时框架,通过使用与Linux内核并行运行的实时协同内核(real-time co-kernel)处理所有对时间要求严格的活动,例如处理中断和调度实时线程。Cobalt core比原生Linux与RT-Linux内核具有更高的优先级。
44
45
6.1
编译说明
案例使用的Xenomai版本为3.1.1,开发包为案例"igh_ethercat_dc_motor\xenomai\src\"目录下的xenomai-v3.1.1-g8b2052e.tar.gz,将其拷贝至Ubuntu工作目录下,执行如下命令进行解压。
Host# mkdir Xenomai
Host# tar
-xvf xenomai-v3.1.1-g8b2052e.tar.gz
-C Xenomai/
图
46
进入解压目录,执行如下命令在当前目录生成configure文件。
Host# ./scripts/bootstrap
图
47
执行如下命令,加载SDK环境变量并进行配置,请确保已正确安装交叉编译工具。
Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux
Host# ./configure --build=i686-pc-linux-gnu
--host=aarch64-poky-linux --disable-debug --enable-smp --with-core=cobalt
48
49
Host# mkdir
__install //创建__install文件夹用于存放生成的文件
Host# make
DESTDIR=/home/tronlong/Xenomai/__install
install
图
50
编译完成后,将在__install目录下生成usr文件夹。
51
6.2
测试说明
为便于测试,我司提供的经验证的Xenomai测试程序为案例"igh_ethercat_dc_motor\xenomai\images\xenomai-v3.1.1-g8b2052e\"目录下xenomai-v3.1.1-g8b2052e.tar.gz压缩包,在Ubuntu下解压即可得到Xenomai测试程序文件夹。
请使用已替换内核的Linux系统启动卡启动评估板,将Xenomai测试程序文件夹整个拷贝至评估板文件系统,执行如下命令拷贝Xenomai相关文件和设置动态链接库。本次测试将Xenomai测试程序文件夹命名为__install。
Target# cp -r Xenomai/__install/usr/xenomai/ /usr/
Target# export LD_LIBRARY_PATH=/usr/xenomai/lib:$LD_LIBRARY_PATH
图
52
Xenomai的测试工具均位于"/usr/xenomai/bin/"目录下,可调用对应测试工具进行测试。
图
53
使用Cyclictest工具进行实时性能基准测试。
Target# echo 0
> /proc/xenomai/latency
Target# /usr/xenomai/demo/cyclictest
-t5 -p98 -m -n
54
参数 |
解析 |
T(Thread) |
线程索引和线程ID |
P(Priority) |
线程的优先级 |
I(Interval) |
延迟,测量线程的预期唤醒周期 |
C(Count) |
测量延迟的次数 |
Min(Minimum) |
测量的最小延迟(单位us) |
Act(Actual) |
最近一次测量的延迟(单位us) |
Avg(Average) |
平均延时(单位us) |
Max(Maximum) |
测量的最大延迟(单位us) |
如果你还想了解更多嵌入式应用的相关知识,欢迎关注Tronlong创龙科技~
IgH EtherCAT主站开发案例分享——基于NXP i.MX 8M Mini的更多相关文章
- 基于FPGA的光口通信开发案例|基于Kintex-7 FPGA SFP+光口的10G UDP网络通信开发案例
前言 自著名华人物理学家高锟先生提出"光传输理论",实用化的光纤传输产品始于1976年,经历了PDH→SDH→DWDM→ASON→MSTP的发展历程.本世纪初期,ASON/OADM ...
- 「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!
前言 Graphical Demo框架提供了对平台相关依赖的抽象.Graphical应用的通用封装,如模型加载.纹理加载.着色器编译等,以及其它一些通用的应用逻辑处理的封装,使得使用框架的开发人员(以 ...
- 基于Zynq平台的EtherCAT主站方案实现
作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...
- 【实操填坑】在树莓派上编译 EtherCAT IgH Master 主站程序
官网下载地址:https://etherlab.org/download/ethercat/ (可list查看文件列表)https://etherlab.org/download/ethercat/ ...
- 【案例分享】SpreadJS金融行业应用实践,开发基于Web Excel的指标补录平台
SpreadJS作为一款基于 HTML5 的纯前端电子表格控件,以“高速低耗.高度类似Excel.可无限扩展”为产品特色,提供移动跨平台和浏览器支持,可同时满足 .NET.Java.App 等应用程序 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享
http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享 在上两篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之二 用户管理源码分享 在上一篇文章<使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享>我们分享 ...
- 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享 在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...
随机推荐
- 几种常见Ruby on Rails内置方法介绍
Ruby on Rails是一个功能强大的WEB开发框架,在这里我们将会学到一些经常用到的Ruby on Rails内置方法,帮助大家熟练掌握其应用技巧. Ruby on Rails自动生成文档技巧大 ...
- List<T> 根据对象中的属性处理数据
一.创建测试数据 UserEntity user1 = UserEntity.builder().id(1).name("张三").sex(0).build(); UserEnti ...
- 网络流量分析 | AnaTraf 网络故障排除万用表教程更新: 如何抓取两个 MAC / IP 地址之间的流量?
AnaTraf 致力于提供国产化网络流量分析.网络可视化.网络故障排除解决方案. AnaTraf 网络万用表是一款实时的网络测量.流量分析工具,用于网络流量监控.识别网络性能瓶颈.快速排查网络问题. ...
- 密码学—重合指数法Python程序
重合指数(Ic) 计算重合指数就是用来验证在Kasiski测试法中猜测出来的各种密钥长度哪一个才是最接近真实密钥长度的. 计算重合指数步骤 按照Kasiski测试法猜测的密钥长度分组 ↓ 分好组之后将 ...
- Prompt提示词助力AI写作
AI以极高的效率和还可以的输出质量,得到了许多写作人的青睐,Prompt作为AI写作的核心,通过简短的提示来引导AI生成文本,让写作新手也能轻松自如. 1. 看不下去的行业乱状 让人不禁遗憾的是,国外 ...
- 关于.net Core在华为云的鲲鹏服务器上部署的细节纪要
由于鲲鹏使用的是ARM的cpu,,非x86的,我们公司买的是Centos,,由于需要在上面部署.net core 3.0/3.1的应用,,在按照官方的文章进行部署之后,会提示 FailFast: Co ...
- Kubernetes 数据存储:从理论到实践的全面指南
本文深入解析 Kubernetes (K8S) 数据存储机制,探讨其架构.管理策略及最佳实践.文章详细介绍了 K8S 数据存储的基础.架构组成.存储卷管理技巧,并通过具体案例阐述如何高效.安全地管理数 ...
- CSS---鼠标悬浮时逐渐变大样式
.tuijian_2:hover{ transform: scale(1.3); transition: all 1s; }
- HashMap设置初始容量一直都用错了?
1 背景 今天在代码审查的时候,发现一位离职的同事留下了这样一串代码: Map<String,String> map = new HashMap<>((int)(list.si ...
- 个人记录:连接、查询、写入PG数据库类文件
# --coding:utf-8-- import pandas as pd import yaml from sqlalchemy import create_engine import psyco ...