原本我在研究由舊滑鼠拆下來的紅外線開關,及以微動開關+伺服馬達的方案,後來東湖國中偉銘師送了一支電容式近接開關給我玩,焦點就放在這支非接觸式的近接開關,使用過後,體驗到了自動的好處。底下就將一些重點整理出來。
手上這一支近接開關型號為「LJC18A3-8-Z/BX」
- C : 感應方式為電容式
- 18 : 感應頭直徑 18mm
- A : 圓柱形
- 3 : 金屬外殼
- 8 : 動作距離,標準感測距離 8mm
- Z : 工作電壓 DC 6~36V
- B : 輸出型式為三線常開
- X : 輸出電流 NPN 200MA
「LJC18A3-8-Z/BX」是常開(Normal Open , NO)式的,跟我機器原有的 Z 軸限位開關的動作是一樣(未觸發時,「Signal」腳位保持高電位,觸發時「Signal」腳位為接近 0V 的低電位),這樣一來,Marlin 的設定檔中,要改的地方就較少一些囉!
先來看看電路的部份,近接開關的三條線和 RAMPS 控制板要如何接。基本上,在應用時有兩種架構方式:
- 架構一:完全取代原有的 Z 軸限位開關。
- 架構二:保留原來的 Z 軸限位開關,將電容式近接開關和原有的開關並接,也就是讓 Z 軸限位可以擁有兩個觸發的來源。
「架構一」必須要保證「LJC18A3-8-Z/BX」隨時都能在設定的距離內觸發,不然,噴頭已到最低點,卻因為感應器未觸發而繼續「下壓」列印平台,其結果應該會很慘。
因為我曾經有理線完,卻忘記將 Z 軸 Endstop 的線接上,就進行 AutoHome 程序的恐怖經驗,因此,目前採取的是「架構二」的方案,也就將近接開關和原有的微動開關並聯,調整時,故意把原來 Z 軸 Endstop 上的開關(微動開關),調整得比新加上的近接開關晚一點觸發(位置調低)。這樣子,當「LJC18A3-8-Z/BX」沒動作時,至少還有原有的限位開關當「保險」,避免噴頭「墜機」,把列印平台壓壞了。
架構一
如果想採取「架構一」的方案,接線的方式可以參考下列網址中附的圖:
除了近接開關,尚需用到一顆 15k ohm 和一顆 10k ohm 的電阻來做降壓和 pull-up 。雖然作者用的感應器是 PNP 常開型的「LJ12A3-4-Z/BY」,但是也適用於「LJC18A3-8-Z/BX」。
下圖是我實作的東西及與 RAMPS 連接的示意圖:
線路文字說明如下:
- 近接開關棕線(Vin) → RAMPS 12V AUX 正極
- 近接開關黑線(Output) → 串連 15k ohm 電阻 → RAMPS Zmin 的 Signal 腳位
- 近接開關藍線(GND) → RAMPS Zmin 的 GND 腳位
- 在 RAMPS Zmin Signal 和 RAMPS Zmin GND 之間加一顆 10k ohm 電阻 (Pull-up)
註:因為沒有 15k ohm 的電阻,拿了一顆 10k ohm 和一顆 5k1 ohm 串在一起。
架構二
架構二的應用方式是架構在已有的限位開關上,我原有的限位開關是常開型(NO),所以它實際動作時,微動開關應該只使用到「C」(下圖左側的腳位)和「NO」兩個腳位(下圖中間的腳位),「NC」(下圖右側的腳位)應該是使用不到。所以,首先將「NC」的腳位解焊,或是像我偷懶,剪開斷線;然後將近接開關的「黑線」接原來微動開關的「C」腳位(下圖左側的腳位),近接開關的「藍線」接原來微動開關的「NO」腳位(下圖中間的腳位)。
最後再將近接開關的「棕線」接到 RAMPS 的 12V (12V AUX) 正極上,即完成。
無論採用的是「架構一」或是「架構二」,記得要利用 G-Code 測試一下,在未觸發時,以「M119」的 G-Code 來觀察各個限位開關觸發的狀態,測試一下近接開關是否動作。
18mm近接開關架
確認電路的部份沒問題了,需要一個牢固開關架來固定我們的近接開關。台北市東湖國中偉銘老師設計了一個可以掛在 NEMA 17 馬達上的近接開關暨風扇架:
近接開關放到架子上後,我們必須調整它至合適的高度。我目前的做法是:
- 調整列印平台的四顆螺絲,確認列印平台台已和 X 軸平行。
- 將噴頭下降至距平台約一張名片的厚度(0.3mm)。
- 將近接開關放到架子上,以手持電線的方式(避免觸發),由上而下慢下降至剛好會觸發的高度,開始鎖緊近位開關的螺帽,抬高噴嘴高度 1mm 後,以0.1mm慢慢下降,再度測試是否在自己預設的高度時,剛好觸發近接關關;迫緊固定架後,反覆的測試觸發位置,直到穩定為止。
啟用 Marlin 的 Bed Auto Leveling
硬體的部份準備好了,接下來要修改 Marlin 的組態檔(Configuration.h、Configuration_adv.h),啟用並設定「Bed Auto Leveling」的相關選項,並重新編譯 Arduino MEGA 2560 的靭體,才能在列印時讓「G29」等相關指令有作用。
※ 先檢查一下 EndStops 的相關設定:
要有底下這行:
要有底下這幾行:
最主要的是「#define ENDSTOPPULLUP_ZMIN」這行一定要有。
因為我的限位開關和近接開關是 Normal Open (NO) 型的,所以底下的設定必須為「true」:
檢查底下這兩行的設定值:
※ 啟用「Bed Auto Leveling」的功能,將底下這行前面的註解符號(雙斜線)刪除:
修改 Configuration.h
※ 先檢查一下 EndStops 的相關設定:
要有底下這行:
#define ENDSTOPPULLUPS
要有底下這幾行:
#ifdef ENDSTOPPULLUPS
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
#define ENDSTOPPULLUP_XMIN
#define ENDSTOPPULLUP_YMIN
#define ENDSTOPPULLUP_ZMIN
#endif
最主要的是「#define ENDSTOPPULLUP_ZMIN」這行一定要有。
因為我的限位開關和近接開關是 Normal Open (NO) 型的,所以底下的設定必須為「true」:
const bool Z_MIN_ENDSTOP_INVERTING = true;
檢查底下這兩行的設定值:
#define Z_HOME_DIR -1
#define Z_MIN_POS 0
※ 啟用「Bed Auto Leveling」的功能,將底下這行前面的註解符號(雙斜線)刪除:
//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
變成
#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
將它的下一行加雙斜線註解掉,變成:
// #define Z_PROBE_REPEATABILITY_TEST // If not commented out, Z-Probe Repeatability test will be included if Auto Bed Leveling is Enabled.
※ 如果想要使用「G29」的平台自動補正功能,要依可列印範圍及近接開關安裝位置,修改偵測的範圍,可能需修改底下的設定:
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 170
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 170
以我的機器為例,近接開關安裝在噴頭的前面約 35mm,偏右約 30mm,如果設定的可偵測範圍太大,近接開關可能會突出列印平台無法觸發,或是安裝位置較底的吹物件風扇會撞到平台玻璃的固定夾,而造成憾事。所以保險一點的做法,就縮小四個 PROBE_BED_POSITION ,改為:
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 150
#define FRONT_PROBE_BED_POSITION 40
#define BACK_PROBE_BED_POSITION 160
#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // Probe on: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Probe on: -front +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // -below (always!)
哈!我都自己算好了,就通通設為零,改成:
#define X_PROBE_OFFSET_FROM_EXTRUDER 0
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0
註:在另一篇「雄 : 3DP : 近接開關距離與靭體設定調整」中補充「Z_PROBE_OFFSET_FROM_EXTRUDER」的使用。
※ 接下的幾個是在進行偵測時,Z 軸要先抬高多少的相關設定:
執行「G28」G-code (Auto Home)前,Z 軸要先抬高多少:
#define Z_RAISE_BEFORE_HOMING 4
執行「G29」G-code ,移動到第一點前, Z 軸要抬升多少:
#define Z_RAISE_BEFORE_PROBING 4
執行「G29」G-code ,移動到下一偵測點前, Z 軸要抬升多少:
#define Z_RAISE_BETWEEN_PROBINGS 5
執行「G29」G-code ,全部都偵測完後,Z 軸要抬升多少:
#define Z_RAISE_AFTER_PROBING 4
修改 Configuration_adv.h
Configuration_adv.h 中,必須要有底下這行:
#define ENDSTOPS_ONLY_FOR_HOMING
好了!如果組態檔改完,就可以將程式編譯,並上載到 Arduino MEGA 2560 中。
測試前的小叮嚀
哈~到這裡,一定很想看看「Bed Auto Leveling」的效果如何,千萬要記得再次以「M119」觀察並測試近接開關有動作,而且可以在合理的距離內觸發,不然,噴頭衝過頭會很「可怕」!
如何測試 Bed Auto Leveling?先來測試一下「G28」的 G-Code,讓噴嘴歸位回家!如果使用 Repetier-Host,在「Manual Control」裡,如果看不到「G-Code」的輸入區,要先按一下右上方「Easy Mode」的按鈕,讓它由綠色按鈕變成紅色按鈕,變成進階模式。想看 Marlin 回應的結果,就按一下上方「Toggle Log」的按鈕。
剛開始測試時,比較安全的做法,在執行 XY方向的移動前,手動讓 Z 軸先抬升一下,才不會在移動時,噴頭刮到平台。嗚~嗚~這是我刮壞好幾次平台膠帶換來的經驗!
執行完「G28」進行 XYZ 的歸零後,我們就可以執行平台補正偵測用的「G29」G-Code 。完成偵測後,Marlin 回應各點偵測完的結果,類似下圖:
如果手動執行「G29」的 G-Code 沒問題,我們就可以將「G29」加入開始列印的前面。以 Cura 為例,將「G29」加到「Start/End GCode」裡的「start.gcode」,找到最後一個「G28」的指令,然後在下面加一行「G29」即可。
底下是之前故意將平台弄得很不平,然後利用加過「G29」的 G-Code 後,列印的影片片段:
玩玩人工提高 Zmin
使用了「G29」讓 Marlin 幫我們做平台自動補正,很酷!不過,如果平台調得不夠平,本來每抬升一層才會忙一次的 Z 軸馬達會變得很忙,我還是乖乖的調好平台,讓它夠平,而不使用「G29」。近接開關則是用來幫我找到合適的噴頭高度,只要近接開關固定得夠牢,和噴頭的相對位置沒有改變,列印平台高度怎麼變,都可以自動將噴頭調整到合適的位置。
後來發現,有了近接開關這個「活動式的」Z 軸限位開關,當噴頭離平台太近,可以這樣玩:
照片中的那張 TPET 的名片可不是放好玩的,我在 XY 軸移動時, Z 軸歸零前,在近接開關的預定「落地處」放了這張名片,等它執行完歸零的動作後,噴嘴就抬升了名片的厚度,以那個高度為零點,這樣一來,就可以立即修正噴頭離平台太近的問題。不過,這只適用在暫時不想動近接開關螺母的狀況,不是長治久安之計,要我每次都在列印前追著噴頭跑,太累了!
作者已經移除這則留言。
回覆刪除您好~改marlin到※ 啟用「Bed Auto Leveling」的功能,將底下這行前面的註解符號(雙斜線)刪除:
回覆刪除此步驟,按驗證時出現"Marlin_Bed_Auto_Leveling.cpp.elf section .text will not fit in region text
d:/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: region text overflowed by 14854 bytes"
求解~
請問 光學限位 可以搭 電容接近開關嗎?
回覆刪除您好:
刪除原理差不多, 在猜應該是可以吧~ 沒試過光學限位吔~
請問一下,找不到//#define ENABLE_AUTO_BED_LEVELING // 這個參數,是否要自已添加??
回覆刪除您好:
刪除如果預設的設定檔中沒有該參數, 會不會是 Marlin 的版本不同, 沒有支援, 建議您可能要先查一下該 frimware 是否有支援。
請問一下是否一定要加電阻???不是線直接插上就可以了??不同主機板有差??
回覆刪除是否需要降壓應該要看控制板那邊的限制, 我的 RAMPS EndStop 那邊只能吃 5V , 而感應器那邊是 12V, 所以要得加。
刪除不過, 後來我將感應器拆掉了, 平臺調平後, Prusa i3 用較軟(靈敏)的機械式微動開關就很好用了, 很久才需要重調。
請問N.C 和N.O 要加什麼電子零件 切換到同一種...
回覆刪除您好:
刪除不是很清楚您提的「切換到同一種」是什麼;而我的微動開關是原來組 Prusa i3 買的現成模組,並沒有研究它的電路,您可能要自己去搜尋。
請問架構二
回覆刪除是不是依樣要加電阻?
您好:
刪除架構二是利用觸發時, 藍線和黑線會導通, 因此不用加電阻, 不過, 我是亂玩亂試的, 建議您還是要先查一下廠商給的接線方式, 並用電錶觀察一下它的動作後再接。
謝謝...^^
刪除請問一下,此方法需要金屬來觸動電感,若平台不是金屬的話要用甚麼法法呢,金屬膠帶可行嗎
回覆刪除您好:
刪除我這支電容式的, 紙膠帶上也可以感應到, 如文章的照片中所示, 在名片卡也會觸發, 端看您的 sensor 是哪一種。
謝謝回復,我最後使用金屬膠帶來讓感測器觸發,請問大哥的Marlin是哪一版的呢,謝謝。
刪除您好:
刪除我現在已沒用這個機構, 改用全手動校正了。查了一下, 那時的 Marlin 應該是 2015年的 1.0.x
請問 這隻有感應的距離嗎?? 譬如頭到玻璃 要多遠??
回覆刪除您好:
刪除我買的這支觸發的距離似乎會因為電壓而有所差異, 以 12V 與 5V 來比較, 12V 時可以在較遠一點就觸發。相關的機置, 建議還是要查一下廠商給的規格書並實測較好。