一般我們在進行三軸歸零的指令(G-codes 中的 G28),Z-min 的限位開關被觸發後,馬達不會再繼續往下動,而該高度也會被記錄為 Z軸的最低點「0」,之後 Z 軸的移動操作,照說都不會比該點要低。
在 Marlin 「Bed Auto Leveling」的設定參數中有個「Z_PROBE_OFFSET_FROM_EXTRUDER」,這個參數可以用來設定 Z 軸感應器觸發時,印表機噴頭距離列印平台有多遠,當我們在進行完「HOME」(G-codes 中的 G28) 以後,它會幫我們自動設定目前 Z 的座標為 「Z_PROBE_OFFSET_FROM_EXTRUDER」乘以負一的高度。這樣一來,感應開關被觸發時,Z 不再是「0」了,下一次執行移動 Z 軸的 G-codes (例如:「G1」)時,Z軸位置就會參考這個值,讓噴頭可以由最佳的高度開始列印。
如何找出最佳的「Z_PROBE_OFFSET_FROM_EXTRUDER」設定值呢?當然不可能拿尺量囉!我是用底下的方法找的:
調整感應開關位置
首先要調整 Z-min 的感應開關 (本文中用的是電容式近接開關) 安裝位置,讓感應器觸發時,印表機的噴頭是高於平台,接近但沒碰到列印平台。
HOME (G28)
接著先執行一次 X、Y、Z 的 HOME (G-code : 「G28」),讓三軸歸零。更改 Z 位置 (G29)
然後,我們必須使用到「G92」的 G-code,因為在歸零後,噴頭已經在最低的位置( 0 ),我們無法以一般移動指令讓噴頭更低。但是「G92」可以讓我們設定噴頭目前到底是在哪兒(這個 G-code 只會改數字,不會轉動任何馬達),只要目前的 Z軸座標大於零,我們又可以繼續用移動的指令來轉動步進馬達,移動噴頭了 (嗯~機器果然很好騙,只認數字的)。例如送出底下的 G-code 給印表機:
G92 Z10
假設使用的單位是 mm ,印表機就認定目前噴頭在 Z 軸高度 10mm ,雖然在執行上面的「G92」G-code 之前, Z 軸高度是零,執行完已經變成 10,這樣子,即使 Z-min 限位開關已觸發了,噴頭仍然可以繼續往下移動。
調整噴頭移至最佳高度
再來,我們就可以利用列印程式的「手動模式」或是 G-codes,慢慢調低噴頭高度,搭配「A4 影印紙」或是個人習慣的調整方式,找出印表機噴頭的最佳高度。找到後,計算的工作就可以登場了。計算 Z_PROBE_OFFSET_FROM_EXTRUDER
以前面「G92 Z10」的例子來說,我們是由「10mm」當基礎,往下找到最佳的高度,如果此時 Z 軸的高度是 9.67mm (可以看印表機的 LCD 或是執行「M114」的 G-code 來查詢) ,計算一下目前的高度減掉原來的高度:9.67 - 10 = -0.33
上面的計算結果「-0.33」就是 Marlin 「Bed Auto Leveling」的「Z_PROBE_OFFSET_FROM_EXTRUDER」應該填入的值。
最後我們在 Marlin Configuratiion.h 中找到「Z_PROBE_OFFSET_FROM_EXTRUDER」,修改為計算完的最佳值,重新編譯並 upload 到印表機裡。上載完畢就可以準備進行測試列印囉!
測試
修改完的靭體會有什麼變化呢?印表機在執行完 HOME (G-code 「G28」) 以後,如果查看 LCD 的畫面上,或是執行 G-code 「M114」並觀察回應的各軸座標訊息,都可以看到 Z 並不是 0 ,而是 「Z_PROBE_OFFSET_FROM_EXTRUDER」設的定值乘以負一。以前面的例子來說,可以看到 Z 為「0.33」。所以,當我們執行底下的 G-code 指令:
G1 Z0
因為狀態上,限位開關觸發點的 Z 座標是 0.33,而「G1 Z0」是要移到較低的座標 0 ,所以噴頭會往下移動 0.33mm 才停止。再次觀察LCD畫面 (或是執行 G-code M114),原本 Z 的 0.33 變成新的座標 0 了。
這個方法讓噴頭可以修正到最佳的位置,又不用調開關位置調到快抓狂,不由的又再度佩服設計這個功能的人了。
Q & A
- Q : 列印平台上有那麼多點,要找哪一點來「計算」「Z_PROBE_OFFSET_FROM_EXTRUDER」?
A:如果平台是平的,找哪一點都沒問題,像我的印表機是中央稍高,周圍略低,而平常大多用中間在列印,因此,就將噴頭先移到列印平台中央,才開始找最佳高度。主要是要計算噴頭和開關觸點的差距,其它各點應該差不多。 - Q : 硬體的部份,為什麼要讓噴頭比平台略高?
A : 比平台高主要是不希望歸零(HOME)時,噴頭去撞平台。所以在 Marlin 「Z_PROBE_OFFSET_FROM_EXTRUDER」的註解中就說「-below (always!)」,開關的觸發點時,噴頭是高於平台的。「墜機」可是不好玩的! - Q : 感應器(開關) 上沒有 LED 顯示,怎麼知道「觸發」了沒?
A : 可以使用 G-code 「M119」來查詢,如果顯示「TRIGGERED」表示已觸發,顯示狀態為「open」則是未觸發。
本文使用的 G-codes
- G28 : 讓各軸歸零。各軸的馬達會轉動,直到觸發限位開關才停止。
- M114 : 查詢目前的位置。馬達不會有任何動作。
- M119 : 查詢各限位開關的觸發狀態。馬達不會有任何動作。
- G92 : 設定目前的位置,後面可以指定要設定哪一軸的位置。馬達不會有任何動作。
- G1 : 轉動馬達,將噴頭移動到指定的位置。後面可以接 Xn Zn Yn (n 為座標)。
我剛好在做平台自動校正設定,碰到一些問題,剛好爬文看到你的分享.希望你不吝賜教.Z Probe我是設了,但有點想不通,你用紙將噴頭歸零後,再設G92 Z10在平台上,但是真實上你怎麼還能調低 Z 軸低於平台?
回覆刪除為了避免撞車平台,我用#define MANUAL_Z_HOME_POS 設短40mm, 所以零點高於平台40mm, 但我觀察LCD數據, Z軸竟跑到-20mm,我要設哪裡使它不會低於零. 我現在最頭痛是 Z-Probe都不會擺下來做測試,LCD Z= - 20,在我的Z Offset 4.2時都沒擺下來. 我要改哪裡? 因為我試過那些Offset 值,但是都是-20, -26, -16....我會繼續試試.只是有人指導會快些. 謝謝!
Mark 您好:
刪除建議您檢查一下 Z_PROBE_OFFSET_FROM_EXTRUDER , 如果 HOME 以後, LCD 顯示的 Z 值是 -20 , 表示有設了 Z_PROBE_OFFSET_FROM_EXTRUDER, 因為 Z=-20 , 開始列印時, 噴頭會先擡高 20 , 反之, 如果顯示的 Z 為正值, 噴頭會下壓。
謝謝你的回覆! 我是用這版固件https://github.com/RichCattell/Marlin
回覆刪除我設了:
// Z-Probe variables
// Start and end location values are used to deploy/retract the probe (will move from start to end and back again)
#define Z_PROBE_OFFSET {-31, -10, -3.4, 0} // X, Y, Z, E distance between hotend nozzle and deployed bed leveling probe.
#define Z_PROBE_DEPLOY_START_LOCATION {20, 50, 30, 0} // X, Y, Z, E start location for z-probe deployment sequence
#define Z_PROBE_DEPLOY_END_LOCATION {5, 50, 30, 0} // X, Y, Z, E end location for z-probe deployment sequence
#define Z_PROBE_RETRACT_START_LOCATION {50, 60, 20, 0} // X, Y, Z, E start location for z-probe retract sequence
#define Z_PROBE_RETRACT_END_LOCATION {50, 60, 10, 0} // X, Y, Z, E end location for z-probe retract sequence
因為我的Z-Probe比噴頭低3.4mm, 但是執行自動校正時,LCD顯示-20, 而噴頭確實低於零點20mm.我會再試調其他參數看能否調高此值.
我還是頭痛,Z-Probe部會放下來. 我看程式,它有deploy的命令但Z Probe卻不放不知是哪個參數影響它的作動時間?
Mark 您好:
刪除哈~ 這一版的 firmware 參數我也沒搞懂, 後來放棄。我的 Kossel Mini 型的用較舊的 firmware :
https://github.com/jcrocholl/Marlin
而 Prusa i3 則用
https://github.com/MarlinFirmware/Marlin
本文的筆記是 Prusa i3 的。
謝謝你的回覆!我發現每個版本都有一些問題,compiled 時都有一些coding問題以致無法完成compile. 我再試試看或找找其他版本!謝謝你的幫助!
刪除