前 言
本文檔主要基于評(píng)估板演示IgH EtherCAT主站的伺服電機(jī)實(shí)時(shí)控制,方案基于Linux-RT實(shí)時(shí)內(nèi)核與開源IgH EtherCAT協(xié)議棧。本文檔適用開發(fā)環(huán)境:
開發(fā)環(huán)境
Windows開發(fā)環(huán)境:Windows10 64bit
Linux開發(fā)環(huán)境:VMware16.2.5、Ubuntu22.04.4 64bit
LinuxSDK開發(fā)包:LinuxSDK-[版本號(hào)](基于SDK_2025.1)
交叉編譯工具鏈:
應(yīng)用開發(fā):gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
U-Boot、內(nèi)核開發(fā):gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
評(píng)估板系統(tǒng)版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02
備注:本文基于8GByteeMMC、1GByteDDR配置核心板進(jìn)行演示。
伺服驅(qū)動(dòng)器:臺(tái)達(dá)ASD-A2-0121-E
伺服電機(jī):臺(tái)達(dá)ECMA-C10401GS
術(shù)語(yǔ)表
為便于閱讀,下表對(duì)文檔出現(xiàn)的關(guān)鍵術(shù)語(yǔ)進(jìn)行解釋;對(duì)于廣泛認(rèn)同釋義的術(shù)語(yǔ),在此不做注釋。

注意事項(xiàng)
我司提供的IgH EtherCAT主站開發(fā)案例igh_ethercat_dc_motor位于產(chǎn)品資料“4-軟件資料Demobase-demos”目錄下,具體說(shuō)明如下。

