陈工-创龙科技 发表于 2025-10-14 15:32:22

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(上)

本帖最后由 陈工-创龙科技 于 2025-10-14 15:34 编辑

前言创龙科技研发的 TL3588-EVM 评估板可基于 IgH EtherCAT 实现伺服电机控制。为助力开发者掌握相关开发要点,本文先介绍 IgH EtherCAT,再详述案例测试(多模式多状态电机控制与抖动统计)、编译流程及核心代码,覆盖环境配置、驱动加载与程序运行,帮助开发者高效完成评估板 IgH EtherCAT 主站开发与电机控制功能实现。本文档适用开发环境:Windows开发环境:Windows 7 64bit、Windows 10 64bit开发环境:VMware16.2.5、Ubuntu20.04.6 64bitU-Boot:U-Boot-2017.09Kernel:Linux-RT-5.10.160LinuxSDK:LinuxSDK-[版本号](基于rk3588_linux_release_v1.2.1_20230720)IgH EtherCAT:ethercat-stable-1.5-gcd0d17d-20210723伺服驱动器:台达ASD-A2-0121-E伺服电机:台达ECMA-C10401GS我司默认使用的是Linux内核,同时提供了Linux-RT内核boot-rt.img位于产品资料“4-软件资料\Debian\Kernel\image\linux-5.10.160-[版本号]-\”目录下,版本号、Git序列号以实际情况为准。请按照如下方法替换为Linux-RT内核。请将boot-rt.img镜像拷贝至评估板文件系统任意目录下。执行如下命令,替换内核镜像至系统启动卡,评估板重启生效。备注:如需固化至eMMC,请将设备节点修改为"/dev/mmcblk0p3"。Target# dd if=boot-rt.img of=/dev/mmcblk1p3Target# syncTarget# reboot
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyGOAG3MEAAAXCKFyZ0k764.png

图 1
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyGuAfno6AAAhlPfbWpE077.png

图 2 Linux-RT内核
我司提供的IgH EtherCAT主站开发案例igh_ethercat_dc_motor位于产品资料“4-软件资料\Demo\”目录下,主要包含src、bin和igh_ethercat等文件夹,具体说明如下。
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyHSADAjsAAAf2cVXO4A093.png

表 1

IgH EtherCAT简介IgH EtherCAT为运行于Linux系统的免费开源EtherCAT主站程序,框架如下所示。
https://file1.elecfans.com/web3/M00/27/B5/wKgZPGiQYZ2AJujzAAFLASU3li4860.png

图 3
IgH EtherCAT主站通过构建Linux字符设备,应用程序通过对字符设备的访问实现与EtherCAT主站模块的通信。IgH EtherCAT开发包提供EtherCAT工具,该工具提供各种可在Linux用户层运行的命令,可直接实现对从站的访问和设置,如设置从站地址、显示总线配置、显示PDO数据、读写SDO参数等。IgH EtherCAT官网:https://www.etherlab.org/en/ethercat。
案例说明案例功能:EtherCAT通讯周期时间为1ms,控制伺服电机正转和反转,并通过串口循环打印EtherCAT通讯周期时间的最大值和最小值。(1)正转:伺服电机目标速度从0加速到10000,当达到10000速度后,控制伺服电机减速至0,循环运行。
(2)反转:伺服电机目标速度从0加速到-10000,当达到-10000速度后,控制伺服电机减速至0,循环运行。

https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyIaAL25jAACohW8wTac577.png

图 4
案例测试在本案例测试过程中,程序均在隔离CPU环境下运行,并分别采用SCHED_FIFO和SCHED_DEADLINE两种进程调度策略,在空载状态、满负荷状态下持续运行12小时。请按下图所示使用网线连接评估板ETH1网口和伺服驱动器A的IN网口,将伺服驱动器A的OUT网口使用网线连接至伺服驱动器B的IN网口。
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyJOAemE_AA_sU_44WSQ109.png

图 5
https://file1.elecfans.com/web3/M00/27/B5/wKgZPGiQYcSABLr2AAkJCTEqOy0981.png

图 6

