前 言
創龍科技研發的 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)
IgHEtherCAT:ethercat-stable-1.5-gcd0d17d-20210723
伺服驅動器:臺達ASD-A2-0121-E
伺服電機:臺達ECMA-C10401GS
我司默認使用的是Linux內核,同時提供了Linux-RT內核boot-rt.img位于產品資料“4-軟件資料DebianKernelimagelinux-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
圖 2?Linux-RT內核
我司提供的IgH EtherCAT主站開發案例igh_ethercat_dc_motor位于產品資料“4-軟件資料Demo”目錄下,主要包含src、bin和igh_ethercat等文件夾,具體說明如下。
表 1
IgHEtherCAT簡介
IgH EtherCAT為運行于Linux系統的免費開源EtherCAT主站程序,框架如下所示。
圖 3
IgHEtherCAT主站通過構建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
案例測試
在本案例測試過程中,程序均在隔離CPU環境下運行,并分別采用SCHED_FIFO和SCHED_DEADLINE兩種進程調度策略,在空載狀態、滿負荷狀態下持續運行12小時。
請按下圖所示使用網線連接評估板ETH1網口和伺服驅動器A的IN網口,將伺服驅動器A的OUT網口使用網線連接至伺服驅動器B的IN網口。
圖 5
圖 6
本次測試以隔離CPU4核心為例進行演示,評估板上電前長按"Ctrl + C"進入U-Boot命令行模式,修改環境變量,隔離CPU4核心,保存環境變量后重啟評估板。
U-Boot# setenvbootargs"storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normalisolcpus=4"
U-Boot# saveenv
U-Boot# reset
圖 7
進入評估板文件系統,執行如下命令,確認已正確隔離CPU。
Target# cat /proc/cmdline
圖 8
為便于測試,我司提供經驗證的IgHEtherCAT主站程序為案例"igh_ethercatimages"目錄下的ethercat-stable-[版本號]-[Git序列號].tar.gz壓縮包,將其拷貝至評估板文件系統任意目錄下。版本號、Git序列號請以實際情況為準。將案例bin目錄下的igh_ethercat_dc_motor可執行文件拷貝至評估板文件系統。
執行如下命令,解壓IgHEtherCAT主站程序壓縮包,得到_install文件夾。
Target# tar -xvf ethercat-stable-1.5-gcd0d17d.tar.gz
圖 9
執行如下命令,并查詢評估板網卡物理地址。
Target# ifconfig
圖 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
執行如下命令,拷貝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
執行如下命令,啟動EtherCAT主站。
Target# /root/_install/etc/init.d/ethercat start
圖 13
執行如下命令,加載ec_generic.ko驅動文件。
Target# insmod -f _install/modules/ec_generic.ko
圖 14
執行如下命令,添加IgH動態鏈接庫路徑。
Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/_install/lib
Target# sync
圖 15
執行如下命令,修改內核信息打印級別。
Target# echo 1 4 1 7 > /proc/sys/kernel/printk
圖 16
執行如下命令,可查看igh_ethercat_dc_motor程序相關參數信息。
Target# ./igh_ethercat_dc_motor --help
圖 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
打印信息"2554"為進程號,請根據實際進程號,執行如下命令,確認進程調度策略。
Target# chrt -p 2554
圖 19
如需停止運行后臺程序,請執行如下命令。
Target# kill -9 2554
圖 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
打印信息"2785"為進程號,請根據實際進程號,執行如下命令,確認進程調度策略。
Target# chrt -p 2785
圖 22
如需停止運行后臺程序,請執行如下命令。
Target# kill -9 2785
圖 23
SCHED_DEADLINE模式(空載狀態)
該測試狀態為程序運行在隔離CPU,程序進程調度策略設置為SCHED_DEADLINE、進程優先級設置為最高,空載狀態測試12個小時。
執行如下命令,控制兩臺伺服電機同時正轉。
Target# taskset -c 4./igh_ethercat_dc_motor -d 0-s 1> log.txt &
圖 24
打印信息"2874"為進程號,請根據實際進程號,執行如下命令,確認進程調度策略。
Target# chrt -p 2874
圖 25
如需停止運行后臺程序,請執行如下命令。
Target# kill -9 2874
圖 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
打印信息"2985"為進程號,請根據實際進程號,執行如下命令,確認進程調度策略。
Target# chrt -p 2985
圖 28
如需停止運行后臺程序,執行如下命令。
Target# kill -9 2985
圖 29
統計結果分析
程序運行輸出的打印信息保存到了log.txt,停止后臺運行程序后,執行如下命令查看log.txt部分內容。
Target# head -n100 log.txt
圖 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
備注:從表中數據可知,SCHED_DEADLINE模式在空載、滿負荷狀態都比SCHED_FIFO模式抖動值小,建議使用SCHED_DEADLINE模式。
電機反轉
請參考上述“電機正轉”測試方法,將運行igh_ethercat_dc_motor可執行程序命令中的"-d 0"參數修改為"-d 1"。
?審核編輯 黃宇
-
開發板
+關注
關注
26文章
6289瀏覽量
118047 -
瑞芯微
+關注
關注
27文章
792瀏覽量
54284 -
ethercat
+關注
關注
19文章
1507瀏覽量
45169
發布評論請先 登錄
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—ISP圖像處理開發案例
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—視頻開發案例(下)
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—視頻開發案例(上)
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—視頻圖像處理框架
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—物聯網模塊開發案例
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—Linux-RT應用開發案例
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—IgH?EtherCAT主站開發案例(上)
評論