IgHEtherCAT簡(jiǎn)介
EtherCAT(以太網(wǎng)控制自動(dòng)化技術(shù))是一個(gè)開放架構(gòu),以以太網(wǎng)為基礎(chǔ)的現(xiàn)場(chǎng)總線系統(tǒng),其名稱的CAT為控制自動(dòng)化技術(shù)(Control Automation Technology)字首的縮寫。EtherCAT是確定性的工業(yè)以太網(wǎng)。自動(dòng)化對(duì)通訊一般會(huì)要求較短的資料更新時(shí)間(或稱為周期時(shí)間)、資料同步時(shí)的通訊抖動(dòng)量低,而且硬件的成本要低,EtherCAT開發(fā)的目的就是讓以太網(wǎng)可以運(yùn)用在自動(dòng)化應(yīng)用中。
本文檔主要介紹運(yùn)行于Linux系統(tǒng)的免費(fèi)開源EtherCAT主站程序——IgH EtherCAT。IgH EtherCAT是EtherCAT協(xié)議主站協(xié)議棧的開源實(shí)現(xiàn),它為用戶提供了免費(fèi)使用、修改和定制源代碼的便利,使得用戶能夠根據(jù)實(shí)際需求靈活調(diào)整和優(yōu)化EtherCAT主站的功能。其框架如下所示。
圖 1
IgHEtherCAT主站通過(guò)構(gòu)建Linux字符設(shè)備,應(yīng)用程序通過(guò)對(duì)字符設(shè)備的訪問(wèn)實(shí)現(xiàn)與EtherCAT主站模塊的通信。
IgH EtherCAT開發(fā)包提供EtherCAT工具,該工具提供各種可在Linux用戶層運(yùn)行的命令,可直接實(shí)現(xiàn)對(duì)從站的訪問(wèn)和設(shè)置,如設(shè)置從站地址、顯示總線配置、顯示PDO數(shù)據(jù)、讀寫SDO參數(shù)等。
IgH EtherCAT官網(wǎng):https://www.etherlab.org/en/ethercat。
案例說(shuō)明
案例功能:EtherCAT通訊周期時(shí)間為1ms,控制伺服電機(jī)正轉(zhuǎn)和反轉(zhuǎn),并通過(guò)串口循環(huán)打印EtherCAT通訊周期時(shí)間的最大值和最小值。
(1)正轉(zhuǎn):伺服電機(jī)目標(biāo)速度從0加速到10000,當(dāng)達(dá)到10000速度后,控制伺服電機(jī)減速至0,循環(huán)運(yùn)行。
(2)反轉(zhuǎn):伺服電機(jī)目標(biāo)速度從0加速到-10000,當(dāng)達(dá)到-10000速度后,控制伺服電機(jī)減速至0,循環(huán)運(yùn)行。
圖 2
案例測(cè)試
本案例需基于Linux-RT內(nèi)核運(yùn)行。請(qǐng)先參考《Linux系統(tǒng)開發(fā)手冊(cè)》的“替換Kernel”章節(jié)修改系統(tǒng)內(nèi)核鏡像。
本案例程序均設(shè)置為SCHED_FIFO進(jìn)程調(diào)度策略,進(jìn)程優(yōu)先級(jí)設(shè)置為最高,采用隔離CPU核心狀態(tài),分別在空載狀態(tài)、滿負(fù)荷狀態(tài)持續(xù)運(yùn)行程序12小時(shí)。
請(qǐng)使用網(wǎng)線將評(píng)估板ETH1 RGMII網(wǎng)口連接至伺服驅(qū)動(dòng)器A的IN網(wǎng)口,再使用另一根網(wǎng)線將伺服驅(qū)動(dòng)器A的OUT網(wǎng)口連接至伺服驅(qū)動(dòng)器B的IN網(wǎng)口。
圖 3
圖 4
隔離CPU核心
本次操作以隔離CPU1核心為例進(jìn)行演示。將評(píng)估板斷電,長(zhǎng)按"Ctrl + C"按鍵并上電啟動(dòng)評(píng)估板,進(jìn)入U(xiǎn)-Boot命令行模式后松開按鍵,執(zhí)行如下命令修改環(huán)境變量,隔離CPU1核心。
U-Boot# setenv mmc_boot 'if mmc dev ${devnum}; then devtype=mmc; if test ${devnum} -eq 0; then setenv bootargs '"'"'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait isolcpus=1'"'"'; fi; if test ${devnum} -eq 1; then setenv bootargs '"'"'console=ttyS1,115200n8 earlycon=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
圖 5
進(jìn)入評(píng)估板文件系統(tǒng),執(zhí)行如下命令,確認(rèn)已正確隔離CPU。
Target# cat /proc/cmdline
圖 6
測(cè)試完成,如需恢復(fù)U-Boot環(huán)境變量,在U-Boot命令行模式執(zhí)行以下命令。
U-Boot# env default -a
U-Boot# saveenv
U-Boot# reset
圖 7
安裝IgHEtherCAT驅(qū)動(dòng)
請(qǐng)將案例"igh_ethercatimages"目錄下的ethercat-stable-[版本號(hào)]-[Git序列號(hào)].tar.gz壓縮包拷貝至評(píng)估板文件系統(tǒng)任意目錄下。版本號(hào)、Git序列號(hào)請(qǐng)以實(shí)際情況為準(zhǔn)。將案例bin目錄下的igh_ethercat_dc_motor可執(zhí)行文件拷貝至評(píng)估板文件系統(tǒng)。
執(zhí)行如下命令,解壓IgH EtherCAT開發(fā)包源碼,得到_install文件夾。
Target# tar -xvf ethercat-stable-1.6.2-g285cdf0.tar.gz
圖 8
執(zhí)行如下命令,并查詢?cè)u(píng)估板網(wǎng)卡物理地址。
Target# ifconfig
圖 9
執(zhí)行如下命令,加載驅(qū)動(dòng)模塊,命令中"6A:71:14:3D:61:75"為評(píng)估板網(wǎng)卡物理地址,請(qǐng)根據(jù)實(shí)際情況修改。
Target# insmod -f _install/modules/ec_master.ko main_devices=6A:71:14:3D:61:75
圖 10
執(zhí)行如下命令,拷貝EtherCAT主站相關(guān)文件至評(píng)估板文件系統(tǒng)。
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
備注:此處的警告信息不影響測(cè)試結(jié)果,忽略即可。
圖 11
執(zhí)行如下命令,啟動(dòng)EtherCAT主站。
Target# ./_install/etc/init.d/ethercat start
圖 12
執(zhí)行如下命令,加載ec_generic.ko驅(qū)動(dòng)文件。
Target# insmod -f _install/modules/ec_generic.ko
圖 13
執(zhí)行如下命令,添加動(dòng)態(tài)鏈接庫(kù)路徑。
Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/_install/lib
Target# sync
圖 14
基于CPU空載狀態(tài)測(cè)試
執(zhí)行如下命令修改內(nèi)核printk日志等級(jí),避免內(nèi)核打印信息影響實(shí)時(shí)測(cè)試。
Target# echo 1 > /proc/sys/kernel/printk
圖?15
調(diào)整內(nèi)存分配策略為"2",禁用內(nèi)存過(guò)度使用。避免出現(xiàn)OOM(Out-of-Memory) Killer攻擊某些進(jìn)程而產(chǎn)生延遲,影響測(cè)試結(jié)果。
Target# echo 2> /proc/sys/vm/overcommit_memory
圖?16
執(zhí)行如下命令,可查看igh_ethercat_dc_motor程序相關(guān)參數(shù)信息。
Target# ./igh_ethercat_dc_motor --help
圖 17
參數(shù)解釋
-d:指定電機(jī)轉(zhuǎn)向,0:正轉(zhuǎn),1:反轉(zhuǎn)。
-v:程序版本信息。
-s:選擇進(jìn)程調(diào)度策略模式。"-s 0"表示進(jìn)程調(diào)度策略為SCHED_FIFO;"-s 1"表示進(jìn)程調(diào)度策略為SCHED_DEADLINE,若不帶可選參數(shù)值[]則使用默認(rèn)參數(shù)值,其中sched_runtime表示運(yùn)行時(shí)間,sched_deadline表示相對(duì)期限,sched_period表示周期,單位均為納秒。
--help:查看程序運(yùn)行參數(shù)。
執(zhí)行以下命令,設(shè)置進(jìn)程調(diào)度策略為SCHED_FIFO,控制兩臺(tái)伺服電機(jī)同時(shí)正轉(zhuǎn),并將程序運(yùn)行輸出的打印信息保存至log.txt文件。
Target# taskset -c 1 ./igh_ethercat_dc_motor -d 0 -s 0 > log.txt &
圖 18
基于CPU滿負(fù)荷狀態(tài)測(cè)試
執(zhí)行如下命令修改內(nèi)核printk日志等級(jí),避免內(nèi)核打印信息影響實(shí)時(shí)測(cè)試。
Target# echo 1 > /proc/sys/kernel/printk
圖 19
調(diào)整內(nèi)存分配策略為"2",禁用內(nèi)存過(guò)度使用。避免出現(xiàn)OOM(Out-of-Memory) Killer攻擊某些進(jìn)程而產(chǎn)生延遲,影響測(cè)試結(jié)果。
Target# echo 2> /proc/sys/vm/overcommit_memory
圖?20
執(zhí)行如下命令,運(yùn)行stress壓力測(cè)試工具,使得CPU處于滿負(fù)荷狀態(tài)。
Target# stress-ng --cpu 2 --cpu-method=all --io 2 --vm 2 --vm-bytes 32M --timeout 43200s &
圖?21
設(shè)置進(jìn)程調(diào)度策略為SCHED_FIFO,控制兩臺(tái)伺服電機(jī)同時(shí)正轉(zhuǎn),并將程序運(yùn)行輸出的打印信息保存至log.txt文件。
Target# taskset -c 1 ./igh_ethercat_dc_motor -d 0 -s 0 > log.txt &
圖 22
統(tǒng)計(jì)結(jié)果分析
可執(zhí)行如下命令,查看程序運(yùn)行輸出的log.txt內(nèi)容。
Target# head -n100 log.txt
圖 23
參數(shù)解析:
latency:等待喚醒時(shí)間(ns)。
period:EtherCAT通訊周期時(shí)間(ns),本案例設(shè)置為1000000ns,即1ms。
exec:接收和發(fā)送EtherCAT數(shù)據(jù)時(shí)間(ns)。
對(duì)log.txt文件內(nèi)容進(jìn)行分析后,得到的實(shí)時(shí)性能測(cè)試結(jié)果如下。

