IgH EtherCAT總線
IgH EtherCAT是運行于Linux系統的開源EtherCAT主站程序,IgH EtherCAT主站通過構建Linux字符設備, 應用程序通過對字符設備的訪問實現與EtherCAT主站模塊的通信。
IgH EtherCAT開發包配套EtherCAT工具,可提供各種可在Linux用戶層運行的命令,可直接實現對從站的訪問和設置,如設置從站地址、顯示總線配置、顯示PDO數據、讀寫SDO參數等。具體詳情可以查看IgH的官網進行了解。

本文基于觸覺智能RK3506星閃開發板演示Ethercat主站開發,其配套RK3506核心板(3核A7+M0多核異構),100%全國產,峰值功耗低至0.65W。
EtherCAT IgH軟件環境
- EtherCAT整體介紹
EtherCAT整體分為四個部分,包含:實時Linux內核、用戶態、驅動以及EtherCAT應用。觸覺智能RK3506開發板提供EtherCAT預編譯的bin文件:

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

- 驅動
驅動部分主要是ec_master.ko和一些瑞芯微RK優化后的ko文件。

- EtherCAT IgH應用部分
EtherCAT IgH應用部分需要根據實際使用的伺服驅動器來實現,該部分無法通用的, 觸覺智能提供如下測試組件:
EtherCAT IgH軟件編譯和部署
以下將根據實時Linux內核、用戶態、驅動以及EtherCAT應用四個部分進行講解。
- 編譯內核
步驟一:打上Preempt-RT補丁,內核方案選擇Preempt-RT內核方案,參考文檔打上補丁:SDK/docs/Patches/Real-Time-Performance/README.md
要特別注意的是:發布的驅動部分SDK/external/rk_ethercat_release和內核頭文件強相關,請確認內核的commit
要和SDK/external/rk_ethercat_release/driver/redmine中描述的一樣,再打入Preempt-RT補丁。
步聚二:修改RK3506 Linux 6.1內核
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
步驟三:編譯出實時內核最后根據rt-linux README.md,生成實時性內核。
- EtherCAT IgH應用部分
EtherCAT IgH應用部分需要根據具體的伺服器來編寫,需要使用上面用戶態編譯出來的EtherCAT IgH工具獲取一些伺服驅動器的配置信息,然后完成應用代碼的開發。具體可添加觸覺智能客服 微 信13423856106,獲取EtherCAT IgH應用部分開發指導。
EtherCAT IgH工具介紹
使用ethercat --help命令可以查看EtherCAT IgH工具,這些工具可以查看與主站連接的從站的各種信息, 可以有助于主站應用程序的編寫,下面介紹幾種常用的命令和參數的使用,其中[]中為必選參數, <>為 可選參數。
- 以c語言的形式輸出pdo信息(ethercat cstruct)EtherCAT IgH應用部分
/* 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"
#設置別名地址(下面的例子代表設置位置0的別名修改為1) ethercat alias -p 0 0 #設置別名地址(下面的例子代表別名0的別名修改為1) ethercat alias -a 0 1
Ethercat IgH主站性能測試結論
觸覺智能RK3506開發板1ms控制周期內,性能數據如下:

觸覺智能RK3506星閃開發板,僅188元,點贊本文購送套餐優惠券如需選購,馬云家 搜索觸覺智能官方企業店
-
開發板
+關注
關注
25文章
5616瀏覽量
103473 -
瑞芯微
+關注
關注
25文章
560瀏覽量
52299 -
EtherCAT總線
+關注
關注
5文章
81瀏覽量
5684 -
RK3506
+關注
關注
0文章
35瀏覽量
81
發布評論請先 登錄
瑞芯微全新芯片平臺RK3506優勢詳解,高集成低功耗,為工業而生 深圳觸覺智能評測

【技術簡析】觸覺智能RK3506 Linux星閃網關開發板有什么奧妙?

瑞芯微RK3506開發板必備之LVGL應用開發手冊,深圳觸覺智能出品

瑞芯微RK3506開發板必備攻略之Qt應用開發手冊(下),觸覺智能工控嵌入式方案商

評論