[教程]
我們很高興推出全新的技術 Start Guide,協助工程師與系統整合商快速上手 QEC-M-01 EtherCAT 主站(MDevice)與 Delta ASDA-B3 / ASDA-A2 交流伺服馬達與驅動器。
本系列指南提供完整的逐步設定流程、實用的程式碼範例與整合技巧,涵蓋兩種最常用的 CiA 402 運動模式—— Cyclic Synchronous Position (CSP) 以及 Profile Position (PP) ,讓你以最少的工夫就能透過 EtherCAT 讓一軸 Delta 伺服上線運轉。

這些指南提供了逐步設定流程、實用的編碼範例和整合技巧,涵蓋了CiA 402 CSP(循環同步位置)和PP(輪廓位置)模式,因此您可以加快啟動速度並減少工程時間。
1. 新指南亮點
QEC-M-01 是一款體積精巧且效能強大的 EtherCAT 主站,採用即時多工架構。它執行 86Duino Coding IDE 並內建完整的 EtherCAT 函式庫,讓開發者能以熟悉的 Arduino 風格 setup() / loop() 程式碼設定網路、對應 PDO 並控制 CiA 402 驅動器。搭配 Delta ASDA 伺服家族,可從接線到運動一氣呵成。
1.1 Delta ASDA-B3/ASDA-A2(為什麼選 Delta ASDA?)
Delta ASDA-B3 與 ASDA-A2 是廣泛應用的交流伺服馬達與驅動器,內建符合 CiA 402 運動規範的 EtherCAT 介面。兩者皆適合對成本敏感、又需要可靠閉迴路定位的精巧型自動化應用。
對 EtherCAT 使用者而言的重點:
- CiA 402 over EtherCAT ——兩款驅動器皆提供標準 CiA 402 物件並支援 PP 與 CSP 運作,因此同一套 QEC-M-01 應用邏輯可通用於任一型號。
- 寬廣電源範圍 ——ASDA-B3 支援單相/三相 200–230 V(≤3 kW)與三相 380–400 V(1–7.5 kW);ASDA-A2 則支援單相/三相 200–230 V,涵蓋 200 W–3 kW 範圍。
- 高解析度回饋 實現精確、穩定的定位,並具有自動調諧功能,簡化調試過程。
- 內建回生電阻 ,足以應付多數應用;高慣量負載時可外接電阻。
- 安全與保護 ——ASDA-B3 提供 STO(CN10)輸入,須在啟用時生效才能 Enable 驅動器;CN1 I/O 則可接 ORG 與 POT/NOT 極限開關,用於歸原點與運動保護。
請造訪 Delta ASDA-B3 和 ASDA-A2 產品頁面以了解更多資訊。
1.2 Start Guide 的優勢
- 逐步設定指南: 接線、EtherCAT 網路啟動,以及每台驅動器的建議參數檢查清單。
- 程式範例(CSP/PP): 可直接執行的程式片段與控制流程範例,協助你快速實作運動控制。
- 整合技巧與疑難排解: 針對現場常見問題提供說明——Enable 驅動器的順序、開發階段 STO 短接、警報處理,以及透過 86EVA 還原 QEC-M 環境(更新 Bootloader、EtherCAT firmware 與 EtherCAT tool)。

