前  言

本文档主要演示NXP i.MX 8M Mini工业开发板基于IgH EtherCAT控制伺服电机。
 
演示板卡是创龙科技的TLIMX8-EVM工业开发板,它是基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核心板和评估底板组成。ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器采用14nm最新工艺,支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬件解码、GPU图形加速器。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
 
评估板接口资源丰富,引出MIPI CAMERA、MIPI/LVDS LCD、HDMI OUT、LINE IN/OUT、PCIe、FlexSPI、USB、RS485、RS232、千兆网口、百兆网口等接口,板载WIFI模块,支持Mini-PCIe 4G模块,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。
 

本文档适用开发环境:

(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
 
表 2 Cyclictest测试结果说明

参数

解析

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的更多相关文章

  1. 基于FPGA的光口通信开发案例|基于Kintex-7 FPGA SFP+光口的10G UDP网络通信开发案例

    前言 自著名华人物理学家高锟先生提出"光传输理论",实用化的光纤传输产品始于1976年,经历了PDH→SDH→DWDM→ASON→MSTP的发展历程.本世纪初期,ASON/OADM ...

  2. 「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

    前言 Graphical Demo框架提供了对平台相关依赖的抽象.Graphical应用的通用封装,如模型加载.纹理加载.着色器编译等,以及其它一些通用的应用逻辑处理的封装,使得使用框架的开发人员(以 ...

  3. 基于Zynq平台的EtherCAT主站方案实现

    作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...

  4. 【实操填坑】在树莓派上编译 EtherCAT IgH Master 主站程序

    官网下载地址:https://etherlab.org/download/ethercat/  (可list查看文件列表)https://etherlab.org/download/ethercat/ ...

  5. 【案例分享】SpreadJS金融行业应用实践,开发基于Web Excel的指标补录平台

    SpreadJS作为一款基于 HTML5 的纯前端电子表格控件,以“高速低耗.高度类似Excel.可无限扩展”为产品特色,提供移动跨平台和浏览器支持,可同时满足 .NET.Java.App 等应用程序 ...

  6. 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享

    http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

  7. 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享    在上两篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

  8. 使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之二 用户管理源码分享   在上一篇文章<使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享>我们分享 ...

  9. 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享   在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...

  10. 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享

    使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...

随机推荐

  1. pde复习笔记 第一章 波动方程 第三节 分离变量法

    教材 谷超豪<数学物理方程>第四版,虽然我们老师用的第三版,但是除了页码对不上,习题多了一点,也似乎没有多少区别. 打算开个新栏专门总结一下pde的各种计算问题,在图书馆算的手麻了,但是习 ...

  2. .NET有哪些好用的定时任务调度框架

    前言 定时任务调度的相关业务在日常工作开发中是一个十分常见的需求,经常有小伙伴们在技术群提问:有什么好用的定时任务调度框架推荐的?今天大姚给大家分享5个.NET开源.简单.易用.免费的任务调度框架,帮 ...

  3. C语言:找到在文件单词中字符个数最多的单词。

    第一点:这是一个传回指针的指针函数,所以在定义的时候是char*类型的函数,传进的参数是一个文件指针,(敲重点了,一定一定一定要把文件打开了才能传这个文件指针进来!!)因为这是在你的文本文件里面进行查 ...

  4. 4G EPS 的网络协议栈

    目录 文章目录 目录 前文列表 LTE/EPC 协议栈 E-UTRAN 空中接口协议栈 用户平面协议 PHY 层 MAC 层 RLC 层 PDCP 层 控制平面协议 RRC 层 NAS 层 EPC 核 ...

  5. kubernets之了解Qos等级

    一  Qos的种类 BestEffort(优先级最低) Burstable(中等优先级) Guaranteed(最高优先级) 二  Qos的作用 众所周知,节点上面的limits允许超卖,当节点上面的 ...

  6. 开发人员必知的5种开源协议(GPL、LGPL、BSD、MIT、Apache License)

    软件开源是许多软件企业需要关注的问题,不同的开源软件协议,对应不同的源代码使用限制.只有了解这些开源软件协议,才能更好地使用和回馈开源软件,否则就有可能触犯法律.今天介绍四种常见的开源软件协议: GP ...

  7. Redis 的简单介绍

    Redis 特点 单线程 执行过程按顺序执行,不会同时执行多个操作,保证操作的原子性,省去了很多上下文切换线程的时间,不必考虑资源竞争和可能出现死锁. 为什么使用单线程 ? 官方FAQ表示:因为 Re ...

  8. NOIP模拟95(多校28)

    T1 嗑瓜子 解题思路 \(f_{i,j}\) 表示操作 \(i\) 次,拿走了 \(j\) 个瓜子的概率,转移就比较直接了: \[f_{i+1,j+1}\leftarrow f_{i,j}\time ...

  9. LeetCode 688. Knight Probability in Chessboard “马”在棋盘上的概率 (C++/Java)

    题目: On an NxN chessboard, a knight starts at the r-th row and c-th column and attempts to make exact ...

  10. ctfshow-超详细通关教程-web(1~8)

    快捷目录 web1 web2 web3 web4 web5 web6 web7 web8 1.web签到题 打开网址后出现如下界面. 查看一下网站源码 将Y3Rmc2hvd3s1ZjkxNTc3Yy0 ...