前 言
本文檔主要基于評估板演示IgH EtherCAT主站的伺服電機(jī)實(shí)時控制,方案基于Linux-RT實(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-[版本號](基于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
評估板系統(tǒng)版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02
備注:本文基于8GByteeMMC、1GByteDDR配置核心板進(jìn)行演示。
伺服驅(qū)動器:臺達(dá)ASD-A2-0121-E
伺服電機(jī):臺達(dá)ECMA-C10401GS
術(shù)語表
為便于閱讀,下表對文檔出現(xiàn)的關(guān)鍵術(shù)語進(jìn)行解釋;對于廣泛認(rèn)同釋義的術(shù)語,在此不做注釋。

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

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

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