IgH EtherCAT總線
IgH EtherCAT是運(yùn)行于Linux系統(tǒng)的開源EtherCAT主站程序,IgH EtherCAT主站通過構(gòu)建Linux字符設(shè)備, 應(yīng)用程序通過對(duì)字符設(shè)備的訪問實(shí)現(xiàn)與EtherCAT主站模塊的通信。
IgH EtherCAT開發(fā)包配套EtherCAT工具,可提供各種可在Linux用戶層運(yùn)行的命令,可直接實(shí)現(xiàn)對(duì)從站的訪問和設(shè)置,如設(shè)置從站地址、顯示總線配置、顯示PDO數(shù)據(jù)、讀寫SDO參數(shù)等。具體詳情可以查看IgH的官網(wǎng)進(jìn)行了解。

本文基于觸覺智能RK3506星閃開發(fā)板演示Ethercat主站開發(fā),其配套R(shí)K3506核心板(3核A7+M0多核異構(gòu)),100%全國(guó)產(chǎn),峰值功耗低至0.65W。
EtherCAT IgH軟件環(huán)境
- EtherCAT整體介紹
EtherCAT整體分為四個(gè)部分,包含:實(shí)時(shí)Linux內(nèi)核、用戶態(tài)、驅(qū)動(dòng)以及EtherCAT應(yīng)用。觸覺智能RK3506開發(fā)板提供EtherCAT預(yù)編譯的bin文件:

- 實(shí)時(shí)Linux內(nèi)核
EtherCAT IgH需要保證高實(shí)時(shí)性,Preempt-RT是一種針對(duì)實(shí)時(shí)性能進(jìn)行了優(yōu)化的Linux內(nèi)核。與普通的 Linux內(nèi)核相比,Preempt-RT具有以下優(yōu)勢(shì):
1. 實(shí)時(shí)性能: Preempt-RT提供了更可靠和更精確的實(shí)時(shí)性能。它采用了一些實(shí)時(shí)調(diào)度策略和機(jī)制,使得任務(wù)能夠按照嚴(yán)格的時(shí)間要求執(zhí)行,從而適用于需要高度可預(yù)測(cè)性和低延遲的應(yīng)用場(chǎng)景,如工業(yè)自動(dòng)化、機(jī)器人控制等。
2. 硬實(shí)時(shí)能力:Preempt-RT具有硬實(shí)時(shí)能力,即能夠確保任務(wù)在規(guī)定的時(shí)間內(nèi)完成,而不會(huì)受到其 他任務(wù)或中斷的干擾。這對(duì)于需要嚴(yán)格的時(shí)間限制的應(yīng)用非常重要,如航空航天、醫(yī)療設(shè)備等領(lǐng)域。
3. 任務(wù)調(diào)度:Preempt-RT使用了更加高效和優(yōu)化的任務(wù)調(diào)度算法,如基于優(yōu)先級(jí)的實(shí)時(shí)調(diào)度算法, 以確保高優(yōu)先級(jí)任務(wù)能夠及時(shí)響應(yīng)并完成,而低優(yōu)先級(jí)任務(wù)不會(huì)影響到實(shí)時(shí)任務(wù)的執(zhí)行。
4. 中斷處理:Preempt-RT針對(duì)中斷處理進(jìn)行了優(yōu)化,使得中斷的響應(yīng)時(shí)間更短,能夠更快地響應(yīng)外部事件。
5. 內(nèi)核定時(shí)器:Preempt-RT提供了更精確和可配置的內(nèi)核定時(shí)器,使得可以實(shí)現(xiàn)微秒級(jí)的定時(shí)精 度,適用于對(duì)時(shí)間要求極高的應(yīng)用場(chǎng)景。
6. 實(shí)時(shí)擴(kuò)展:Preempt-RT提供了一些實(shí)時(shí)擴(kuò)展機(jī)制,使得用戶能夠方便地對(duì)內(nèi)核進(jìn)行定制和擴(kuò)展,以滿足特定應(yīng)用的需求。
總的來說,Preempt-RT在實(shí)時(shí)性能、可靠性和精度方面比普通的Linux內(nèi)核更加優(yōu)秀,因此在對(duì)實(shí)時(shí)性能 要求較高的應(yīng)用場(chǎng)景中被廣泛使用。瑞芯微提供配套SDK的Preempt-RT補(bǔ)丁。
- 用戶態(tài)
用戶態(tài)中主要是兩個(gè)文件,ethercat和libethercat.so,一個(gè)是EtherCAT IgH的調(diào)試工具,一個(gè)是EtherCAT。
IgH的動(dòng)態(tài)庫(kù),用來提供用戶層接口。用戶態(tài)部分訪問以下鏈接:
https://gitlab.com/etherlab.org/ethercat/-/tree/master?r ef_type=heads下載IgH的源代碼,編譯后會(huì)生成ethercat二進(jìn)制文件,libethercat.so和一些example等等。用戶態(tài)部分也可以使用預(yù)編譯好的EtherCAT IgH二進(jìn)制文件和libethercat.so,如下所示:

- 驅(qū)動(dòng)
驅(qū)動(dòng)部分主要是ec_master.ko和一些瑞芯微RK優(yōu)化后的ko文件。

