網頁

基於GRBL的CNC之限位開關篇



在DIY的CNC工具機中,大部分所使用的是開迴路的一個控制系統,意味著步進馬達與機台並不知道目前所在的XYZ位置為何,而是依靠著輸出的控制訊號來計算目前的位置,一旦步進馬達失步或機台卡住,小則加工失準、斷刀,大則可能會讓機台損壞(撞車)甚至造成人員的受傷。

為了防止這個問題,在GRBL的CNC機台上有3個軸向(XYZ)的限位開關接腳,接上限位開關後有兩個用途:
1.執行回點賦歸回到機器原點,可以讓機台回到機器原點(指令$H),每一台機器的機器原點都是固定的。
2.防止機器在運轉的過程中超行程去碰到邊界,一旦在運轉的過程中碰到限位開關,機器就會停止移動並關閉步進馬達,避免造成危險。



機器原點與工作原點不同,機器原點在每一台機器都是固定位置的,在進行機械原點回歸時,機器會把XYZ慢慢移動到觸碰或感應到限位開關為止,並且將該點設為機器原點。
而限位開關的目的除了機械原點的復歸,同時也代表著機器硬體行程的限制,舉例GRBL的系統來說,當任一軸在移動的過程中若碰觸到限位開關則會停止移動,避免因為過行程而造成撞車或危害。

一般而言一個軸上會有兩個限位開關,用來限制最小與最大的位置,但是在GRBL的設計上只有XYZ三腳,每一軸都共用兩顆限位開關,分別代表最小與最大值(例如:X-與X+),這樣的設計其實也不錯,因為機器不可能同時撞到最小跟最大的限位開關,反正控制器只要知道撞到任何一個限位開關就要停下來。

而工作原點則是在機器的行程內,使用者自行定義的一個位置,用來對後續的加工進行基準設定等等,舉例來說將被加工物的Z軸表面設定為0,向下加工為負而提刀為正,或是在工件左下角設定為X0,Y0,這樣在對刀的時候比起使用絕對座標來計算相對的方便。尤其是有些雷射雕刻的軟體將雕刻的圖片左下角設為X0,Y0,這時我們只要把雷射對到加工物要雕刻的位置之左下角,同時歸零工作原點這樣子會快速與方便的多。

但是要注意到的是,機器原點不一定就是在左下角,也有左上、右上、右下都是有可能的,這個要試機器的配置與設定而決定。




限位開關基本上就是一顆按鈕或光學遮斷開關,而GRBL的程式我是燒錄在Arduino UNO控制板上,因此首先我們要了解Arduino按鈕作動的邏輯以及原理。

在Arduino的按鈕實驗中,多半都需要上拉或下拉電阻搭配按鈕的配置,用於控制器讀取HIGH與LOW的判別,但如果這樣做的話會讓整個電路變得很複雜,因此Arduino的程式內有一個功能叫做Input Pullup(內置上拉電阻),可以將訊號腳在空接時有上拉電阻的效果(空接時為HIGH),這有什麼好處呢?

用了這個指令之後就可以只用一個按鈕來達到限位開關觸發的效果,把按鈕接在控制板的GND與訊號腳上,當不按時為訊號讀取為HIGH,當按鈕碰到時訊號就變成LOW。試想一台CNC雕刻機就有5~6顆的限位開關,若是每一個開關都要加上一顆電阻還要外拉一條5V的電線到限位開關處,這樣在配線上會變得很雜亂。

也因為加了Input Pullup的訊號與GND短路後會等於LOW的效果,因此在GRBL的預設中也是以這樣的設定為主,順道一提在3D印表機的Marlin韌體也是這樣子設計的。


說了這麼多,讓我來解釋一下本文封面的圖片,看看兩種限位開關有何不同。
DIY常用的限位開關主要分為微動開關型(接觸式)與光學開關型(非接觸式)兩種。

微動開關型的限位開關長的如下圖所示,而電路圖的部分在這個網頁上可以找到。
MakerBot Replicator 1 Upgrades and Repairs



