首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(上)

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

原创
作者头像
创龙科技Tronlong
发布2025-10-14 15:22:50
发布2025-10-14 15:22:50
1080
举报

前 言

创龙科技研发的 TL3588-EVM 评估板可基于 IgH EtherCAT 实现伺服电机控制。为助力开发者掌握相关开发要点,本文先介绍 IgH EtherCAT,再详述案例测试(多模式多状态电机控制与抖动统计)、编译流程及核心代码,覆盖环境配置、驱动加载与程序运行,帮助开发者高效完成评估板 IgH EtherCAT 主站开发与电机控制功能实现。

本文档适用开发环境:

Windows开发环境:Windows 7 64bit、Windows 10 64bit

开发环境:VMware16.2.5、Ubuntu20.04.6 64bit

U-Boot:U-Boot-2017.09

Kernel:Linux-RT-5.10.160

LinuxSDK: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系列号]\”目录下,版本号、Git序列号以实际情况为准。请按照如下方法替换为Linux-RT内核。

请将boot-rt.img镜像拷贝至评估板文件系统任意目录下。执行如下命令,替换内核镜像至系统启动卡,评估板重启生效。

备注:如需固化至eMMC,请将设备节点修改为"/dev/mmcblk0p3"。

Target# dd if=boot-rt.img of=/dev/mmcblk1p3

Target# sync

Target# reboot

图 1
图 1
图 2 Linux-RT内核
图 2 Linux-RT内核

我司提供的IgH EtherCAT主站开发案例igh_ethercat_dc_motor位于产品资料“4-软件资料\Demo\”目录下,主要包含src、bin和igh_ethercat等文件夹,具体说明如下。

表 1
表 1

IgH EtherCAT简介

IgH EtherCAT为运行于Linux系统的免费开源EtherCAT主站程序,框架如下所示。

图 3
图 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,循环运行。

图 4
图 4

案例测试

在本案例测试过程中,程序均在隔离CPU环境下运行,并分别采用SCHED_FIFO和SCHED_DEADLINE两种进程调度策略,在空载状态、满负荷状态下持续运行12小时。

请按下图所示使用网线连接评估板ETH1网口和伺服驱动器A的IN网口,将伺服驱动器A的OUT网口使用网线连接至伺服驱动器B的IN网口。

图 5
图 5
图 6
图 6

本次测试以隔离CPU4核心为例进行演示,评估板上电前长按"Ctrl + C"进入U-Boot命令行模式,修改环境变量,隔离CPU4核心,保存环境变量后重启评估板。

U-Boot# setenv bootargs "storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal isolcpus=4"

U-Boot# saveenv

U-Boot# reset

图 7
图 7

进入评估板文件系统,执行如下命令,确认已正确隔离CPU。

Target# cat /proc/cmdline

图 8
图 8

为便于测试,我司提供经验证的IgH EtherCAT主站程序为案例"igh_ethercat\images\"目录下的ethercat-stable-[版本号]-[Git序列号].tar.gz压缩包,将其拷贝至评估板文件系统任意目录下。版本号、Git序列号请以实际情况为准。将案例bin目录下的igh_ethercat_dc_motor可执行文件拷贝至评估板文件系统。

执行如下命令,解压IgH EtherCAT主站程序压缩包,得到_install文件夹。

Target# tar -xvf ethercat-stable-1.5-gcd0d17d.tar.gz

图 9
图 9

执行如下命令,并查询评估板网卡物理地址。

Target# ifconfig

图 10
图 10

执行如下命令,加载驱动模块,命令中"0e:e2:85:a1:c8:fd"为评估板网卡物理地址,请根据实际情况修改。

Target# insmod -f /root/_install/modules/ec_master.ko main_devices=0e:e2:85:a1:c8:fd

图 11
图 11

执行如下命令,拷贝EtherCAT主站相关文件至评估板文件系统。

Target# mkdir /etc/sysconfig

Target# cp _install/etc/sysconfig/ethercat /etc/sysconfig

Target# mkdir -p /lib/modules/$(uname -r)

Target# cp _install/modules/ec_master.ko /lib/modules/$(uname -r)

Target# depmod -a

备注:此处的警告信息不影响测试结果,忽略即可。

图 12
图 12

执行如下命令,启动EtherCAT主站。

Target# /root/_install/etc/init.d/ethercat start

图 13
图 13

执行如下命令,加载ec_generic.ko驱动文件。

Target# insmod -f _install/modules/ec_generic.ko

图 14
图 14

执行如下命令,添加IgH动态链接库路径。

Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/_install/lib

Target# sync

图 15
图 15

执行如下命令,修改内核信息打印级别。

Target# echo 1 4 1 7 > /proc/sys/kernel/printk

图 16
图 16

执行如下命令,可查看igh_ethercat_dc_motor程序相关参数信息。

Target# ./igh_ethercat_dc_motor --help

图 17
图 17

参数解释

(1)-d:指定电机转向,0:正转,1:反转;

(2)-v:打印程序版本信息;

(3)-s:选择进程调度策略模式。程序执行时未使用-s参数或-s参数值为0,进程调度策略默认为SCHED_FIFO;若使用-s参数且参数值为1,进程调度策略为SCHED_DEADLINE,后面未添加参数值[xxx xxx xxx]则使用默认参数值,其中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 &

图 18
图 18

打印信息"2554"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。

Target# chrt -p 2554

图 19
图 19

如需停止运行后台程序,请执行如下命令。

Target# kill -9 2554

图 20
图 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 &

图 21
图 21

打印信息"2785"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。

Target# chrt -p 2785

图 22
图 22

如需停止运行后台程序,请执行如下命令。

Target# kill -9 2785

图 23
图 23

SCHED_DEADLINE模式(空载状态)

该测试状态为程序运行在隔离CPU,程序进程调度策略设置为SCHED_DEADLINE、进程优先级设置为最高,空载状态测试12个小时。

执行如下命令,控制两台伺服电机同时正转。

Target# taskset -c 4 ./igh_ethercat_dc_motor -d 0 -s 1 > log.txt &

图 24
图 24

打印信息"2874"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。

Target# chrt -p 2874

图 25
图 25

如需停止运行后台程序,请执行如下命令。

Target# kill -9 2874

图 26
图 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 &

图 27
图 27

打印信息"2985"为进程号,请根据实际进程号,执行如下命令,确认进程调度策略。

Target# chrt -p 2985

图 28
图 28

如需停止运行后台程序,执行如下命令。

Target# kill -9 2985

图 29
图 29

统计结果分析

程序运行输出的打印信息保存到了log.txt,停止后台运行程序后,执行如下命令查看log.txt部分内容。

Target# head -n100 log.txt

图 30
图 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文件内容进行数据分析后,得到如下结果。

表 2
表 2

备注:从表中数据可知,SCHED_DEADLINE模式在空载、满负荷状态都比SCHED_FIFO模式抖动值小,建议使用SCHED_DEADLINE模式。

电机反转

请参考上述“电机正转”测试方法,将运行igh_ethercat_dc_motor可执行程序命令中的"-d 0"参数修改为"-d 1"。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前 言
  • IgH EtherCAT简介
  • 案例说明
  • 案例测试
  • 电机正转
    • SCHED_FIFO模式(空载状态)
    • SCHED_FIFO模式(满负荷状态)
    • SCHED_DEADLINE模式(空载状态)
    • SCHED_DEADLINE模式(满负荷状态)
    • 统计结果分析
  • 电机反转
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档