IgH EtherCAT总线
IgH EtherCAT是运行于Linux系统的开源EtherCAT主站程序,IgH EtherCAT主站通过构建Linux字符设备, 应用程序通过对字符设备的访问实现与EtherCAT主站模块的通信。
IgH EtherCAT开发包配套EtherCAT工具,可提供各种可在Linux用户层运行的命令,可直接实现对从站的访问和设置,如设置从站地址、显示总线配置、显示PDO数据、读写SDO参数等。具体详情可以查看IgH的官网进行了解。

本文基于触觉智能RK3506星闪开发板演示Ethercat主站开发,其配套RK3506核心板(3核A7+M0多核异构),100%全国产,峰值功耗低至0.65W。
EtherCAT IgH软件环境
- EtherCAT整体介绍
EtherCAT整体分为四个部分,包含:实时Linux内核、用户态、驱动以及EtherCAT应用。触觉智能RK3506开发板提供EtherCAT预编译的bin文件:

- 实时Linux内核
EtherCAT IgH需要保证高实时性,Preempt-RT是一种针对实时性能进行了优化的Linux内核。与普通的 Linux内核相比,Preempt-RT具有以下优势:
1. 实时性能: Preempt-RT提供了更可靠和更精确的实时性能。它采用了一些实时调度策略和机制,使得任务能够按照严格的时间要求执行,从而适用于需要高度可预测性和低延迟的应用场景,如工业自动化、机器人控制等。
2. 硬实时能力:Preempt-RT具有硬实时能力,即能够确保任务在规定的时间内完成,而不会受到其 他任务或中断的干扰。这对于需要严格的时间限制的应用非常重要,如航空航天、医疗设备等领域。
3. 任务调度:Preempt-RT使用了更加高效和优化的任务调度算法,如基于优先级的实时调度算法, 以确保高优先级任务能够及时响应并完成,而低优先级任务不会影响到实时任务的执行。
4. 中断处理:Preempt-RT针对中断处理进行了优化,使得中断的响应时间更短,能够更快地响应外部事件。
5. 内核定时器:Preempt-RT提供了更精确和可配置的内核定时器,使得可以实现微秒级的定时精 度,适用于对时间要求极高的应用场景。
6. 实时扩展:Preempt-RT提供了一些实时扩展机制,使得用户能够方便地对内核进行定制和扩展,以满足特定应用的需求。
总的来说,Preempt-RT在实时性能、可靠性和精度方面比普通的Linux内核更加优秀,因此在对实时性能 要求较高的应用场景中被广泛使用。瑞芯微提供配套SDK的Preempt-RT补丁。
- 用户态
用户态中主要是两个文件,ethercat和libethercat.so,一个是EtherCAT IgH的调试工具,一个是EtherCAT。
IgH的动态库,用来提供用户层接口。用户态部分访问以下链接:
https://gitlab.com/etherlab.org/ethercat/-/tree/master?r ef_type=heads下载IgH的源代码,编译后会生成ethercat二进制文件,libethercat.so和一些example等等。用户态部分也可以使用预编译好的EtherCAT IgH二进制文件和libethercat.so,如下所示:

- 驱动
驱动部分主要是ec_master.ko和一些瑞芯微RK优化后的ko文件。

