Grbl 是一款免費(fèi)、開源、高性能的軟件,用于控制機(jī)器的運(yùn)動(dòng),這些機(jī)器可以移動(dòng)、制造東西或讓東西移動(dòng),并且將在直接的 Arduino 上運(yùn)行。如果創(chuàng)客運(yùn)動(dòng)是一個(gè)行業(yè),那么 Grbl 將是行業(yè)標(biāo)準(zhǔn)。
大多數(shù)開源 3D 打印機(jī)的心中都有 Grbl。它已適用于數(shù)百個(gè)項(xiàng)目,包括激光切割機(jī)、自動(dòng)手寫筆、鉆孔機(jī)、涂鴉畫家和古怪的繪圖機(jī)。由于其性能、簡(jiǎn)單性和節(jié)儉的硬件要求,Grbl 已經(jīng)發(fā)展成為一種開源現(xiàn)象。
2009 年,Simen Svale Skogsrud(http://bengler.no/grbl?) 通過(guò)編寫并向所有人發(fā)布早期版本的 Grbl(受 Mike Ellery 的 Arduino GCode Interpreter 的啟發(fā))為開源社區(qū)增光添彩。自 2011 年以來(lái),Grbl 在Sungeun “Sonny” Jeon 博士的務(wù)實(shí)領(lǐng)導(dǎo)下,作為一個(gè)社區(qū)驅(qū)動(dòng)的開源項(xiàng)目向前推進(jìn)。(@chamnit)。
進(jìn)行銑削或激光切割的制造商需要一個(gè)漂亮、簡(jiǎn)單的控制器來(lái)控制他們的系統(tǒng),該控制器將在無(wú)處不在的 Arduino Uno 上運(yùn)行。那些不喜歡僅僅為了并行端口而用傳統(tǒng)的 PC 塔來(lái)弄亂他們的空間的人。需要以整潔、模塊化的 C 語(yǔ)言編寫的控制器作為項(xiàng)目基礎(chǔ)的修補(bǔ)匠。
Grbl 非常適合輕型生產(chǎn)。我們將它用于我們所有的銑削,使用為 Grbl 編寫的一流 GUI 從我們的筆記本電腦或 Raspberry Pi 上運(yùn)行它,以流式傳輸 G 代碼作業(yè)。Grbl 是用高度優(yōu)化的 C 語(yǔ)言編寫的,利用 Arduino 的 Atmega328p 芯片的所有智能特性來(lái)實(shí)現(xiàn)精確的定時(shí)和異步操作。它能夠保持超過(guò)30kHz的步進(jìn)速率,并提供干凈、無(wú)抖動(dòng)的控制脈沖流。
Grbl 適用于三軸機(jī)器。(還)沒(méi)有旋轉(zhuǎn)軸——只有 X、Y 和 Z。
G 代碼解釋器實(shí)現(xiàn)了 LinuxCNC 標(biāo)準(zhǔn)的一個(gè)子集,并且得到大多數(shù) CAM 工具的支持,沒(méi)有任何問(wèn)題。有關(guān)這些 G 代碼的描述,請(qǐng)參閱 LinuxCNC 的 G 代碼描述(G 代碼快速參考)和Shapeoko wiki,該文檔試圖列出 Grbl 支持的所有代碼并附有適當(dāng)?shù)淖⑨?。?qǐng)注意,與下面列出的書面 G 代碼標(biāo)準(zhǔn)只有少數(shù)偏差。如果您發(fā)現(xiàn)任何其他差異,請(qǐng)告知使用!
不支持帶有 P 字的 G2 和 G3 弧的多個(gè)整圓弧。
激光模式改變M3、M4的運(yùn)行,主軸轉(zhuǎn)速S字改變。有關(guān)詳細(xì)信息,請(qǐng)參閱激光模式頁(yè)面。
帶有 M56 命令的 Grbl 特定停車運(yùn)動(dòng)覆蓋控制,其中M56 P0暫時(shí)禁用停車運(yùn)動(dòng)和/M56大于零重新啟用它們。M56 Pxx
v1.1中支持的 G 代碼
G0、G1:直線運(yùn)動(dòng)
G2、G3:圓弧和螺旋運(yùn)動(dòng)
G4:停留
G10 L2、G10 L20:設(shè)置工作坐標(biāo)偏移
G17、G18、G19:平面選擇
G20、G21:單位
G28、G30:轉(zhuǎn)到預(yù)定義位置[運(yùn)動(dòng)到預(yù)定義位置]
G28.1、G30.1:設(shè)置預(yù)定義位置
G38.2:探測(cè)
G38.3、G38.4、G38.5:探測(cè)
G40:刀具半徑補(bǔ)償模式關(guān)閉(僅限)
G43.1、G49:動(dòng)態(tài)刀具長(zhǎng)度偏移
G53:絕對(duì)坐標(biāo)移動(dòng)
G54、G55、G56、G57、G58、G59:工作坐標(biāo)系
G61:路徑控制模式
G80:運(yùn)動(dòng)模式取消
G90、G91:距離模式
G91.1:弧形 IJK 距離模式
G92:坐標(biāo)偏移
G92.1:清除坐標(biāo)系偏移
G93、G94:進(jìn)給率模式
M0、M2、M30:程序暫停和結(jié)束
M3、M4、M5:主軸控制
M7*, M8, M9:冷卻液控制
M56*:停車運(yùn)動(dòng)超控控制
(*) 表示默認(rèn)情況下未在 config.h 中啟用的命令。
早期,基于 Arduino 的 CNC 控制器沒(méi)有加速計(jì)劃,如果沒(méi)有某種緩動(dòng),就無(wú)法全速運(yùn)行。Grbl 具有前瞻性規(guī)劃器的持續(xù)加速管理解決了這個(gè)問(wèn)題,并已在微控制器 CNC 世界的任何地方得到復(fù)制,從 Marlin 到 TinyG。Grbl 有意使用更簡(jiǎn)單的恒定加速度模型,這對(duì)于家用 CNC 而言綽綽有余。正因?yàn)槿绱?,我們能夠投入時(shí)間優(yōu)化我們的規(guī)劃算法,并確保動(dòng)作穩(wěn)固可靠。當(dāng)我們認(rèn)為關(guān)鍵的所有功能集的安裝完成并且不再需要我們修改我們的規(guī)劃器以適應(yīng)它們時(shí),我們打算研究和實(shí)施更先進(jìn)的運(yùn)動(dòng)控制算法,通常只為進(jìn)給率非常高的機(jī)器(即取放)或生產(chǎn)環(huán)境中的機(jī)器保留。最后,這里有一個(gè)鏈接描述了我們高速轉(zhuǎn)彎算法的基礎(chǔ),因此運(yùn)動(dòng)可以輕松進(jìn)入最快的進(jìn)給率,并在急轉(zhuǎn)彎之前制動(dòng),以實(shí)現(xiàn)快速但無(wú)抖動(dòng)的操作。
我們?cè)O(shè)計(jì)有限的 G 代碼支持。這使 Grbl 源代碼保持簡(jiǎn)單、輕量和靈活,因?yàn)槲覀儗⒗^續(xù)開發(fā)、改進(jìn)和維護(hù)每個(gè)新功能的穩(wěn)定性。Grbl 支持 CAM 工具輸出中遇到的所有常見操作,但讓一些人類 G 編碼器感到沮喪。沒(méi)有變量、沒(méi)有刀具數(shù)據(jù)庫(kù)、沒(méi)有函數(shù)、沒(méi)有固定循環(huán)、沒(méi)有算術(shù)和沒(méi)有控制結(jié)構(gòu)。只是基本的機(jī)器操作和功能。任何更復(fù)雜的東西,我們認(rèn)為接口可以很容易地處理它們并將它們轉(zhuǎn)換為 Grbl。
另一個(gè)巨大的更新!這個(gè)版本包括了最后剩下的優(yōu)先功能,這些功能長(zhǎng)期以來(lái)一直在待辦事項(xiàng)列表中。以下是新更改的摘要:
實(shí)時(shí)超馳:通過(guò)進(jìn)給、快速、主軸速度、主軸停止和冷卻液切換控制立即改變機(jī)器運(yùn)行狀態(tài)。這個(gè)很棒的新功能只在工業(yè)機(jī)器上很常見,通常用于在作業(yè)運(yùn)行時(shí)優(yōu)化速度和進(jìn)給。大多數(shù)愛好 CNC 都試圖模仿這種行為,但通常有大量的滯后。Grbl 在幾十毫秒內(nèi)實(shí)時(shí)執(zhí)行覆蓋。
慢跑模式:新的慢跑命令獨(dú)立于 G 代碼解析器,因此解析器狀態(tài)不會(huì)被改變,如果沒(méi)有正確恢復(fù)會(huì)導(dǎo)致潛在的崩潰。包含有關(guān)其工作原理以及如何通過(guò)操縱桿或旋轉(zhuǎn)撥盤以低延遲、令人滿意的響應(yīng)來(lái)控制您的機(jī)器的文檔。
激光模式:新的“激光”模式將使 Grbl 通過(guò)連續(xù)的 G1、G2 和 G3 命令隨著主軸速度的變化而連續(xù)移動(dòng)。當(dāng)“激光”模式被禁用時(shí),Grbl 將改為停止以確保主軸正常加速。主軸速度覆蓋也適用于激光模式,因此您可以在工作期間根據(jù)需要調(diào)整激光功率。通過(guò) $ 設(shè)置在“激光”模式和“正?!蹦J街g切換。
動(dòng)態(tài)激光功率隨速度縮放:如果您的機(jī)器加速度較低,此選項(xiàng)將根據(jù) Grbl 的行進(jìn)速度自動(dòng)縮放激光功率,因此當(dāng)您的 CNC 必須轉(zhuǎn)彎時(shí),您不會(huì)有燒焦的角落!M4啟用激光模式時(shí),由主軸 CCW 命令啟用。
睡眠模式:Grbl 現(xiàn)在可以通過(guò) $SLP 命令進(jìn)入“睡眠”狀態(tài)。這將禁用一切,包括步進(jìn)驅(qū)動(dòng)程序。當(dāng)您將機(jī)器無(wú)人看管并想要自動(dòng)關(guān)閉所有設(shè)備時(shí),這很高興。只有一個(gè)復(fù)位退出睡眠狀態(tài)。
顯著的界面改進(jìn):調(diào)整以提高整體性能,包括更多實(shí)時(shí)數(shù)據(jù),并簡(jiǎn)化維護(hù)和編寫 GUI?;趤?lái)自多個(gè) GUI 開發(fā)人員的直接反饋和基準(zhǔn)性能測(cè)試。注意:GUI 需要專門更新其代碼以與 v1.1 及更高版本兼容。
新的狀態(tài)報(bào)告:為了說(shuō)明額外的覆蓋數(shù)據(jù),狀態(tài)報(bào)告已經(jīng)過(guò)調(diào)整以將更多數(shù)據(jù)塞入其中,同時(shí)仍然比以前更小。包括文檔,概述了它是如何改變的。改進(jìn)的錯(cuò)誤/警報(bào)反饋:所有 Grbl 錯(cuò)誤和警報(bào)消息都已更改為提供代碼。每個(gè)代碼都與一個(gè)特定的問(wèn)題相關(guān)聯(lián),因此用戶無(wú)需猜測(cè)即可確切知道問(wèn)題所在。文檔和易于解析的 CSV 包含在 repo 中。
擴(kuò)展 ASCII 實(shí)時(shí)命令:所有覆蓋和未來(lái)的實(shí)時(shí)命令都在擴(kuò)展 ASCII 字符空間中定義。不幸的是,在鍵盤上不容易打字,但有助于防止來(lái)自具有這些字符的 G 代碼文件的意外命令,并為將來(lái)的擴(kuò)展提供大量空間。
消息前綴:來(lái)自 Grbl 的每種消息類型都有一個(gè)唯一的前綴,以幫助 GUI 立即確定消息是什么并相應(yīng)地對(duì)其進(jìn)行解析,而無(wú)需了解上下文。以前的界面有幾個(gè) GUI 實(shí)例必須弄清楚消息的含義,這使得一切變得比它需要的更復(fù)雜。新的 OEM 特定功能,例如安全門停車、單一配置文件構(gòu)建選項(xiàng)、EEPROM 限制和恢復(fù)控制,以及存儲(chǔ)產(chǎn)品數(shù)據(jù)信息。
新的安全門停車運(yùn)動(dòng)作為編譯選項(xiàng)。Grbl 將縮回,禁用主軸/冷卻液,并停在 Z max 附近?;謴?fù)后,它將以相反的順序執(zhí)行這些任務(wù)并繼續(xù)程序。高度可配置,甚至可以添加多個(gè)停車動(dòng)作。有關(guān)詳細(xì)信息,請(qǐng)參閱 config.h。
最大和最小主軸轉(zhuǎn)速的新“$”Grbl 設(shè)置。允許調(diào)整 PWM 輸出以更接近真實(shí)的主軸轉(zhuǎn)速。當(dāng)最大 rpm 設(shè)置為零或小于最小 rpm 時(shí),PWM 引腳 D11 將充當(dāng)簡(jiǎn)單的啟用開/關(guān)輸出。
將G28 和 G30 行為從 NIST 更新為 LinuxCNC G 代碼描述。簡(jiǎn)而言之,如果指定了中間運(yùn)動(dòng),則只有指定的軸將移動(dòng)到存儲(chǔ)的坐標(biāo),而不是像以前那樣所有軸。
大量的小錯(cuò)誤修復(fù)和重構(gòu),使代碼更加高效和靈活。
注意:Arduino Mega2560 支持已移至一個(gè)活躍的官方 Grbl-Mega 項(xiàng)目。所有新的發(fā)展都會(huì)在有意義的時(shí)候同步。
重要的:
默認(rèn)串行波特率現(xiàn)在是 115200?。◤?9600 起)
D11 上的 Z 軸限位輸入已與主軸啟用 D12 交換,以支持可變主軸 PWM 輸出。
無(wú)隊(duì)列狀態(tài):隊(duì)列由于冗余而被刪除。Holds 現(xiàn)在暫停 Grbl 并且只允許實(shí)時(shí)命令。循環(huán)啟動(dòng)恢復(fù),復(fù)位退出。
新的超平滑步進(jìn)算法:對(duì)步進(jìn)驅(qū)動(dòng)器的處理進(jìn)行全面檢查,以簡(jiǎn)化和減少每個(gè) ISR 滴答的任務(wù)時(shí)間。使用新的自適應(yīng)多軸步進(jìn)平滑 (AMASS) 算法進(jìn)行更平滑的操作,正如其名稱所暗示的那樣(有關(guān)詳細(xì)信息,請(qǐng)參閱 stepper.c 源代碼)。用戶應(yīng)該會(huì)立即看到他們的機(jī)器移動(dòng)方式和整體性能的顯著改進(jìn)!
穩(wěn)定性和魯棒性更新:此版本重點(diǎn)關(guān)注 Grbl 的整體穩(wěn)定性。計(jì)劃器和步驟執(zhí)行接口已經(jīng)完全重寫,通過(guò)引入一個(gè)中間步驟段緩沖區(qū)來(lái)實(shí)時(shí)“檢查”計(jì)劃器緩沖區(qū)中的步驟,以實(shí)現(xiàn)穩(wěn)健性和不可破壞性。這意味著我們現(xiàn)在可以無(wú)所畏懼地將 Grbl 推向最高極限。結(jié)合新的步進(jìn)算法和規(guī)劃器優(yōu)化,這在我們的測(cè)試中轉(zhuǎn)化為5 到 10 倍的整體性能提升!此外,據(jù)報(bào)道,穩(wěn)定性和穩(wěn)健性測(cè)試可以輕松完成 140 萬(wàn)(是的,百萬(wàn))行 G 代碼程序,就像冠軍一樣!
(x4)+ 更快的規(guī)劃器:規(guī)劃計(jì)算通過(guò)優(yōu)化端到端操作改進(jìn)了四倍或更多,其中包括簡(jiǎn)化計(jì)算和引入規(guī)劃器指針來(lái)定位緩沖區(qū)中不可改進(jìn)的部分,而不是浪費(fèi)循環(huán)重新計(jì)算它們。
可變主軸速度輸出:為“S”G 代碼命令啟用硬件 PWM 輸出。注意:此功能需要與 Z-limit D11 引腳和主軸啟用 D12 引腳進(jìn)行引腳交換,以訪問(wèn)引腳 D12 上的硬件 PWM?,F(xiàn)在在 D12 上的 Z 限位銷應(yīng)該像以前一樣工作。
可通過(guò) Arduino IDE 編譯?。?/b>現(xiàn)在可以下載和更改 Grbl 的源代碼,然后直接通過(guò) Arduino IDE 編譯和刷新,它應(yīng)該適用于所有平臺(tái)。有關(guān)如何執(zhí)行此操作的詳細(xì)信息,請(qǐng)參閱 Wiki。
G 代碼解析器大修:從頭開始完全重寫,100% 符合 G 代碼標(biāo)準(zhǔn)*。(* NIST 標(biāo)準(zhǔn)的部分內(nèi)容有些過(guò)時(shí)且隨意,因此我們更改了一些小東西以使其更有意義。源代碼中概述了差異。)我們還采取了一些措施來(lái)分解 G 代碼解析器分成不同的單獨(dú)任務(wù),這是未來(lái)一些開發(fā)理念和改進(jìn)的關(guān)鍵。
獨(dú)立的加速度和速度設(shè)置:每個(gè)軸都可以定義獨(dú)特的加速度和速度參數(shù),Grbl 將根據(jù)行進(jìn)的方向自動(dòng)計(jì)算通過(guò)路徑的最大加速度和速度。
軟限制:在執(zhí)行之前檢查任何運(yùn)動(dòng)命令是否超出工作空間限制,如果檢測(cè)到則發(fā)出警報(bào)。
探測(cè):現(xiàn)在支持 G38.2、G38.3、G38.4 和 G38.5 直探頭 G 代碼命令,并通過(guò) A5 引腳連接。
刀具長(zhǎng)度偏移:如果沒(méi)有刀具長(zhǎng)度偏移 (TLO),探測(cè)就沒(méi)有意義,所以我們添加了它!現(xiàn)在支持 G43.1 動(dòng)態(tài) TLO(由 linuxcnc.org 描述)和 G49 TLO 取消命令。G43.1 動(dòng)態(tài) TLO 的工作方式與普通 G43 TLO(不支持)類似,但需要附加一個(gè)帶有偏移值的附加軸字。我們這樣做是為了讓 Grbl 不必在其內(nèi)存中跟蹤和維護(hù)刀具偏移數(shù)據(jù)庫(kù)。也許在未來(lái),我們會(huì)支持一個(gè)工具數(shù)據(jù)庫(kù),但不支持這個(gè)版本。
改進(jìn)的圓弧性能:圓弧半徑越大,Grbl 跟蹤它的速度就越快!我們現(xiàn)在根據(jù)弧弦公差定義弧,而不是固定的段長(zhǎng)度。這會(huì)自動(dòng)縮放弧段長(zhǎng)度,以使該段與真實(shí)弧的最大徑向誤差永遠(yuǎn)不會(huì)超過(guò)超精確默認(rèn)值 0.002 毫米的弦公差值。
新的 Grbl 模擬器?。ㄓ葽jgeisler 和@ashelly 提供):Grbl 主要源代碼的完全獨(dú)立包裝,可以在計(jì)算機(jī)上編譯為可執(zhí)行文件。不需要Arduino。就像在 Arduino 上一樣簡(jiǎn)單地模擬 Grbl 的響應(yīng)。
CPU 管腳映射:為了使 Grbl 與其他 AVR 架構(gòu)(例如 1280 或 2560)兼容,創(chuàng)建了一個(gè)新的 cpu_map.h 管腳配置文件以允許為它們編譯 Grbl。這是當(dāng)前用戶支持的,因此您的里程可能會(huì)有所不同。如果您遇到錯(cuò)誤,請(qǐng)告訴我們或更好地向我們發(fā)送修復(fù)程序!提前致謝!
可配置的實(shí)時(shí)狀態(tài)報(bào)告:用戶現(xiàn)在可以自定義 Grbl 在發(fā)出“?”時(shí)報(bào)告的實(shí)時(shí)數(shù)據(jù)類型。狀況報(bào)告。這包括以下數(shù)據(jù):機(jī)器位置、工作位置、計(jì)劃緩沖區(qū)使用情況、串行 RX 緩沖區(qū)使用情況。
更新的歸位例程:無(wú)論限位開關(guān)位置如何,都在所有負(fù)空間中設(shè)置工作空間體積。在專業(yè) CNC 上很常見。但是,行為可能會(huì)被編譯時(shí)選項(xiàng)改變?,F(xiàn)在直接連接到主規(guī)劃器和步進(jìn)模塊,以減少閃存空間并在搜索期間實(shí)現(xiàn)最大速度。
CoreXY 支持:Grbl 現(xiàn)在在介紹級(jí)別上支持 CoreXY 運(yùn)動(dòng)學(xué)。大多數(shù)功能已經(jīng)過(guò)驗(yàn)證可以工作,但這里或那里可能存在錯(cuò)誤。請(qǐng)報(bào)告您發(fā)現(xiàn)的任何問(wèn)題!
安全門支持:現(xiàn)在支持安全門開關(guān)。Grbl 將強(qiáng)制進(jìn)給保持,關(guān)閉主軸和冷卻液,并等待門開關(guān)關(guān)閉并且用戶發(fā)出恢復(fù)?;謴?fù)后,主軸和冷卻液將在可配置的延遲后重新通電并繼續(xù)。對(duì)于需要此功能的 OEM 很有用。
完全限制和控制引腳可配置性:限制和控制引腳操作現(xiàn)在可以由 Grbl 解釋,但您愿意,啟用或禁用內(nèi)部上拉電阻,或者讀取高電平或低電平作為觸發(fā)器。這應(yīng)該涵蓋所有接線和 NO 或 NC 開關(guān)情況。
可選限位引腳共享:可以組合限位開關(guān)以共享相同的引腳,以騰出寶貴的 I/O 引腳用于其他用途。組合時(shí),用戶必須調(diào)整 config.h 中的歸位周期掩碼,以不將軸同時(shí)歸位到共享引腳上。不用擔(dān)心;?硬限制和歸位周期仍然像以前一樣工作。
其他編譯時(shí)功能選項(xiàng):限制/控制引腳狀態(tài)報(bào)告、行號(hào)跟蹤、實(shí)時(shí)進(jìn)給率報(bào)告等。
自 v0.7 以來(lái)發(fā)生了很多事情。我們正在努力為古老的 Arduino 創(chuàng)建一個(gè)簡(jiǎn)單但功能強(qiáng)大的 CNC 控制器。這是 v0.8 的新內(nèi)容列表。
多任務(wù)運(yùn)行時(shí)命令:帶受控減速的進(jìn)給保持,不會(huì)丟失位置,進(jìn)給保持后恢復(fù),重置和狀態(tài)報(bào)告。
高級(jí)歸位循環(huán):為不同類型的機(jī)器提供許多配置選項(xiàng),當(dāng)它們從哪個(gè)軸移動(dòng)到它們的搜索方向時(shí)。限位開關(guān)也可以用作硬限位。
永久坐標(biāo)系數(shù)據(jù):工作坐標(biāo)系 (G54-G59) 和預(yù)定義位置 (G28,G30) 保存在 EEPROM 中,因此它們將始終按照您上次設(shè)置的方式設(shè)置。
檢查 G 代碼模式:設(shè)置 Grbl 以在不移動(dòng)任何內(nèi)容的情況下運(yùn)行您的程序,因此您可以檢查是否有任何 Grbl 可能不喜歡的錯(cuò)誤。
改進(jìn)的反饋:報(bào)告實(shí)時(shí)位置、Grbl 正在做什么、G 代碼解析器狀態(tài)和存儲(chǔ)的坐標(biāo)偏移值。
啟動(dòng)塊:在啟動(dòng)或重置時(shí)自動(dòng)神奇地運(yùn)行用戶 G 代碼塊??捎糜谠O(shè)置默認(rèn)值。
引腳輸出:循環(huán)啟動(dòng)、進(jìn)給保持和中止現(xiàn)在被引腳輸出到 A0、A1 和 A2 引腳。只需將常開開關(guān)連接到引腳和接地即可。就是這樣!
更強(qiáng)大的 G 代碼解析器,帶有錯(cuò)誤檢查反饋。
以及更多!
Grbl v0.8(及更早版本)在 MIT-License 下分發(fā),由 Simen Svale Skogsrud、Sungeun K. Jeon 博士和 Jens Geisler 開發(fā)。
Grbl 在 GPLv3 許可下分發(fā),由 Sungeun K. Jeon 博士開發(fā)。有關(guān)更多詳細(xì)信息,請(qǐng)參閱許可。