前 言
創(chuàng)龍科技研發(fā)的 TL3588-EVM 評估板可基于 IgH EtherCAT 實(shí)現(xiàn)伺服電機(jī)控制。為助力開發(fā)者掌握相關(guān)開發(fā)要點(diǎn),本文先介紹 IgH EtherCAT,再詳述案例測試(多模式多狀態(tài)電機(jī)控制與抖動統(tǒng)計(jì))、編譯流程及核心代碼,覆蓋環(huán)境配置、驅(qū)動加載與程序運(yùn)行,幫助開發(fā)者高效完成評估板 IgH EtherCAT 主站開發(fā)與電機(jī)控制功能實(shí)現(xiàn)。
本文檔適用開發(fā)環(huán)境:
Windows開發(fā)環(huán)境:Windows 7 64bit、Windows 10 64bit
開發(fā)環(huán)境: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
伺服驅(qū)動器:臺達(dá)ASD-A2-0121-E
伺服電機(jī):臺達(dá)ECMA-C10401GS
我司默認(rèn)使用的是Linux內(nèi)核,同時(shí)提供了Linux-RT內(nèi)核boot-rt.img位于產(chǎn)品資料“4-軟件資料DebianKernelimagelinux-5.10.160-[版本號]-[Git系列號]”目錄下,版本號、Git序列號以實(shí)際情況為準(zhǔn)。請按照如下方法替換為Linux-RT內(nèi)核。
請將boot-rt.img鏡像拷貝至評估板文件系統(tǒng)任意目錄下。執(zhí)行如下命令,替換內(nèi)核鏡像至系統(tǒng)啟動卡,評估板重啟生效。
備注:如需固化至eMMC,請將設(shè)備節(jié)點(diǎn)修改為"/dev/mmcblk0p3"。
Target# dd if=boot-rt.img of=/dev/mmcblk1p3
Target# sync
Target# reboot
圖 1
圖 2?Linux-RT內(nèi)核
我司提供的IgH EtherCAT主站開發(fā)案例igh_ethercat_dc_motor位于產(chǎn)品資料“4-軟件資料Demo”目錄下,主要包含src、bin和igh_ethercat等文件夾,具體說明如下。
表 1
IgHEtherCAT簡介
IgH EtherCAT為運(yùn)行于Linux系統(tǒng)的免費(fèi)開源EtherCAT主站程序,框架如下所示。
圖 3
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通訊周期時(shí)間為1ms,控制伺服電機(jī)正轉(zhuǎn)和反轉(zhuǎn),并通過串口循環(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)行。
圖 4
案例測試
在本案例測試過程中,程序均在隔離CPU環(huán)境下運(yùn)行,并分別采用SCHED_FIFO和SCHED_DEADLINE兩種進(jìn)程調(diào)度策略,在空載狀態(tài)、滿負(fù)荷狀態(tài)下持續(xù)運(yùn)行12小時(shí)。
請按下圖所示使用網(wǎng)線連接評估板ETH1網(wǎng)口和伺服驅(qū)動器A的IN網(wǎng)口,將伺服驅(qū)動器A的OUT網(wǎng)口使用網(wǎng)線連接至伺服驅(qū)動器B的IN網(wǎng)口。
圖 5
圖 6
本次測試以隔離CPU4核心為例進(jìn)行演示,評估板上電前長按"Ctrl + C"進(jìn)入U(xiǎn)-Boot命令行模式,修改環(huán)境變量,隔離CPU4核心,保存環(huán)境變量后重啟評估板。
U-Boot# setenvbootargs"storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normalisolcpus=4"
U-Boot# saveenv
U-Boot# reset
圖 7
進(jìn)入評估板文件系統(tǒng),執(zhí)行如下命令,確認(rèn)已正確隔離CPU。
Target# cat /proc/cmdline
圖 8
為便于測試,我司提供經(jīng)驗(yàn)證的IgHEtherCAT主站程序?yàn)榘咐?igh_ethercatimages"目錄下的ethercat-stable-[版本號]-[Git序列號].tar.gz壓縮包,將其拷貝至評估板文件系統(tǒng)任意目錄下。版本號、Git序列號請以實(shí)際情況為準(zhǔn)。將案例bin目錄下的igh_ethercat_dc_motor可執(zhí)行文件拷貝至評估板文件系統(tǒng)。
執(zhí)行如下命令,解壓IgHEtherCAT主站程序壓縮包,得到_install文件夾。
Target# tar -xvf ethercat-stable-1.5-gcd0d17d.tar.gz
圖 9
執(zhí)行如下命令,并查詢評估板網(wǎng)卡物理地址。
Target# ifconfig
圖 10
執(zhí)行如下命令,加載驅(qū)動模塊,命令中"0e:e2:85:a1:c8:fd"為評估板網(wǎng)卡物理地址,請根據(jù)實(shí)際情況修改。
Target# insmod-f /root/_install/modules/ec_master.ko main_devices=0e:e2:85:a1:c8:fd
圖 11
執(zhí)行如下命令,拷貝EtherCAT主站相關(guān)文件至評估板文件系統(tǒng)。
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
備注:此處的警告信息不影響測試結(jié)果,忽略即可。
圖 12
執(zhí)行如下命令,啟動EtherCAT主站。
Target# /root/_install/etc/init.d/ethercat start
圖 13
執(zhí)行如下命令,加載ec_generic.ko驅(qū)動文件。
Target# insmod -f _install/modules/ec_generic.ko
圖 14
執(zhí)行如下命令,添加IgH動態(tài)鏈接庫路徑。
Target# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/_install/lib
Target# sync
圖 15
執(zhí)行如下命令,修改內(nèi)核信息打印級別。
Target# echo 1 4 1 7 > /proc/sys/kernel/printk
圖 16
執(zhí)行如下命令,可查看igh_ethercat_dc_motor程序相關(guān)參數(shù)信息。
Target# ./igh_ethercat_dc_motor --help
圖 17
參數(shù)解釋
(1)-d:指定電機(jī)轉(zhuǎn)向,0:正轉(zhuǎn),1:反轉(zhuǎn);
(2)-v:打印程序版本信息;
(3)-s:選擇進(jìn)程調(diào)度策略模式。程序執(zhí)行時(shí)未使用-s參數(shù)或-s參數(shù)值為0,進(jìn)程調(diào)度策略默認(rèn)為SCHED_FIFO;若使用-s參數(shù)且參數(shù)值為1,進(jìn)程調(diào)度策略為SCHED_DEADLINE,后面未添加參數(shù)值[xxx xxx xxx]則使用默認(rèn)參數(shù)值,其中sched-runtime值表示運(yùn)行時(shí)間、sched-deadline值表示相對的期限、sched-period值表示周期,單位均為ns;
(4)-help:查看程序運(yùn)行參數(shù)。
電機(jī)正轉(zhuǎn)
SCHED_FIFO模式(空載狀態(tài))
該測試狀態(tài)為程序運(yùn)行在隔離CPU,程序進(jìn)程調(diào)度策略設(shè)置為SCHED_FIFO,進(jìn)程優(yōu)先級設(shè)置為最高,空載狀態(tài)測試12個(gè)小時(shí)。
執(zhí)行以下命令,控制兩臺伺服電機(jī)同時(shí)正轉(zhuǎn)。
Target# taskset -c 4 ./igh_ethercat_dc_motor -d 0-s 0 > log.txt &
圖 18
打印信息"2554"為進(jìn)程號,請根據(jù)實(shí)際進(jìn)程號,執(zhí)行如下命令,確認(rèn)進(jìn)程調(diào)度策略。
Target# chrt -p 2554
圖 19
如需停止運(yùn)行后臺程序,請執(zhí)行如下命令。
Target# kill -9 2554
圖 20
SCHED_FIFO模式(滿負(fù)荷狀態(tài))
該測試狀態(tài)為程序運(yùn)行在隔離CPU,程序進(jìn)程調(diào)度策略設(shè)置為SCHED_FIFO,進(jìn)程優(yōu)先級設(shè)置為最高,滿負(fù)荷狀態(tài)壓力測試12個(gè)小時(shí)。
執(zhí)行以下命令,控制兩臺伺服電機(jī)同時(shí)正轉(zhuǎn)。
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"為進(jìn)程號,請根據(jù)實(shí)際進(jìn)程號,執(zhí)行如下命令,確認(rèn)進(jìn)程調(diào)度策略。
Target# chrt -p 2785
圖 22
如需停止運(yùn)行后臺程序,請執(zhí)行如下命令。
Target# kill -9 2785
圖 23
SCHED_DEADLINE模式(空載狀態(tài))
該測試狀態(tài)為程序運(yùn)行在隔離CPU,程序進(jìn)程調(diào)度策略設(shè)置為SCHED_DEADLINE、進(jìn)程優(yōu)先級設(shè)置為最高,空載狀態(tài)測試12個(gè)小時(shí)。
執(zhí)行如下命令,控制兩臺伺服電機(jī)同時(shí)正轉(zhuǎn)。
Target# taskset -c 4./igh_ethercat_dc_motor -d 0-s 1> log.txt &
圖 24
打印信息"2874"為進(jìn)程號,請根據(jù)實(shí)際進(jìn)程號,執(zhí)行如下命令,確認(rèn)進(jìn)程調(diào)度策略。
Target# chrt -p 2874
圖 25
如需停止運(yùn)行后臺程序,請執(zhí)行如下命令。
Target# kill -9 2874
圖 26
SCHED_DEADLINE模式(滿負(fù)荷狀態(tài))
該測試狀態(tài)為程序運(yùn)行在隔離CPU,進(jìn)程調(diào)度策略設(shè)置為SCHED_DEADLINE,優(yōu)先級設(shè)置為最高,滿負(fù)荷狀態(tài)壓力測試12個(gè)小時(shí)。
執(zhí)行以下命令,控制兩臺伺服電機(jī)同時(shí)正轉(zhuǎn)。
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"為進(jìn)程號,請根據(jù)實(shí)際進(jìn)程號,執(zhí)行如下命令,確認(rèn)進(jìn)程調(diào)度策略。
Target# chrt -p 2985
圖 28
如需停止運(yùn)行后臺程序,執(zhí)行如下命令。
Target# kill -9 2985
圖 29
統(tǒng)計(jì)結(jié)果分析
程序運(yùn)行輸出的打印信息保存到了log.txt,停止后臺運(yùn)行程序后,執(zhí)行如下命令查看log.txt部分內(nèi)容。
Target# head -n100 log.txt
圖 30
參數(shù)解釋:
(1)latency:等待喚醒時(shí)間(ns);
(2)period:EtherCAT通訊周期時(shí)間(ns);
(3)exec:接收和發(fā)送EtherCAT數(shù)據(jù)時(shí)間(ns)。
案例設(shè)置period為1ms,通過分析log.txt得到12小時(shí)的period最小值和period最大值(period單位:納秒),通過分析計(jì)算period得到12個(gè)小時(shí)的period抖動值(period最大值 - period最小值),從period抖動值中分析、計(jì)算得到period最大抖動值、period平均抖動值。
對log.txt文件內(nèi)容進(jìn)行數(shù)據(jù)分析后,得到如下結(jié)果。
表 2
備注:從表中數(shù)據(jù)可知,SCHED_DEADLINE模式在空載、滿負(fù)荷狀態(tài)都比SCHED_FIFO模式抖動值小,建議使用SCHED_DEADLINE模式。
電機(jī)反轉(zhuǎn)
請參考上述“電機(jī)正轉(zhuǎn)”測試方法,將運(yùn)行igh_ethercat_dc_motor可執(zhí)行程序命令中的"-d 0"參數(shù)修改為"-d 1"。
?審核編輯 黃宇
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
6017瀏覽量
110431 -
瑞芯微
+關(guān)注
關(guān)注
26文章
663瀏覽量
53166 -
ethercat
+關(guān)注
關(guān)注
19文章
1280瀏覽量
41622
發(fā)布評論請先 登錄
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—ISP圖像處理開發(fā)案例

創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—視頻圖像處理框架

創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(下)

創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—物聯(lián)網(wǎng)模塊開發(fā)案例

創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—調(diào)試工具安裝

迅為RK3588開發(fā)板Linux安卓麒麟瑞芯微國產(chǎn)工業(yè)AI人工智能
全國產(chǎn)!瑞芯微 RK3576 ARM 八核 2.2GHz 工業(yè)開發(fā)板—LVGL應(yīng)用開發(fā)案例

迅為瑞芯微iTOP-3588開發(fā)板/核心板
迅為iTOP-RK3588S開發(fā)板/核心板瑞芯微RK3588S處理器6TOPS算力內(nèi)置NPU
iTOP-3588開發(fā)板采用瑞芯微RK3588處理器四核心架構(gòu)GPU內(nèi)置獨(dú)立NPU強(qiáng)大的視頻編解碼
Banana Pi開源社區(qū)基于瑞芯微RK3588開發(fā)板,DeepSeek開發(fā)利器
Banana Pi開源社區(qū)基于瑞芯微RK3588開發(fā)板,DeepSeek開發(fā)利器

評論