- EtherCAT IgH应用部分
EtherCAT IgH应用部分需要根据实际使用的伺服驱动器来实现,该部分无法通用的, 触觉智能提供如下测试组件:
EtherCAT IgH软件编译和部署
以下将根据实时Linux内核、用户态、驱动以及EtherCAT应用四个部分进行讲解。
- 编译内核
步骤一:打上Preempt-RT补丁,内核方案选择Preempt-RT内核方案,参考文档打上补丁:SDK/docs/Patches/Real-Time-Performance/README.md
要特别注意的是:发布的驱动部分SDK/external/rk_ethercat_release和内核头文件强相关,请确认内核的commit
要和SDK/external/rk_ethercat_release/driver/redmine中描述的一样,再打入Preempt-RT补丁。
步聚二:修改RK3506 Linux 6.1内核
diff --git a/arch/arm/configs/rk3506_defconfig b/arch/arm/configs/rk3506_defconfig index e6d3ba608a77..3029973ade8c 100644 --- a/arch/arm/configs/rk3506_defconfig +++ b/arch/arm/configs/rk3506_defconfig @@ -2,6 +2,7 @@ CONFIG_KERNEL_XZ=y CONFIG_DEFAULT_HOSTNAME="localhost" CONFIG_SYSVIPC=y +CONFIG_NO_HZ_FULL=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_PREEMPT=y @@ -119,12 +120,13 @@ CONFIG_NETDEVICES=y # CONFIG_NET_VENDOR_SOLARFLARE is not set # CONFIG_NET_VENDOR_SMSC is not set # CONFIG_NET_VENDOR_SOCIONEXT is not set -CONFIG_STMMAC_ETH=y +CONFIG_STMMAC_ETH=m # CONFIG_DWMAC_GENERIC is not set # CONFIG_NET_VENDOR_SYNOPSYS is not set # CONFIG_NET_VENDOR_VIA is not set # CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_NET_VENDOR_XILINX is not set +CONFIG_PHYLIB=y CONFIG_MOTORCOMM_PHY=y CONFIG_PPP=y # CONFIG_WLAN is not set
步骤三:编译出实时内核最后根据rt-linux README.md,生成实时性内核。
- EtherCAT IgH应用部分
EtherCAT IgH应用部分需要根据具体的伺服器来编写,需要使用上面用户态编译出来的EtherCAT IgH工具获取一些伺服驱动器的配置信息,然后完成应用代码的开发。具体可添加触觉智能客服 微 信13423856106,获取EtherCAT IgH应用部分开发指导。
EtherCAT IgH工具介绍
使用ethercat --help命令可以查看EtherCAT IgH工具,这些工具可以查看与主站连接的从站的各种信息, 可以有助于主站应用程序的编写,下面介绍几种常用的命令和参数的使用,其中[]中为必选参数, <>为 可选参数。
- 以c语言的形式输出pdo信息(ethercat cstruct)EtherCAT IgH应用部分
/* Master 0, Slave 0 * Vendor ID: 0x00000a79 * Product code: 0x00002000 * Revision number: 0x00000001 */ ec_pdo_entry_info_t slave_0_pdo_entries[] = { {0x603f, 0x00, 16}, /* ErrorCode */ {0x6041, 0x00, 16}, /* StatusWord */ {0x6064, 0x00, 32}, /* Position actual value */ {0x60fd, 0x00, 32}, /* Digital inputs */ {0x6061, 0x00, 8}, /* Modes of operation display */ {0x6040, 0x00, 16}, /* ControlWord */ {0x6060, 0x00, 8}, /* Modes of operation */ {0x607a, 0x00, 32}, /* Target position */ {0x6081, 0x00, 32}, /* Profile velocity */ {0x6099, 0x01, 32}, /* Search Switch */ {0x6099, 0x02, 32}, /* Search Zero */ {0x6040, 0x00, 16}, {0x607a, 0x00, 32}, {0x60ff, 0x00, 32}, {0x6060, 0x00, 8}, {0x0000, 0x00, 8}, /* Gap */ {0x6041, 0x00, 16}, {0x6064, 0x00, 32}, {0x606c, 0x00, 32}, {0x6061, 0x00, 8}, {0x0000, 0x00, 8}, /* Gap */ }; ec_pdo_info_t slave_0_pdos[] = { {0x1a01, 5, slave_0_pdo_entries + 0}, /* TxPDO 2 */ {0x1601, 6, slave_0_pdo_entries + 5}, /* RxPDO 2 */ {0x1600, 5, slave_0_pdo_entries + 11}, {0x1a00, 5, slave_0_pdo_entries + 16}, }; ec_sync_info_t slave_0_syncs[] = { {0, EC_DIR_OUTPUT, 2, slave_0_pdos + 0, EC_WD_DISABLE}, {1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE}, {2, EC_DIR_OUTPUT, 1, slave_0_pdos + 2, EC_WD_ENABLE}, {3, EC_DIR_INPUT, 1, slave_0_pdos + 3, EC_WD_DISABLE}, {0xff} }; 0 0:0 PREOP + 0x000001dd:0x10305070
- 输出pdo信息(ethercatpdos)
SM0: PhysAddr 0x1000, DefaultSize 128, ControlRegister 0x26, Enable 1 RxPDO 0x1a01 "TxPDO 2" PDO entry 0x603f:00, 16 bit, "ErrorCode" PDO entry 0x6041:00, 16 bit, "StatusWord" PDO entry 0x6064:00, 32 bit, "Position actual value" PDO entry 0x60fd:00, 32 bit, "Digital inputs" PDO entry 0x6061:00, 8 bit, "Modes of operation display" RxPDO 0x1601 "RxPDO 2" PDO entry 0x6040:00, 16 bit, "ControlWord" PDO entry 0x6060:00, 8 bit, "Modes of operation" PDO entry 0x607a:00, 32 bit, "Target position" PDO entry 0x6081:00, 32 bit, "Profile velocity" PDO entry 0x6099:01, 32 bit, "Search Switch" PDO entry 0x6099:02, 32 bit, "Search Zero" SM1: PhysAddr 0x1100, DefaultSize 128, ControlRegister 0x22, Enable 1 SM2: PhysAddr 0x1200, DefaultSize 12, ControlRegister 0x64, Enable 1 RxPDO 0x1600 "" PDO entry 0x6040:00, 16 bit, "" PDO entry 0x607a:00, 32 bit, "" PDO entry 0x60ff:00, 32 bit, "" PDO entry 0x6060:00, 8 bit, "" PDO entry 0x0000:00, 8 bit, "Gap" SM3: PhysAddr 0x1300, DefaultSize 19, ControlRegister 0x20, Enable 1 TxPDO 0x1a00 "" PDO entry 0x6041:00, 16 bit, "" PDO entry 0x6064:00, 32 bit, "" PDO entry 0x606c:00, 32 bit, "" PDO entry 0x6061:00, 8 bit, "" PDO entry 0x0000:00, 8 bit, "Gap"
#设置别名地址(下面的例子代表设置位置0的别名修改为1) ethercat alias -p 0 0 #设置别名地址(下面的例子代表别名0的别名修改为1) ethercat alias -a 0 1
Ethercat IgH主站性能测试结论
触觉智能RK3506开发板1ms控制周期内,性能数据如下:

触觉智能RK3506星闪开发板,仅188元,点赞本文购送套餐优惠券如需选购,马云家 搜索触觉智能官方企业店
-
开发板
+关注
关注
25文章
6121浏览量
113136 -
瑞芯微
+关注
关注
27文章
699浏览量
53451 -
EtherCAT总线
+关注
关注
5文章
90浏览量
5904 -
RK3506
+关注
关注
0文章
82浏览量
716
发布评论请先 登录
米尔基于RK3562与RK3506开发板有什么区别?
【技术简析】触觉智能RK3506 Linux星闪网关开发板有什么奥妙?
瑞芯微RK3506开发板必备攻略之Qt应用开发手册(下),触觉智能工控嵌入式方案商
RK3506开发板Xenomai内核RT-Linux实时性系统适配教程与性能实测,实测仅7μs稳定延时
瑞芯微RK3506核心板/开发板DSM音频开发实战,关键知识点与实操案例必看攻略!

瑞芯微RK3506开发板Ethercat主站适配开发详细攻略,实测微秒级抖动延迟!
评论