CNDY Shield GRBL CNC Arduino UNO 用戶指南
V1.2

Arduino Uno 上的 GRBL 腳位排列
模擬 0 = 中止按鈕*
模擬 1 = 進給保持按鈕*(SAFETY_DOOR 與進給保持共享。透過組態定義啟用)
模擬 2 = 循環啟動/重新啟動按鈕*
模擬 3 = 冷卻液啟用輸出
模擬 4 = (選修的) 霧狀冷卻液輸出 (或 ALARM_STATE 診斷燈**)
模擬 5 = 探頭輸入*
數字13 = 主軸方向
數字 12 = Z 軸限位開關*
數字 11 = 主軸/雷射使能 PWM
數字 10 = Y 軸限位開關*
數字 9 = X 軸限位開關*
數字 8 = 步進馬達啟用/停用
數字 7 = Z 軸方向
數字 6 = Y 軸方向
數字 5 = 方向 X 軸
數字 4 = 步進脈衝 Z 軸
數字 3 = 步進脈衝 Y 軸
數字 2 = 步進脈衝 X 軸
選配雙軸功能
Uno 類比腳位 3 = A 軸 DUAL_DIRECTION(用作冷卻劑啟用輸出)
Uno 模擬引腳 4 = A 軸 DUAL_STEP(曾經是可選的霧狀冷卻劑輸出)
Uno Digital 13 = 冷卻液(更換主軸方向。)
將 grbl 儲存庫安裝為 Arduino 中的庫後,取消註解 config.h 中的以下行 file 在 grbl 庫資料夾中。
#定義ENABLE_DUAL_AXIS // 預設禁用。取消註解以啟用.
// 選擇一個軸來鏡像另一個馬達。目前僅支援 X 和 Y 軸。
#define DUAL_AXIS_SELECT Y_AXIS // 必須是 X_AXIS 或 Y_AXIS
注意:雙軸限制與 (Z軸) 預設限制引腳。
雙軸功能需要獨立的步進脈衝引腳才能運作。獨立方向引腳不是絕對必要的,但可以透過 Grbl $$ 設定輕鬆實現方向反轉。這些銷取代了主軸方向和可選的冷卻液霧銷。
這種可選的雙軸功能主要用於歸位循環,以獨立定位雙馬達龍門架的兩側,即自平直。這需要為克隆馬達添加一個額外的限位開關。要自成直角,克隆軸上的兩個限位開關必須物理定位,以便在龍門架成直角時觸發。強烈建議始終啟用電機,以確保龍門架在 $1=255 設定下保持方形。
對於 Arduino Uno 上的 Grbl,由於缺乏可用引腳,克隆軸限位開關必須與 z 軸限位引腳共用並接線。回零週期必須在不同的週期中使 z 軸和克隆軸回零,這已經是預設配置。
雙軸功能的工作原理是將軸步進輸出克隆到另一對步進和方向引腳。克隆馬達的步進脈衝和方向可以獨立於主軸馬達進行設定。然而,為了節省寶貴的快閃記憶體和內存,此雙軸功能必須與父馬達共享相同的設定(步長/毫米、最大速度、加速度)。這不是獨立第四軸的功能。只有一個電機克隆。
警告:請務必測試雙軸馬達的方向!在運行第一個歸位循環或任何長距離運動之前,必須將它們設定為向同一方向移動!馬達反向移動可能會對您的機器造成嚴重損壞!使用此雙軸功能的風險由您自行承擔。
注意:此功能需要大約 400 位元組的快閃記憶體。某些配置可能會耗盡快閃記憶體以適應 Arduino 328p/Uno。僅支援 X 軸和 Y 軸。支援可變主軸/雷射模式,但僅適用於一種配置選項。核心 XY、主軸方向銷和 M7 霧狀冷卻液被禁用/不支援。
為了防止回零週期對雙軸造成損壞,當一個限位因開關故障或噪音而在另一個限位之前觸發時,如果第二個馬達的限位開關在下面定義的三個距離參數內未觸發,則回零週期將自動中止。軸長度百分比將自動計算失敗距離的百分比tag另一個非雙軸最大行程的 e,即如果雙軸選擇 X_AXIS 為 5.0%,則失敗距離將計算為 y 軸最大行程的 5.0%。最大失敗距離和最小失敗距離是有效失敗距離的限制。
#define DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT 5.0 // 浮點(百分比)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX 25.0 // 浮動(毫米)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN 2.5 // 浮動(毫米)
I2C 連接埠注意事項
模擬 4 (A4) 和模擬 5 (A5) 用於 Arduino Uno 或 2p 上的 I328C 連接埠。這意味著只要您使用預設探頭功能、霧冷卻劑、雙軸或自訂 ALARM_STATE LED 診斷燈,就無法使用 I2C。與另一個 Arduino 進行通訊以增加功能必須透過 D0 和 D1 上的串行連接。
入門(步進驅動器)
首先,要將步進馬達連接到 Grbl,您需要一些步進馬達驅動器來為步進器供電並將驅動器輸入連接到 Arduino 控制器引腳。有許多驅動程式可以做到這一點,可以完全預先建置、部分預先建置或完全 DIY。步進驅動器需要共享 步進器啟用引腳 (D8) 到各自的使能引腳,而 方向和步進脈衝引腳(D2-D7) 需要連接到驅動器上各自的引腳。只需確保您的所有驅動程式和 Arduino 有著共同點 (與馬達驅動器電源星形接地)。這就是您開始所需的全部內容。
歸位和限位開關
之後,一旦您決定準備好或願意 啟用歸位和/或硬限制,您需要連接一個 常開限位開關 到每個限位銷 (D9、D10 和 D12)。歸位和硬限制使用相同的開關。這些限制引腳已經透過內部上拉電阻保持在高電平,因此您所要做的就是將它們接地。因此,當您關閉開關時,開關會將限位引腳拉至地。如果您想在軸行程的兩端都有硬限位開關,只需將兩個限位開關平行連接到軸限位銷和接地即可。確保在嘗試執行歸位循環之前安裝了開關,並確保採用良好的接線方法,以最大程度地減少輸入引腳上的外部電噪聲。
良好的接線實踐可能包括使用屏蔽電纜或 clamp-on 鐵氧體電纜芯,並使用一些 0.1uF 電容器與限位開關並聯以進行去抖/噪音過濾。讓馬達電線遠離限位開關電線也可能是個好主意。
如果您願意,可以將 GRBL 設定為使用常閉限位開關。有些人認為常閉限位開關可能有助於減少限位開關故障時發生的災難性事故。許多使用者完全不使用任何限位開關,而是選擇軟體限位。
在 Grbl v0.8 及更高版本中,有循環啟動、進給保持和重設運行時命令的引腳輸出,因此您可以在機器上擁有實體控制按鈕。就像限制引腳一樣,這些引腳透過內部上拉電阻保持高電平,因此您所需要做的就是將常開開關連接到每個引腳並接地。再次確保您採用良好的接線方法,以最大限度地減少輸入引腳上的外部電噪聲。
主軸和冷卻液銷
如果您對主軸有渴望或需求 (D13) 或冷卻液控制 (A3 & A4) ,Grbl 將根據您發送到 Grbl 的 G 代碼命令將這些輸出引腳切換為高電平或低電平。當 v0.9+ 和可變主軸 PWM 啟用時,D11 接腳將輸出一定範圍的 voltag從 0V 到 5V,取決於主軸速度 G 代碼命令。在這種情況下,0V 表示主軸關閉。由於這些引腳的使用方式均取決於應用程序,因此我們將讓您自行決定如何在您的機器上控制和使用這些引腳。 您也可以破解主軸和冷卻液控制源 file輕鬆改變它們的工作方式,然後透過 Arduino IDE 編譯並上傳修改後的 Grbl。
診斷 LED 燈
商用 CNC 工具機通常至少有一個診斷 LED 信標,以防機床崩潰或警報代碼。對於 GRBL 和 DIY CNC 工具機的新手來說,此功能對於了解何時發生 ALARM_STATE(例如在啟用歸位和限位開關的情況下無法使機器歸位)非常有用。
GRBL 預設沒有診斷 LED 燈。這是因為帶有 328p 晶片的 Ardunio UNO 的編程空間有限,並且當前幾乎所有空間都已被使用(儘管不是全部!)。並非所有理想的功能都可以在如此低記憶體的裝置上實現,因此有時必須做出犧牲。
此外,所有可用的 I/O 連接埠目前均已使用,且此類燈至少需要一個 I/O 引腳。幸運的是,可以透過破解 GRBL C 代碼輕鬆添加此功能,並且 3p 晶片上仍然有大約 328% 的可用記憶體!
許多機器目前不使用 Analog 4 上的可選 MIST COOLANT 功能,因此我們可以輕鬆地重新定義此引腳以供我們使用。另一種方法可能是在外部Arduino 上對此類LED 燈進行編碼,然後該Arduino 將擁有所有可用的I/O 端口,可根據需要連接任意數量的LED 燈/蜂鳴器,並且可以通過串行或I2C 進行通信。
若要破解 GRBL 原始碼以使用 CNDY Shield 上的警報 LED,請執行以下操作:
步驟一: 在 Linux 或 Macintosh 上開啟文字編輯器(在 Windows 上使用 Notepad++)並編輯 cpu_map.h file:
改變這個:
// 定義洪水和霧冷卻劑啟用輸出引腳。
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno 類比腳位 3
#define COOLANT_MIST_DDR DDRC
#define COOLANT_MIST_PORT PORTC
#define COOLANT_MIST_BIT 4 // Uno 模擬腳位 4
對此:
// 定義洪水和霧冷卻劑啟用輸出引腳。
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno 類比腳位 3
//#定義COOLANT_MIST_DDR DDRC
//#定義COOLANT_MIST_PORT PORTC
//#define COOLANT_MIST_BIT 4 // Uno 類比腳位 4
////////////////////////////////////
// 定義警報 LED 輸出
#define SIGNAL_LIGHT_DDR DDRC
#定義SIGNAL_LIGHT_PORT PORTC
#define SIGNAL_LIGHT_BIT 4 // Uno 類比腳位 4
// #define signal_light(on) (SIGNAL_LIGHT_DDR |= (1<
// #define signal_light_init() signal_light(off)
#定義signal_light_init signal_light_off
#define signal_light_on (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT |= (1<
#define signal_light_off (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT &= ~(1<
////////////////////////////////////
步驟一: 在 Linux 或 Macintosh 上開啟文字編輯器(在 Windows 上使用 Notepad++)並編輯 協議.c file:
改變這個:
// 在需要時執行執行時間命令。此函數主要作為 Grbl 的狀態來運行
// 加工並控制 Grbl 提供的各種即時功能。
// 注意:除非您確切知道自己在做什麼,否則請勿更改此設定!無效協定_exec_rt_system()
{
uint8_t rt_exec; // 臨時變數以避免多次呼叫 volatile。
rt_exec = sys_rt_exec_alarm; // 複製易失性 sys_rt_exec_alarm.
if (rt_exec) { // 僅當任何位元標誌為 true 時才輸入
// 系統警報。一切都因出現嚴重錯誤而停止。報告
// 使用者的錯誤來源。如果關鍵,Grbl 透過輸入無限來停用
// 循環直到系統重置/中止。
sys.state = STATE_ALARM; // 設定係統警報狀態
report_alarm_message(rt_exec);
對此:
// 在需要時執行執行時間命令。此函數主要作為 Grbl 的狀態來運行
// 加工並控制 Grbl 提供的各種即時功能。
// 注意:除非您確切知道自己在做什麼,否則請勿更改此設定!
無效協定_exec_rt_system()
{
uint8_t rt_exec; // 臨時變數以避免多次呼叫 volatile。
rt_exec = sys_rt_exec_alarm; // 複製易失性 sys_rt_exec_alarm.
//////////////////////////////////////////////
// 定義警報 LED 輸出
signal_light_init; //初始化LED處於關閉狀態
if (sys.state==STATE_ALARM) {signal_light_on;}
else if (sys.state!=STATE_ALARM) {signal_light_off;}
// 否則{signal_light_off;}
//////////////////////////////////////////////
if (rt_exec) { // 僅當任何位元標誌為 true 時才輸入
// 系統警報。一切都因出現嚴重錯誤而停止。報告
// 使用者的錯誤來源。如果關鍵,Grbl 透過輸入無限來停用
// 循環直到系統重置/中止。
sys.state = STATE_ALARM; // 設定係統警報狀態
report_alarm_message(rt_exec);
我們剛剛所做的是將 Analog 4 (A4) 的定義功能從可選的霧冷卻劑變更為我們的 LED 燈。然後,我們用 C 語言編寫程式碼,以便能夠根據是否被告知開啟或關閉來將 (PC4) 連接埠 C 4 (Analog4) 寫入高電平或低電平。然後我們編寫了一個簡單的 if-else 語句來檢查 GRBL 狀態機並告訴我們是否處於活動的 ALARM_STATE 狀態,以及何時開啟 LED。
如果一切順利,我們可以在 Arduino IDE 中進行編譯,上傳程式碼,現在我們將擁有一個可以工作的 ALARM_STATE LED 診斷燈!我們可以選擇連接外部 LED 信標燈,將其放置在機器上方的高處,整個房間都可見。
可能出現的問題
理想情況下,這些變更將使用最新可用的 grbl 原始碼完成,並在將 grbl「庫」新增至 Arduino IDE 之前進行。如果您的 Arduino 庫資料夾中已有 grbl,則需要手動瀏覽並刪除 grbl 資料夾或編輯 file位於 arduino 庫中。在我的 Linux 機器上,「庫」位於:/home/andrew/Arduino/libraries/grbl。最新的 grbl 版本可以在以下位置找到: https://github.com/gnea/grbl/releases。可以下載可用的 zip file 在裡面可以找到一個名為grbl-1.1h.20190825的資料夾。在此資料夾中,您將需要將名為 grbl 的資料夾作為「庫」「zip」新增至 Arduino IDE file」。請務必對 cpu_map.h 和 protocol.c 進行更改 file在將其新增至 Arduino IDE 之前。否則您將需要編輯 file位於您的libraries/grbl 資料夾中。 grbl-1.1h zip 中的雙軸功能存在一個已知錯誤 file,如果您改為下載主 grbl 分支,則該問題已修復。 https://github.com/gnea/grbl
CNDY Shield 更新與錯誤
*V1.1:主軸 PWM 和主軸方向互換時有一個小的絲網印刷錯誤。這已在 V1.2 中得到修正。
V1.2 5v線上不再有可選的降噪電容,而在其他輸入按鈕線上有新的降噪電容。 V1.2 有一個可選的 LED,與主軸 PWM 並聯。這對於雷射設定的安全性可能很有用。
更新日期:28 年 2021 月 XNUMX 日
其他資訊可在以下位置找到: RabbitMountainResearch.com.
文件/資源
![]() |
CNDY 盾 GRBL CNC Arduino UNO [pdf] 使用者指南 GRBL CNC、Arduino UNO |