2. 開始使用 QEC-M-01 控制 Delta ASDA-B3/A2 交流伺服
無論你是新手或資深開發者,本系列指南都能提供讓 Delta 伺服軸動起來所需的支援。以下範例會在同一個 EtherCAT 網路上 同時 控制 兩台 驅動器——ASDA-B3 與 ASDA-A2,設定如下:
- EtherCAT 週期時間(Cycle Time): 1 毫秒
- EtherCAT 模式:
ECAT_SYNC - 分散式時鐘(DC): 啟用,跟隨週期時間
在兩個範例中, EthercatMaster 物件(master)代表 QEC-M-01,而 EthercatDevice_CiA402 物件則代表 Delta ASDA-B3 與 ASDA-A2 驅動器。
2.1 點對點位置(PP)模式
以下程式將兩台 ASDA 驅動器設定為 CiA 402 點對點位置(PP)模式。在 setup() 中初始化網路、依 SubDevice index 掛載各驅動器、啟用 DC、選擇 PP 模式、切換至 OPERATIONAL、Enable 馬達,並設定運動 profile(type、速度、加速度、減速度)。在 loop() 中以簡單的狀態機讓每一軸移動至 +10,000,000 counts、等待到位、再移回 −10,000,000 counts 並重複——以 pp_Run() 下達移動指令、以 pp_IsTargetReached() 確認是否到位。
#include "Ethercat.h"
EthercatMaster master;
EthercatDevice_CiA402 motor[2];
int pp_state[2];
void setup() {
Serial.begin(115200);
Serial.print("Begin: ");
Serial.println(master.begin());
for (int i = 0; i < 2; i++) {
Serial.print("Motor: ");
Serial.println(motor[i].attach(i, master));
motor[i].setDc(1000000);
motor[i].setCiA402Mode(CIA402_PP_MODE);
}
Serial.print("Start: ");
Serial.println(master.start(1000000, ECAT_SYNC));
for (int i = 0; i < 2; i++) {
Serial.print("Enable: ");
Serial.println(motor[i].enable());
motor[i].pp_SetMotionProfileType(0); // Linear ramp (trapezoidal profile)
motor[i].pp_SetVelocity(1000000);
motor[i].pp_SetAcceleration(1000000);
motor[i].pp_SetDeceleration(1000000);
}
}
void loop() {
for (int i = 0; i < 2; i++) {
Serial.print("Motor"); Serial.print(i); Serial.print(": ");
Serial.println(motor[i].getPositionActualValue());
switch (pp_state[i]) {
case 0:
if (motor[i].pp_Run(10000000) == 0)
pp_state[i]++;
break;
case 1:
if (motor[i].pp_IsTargetReached())
pp_state[i]++;
break;
case 2:
if (motor[i].pp_Run(-10000000) == 0)
pp_state[i]++;
break;
case 3:
if (motor[i].pp_IsTargetReached())
pp_state[i] = 0;
break;
}
}
}上傳完成後,於 86Duino IDE 開啟 Serial Monitor(baud rate 須與設定一致)。EtherCAT 設定成功時,各狀態會印出 0 ,驅動器顯示 Enable: 0,接著持續印出各馬達的即時位置。
2.2 週期同步位置(CSP)模式
以下程式將 Delta ASDA-A2 與 ASDA-B3 設定為 CiA 402 CSP 模式。運動在 1 ms 的週期回呼(myCallback)中產生:回呼會讀取各驅動器的實際位置,當驅動器處於 CIA402_SWITCHED_ON時維持位置不動;一旦進入 CIA402_OPERATION_ENABLED ,便以每週期 1000 counts 的速率遞增目標位置,達成平順且同步的運動。主 loop() 僅負責印出目前位置。
#include "Ethercat.h"
#define CYCTIME 1000000
EthercatMaster master;
EthercatDevice_CiA402 ASDA_A2;
EthercatDevice_CiA402 ASDA_B3;
int A2_pos = 0;
int B3_pos = 0;
void myCallback() {
// Check the state of the first drive (ASDA_A2) and update its position
A2_pos = ASDA_A2.driveGetPositionActualValue();
int stateA2 = ASDA_A2.driveGetState();
if (stateA2 == CIA402_SWITCHED_ON) {
ASDA_A2.driveSetTargetPosition(ASDA_A2.driveGetPositionActualValue());
} else if (stateA2 == CIA402_OPERATION_ENABLED) {
ASDA_A2.driveSetTargetPosition(ASDA_A2.driveGetTargetPosition() + 1000);
}
// Check the state of the second drive (ASDA_B3) and update its position
B3_pos = ASDA_B3.driveGetPositionActualValue();
int stateB3 = ASDA_B3.driveGetState();
if (stateB3 == CIA402_SWITCHED_ON) {
ASDA_B3.driveSetTargetPosition(ASDA_B3.driveGetPositionActualValue());
} else if (stateB3 == CIA402_OPERATION_ENABLED) {
ASDA_B3.driveSetTargetPosition(ASDA_B3.driveGetTargetPosition() + 1000);
}
}
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println(master.begin());
Serial.println(ASDA_A2.attach(0, master));
ASDA_A2.setDc(CYCTIME);
ASDA_A2.driveSetMode(CIA402_CSP_MODE);
Serial.println(ASDA_B3.attach(1, master));
ASDA_B3.setDc(CYCTIME);
ASDA_B3.driveSetMode(CIA402_CSP_MODE);
master.attachCyclicCallback(myCallback);
Serial.println(master.start(CYCTIME, ECAT_SYNC));
delay(100);
Serial.print("ASDA_A2 Enable: ");
Serial.print(ASDA_A2.driveEnable());
Serial.print(", ASDA_B3 Enable: ");
Serial.println(ASDA_B3.driveEnable());
delay(1000);
}
void loop() {
Serial.print("A2 Pos: ");
Serial.print(A2_pos);
Serial.print("B3 Pos: ");
Serial.println(B3_pos);
}EtherCAT 設定成功時,Serial Monitor 會印出四個 0 ,並顯示 ASDA_A2 Enable: 0 以及 ASDA_B3 Enable: 0,接著持續輸出兩台馬達的即時位置。
3. 完整指南
若想深入了解,以下提供完整的逐步指南——包含接線照片、參數檢查清單、PDO 對應與圖形化工具流程:
CSP 模式:
PP 模式:
- Delta ASDA-B3/A2 (PP mode) – Coding
- Delta ASDA-B3/A2 (PP mode) – Coding with 86EVA
- Delta ASDA-B3/A2 (PP mode) – Coding with 86EVA and ArduBlock
我們將持續推出穩健且創新的 EtherCAT 自動化平台,讓機台整合更聰明、更快速。欲取得更多資訊或索取樣品,歡迎來信 info@icop.com.tw,致電離您最近的 ICOP分公司,或聯絡我們的 全球官方經銷商。.