這個模組當平常不按的時候紅色的LED燈熄滅,按下時紅色LED燈點亮,並且訊號與GND導通使得訊號腳讀取到LOW的訊號。其實5V的電可以不用接,如果不買模組的話拿一個限位開關並焊上微動開關的COM與NO腳,並且連接到控制板的GND與訊號腳(不分極性),按下時導通也會達到一樣的效果,我的3D印表機就這樣做的。這個模組多了一顆100nf的電容連接訊號與接地,可以達到防抖動(Debounce)的效果。



(只是在連結中的電路圖我看了一下,在平常開路時5V跟訊號腳是短路的,這樣子沒有經過限流電阻久了不會讓訊號腳壞掉嗎? 還是我可能搞混電路板的佈線了.....?)
Topic: qq push buttons without resistors? 
後來發現這個問題是我多慮了,當Arduino的訊號腳被設定為輸入訊號時,有相當高的輸入電阻,所以直接通+5V的電也不會有事,但如果PIN腳被設定為OUTPUT,就有燒毀的可能性。所以這個模組的佈線是正確的,只是要注意不要插錯訊號腳了。


接著是光學的限位開關(非接觸式),在線路圖的部分可以在這個拍賣網頁上找到Optical End Stop / Limit Sensor Module。這種模組在循跡避障車以及物體偵測常常用到,它的原理是一顆紅外線LED(E端)與一顆紅外線接收器(D端)。



綠色箭頭處是上電後我用手機鏡頭拍攝到的LED紅外線光源(肉眼看不到),要注意的時有些手機的後鏡頭有紅外線濾鏡,所以我是用前鏡頭進行拍攝的。



平常沒有遮蔽時是導通的狀態,也就是訊號腳與GND連通,呈現低電位LOW的一個狀態,而平常時電路板上的LED燈也是亮著的,這一點跟上面的微動開關相同,總之就是燈亮了就是LOW



而當物體經過遮蔽時,5V與訊號腳導通,呈現高電位HIGH的狀態,同時板子上的燈熄滅。



了解了限位開關的運作原理之後,我們要在GRBL的網頁上找到關於限位開關的解釋:
By default, the limit pins are held normally-high with the Arduino's internal pull-up resistor. When a limit pin is low, Grbl interprets this as triggered. For the opposite behavior, just invert the limit pins by typing $5=1. Disable with $5=0. You may need a power cycle to load the change.
以上這句話是節錄至其網站上,大致意思是一般限位開關都是以通路時為HIGH,而接觸到限位開關時為LOW,這個就如同接觸式的限位開關邏輯相同。而有些人安裝的是光學是的限位開關,其邏輯就與GRBL預設的不同,因此要在設定值中將$5的布林值(Boolean)從0改成1,讓機器知道在沒碰到時是LOW,碰到時則為HIGH。

市面上有些CNC機器並沒有限位開關,因為有人的說法是機器原點在DIY的CNC機台並不重要,只要自己把機器移動到要加工的位置設定相對座標就好了,如此一來還可以免除掉一堆配線與按鈕的成本。

這樣的作法其實也沒有錯,但要記得的是這是在一般小型的機台上,當超出行程或撞車時因為步進馬達的動力不足,所以才會卡住不動,像寫字機或雷雕機那種輕負荷的就比較沒關係。萬一你的機台是比較大型,撞到會讓機器變形或發生危險的,我建議還是裝上限位開關做個保護比較好。

至於要選用光學還限位開關,我在拍賣網頁上有看到不錯的解釋:
機械式的優點是安裝比較簡單而且大多數人都使用這種開關,缺點是用久了可能會耗損,因為這種微動開關就像滑鼠的按鍵一樣,用久了可能會有接觸不良的問題產生。
而光學式的優點主要是因為非接觸式的關係所以壽命較長,但是安裝起來比較不容易,因為還要另外去設計感應閘的檔片,但光學的定位起來真的蠻有質感的就是。
(20230207補充:我自己後續的經驗是,如果用在震動頻繁的場合,用光學式的可能會比較好,之前在玩GRBL的時候常常突然跳車,後面想一想應該是主軸馬達震動造成的誤作動)