前  言

本文檔主要基於評估板演示IgH EtherCAT主站的伺服電機實時控制,方案基於Linux-RT實時內核與開源IgH EtherCAT協議棧。本文檔適用開發環境:

 

開發環境

Windows開發環境:Windows10 64bit

Linux開發環境:VMware16.2.5、Ubuntu22.04.4 64bit

LinuxSDK開發包:LinuxSDK-[版本號](基於SDK_2025.1)

交叉編譯工具鏈:

應用開發:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu

U-Boot、內核開發:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu

評估板系統版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02

備註:本文基於8GByte eMMC、1GByte DDR配置核心板進行演示。

伺服驅動器:台達ASD-A2-0121-E

伺服電機:台達ECMA-C10401GS

術語表

為便於閲讀,下表對文檔出現的關鍵術語進行解釋;對於廣泛認同釋義的術語,在此不做註釋。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發

 

注意事項

我司提供的IgH EtherCAT主站開發案例igh_ethercat_dc_motor位於產品資料“4-軟件資料\Demo\base-demos\”目錄下,具體説明如下。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_02

 

 

IgH EtherCAT簡介

EtherCAT(以太網控制自動化技術)是一個開放架構,以以太網為基礎的現場總線系統,其名稱的CAT為控制自動化技術(Control Automation Technology)字首的縮寫。EtherCAT是確定性的工業以太網。自動化對通訊一般會要求較短的資料更新時間(或稱為週期時間)、資料同步時的通訊抖動量低,而且硬件的成本要低,EtherCAT開發的目的就是讓以太網可以運用在自動化應用中。

本文檔主要介紹運行於Linux系統的免費開源EtherCAT主站程序——IgH EtherCAT。IgH EtherCAT是EtherCAT協議主站協議棧的開源實現,它為用户提供了免費使用、修改和定製源代碼的便利,使得用户能夠根據實際需求靈活調整和優化EtherCAT主站的功能。其框架如下所示。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_開發板_03

圖 1

 

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,循環運行。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_04

圖 2

 

案例測試

本案例需基於Linux-RT內核運行。請先參考《Linux系統開發手冊》的“替換Kernel”章節修改系統內核鏡像。

本案例程序均設置為SCHED_FIFO進程調度策略,進程優先級設置為最高,採用隔離CPU核心狀態,分別在空載狀態、滿負荷狀態持續運行程序12小時。

請使用網線將評估板ETH1 RGMII網口連接至伺服驅動器A的IN網口,再使用另一根網線將伺服驅動器A的OUT網口連接至伺服驅動器B的IN網口。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_05

圖 3

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_06

圖 4

 

隔離CPU核心

本次操作以隔離CPU1核心為例進行演示。將評估板斷電,長按"Ctrl + C"按鍵並上電啓動評估板,進入U-Boot命令行模式後鬆開按鍵,執行如下命令修改環境變量,隔離CPU1核心。

U-Boot# setenv mmc_boot 'if mmc dev ${devnum}; then devtype=mmc; if test ${devnum} -eq 0; then setenv bootargs '"'"'cnotallow=ttyS1,115200n8 earlycnotallow=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait isolcpus=1'"'"'; fi; if test ${devnum} -eq 1; then setenv bootargs '"'"'cnotallow=ttyS1,115200n8 earlycnotallow=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk1p2 rw rootfstype=ext4 rootwait isolcpus=1'"'"'; fi; ext4load mmc ${devnum}:2 ${kernel_addr_r} ${bootdir}/${kernel_image}; ext4load mmc ${devnum}:2 ${fdt_addr_r} ${bootdir}/${devicetree_image}; bootm ${kernel_addr_r} - ${fdt_addr_r}; run scan_dev_for_boot_part2; fi'

U-Boot# saveenv

U-Boot# reset

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_07

圖 5

 

進入評估板文件系統,執行如下命令,確認已正確隔離CPU。

Target# cat /proc/cmdline

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_嵌入式開發_08

圖 6

 

測試完成,如需恢復U-Boot環境變量,在U-Boot命令行模式執行以下命令。

U-Boot# env default -a

U-Boot# saveenv

U-Boot# reset

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_開發板_09

圖 7

 