本次测试以隔离CPU4核心为例进行演示,评估板上电前长按"Ctrl + C"进入U-Boot命令行模式,修改环境变量,隔离CPU4核心,保存环境变量后重启评估板。U-Boot# setenv bootargs "storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal isolcpus=4"U-Boot# saveenvU-Boot# reset
https://file1.elecfans.com/web3/M00/31/DC/wKgZPGjVCc-AUM8DAAAR4PmOD0k811.png

图 7
进入评估板文件系统,执行如下命令,确认已正确隔离CPU。Target# cat /proc/cmdline
https://file1.elecfans.com/web3/M00/31/DC/wKgZPGjVCceAB2OTAAAaH-15lqY589.png

图 8
为便于测试,我司提供经验证的IgH EtherCAT主站程序为案例"igh_ethercat\images\"目录下的ethercat-stable-[版本号]-.tar.gz压缩包,将其拷贝至评估板文件系统任意目录下。版本号、Git序列号请以实际情况为准。将案例bin目录下的igh_ethercat_dc_motor可执行文件拷贝至评估板文件系统。执行如下命令,解压IgH EtherCAT主站程序压缩包,得到_install文件夹。Target# tar -xvf ethercat-stable-1.5-gcd0d17d.tar.gz
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyK-AE9QZAAA0lSmV4io909.png

图 9
执行如下命令,并查询评估板网卡物理地址。Target# ifconfig
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyLyASqLSAABx_cA-cPo773.png

图 10
执行如下命令,加载驱动模块,命令中"0e:e2:85:a1:c8:fd"为评估板网卡物理地址,请根据实际情况修改。Target# insmod -f /root/_install/modules/ec_master.ko main_devices=0e:e2:85:a1:c8:fd
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyLeAHMdVAADytytMfHE422.png

图 11
执行如下命令,拷贝EtherCAT主站相关文件至评估板文件系统。Target# mkdir /etc/sysconfigTarget# cp _install/etc/sysconfig/ethercat /etc/sysconfigTarget# mkdir -p /lib/modules/$(uname -r)Target# cp _install/modules/ec_master.ko /lib/modules/$(uname -r)Target# depmod -a备注:此处的警告信息不影响测试结果,忽略即可。
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyNGAPxSrAAA4qmrIoko522.png

图 12
执行如下命令,启动EtherCAT主站。Target# /root/_install/etc/init.d/ethercat start
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyNiAO3GwAAAMPLv39zE388.png

图 13
执行如下命令,加载ec_generic.ko驱动文件。Target# insmod -f _install/modules/ec_generic.ko
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyN6AZC7ZAAIvvArCxq4501.png

图 14
执行如下命令,添加IgH动态链接库路径。Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/_install/libTarget# sync
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyOaABdfJAA***gzk1Tag444.png

图 15
执行如下命令,修改内核信息打印级别。Target# echo 1417 > /proc/sys/kernel/printk
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyO2ANL0dAAAIaPbOs3w313.png

图 16
执行如下命令,可查看igh_ethercat_dc_motor程序相关参数信息。Target# ./igh_ethercat_dc_motor --help
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyPSAFiHbAAAkolvuR4k737.png

图 17
参数解释(1)-d:指定电机转向,0:正转,1:反转;
(2)-v:打印程序版本信息;
(3)-s:选择进程调度策略模式。程序执行时未使用-s参数或-s参数值为0,进程调度策略默认为SCHED_FIFO;若使用-s参数且参数值为1,进程调度策略为SCHED_DEADLINE,后面未添加参数值则使用默认参数值,其中sched-runtime值表示运行时间、sched-deadline值表示相对的期限、sched-period值表示周期,单位均为ns;
(4)-help:查看程序运行参数。
电机正转SCHED_FIFO模式(空载状态)该测试状态为程序运行在隔离CPU,程序进程调度策略设置为SCHED_FIFO,进程优先级设置为最高,空载状态测试12个小时。执行以下命令,控制两台伺服电机同时正转。Target# taskset -c 4 ./igh_ethercat_dc_motor -d 0 -s 0 > log.txt &
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyP2ADugvAAAJYN1xSwc552.png

