升級Z軸的螺桿5mm到8mm的部分最擔心部分是怕干涉到旁邊8mm直線軸承的空間,參考MK2後再把X軸的馬達電機端的SCAD code調出來,發現垂直空間是有干涉,但是T型的螺母是鎖在表面,並不會直接影響到整體結構,這讓我大大的松一口氣。。。
然後,這近接開關也是新的嘗試,首先上網找資料後這近接開關有不少規格,包含直徑、感應距離,還有NPN與PNP兩種type。其中NPN與PNP讓我最困擾的原因是這種近接開關只有12v,幾乎找不到有5v驅動。這就影響到如何與Arduino的input pin的接線,因為近接開關的觸發 pin是以12v為基準,這會燒掉Arduino.
經過Google大量的搜尋,我決定買NPN,原因是NPN的觸發的pin是low enable,這樣的邏輯就不擔心12v的問題,在output pin與5v做pullup那就與機械式switch相同,可以用同樣的接法與電控板連接。
先分享測試的結果:
這鋼板是一年前為了做實驗印ABS的線材,可以讓底座熱傳導更好。沒時間做就放到現在,剛好近接開關又買錯4mm的,拿來使用真是速配!!!
這測試STL是100x100mm的外框,裡面有2mm/3mm/5mm的圓,來測試平台黏著與Marlin的加速參數設定的穩定度。這結果讓人滿意~~~
《自動Z軸校正真有效》
《只有一個掉落,應該是膠水沒塗到吧》
《尺寸正確,沒變形》
詳細製作過程分享:
材料清單:
T型8mm螺桿(絲桿)/300mm, 8mm導程
彈性聯軸器5x8x25mm
LJ12A3-4-Z/BX NPN NO常開 12v 4mm測距(不小心買錯了,建議買測距6mm以上)
X軸的結構設計:
主要是把T螺母的空間讓出來,還有挖兩個螺絲孔來固定這個T型螺母。
還有,Z軸頂端的固定座也要修改,讓8mm的螺桿可以穿過。
實體圖分享:
《馬達電機端 前視圖》
《馬達電機端 後視圖》
《T型螺母》
《埋深螺母》
《8mm螺桿》
《Z軸頂端與X軸零件一覽表》
《X軸的可調皮帶功能》
《Z軸原來的調整器保留》
《完成品》
《開始打印LCD控制器外殼》
《第一層非常穩定,連字母都很老實貼的牢牢的》
Marlin: configuration.h
在Marlin的source code裡面,在Configuration.h內可以找到這一行
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,400,96.2};
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,400,96.2};
把Z軸的部分改為400,,就可以用這個T型8mm螺桿
近接開關結構設計:
因為不想改變現在的擠出機結構,因為目前現役這個擠出機是我自己設計而且用了1年多非常穩定。所以,就考慮到做個簡單的holder再用熱熔膠固定。
近接開關接線圖:
棕色接在12v電源,黑色是觸發pin,藍色是ground。
當近接開關接好後,先開機然後拿個金屬的東東接觸近接開關的底部,觀察近接開關頂部是否有亮燈,表示接線無誤。
在Configuration.h裡面找到這段code,我是設定近接開關接到原Z軸Min的pin腳。
然後,開始改Marlin-v1.0。 (V1.1.4f修改部分在最後)
Marlin: Configuration.h在Configuration.h裡面找到這段code,我是設定近接開關接到原Z軸Min的pin腳。
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
如果要Z_Min 與 Z_Probe共存的話,那要在pin_ramps.h裡面
#if ENABLED(Z_MIN_PROBE_ENDSTOP)
// Define a pin to use as the signal pin on Arduino for the Z_PROBE endstop.
#define Z_MIN_PROBE_PIN 2
#endif
在Configuration.h改
const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
那這個近接開關的黑色與藍色線要接到X_MAX的位置,也就是第2個位置(在X軸的下一個)
自動Z軸Marlin的修改:
在Configuration,h
把這兩段的註解“//”拿掉,再設定測點。
#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
#define AUTO_BED_LEVELING_GRID
#if ENABLED(AUTO_BED_LEVELING_GRID)
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 170
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 170
最後,把code編譯後upload到Arduino,就可以開始測試自動校正功能啦!!
自動Z軸校正操作:
1. 先確定近接開關與平台的距離與測點,這部分非常重要。這些測點位置是在Marlin的Configuration.h裡面寫死的。
如果用玻璃平台,用3點做自動平台校正:
#define AUTO_BED_LEVELING_3POINT
elif ENABLED(AUTO_BED_LEVELING_3POINT)
// 3 arbitrary points to probe.
// A simple cross-product is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20
這三點可以自己設定。
先貼好銅箔,再用G29確定功能正常。如下圖:
如果用整個鋼板,那就沒什麼關係。
2. M851指令,這個指令可以動態調整Z軸與平台“零點”的offset。這個非常好用,我的做法是調整近接開關感應距離內例如4mm,噴頭還沒碰到平台,這樣可以保護噴頭。再用M851調整真正的零點,例如我的噴頭與平台距離1.8mm,就設定M851 Z-1.8,就是真正打印是讓噴頭下降1.8mm。
3. M500,這指令是把目前的參數寫到i3的EEPROM,保持下次開機時都存在不會丟失。
至於如何把指令下給3D打印機? 很多種方式,我是使用Repetier-Host,如下圖,連上3D打印機後,在“手動控制“的功能區內的G-code欄位輸入指令即可。
如果希望i3每次打印時都做ABL(Auto Bed Leveling),就在Cura或其他切片App的Start_gcode加上
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G29 ;auto leveling,Regis
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
M117 Printing...
之後,每次做完切片都會在gcode自動加上G29這個ABL。
成果如下:
Z軸校正視頻:
實際打印的結果。。。。
《第一層,牢牢貼緊平台,會發現Z軸馬達會上下移動》
《第二層,漂亮》
《第三層》
《第四層》
《開始印殼》
《出爐了,完整印出》
《正視圖》
《第一層很平整,但是我調的太深了,噴頭應該再高一些》
《條條分明》
《Z高很平整層層分明》
這次升級很滿意,費用不到3百元台幣,可以讓我脫離每次都要調整Z軸的痛苦。。。
Marlin v1.1.4f Configuration.h 修改:(2017-07-23)
// Regis, proximity觸發位準
#define Z_MIN_PROBE_ENDSTOP_INVERTING true
// Regis,我把近接開關接在pin 2,與Z_Endstop不同
//#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
// 設定近接開關接點
#define Z_MIN_PROBE_ENDSTOP
#define Z_MIN_PROBE_PIN 2
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset:
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset:
// 設定3點校正
#define AUTO_BED_LEVELING_3POINT
#elif ENABLED(AUTO_BED_LEVELING_3POINT)
// 3 arbitrary points to probe.
// A simple cross-product is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20
粉紅色的那個近接開關座STL檔可以分享嗎?
回覆刪除ps:文章中的連結是錯的
請問一下 T型螺桿長度導程8mm 螺距是要買 那一種的?
回覆刪除請問一下螺桿直徑8mm 螺距2mm 導程8mm 長度300mm 是要買這一種的嗎?
回覆刪除yes
刪除請問一下可以要你的Marlin_i3的設定檔嗎?我用了好多天還是用不出來?
回覆刪除我的版本很混亂,不見得適合你。
刪除你遇到問題是?
我文章加上最新Marlin 1.1.4f版的configuration.h的修改。
刪除請問一下 近接開關 +12V 接電源供應器的+12V,那電源供應器的com要接到 近接開關的那一條線呢? 謝謝
回覆刪除近接開關棕色接在12v電源,黑色是觸發pin,藍色是ground(主控板上的負極)。
刪除