- EtherCAT IgH應(yīng)用部分
EtherCAT IgH應(yīng)用部分需要根據(jù)實(shí)際使用的伺服驅(qū)動(dòng)器來實(shí)現(xiàn),該部分無法通用的, 觸覺智能提供如下測(cè)試組件:
EtherCAT IgH軟件編譯和部署
以下將根據(jù)實(shí)時(shí)Linux內(nèi)核、用戶態(tài)、驅(qū)動(dòng)以及EtherCAT應(yīng)用四個(gè)部分進(jìn)行講解。
- 編譯內(nèi)核
步驟一:打上Preempt-RT補(bǔ)丁,內(nèi)核方案選擇Preempt-RT內(nèi)核方案,參考文檔打上補(bǔ)丁:SDK/docs/Patches/Real-Time-Performance/README.md
要特別注意的是:發(fā)布的驅(qū)動(dòng)部分SDK/external/rk_ethercat_release和內(nèi)核頭文件強(qiáng)相關(guān),請(qǐng)確認(rèn)內(nèi)核的commit
要和SDK/external/rk_ethercat_release/driver/redmine中描述的一樣,再打入Preempt-RT補(bǔ)丁。
步聚二:修改RK3506 Linux 6.1內(nèi)核
diff --git a/arch/arm/configs/rk3506_defconfig b/arch/arm/configs/rk3506_defconfig index e6d3ba608a77..3029973ade8c 100644 --- a/arch/arm/configs/rk3506_defconfig +++ b/arch/arm/configs/rk3506_defconfig @@ -2,6 +2,7 @@ CONFIG_KERNEL_XZ=y CONFIG_DEFAULT_HOSTNAME="localhost" CONFIG_SYSVIPC=y +CONFIG_NO_HZ_FULL=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_PREEMPT=y @@ -119,12 +120,13 @@ CONFIG_NETDEVICES=y # CONFIG_NET_VENDOR_SOLARFLARE is not set # CONFIG_NET_VENDOR_SMSC is not set # CONFIG_NET_VENDOR_SOCIONEXT is not set -CONFIG_STMMAC_ETH=y +CONFIG_STMMAC_ETH=m # CONFIG_DWMAC_GENERIC is not set # CONFIG_NET_VENDOR_SYNOPSYS is not set # CONFIG_NET_VENDOR_VIA is not set # CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_NET_VENDOR_XILINX is not set +CONFIG_PHYLIB=y CONFIG_MOTORCOMM_PHY=y CONFIG_PPP=y # CONFIG_WLAN is not set
步驟三:編譯出實(shí)時(shí)內(nèi)核最后根據(jù)rt-linux README.md,生成實(shí)時(shí)性內(nèi)核。
- EtherCAT IgH應(yīng)用部分
EtherCAT IgH應(yīng)用部分需要根據(jù)具體的伺服器來編寫,需要使用上面用戶態(tài)編譯出來的EtherCAT IgH工具獲取一些伺服驅(qū)動(dòng)器的配置信息,然后完成應(yīng)用代碼的開發(fā)。具體可添加觸覺智能客服 微 信13423856106,獲取EtherCAT IgH應(yīng)用部分開發(fā)指導(dǎo)。
EtherCAT IgH工具介紹
使用ethercat --help命令可以查看EtherCAT IgH工具,這些工具可以查看與主站連接的從站的各種信息, 可以有助于主站應(yīng)用程序的編寫,下面介紹幾種常用的命令和參數(shù)的使用,其中[]中為必選參數(shù), <>為 可選參數(shù)。
- 以c語言的形式輸出pdo信息(ethercat cstruct)EtherCAT IgH應(yīng)用部分
/* Master 0, Slave 0 * Vendor ID: 0x00000a79 * Product code: 0x00002000 * Revision number: 0x00000001 */ ec_pdo_entry_info_t slave_0_pdo_entries[] = { {0x603f, 0x00, 16}, /* ErrorCode */ {0x6041, 0x00, 16}, /* StatusWord */ {0x6064, 0x00, 32}, /* Position actual value */ {0x60fd, 0x00, 32}, /* Digital inputs */ {0x6061, 0x00, 8}, /* Modes of operation display */ {0x6040, 0x00, 16}, /* ControlWord */ {0x6060, 0x00, 8}, /* Modes of operation */ {0x607a, 0x00, 32}, /* Target position */ {0x6081, 0x00, 32}, /* Profile velocity */ {0x6099, 0x01, 32}, /* Search Switch */ {0x6099, 0x02, 32}, /* Search Zero */ {0x6040, 0x00, 16}, {0x607a, 0x00, 32}, {0x60ff, 0x00, 32}, {0x6060, 0x00, 8}, {0x0000, 0x00, 8}, /* Gap */ {0x6041, 0x00, 16}, {0x6064, 0x00, 32}, {0x606c, 0x00, 32}, {0x6061, 0x00, 8}, {0x0000, 0x00, 8}, /* Gap */ }; ec_pdo_info_t slave_0_pdos[] = { {0x1a01, 5, slave_0_pdo_entries + 0}, /* TxPDO 2 */ {0x1601, 6, slave_0_pdo_entries + 5}, /* RxPDO 2 */ {0x1600, 5, slave_0_pdo_entries + 11}, {0x1a00, 5, slave_0_pdo_entries + 16}, }; ec_sync_info_t slave_0_syncs[] = { {0, EC_DIR_OUTPUT, 2, slave_0_pdos + 0, EC_WD_DISABLE}, {1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE}, {2, EC_DIR_OUTPUT, 1, slave_0_pdos + 2, EC_WD_ENABLE}, {3, EC_DIR_INPUT, 1, slave_0_pdos + 3, EC_WD_DISABLE}, {0xff} }; 0 0:0 PREOP + 0x000001dd:0x10305070
- 輸出pdo信息(ethercatpdos)
SM0: PhysAddr 0x1000, DefaultSize 128, ControlRegister 0x26, Enable 1 RxPDO 0x1a01 "TxPDO 2" PDO entry 0x603f:00, 16 bit, "ErrorCode" PDO entry 0x6041:00, 16 bit, "StatusWord" PDO entry 0x6064:00, 32 bit, "Position actual value" PDO entry 0x60fd:00, 32 bit, "Digital inputs" PDO entry 0x6061:00, 8 bit, "Modes of operation display" RxPDO 0x1601 "RxPDO 2" PDO entry 0x6040:00, 16 bit, "ControlWord" PDO entry 0x6060:00, 8 bit, "Modes of operation" PDO entry 0x607a:00, 32 bit, "Target position" PDO entry 0x6081:00, 32 bit, "Profile velocity" PDO entry 0x6099:01, 32 bit, "Search Switch" PDO entry 0x6099:02, 32 bit, "Search Zero" SM1: PhysAddr 0x1100, DefaultSize 128, ControlRegister 0x22, Enable 1 SM2: PhysAddr 0x1200, DefaultSize 12, ControlRegister 0x64, Enable 1 RxPDO 0x1600 "" PDO entry 0x6040:00, 16 bit, "" PDO entry 0x607a:00, 32 bit, "" PDO entry 0x60ff:00, 32 bit, "" PDO entry 0x6060:00, 8 bit, "" PDO entry 0x0000:00, 8 bit, "Gap" SM3: PhysAddr 0x1300, DefaultSize 19, ControlRegister 0x20, Enable 1 TxPDO 0x1a00 "" PDO entry 0x6041:00, 16 bit, "" PDO entry 0x6064:00, 32 bit, "" PDO entry 0x606c:00, 32 bit, "" PDO entry 0x6061:00, 8 bit, "" PDO entry 0x0000:00, 8 bit, "Gap"
#設(shè)置別名地址(下面的例子代表設(shè)置位置0的別名修改為1) ethercat alias -p 0 0 #設(shè)置別名地址(下面的例子代表別名0的別名修改為1) ethercat alias -a 0 1
Ethercat IgH主站性能測(cè)試結(jié)論
觸覺智能RK3506開發(fā)板1ms控制周期內(nèi),性能數(shù)據(jù)如下:

觸覺智能RK3506星閃開發(fā)板,僅188元,點(diǎn)贊本文購(gòu)送套餐優(yōu)惠券如需選購(gòu),馬云家 搜索觸覺智能官方企業(yè)店
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5431瀏覽量
101213 -
瑞芯微
+關(guān)注
關(guān)注
24文章
517瀏覽量
52059 -
EtherCAT總線
+關(guān)注
關(guān)注
5文章
80瀏覽量
5619 -
RK3506
+關(guān)注
關(guān)注
0文章
20瀏覽量
30
發(fā)布評(píng)論請(qǐng)先 登錄
Banana Pi開源社區(qū)基于瑞芯微RK3588開發(fā)板,DeepSeek開發(fā)利器

低成本解決方案,RK3506的應(yīng)用場(chǎng)景分析!

瑞芯微主板/開發(fā)板Linux系統(tǒng)播放音頻方法,觸覺智能RK3562開發(fā)板演示

RK3506各型號(hào)該怎么選?瑞芯微全新工業(yè)芯片介紹 觸覺智能出品

瑞芯微全新芯片平臺(tái)RK3506優(yōu)勢(shì)詳解,高集成低功耗,為工業(yè)而生 深圳觸覺智能評(píng)測(cè)

性價(jià)比天花板?觸覺智能發(fā)布瑞芯微RK3506核心板(寬溫級(jí)RK3506 工業(yè)級(jí)RK3506J)

【技術(shù)簡(jiǎn)析】觸覺智能RK3506 Linux星閃網(wǎng)關(guān)開發(fā)板有什么奧妙?

觸覺智能RK3506核心板,工業(yè)應(yīng)用之RK3506 RT-Linux實(shí)時(shí)性測(cè)試

瑞芯微RK3506開發(fā)板必備之LVGL應(yīng)用開發(fā)手冊(cè),深圳觸覺智能出品

瑞芯微RK3506開發(fā)板之Qt應(yīng)用開發(fā)手冊(cè)(上) 深圳觸覺智能出品,嵌入式方案商

評(píng)論