古人智慧

Just Do it!
上士聞道,勤而行之;中士聞道,若存若亡;下士聞道,大笑之。不笑,不足以爲道。
~ 道德經 41

「實現夢想不是追逐成功,而是在於賦予生命意義,人生中的每個決定與聲音都有其重要含義。」"The key to realizing a dream is to focus not on success but on significance — and then even the small steps and little victories along your path will take on greater meaning."
電視名人-歐普拉·溫芙蕾(OPRAH WINFREY)

搜尋此網誌

Translation

2016年10月28日 星期五

[3DP] Prusa i3,Z軸升級8mm螺桿(絲桿) 與 電感式近接開關(接近開關)

看到Prusa i3的原創發表Prusa i3 MK2這麼多神奇的功能,讓我對心愛的老爺機i3的升級有了極大信心。是的,這次參考MK2的精神,升級Z軸的螺桿從5mm到8mm,然後再加上電感式近接開關。
升級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};
把Z軸的部分改為400,,就可以用這個T型8mm螺桿


近接開關結構設計:
因為不想改變現在的擠出機結構,因為目前現役這個擠出機是我自己設計而且用了1年多非常穩定。所以,就考慮到做個簡單的holder再用熱熔膠固定。



近接開關接線圖:
棕色接在12v電源,黑色是觸發pin,藍色是ground。

當近接開關接好後,先開機然後拿個金屬的東東接觸近接開關的底部,觀察近接開關頂部是否有亮燈,表示接線無誤。

然後,開始改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.

如果要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加上

Cura 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 X_PROBE_OFFSET_FROM_EXTRUDER 0  // X offset:
#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

9 則留言:

  1. 粉紅色的那個近接開關座STL檔可以分享嗎?
    ps:文章中的連結是錯的

    回覆刪除
  2. 請問一下 T型螺桿長度導程8mm 螺距是要買 那一種的?

    回覆刪除
  3. 請問一下螺桿直徑8mm 螺距2mm 導程8mm 長度300mm 是要買這一種的嗎?

    回覆刪除
  4. 請問一下可以要你的Marlin_i3的設定檔嗎?我用了好多天還是用不出來?

    回覆刪除
    回覆
    1. 我的版本很混亂,不見得適合你。
      你遇到問題是?

      刪除
    2. 我文章加上最新Marlin 1.1.4f版的configuration.h的修改。

      刪除
  5. 請問一下 近接開關 +12V 接電源供應器的+12V,那電源供應器的com要接到 近接開關的那一條線呢? 謝謝

    回覆刪除
    回覆
    1. 近接開關棕色接在12v電源,黑色是觸發pin,藍色是ground(主控板上的負極)。

      刪除