備注:
(1)以上數(shù)據(jù)為本次測(cè)試結(jié)果,測(cè)試數(shù)據(jù)僅供參考。
(2)如需測(cè)試電機(jī)反轉(zhuǎn),請(qǐng)參考上述電機(jī)正轉(zhuǎn)測(cè)試方法,將運(yùn)行igh_ethercat_dc_motor可執(zhí)行程序命令中的"-d 0"參數(shù)修改為"-d 1"。
?由于篇幅過(guò)長(zhǎng)等原因,部分內(nèi)容均不逐一展示,如需獲取完整版詳細(xì)資料,請(qǐng)關(guān)注創(chuàng)龍科技微信公眾號(hào)或官網(wǎng),或者評(píng)論區(qū)留言,感謝您的支持!
審核編輯 黃宇
-
伺服電機(jī)
+關(guān)注
關(guān)注
88文章
2183瀏覽量
61263 -
開源
+關(guān)注
關(guān)注
3文章
4200瀏覽量
46107 -
實(shí)時(shí)控制
+關(guān)注
關(guān)注
0文章
56瀏覽量
9853 -
ethercat
+關(guān)注
關(guān)注
19文章
1506瀏覽量
45137
發(fā)布評(píng)論請(qǐng)先 登錄
基于 DR1M90 的 Linux-RT 內(nèi)核開發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)
基于安路DR1M90 FPSoC的Linux系統(tǒng)全流程開發(fā)指南(4)
基于BL350與IGH?EtherCAT的硬實(shí)時(shí)控制解決方案
基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開發(fā)指南(3)
基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開發(fā)指南(1)
盟通科技基于瑞薩RZ MPU的EtherCAT主站應(yīng)用方案
安路DR1M90評(píng)估板:從基礎(chǔ)外設(shè)到通信模塊測(cè)試指南
【米爾RK3506國(guó)產(chǎn)開發(fā)板評(píng)測(cè)】3、實(shí)時(shí)補(bǔ)丁以及EtherCAT IGH移植
創(chuàng)龍 瑞芯微 RK3588 國(guó)產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(下)
創(chuàng)龍 瑞芯微 RK3588 國(guó)產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(上)
【米爾NXP i.MX 91開發(fā)板評(píng)測(cè)】移植運(yùn)行IGH EtherCAT主站
創(chuàng)龍科技DR1M90工業(yè)評(píng)估板的關(guān)鍵優(yōu)勢(shì)
國(guó)產(chǎn)!全志T113-i 雙核Cortex-A7@1.2GHz 工業(yè)開發(fā)板—IgH EtherCAT主站開發(fā)案例
基于米爾安路飛龍派FPGA FPSoC+移植SOEM實(shí)現(xiàn)EtherCAT主站控制功能
EtherCAT主站轉(zhuǎn)Profinet網(wǎng)關(guān)接匯川伺服操作模式的控制解析
DR1M90 開源 IgH EtherCAT 主站案例:伺服電機(jī)正反轉(zhuǎn)實(shí)時(shí)控制方案
評(píng)論