網頁

基於GRBL的CNC之Arduino控制器篇



GRBL是一款免費開源的機器控制軟體,可以發送Gcode並用於控制機器之移動,並且可以直接運行在Arduino上。這款軟體經過多年的開發,目前已經到了v1.1版本,能夠支援的指令以及功能也不斷的在增加。在這裡可以下載到其編譯好的Hex檔,並使用國外某網友開發的Xloader燒錄軟體並選好COM port與baud rate就能很方便的燒錄GRBL至Arduino UNO板內。

比較值得注意的是,下面兩張圖是GRBL在v0.8與v0.9中的重大改變(在硬體腳位改變應該可以算得上是重大改變了),在這篇Cyclone PCB milling Double-Sided 雕刻雙層板的文章中提到,作者不滿大陸大量生產該Shield轉板,所以在v3.1後不再提供電路圖。所以目前在市面上買到的比較多都還是Shield v3.0的版本,也就是下圖左邊的GRBL v0.8的舊版本腳位,不過其實直接拿舊的轉板來用也可以,只是腳位要自己改一下就好,把Spindle Enable與Limit Z-Axis對調即可,我認為作者會這樣對調其實也是逼不得已,他在網站中提到(Z-Axis limit input on D11 has swapped with spindle enable D12 to support variable spindle PWM output.),因為原先Spindle Enable所使用的D12腳並不是PWM輸出腳,如果在新版中為了支持PWM轉速調整,就必須更改腳位才行。

(對了,記得A5腳的探針(Probe)功能是v0.9後才有的,在v0.8中的A5腳仍是保留的。)

 
圖片來源:https://github.com/grbl/grbl/wiki/Connecting-Grbl

關於Shield v3.0轉換板的問題,我在之後會另外再寫一篇文章做介紹。這篇文章主要是要解釋GRBL在Arduino中控制的一些大綱,至於新版的一些新功能其實我自己也沒有去研究,但就基本的功能而言其實GRBL v0.8就已經相當的好用。

首先我們必須要把轉換板跟UNO板給切割開來,因為轉換板就只是一張幫你配好線的板子,上面也沒有任何IC甚麼的(除了A4988),所以一樣可以自己依照其電路配一張電路板,只是會很麻煩而已。有了這個概念之後,弄懂了Arduino每個腳位的功能才會更能知道轉接板的功能。

而下面我將依序介紹每個腳位所做的工作(以GRBL v0.8為主做介紹)
D0、D1:
這兩支腳分別為TX RX,在傳送Gcode時要使用,所以不能占用它。

D2~4 Step Pulus X,Y,Z-Axis:
這3支腳位用於輸出步進馬達的脈波數,一個脈波(LOW→HIGH→LOW)等於步進馬達的一步距,這個計算方式在步進馬達的部分再詳細的解釋。

D5~7 Direction X,Y,Z-Axis:
這3支腳用於控制步進馬達的正逆轉,在A4988的控制晶片上的DIR腳,輸出HIGH與LOW會導致馬達有不一樣的旋轉方向,其實不用太刻意的去記HIGH或LOW哪一個是正逆轉,如果走的方向跟你在控制介面上按的不同方向,關機然後把步進馬達的4PIN接頭轉180度再插上就好了,效果跟在GRBL上設定$3的dir port invent mask是一樣的(之後再詳細介紹)。不過在此還是做個筆記,當GRBL中的$3設定皆無反相時,逆方向移動會輸出HIGH;正方向移動則輸出LOW,並且在移動完後仍保持該電位。

D8 Stepper Enable/Disable:
步進馬達的開關腳,在A4988的驅動板上有一支ENABLE腳,在Shield v3.0板子上平常時有一顆10k的上拉電阻接到VCC(這也是轉換板上唯一的電阻),平時這支訊號腳是保持HIGH的狀態,也因此在平時馬達是保持不過電的狀態,當馬達移動時這支訊號腳會輸出LOW訊號,因此A4988的晶片開啟輸出,而移動完成訊號腳又隨即變為HIGH,馬達關閉輸出。當按下暫停、停止、限位開關觸發或是重置時,此pin腳會馬上變成HIGH關閉馬達以免發生危險。

D9~D11 Limit X,Y,Z-Axis:
這3支腳用於限位開關的讀取,預設的狀態在訊號腳與GND導通時為觸發(triggered),而如果安裝的是光學限位開關,需要在訊號為HIGH時為觸發,則將$5改為1即可,這樣的邏輯就會讓GRBL知道當訊號腳為HIGH時觸發。

D12 Spindle Enable:
這是用於控制主軸開關,在v0.8這個版本中只有開跟關而已,如果需要調速的話要安裝比較後面的版本,將會變成可變主軸速度控制(Variable spindle pwm)。當輸入M3(CW)或M4(CCW)的主軸正逆轉時都會輸出HIGH的訊號,這樣一來就可以接上繼電器用於控制主軸的開關。

D13 Spindle Direction:
這個指令當輸入M3(CW)時訊號輸出LOW;當輸入M4(CCW)時訊號輸出HIGH,一般蠻少用到這個功能的,因為一般的切削、雷射與寫字等等功能主軸逆轉蠻少用的,多半都還是用M3的指令開啟主軸。

A0 Reset/Abort:
這個按鈕說是能停止Gcode(而不失去位置),但我每次按下後就整個GRBL都當掉,序列也沒辦法發送訊息,到目前還不太"確定"這個按鈕到底該怎麼使用,可能還要多了解一下。

A1 Feed/Hold:
暫停的功能,當運行Gcode到一半想要暫停就觸發這個按鈕。

A2 Cycle Start/Resume:
暫停後想要繼續執行就觸發這個按鈕就可以繼續跑。

A3 Coolant Enable:
這個指令為切削液開關,當Gcode輸入M8時可以開啟為HIGH,而輸入M9時則關閉輸出LOW。雖然是切削液開關,但這種DIY機器裝切削液的人少之又少,畢竟裝切削液在機器上要大幅度的改造,所以這個開關其實可以拿來當風槍、吸塵器的開關,尤其是在木工切削的部分,這功能相當的不錯。

A4、A5:
這兩個接腳可以做為I2C的串列通訊匯流排接腳,作者保留下來規劃之後能作一些其它的擴展。而在v0.9的版本之後,作者把A5腳作為Probe的探測腳,就像自動調整水平的功能那樣,可以用於自動探測加工面,不過這個功能我還不太熟悉,要再多做了解。

以上是關於GRBL在Arduino UNO板上腳位的大致介紹,有些功能還是不太了解,可能要等實機操作後才會比較清楚其運作原理,但大致了解其輸出之後,在接線時就會比較得心應手一些。