图 18
打印信息"2554"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。Target# chrt -p 2554
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyQKAQ-hbAAAN6YmpoV8321.png

图 19
如需停止运行后台程序,请执行如下命令。Target# kill -9 2554
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyQmAIx7RAADQvSaZxQQ385.png

图 20
SCHED_FIFO模式(满负荷状态)该测试状态为程序运行在隔离CPU,程序进程调度策略设置为SCHED_FIFO,进程优先级设置为最高,满负荷状态压力测试12个小时。执行以下命令,控制两台伺服电机同时正转。Target# stress --cpu 8 --io 8 --vm 8 -t 43200 &Target# taskset -c 4 ./igh_ethercat_dc_motor -d 0 -s 0 > log.txt &
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyRGAezg8AAAcVp5jiyY354.png

图 21
打印信息"2785"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。Target# chrt -p 2785
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyRiAJ4zFAAANpm7EndI584.png

图 22
如需停止运行后台程序,请执行如下命令。Target# kill -9 2785
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyR-ARAi7AAAOYwHi27M397.png

图 23
SCHED_DEADLINE模式(空载状态)该测试状态为程序运行在隔离CPU,程序进程调度策略设置为SCHED_DEADLINE、进程优先级设置为最高,空载状态测试12个小时。执行如下命令,控制两台伺服电机同时正转。Target# taskset -c 4 ./igh_ethercat_dc_motor -d 0 -s 1 > log.txt &
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtySaAETPKAAANXneI9uQ288.png

图 24
打印信息"2874"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。Target# chrt -p 2874
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyS2ALwdMAAATm-0Zkkw880.png

图 25
如需停止运行后台程序,请执行如下命令。Target# kill -9 2874
https://file1.elecfans.com/web3/M00/34/B8/wKgZO2jtyTSAOXDYAAAOstQWNes370.png

图 26
SCHED_DEADLINE模式(满负荷状态)该测试状态为程序运行在隔离CPU,进程调度策略设置为SCHED_DEADLINE,优先级设置为最高,满负荷状态压力测试12个小时。执行以下命令,控制两台伺服电机同时正转。Target# stress --cpu 8 --io 8 --vm 8 -t 43200 &Target# taskset -c 4 ./igh_ethercat_dc_motor -d 0 -s 1 > log.txt &
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyUqABoCtAAAdHudiQQs428.png

图 27
打印信息"2985"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。Target# chrt -p 2985
https://file1.elecfans.com/web3/M00/34/B9/wKgZO2jtyVGAFDt7AAATqqpCYxM916.png

图 28
如需停止运行后台程序,执行如下命令。Target# kill -9 2985
https://file1.elecfans.com/web3/M00/34/B9/wKgZPGjtyViANhWWAAAOQVy9N54163.png

图 29
统计结果分析程序运行输出的打印信息保存到了log.txt,停止后台运行程序后,执行如下命令查看log.txt部分内容。Target# head -n100 log.txt
https://file1.elecfans.com/web3/M00/34/B9/wKgZO2jtyV-AMv9YAABqqQd5_tk176.png

图 30
参数解释:(1)latency:等待唤醒时间(ns);
(2)period:EtherCAT通讯周期时间(ns);
(3)exec:接收和发送EtherCAT数据时间(ns)。
案例设置period为1ms,通过分析log.txt得到12小时的period最小值和period最大值(period单位:纳秒),通过分析计算period得到12个小时的period抖动值(period最大值 - period最小值),从period抖动值中分析、计算得到period最大抖动值、period平均抖动值。对log.txt文件内容进行数据分析后,得到如下结果。
https://file1.elecfans.com/web3/M00/34/B9/wKgZO2jtyWiAOOT3AAAjqSpbfz4606.png

表 2
备注:从表中数据可知,SCHED_DEADLINE模式在空载、满负荷状态都比SCHED_FIFO模式抖动值小,建议使用SCHED_DEADLINE模式。电机反转请参考上述“电机正转”测试方法,将运行igh_ethercat_dc_motor可执行程序命令中的"-d 0"参数修改为"-d 1"。


页: [1]
查看完整版本: 创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(上)