IgH EtherCAT主站开发案例分享——基于NXP i.MX 8M Mini
本帖最后由 Tronlong创龙 于 2024-8-7 08:52 编辑前 言
本文档主要演示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 IgH EtherCAT简介
IgH EtherCAT为运行于Linux系统的免费开源EtherCAT主站程序,框架如下所示,官方文档:https://www.etherlab.org/download/ethercat/ethercat-1.5.2.pdf。
https://p9.itc.cn/images01/20230804/c19a1d3062714728b01b9bcaba9705e1.png图 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,循环运行。
https://p8.itc.cn/images01/20230804/fcba2f09b9d94f79bb29ee53415d6530.png图 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。
https://p1.itc.cn/images01/20230804/2c31204a1c7740f4bf7d85cc4b4745fb.png图 3 3 案例测试
请按下图所示使用网线连接评估板RGMII ETH网口和伺服驱动器A的IN网口,将伺服驱动器A的OUT网口使用网线连接至伺服驱动器B的IN网口。
https://p2.itc.cn/images01/20230804/3675b3286d434dcba8738b0779a20dc4.png图 4 https://p2.itc.cn/images01/20230804/c81cc36b4df345aaa27468ebb27b20ba.png图 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
https://p9.itc.cn/images01/20230804/3d578684ee9b47f2ab669878391a1120.png图 6 执行如下命令,加载驱动模块。
Target# insmod /home/root/EtherCAT/__install/modules/ec_master.ko main_devices=ce:bb:9d:3b:d3:6b
https://p0.itc.cn/images01/20230804/32ded31de5f14b19a6cb6508c9b7804d.png图 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 //同步模块依赖关系
https://p6.itc.cn/images01/20230804/36088b70c52f4dd1a93d62406246c6cb.png图 8 执行如下命令,启动EtherCAT主站。
Target# /home/root/EtherCAT/__install/etc/init.d/ethercat start
https://p9.itc.cn/images01/20230804/2b0575d19aeb46668902a5c49879f0b6.png图 9 执行如下命令,加载ec_generic.ko驱动文件。
Target# insmod /home/root/EtherCAT/__install/modules/ec_generic.ko
https://p8.itc.cn/images01/20230804/63ca76ca054948298f200ee7e56f32d7.png图 10 执行如下命令,添加IgH动态链接库路径。
Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/root/EtherCAT/__install/lib
v https://p8.itc.cn/images01/20230804/63ca76ca054948298f200ee7e56f32d7.png图 11 将案例igh_ethercat_dc_motor可执行文件拷贝至评估板文件系统,执行如下命令查看参数信息。
Target# ./igh_ethercat_dc_motor --help
https://p2.itc.cn/images01/20230804/3cdeea72032a49f1a0c1f0cfe22a03ee.png图 12 执行如下命令,控制两台伺服电机同时正转。
Target# ./igh_ethercat_dc_motor -d 0
https://p0.itc.cn/images01/20230804/055f52f3e312461a920897238c153716.png图 13 https://p5.itc.cn/images01/20230804/11d128f2067d4d71a4d453afb5885822.png图 14 按下"Ctrl + C",停止运行程序。
https://p3.itc.cn/images01/20230804/a382a843610e41fda0563857c3826d93.png图 15 执行如下命令,控制两台伺服电机同时反转。
Target# ./igh_ethercat_dc_motor -d 1
https://p0.itc.cn/images01/20230804/c93172417aef4bf7a3d896e064526abe.png图 16 https://p2.itc.cn/images01/20230804/48d95927bb3b4a5296fa60860b10cf28.png图 17 按下"Ctrl + C",停止运行程序。
https://p4.itc.cn/images01/20230804/5141d1d3c90b408f9f5a9641fc80632c.png图 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官方正计划修复此问题。
https://p2.itc.cn/images01/20230804/a89bf7c92a3b4f9999a00e444838df01.png图 19 (2) 使用评估板USB2 ETH百兆网口,设置EtherCAT通讯周期为1ms测试正常。
(3) 为获得更高的实时性能,亦可通过PCIe接口外扩IgH EtherCAT专用集成网卡进行测试,IgH EtherCAT支持外扩集成网卡如下所示。
https://p9.itc.cn/images01/20230804/a4fc0d2e79ef488d8bb1a3d3f60a5ff0.png图 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/
https://p2.itc.cn/images01/20230804/cc9bbb45fe264decb22017280ab4d313.png图 21 进入解压目录,执行如下命令生成configure文件。
Host# ./bootstrap
https://p6.itc.cn/images01/20230804/9b453aecf45c48f5a235fba2dfb4fa32.png图 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/"为案例提供的内核源码目录。
https://p8.itc.cn/images01/20230804/cdfa8271fab04a40965a7daf3a1fa56c.png图 23 https://p5.itc.cn/images01/20230804/d8108873e1a9413fa45baa3727a1a72b.png图 24 执行如下命令,进行编译。
Host# make
https://p1.itc.cn/images01/20230804/c4d4bfec6b084d5b88dbd420a39c854f.png图 25 https://p1.itc.cn/images01/20230804/37f0688cbc274512a1356ce82c0b0c7b.png图 26 执行如下命令,编译驱动。
Host# make modules
https://p9.itc.cn/images01/20230804/3e79145dccb8472ead3d5e1c1ca70966.png图 27 https://p6.itc.cn/images01/20230804/f7c8f04f0ec74820a135320e37bf7ecb.png图 28 执行如下命令,将生成的IgH EtherCAT主站程序安装至指定路径下。
Host# make install systemdsystemunitdir=/home/tronlong/EtherCAT/__install
https://p1.itc.cn/images01/20230804/7603c9ced82d492bba495d049203440d.png图 29 https://p8.itc.cn/images01/20230804/61e80903ffba4676a197ad419693f28e.png图 30 执行如下命令,将驱动文件拷贝至"__install/modules/"目录下。
Host# mkdir -p __install/modules
Host# cp ./master/ec_master.ko ./__install/modules/
Host# cp ./devices/ec_generic.ko ./__install/modules/
https://p4.itc.cn/images01/20230804/038862ceeed340ae9a61730ade768bc1.png图 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
https://p1.itc.cn/images01/20230804/72d10dcf714842619c73db0185be0866.png图 32 https://p2.itc.cn/images01/20230804/15e707982cdb4c81b81a4781afbd436c.png图 33 然后执行如下命令,加载SDK环境变量并进行编译。编译完成后,将在当前目录下生成可执行文件。
Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux
Host# make
https://p3.itc.cn/images01/20230804/109768ce294345eeb039af34736dffd0.png图 34 5 关键代码 (1) 创建EtherCAT Master。
https://p0.itc.cn/images01/20230804/7e1df1bc10d34a24b073297bd9a41526.png图 35 (2) 创建域。
https://p6.itc.cn/images01/20230804/dde86ddbc6af475ead4f64d9b166a196.png图 36 (3) 配置PDO。
https://p2.itc.cn/images01/20230804/3779f3e5a01b4dc4a84c9c77f77a9cd3.png图 37 (4) 为域注册PDO条目。
https://p5.itc.cn/images01/20230804/73fe71d5b9e14bd2a1a1174be3b4271b.png图 38 (5) 激活Master。
https://p3.itc.cn/images01/20230804/522969ba010b4ef89cf3f69b635ecd85.png图 39 (6) 修改当前进程优先级。
https://p2.itc.cn/images01/20230804/87238394e0814858956324e0e83126ab.png图 40 (7) 进入循环周期任务。
https://p3.itc.cn/images01/20230804/33f5ba574146431dbdae41cfe61684c7.png图 41 (8) 在周期任务中设置驱动器操作模式、加速度和减速度,分别发送0x6、0x7、0xF使驱动器处于ON状态。
https://p9.itc.cn/images01/20230804/c84cdacebe7e424581e245f25af46ca1.png图 42 (9) 发送目标速度,转动电机。
https://p9.itc.cn/images01/20230804/fefab6b56db54363a4088bcf123b2c67.png图 43 6 Xenomai简介 Xenomai是一个免费开源的Linux平台实时框架,通过使用与Linux内核并行运行的实时协同内核(real-time co-kernel)处理所有对时间要求严格的活动,例如处理中断和调度实时线程。Cobalt core比原生Linux与RT-Linux内核具有更高的优先级。
https://p6.itc.cn/images01/20230804/3af2bf08750c40e4a6a145f28f4501e2.png图 44 https://p2.itc.cn/images01/20230804/4528ce347ec344918bd2519d49dde793.png图 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/
https://p0.itc.cn/images01/20230804/dfd3a8cd714c4de69f8dc59ba1c6917d.png图 46 进入解压目录,执行如下命令在当前目录生成configure文件。
Host# ./scripts/bootstrap
https://p4.itc.cn/images01/20230804/f723f67df2984fc8ab5b3b912a8e14bc.png图 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
https://p7.itc.cn/images01/20230804/c5a6bf0b7fe747c5961665290d6c831a.png图 48 https://p8.itc.cn/images01/20230804/721cb52655744ecbb957b8460750449f.png图 49 Host# mkdir __install //创建__install文件夹用于存放生成的文件
Host# make DESTDIR=/home/tronlong/Xenomai/__install install
https://p1.itc.cn/images01/20230804/bd05df85f4a945ff9057efba449c6acb.png图 50 编译完成后,将在__install目录下生成usr文件夹。
https://p6.itc.cn/images01/20230804/4282fc822cc4442fb94692fde7218e64.png图 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
https://p4.itc.cn/images01/20230804/b33f9d75e89144e1b9a836acbbae3e96.png图 52 Xenomai的测试工具均位于"/usr/xenomai/bin/"目录下,可调用对应测试工具进行测试。
https://p3.itc.cn/images01/20230804/62e9e9abb22b4c5dac6174aa43b3f71a.png图 53 使用Cyclictest工具进行实时性能基准测试。
Target# echo 0 > /proc/xenomai/latency
Target# /usr/xenomai/demo/cyclictest -t5 -p98 -m -n
https://p0.itc.cn/images01/20230804/58b64657d43d407f82b433650db4ca8a.png图 54 https://p0.itc.cn/images01/20230804/0dceae46b32a48fd99c2793a2b8547f4.png表 2 Cyclictest测试结果说明 如果你还想了解更多嵌入式应用的相关知识,欢迎关注Tronlong创龙科技
请问,EtherCAT主站这种一般是什么应用场景啊?
页:
[1]