安裝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.6.2-g285cdf0.tar.gz

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_10

圖 8

 

執行如下命令,並查詢評估板網卡物理地址。

Target# ifconfig

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_嵌入式開發_11

圖 9

 

執行如下命令,加載驅動模塊,命令中"6A:71:14:3D:61:75"為評估板網卡物理地址,請根據實際情況修改。

Target# insmod -f _install/modules/ec_master.ko main_devices=6A:71:14:3D:61:75

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_12

圖 10

 

執行如下命令,拷貝EtherCAT主站相關文件至評估板文件系統。

Target# mkdir -p /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

備註:此處的警告信息不影響測試結果,忽略即可。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_13

圖 11

 

執行如下命令,啓動EtherCAT主站。

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

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_嵌入式開發_14

圖 12

 

執行如下命令,加載ec_generic.ko驅動文件。

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

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_15

圖 13

 

執行如下命令,添加動態鏈接庫路徑。

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

Target# sync

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_嵌入式開發_16

圖 14

 

基於CPU空載狀態測試

執行如下命令修改內核printk日誌等級,避免內核打印信息影響實時測試。

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

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_嵌入式開發_17

圖 15

 

調整內存分配策略為"2",禁用內存過度使用。避免出現OOM(Out-of-Memory) Killer使某些進程而產生延遲,影響測試結果。

Target# echo 2 > /proc/sys/vm/overcommit_memory

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_18

圖 16

 

執行如下命令,可查看igh_ethercat_dc_motor程序相關參數信息。

Target# ./igh_ethercat_dc_motor --help

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_19

圖 17

 

參數解釋

-d:指定電機轉向,0:正轉,1:反轉。

-v:程序版本信息。

-s:選擇進程調度策略模式。"-s 0"表示進程調度策略為SCHED_FIFO;"-s 1"表示進程調度策略為SCHED_DEADLINE,若不帶可選參數值[<sched_runtime> <sched_deadline> <sched_period>]則使用默認參數值,其中sched_runtime表示運行時間,sched_deadline表示相對期限,sched_period表示週期,單位均為納秒。

--help:查看程序運行參數。

執行以下命令,設置進程調度策略為SCHED_FIFO,控制兩台伺服電機同時正轉,並將程序運行輸出的打印信息保存至log.txt文件。

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

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_20

圖 18

 

基於CPU滿負荷狀態測試

執行如下命令修改內核printk日誌等級,避免內核打印信息影響實時測試。

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

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_21

圖 19

 

調整內存分配策略為"2",禁用內存過度使用。避免出現OOM(Out-of-Memory) Killer使某些進程而產生延遲,影響測試結果。

Target# echo 2 > /proc/sys/vm/overcommit_memory

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_22

圖 20

 

執行如下命令,運行stress壓力測試工具,使得CPU處於滿負荷狀態。

Target# stress-ng --cpu 2 --cpu-method=all --io 2 --vm 2 --vm-bytes 32M --timeout 43200s &

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_開發板_23

圖 21

 

設置進程調度策略為SCHED_FIFO,控制兩台伺服電機同時正轉,並將程序運行輸出的打印信息保存至log.txt文件。

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

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_硬件開發_24

圖 22

統計結果分析

可執行如下命令,查看程序運行輸出的log.txt內容。

Target# head -n100 log.txt

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_嵌入式開發_25

圖 23

 

參數解析:

latency:等待喚醒時間(ns)。

period:EtherCAT通訊週期時間(ns),本案例設置為1000000ns,即1ms。

exec:接收和發送EtherCAT數據時間(ns)。

對log.txt文件內容進行分析後,得到的實時性能測試結果如下。

 

DR1M90 開源 IgH EtherCAT 主站案例:伺服電機正反轉實時控制方案_工業控制_26

 

備註:

(1)以上數據為本次測試結果,測試數據僅供參考。

(2)如需測試電機反轉,請參考上述電機正轉測試方法,將運行igh_ethercat_dc_motor可執行程序命令中的"-d 0"參數修改為"-d 1"。

 

由於篇幅過長等原因,部分內容均不逐一展示,如需獲取完整版詳細資料,請關注創龍科技微信公眾號,或者評論區留言,感謝您的支持!