2013年11月25日 星期一

RepRap Prusa i3 平台自動補正

平台校正不但費時,而且經常失敗,時在是很令人洩氣!期盼了好一陣子,Marlin終於將平台自動補正的功能加進來了!!這個功能將原本Z軸的Endstop,改裝到擠出頭的旁邊,讓Endstop直接接觸列印平台,讓Marlin值接測量到平台的實際位置。不但如此,Marlin會測量平台上三個不同位置,然後計算出整個平台傾斜的狀況,並依此補正列印空間的水平方向,讓列印做品跟著平台一起傾斜,作品本身的三維維持垂直。如此一來,就不必每次列印前,都要耗費時間跟精神,手動做平台校正工作。



硬體


伺服馬達我選用SG-90,比較輕巧,耗電也不多,可以直接使用RAMPS的5V電源而不至於讓RAMPS當機。
i3用的伺服馬達支架,以及探針腳,我放在這邊:
http://www.thingiverse.com/thing:182889

探針的微動開關,直接使用用Z軸的EndStop。不過走線比較長,要重新佈線。
探針的最低點,要比噴頭的最低點還低,但不要低過一公分,避免探測過程中發生碰撞。

伺服馬達接線如下圖所示:

韌體設定步驟

預先燒錄


  • 將configuration.h中以下這幾行的註解符號刪去(行首的 "//" 刪掉)

#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 165,60} // X,Y,Z Axis Extend and Retract angles


  • 將 NUM_SERVOS 改為1

#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command


  • 將 Marlin 燒入 RAMPS
  • 燒錄完畢後,伺服馬達會移動到60的位置。
  • 使用M code "M280 P0 S{angle}"可以控制伺服馬達轉動到指定的位置(例如M280 P0 S60),找出探測時應該要在幾度,收起探針應該要幾度。假設找出來的度數分別是165度跟60度。
  • 將找出來的度數填回"SERVO_ENDSTOP_ANGLES"。然後重新燒錄Marlin。

測量探針與擠出頭的相對位置

  • 在列印台中央做個小記號,然後移動擠出頭的位置,讓擠出頭正好碰觸記號。
  • 用G code "G92 X0 Y0 Z0"讓 Marlin 把現在位置當作原點。
  • 用G code "G1 Z30" 把Z軸抬高。
  • 用M code "M401",讓伺服馬達移動到探測的位置。
  • 用控制軟體移動XY軸,讓探針接觸點在記號的正上方(這個步驟不必非常精確,位置大概對就好)。
  • 用控制軟體,讓Z軸每次下降0.1mm,並檢查探針是否被觸發。可以用M code "M119"來確認是否觸發。這個步驟必須非常精確,要測量到探針剛好被觸發時Z軸的高度。
  • 觸發後,使用M code "M114"讀回目前XYZ座標。(如果有LCD,可以直接參考LCD上的數據。控制軟體上的XYZ座標會有錯誤,請不要參考。)
  • 讀出來的座標,乘以負一之後填入設定檔。假設M114讀回來的座標是 X:24.3 Y:-31.4 Z:5.1,則在設定檔中,找到以下這三行,並且把數值如下填好。

#define X_PROBE_OFFSET_FROM_EXTRUDER -24.3
#define Y_PROBE_OFFSET_FROM_EXTRUDER 31.4
#define Z_PROBE_OFFSET_FROM_EXTRUDER -5.1

設定測量位置


  • 這四個參數用來設定測量面的邊界,請依照機器XY工作範圍的邊界做縮減後,填入設定檔。如果手邊的機器是 Prusa i3,可以直接使用以下的數據。

#define LEFT_PROBE_BED_POSITION 30
#define RIGHT_PROBE_BED_POSITION 140
#define BACK_PROBE_BED_POSITION 140
#define FRONT_PROBE_BED_POSITION 30


  • 測量過程中XY軸移動的速度,單位是mm/min,建議用預設值就好。

#define XY_TRAVEL_SPEED 6000


  • 探測前抬高Z軸,避免探測腳與平台相撞。可以先設到50mm。如果有把握不會撞到,再回來改。

#define Z_RAISE_BEFORE_PROBING 10


  • 探測過程中抬高Z軸。如果平台沒有傾斜得很厲害,探測過程中應該是不會撞到平台的。用預設值就很安全了。

#define Z_RAISE_BETWEEN_PROBINGS 10

最後燒錄


  • 相關設定都完成了,再燒錄一次Marlin,機器就具備平台自動補正的功能了!

G-code Prefix修改


機器只會照著Gcode的指令工作,一般切片軟體產生出來的G code,並不會通知機器要做平台自動補正。如果沒有加上自動補正的命令稿在 G code Prefix裡面,那就沒辦法享受到自動補正的功能,甚至還會造成機器的傷害。千萬要小心、耐心做好以下的步驟。

KISSlicer

M104 S<TEMP>; 開始加熱擠出頭
G92 Z0;  目前的Z位置設為原點
G1 Z10;  Z向上移10mm,避免探針放下時發生碰撞。
G28 Y;   Y軸歸零
G28 X;   X軸歸零
G1 X100 Y100 F6000;  擠出頭位移到平台中心
M401;  放下探針
G28 z;  Z軸歸零
G29;  平台補正偵測
G1 Z5 F3000 ; 抬高Z軸
M109 S<TEMP>;  等待溫度到達工作溫度
M82;   E軸使用絕對座標




Slic3r

M104 S[first_layer_temperature]; 開始加熱擠出頭
G92 Z0;  目前的Z位置設為原點
G1 Z10;  Z向上移10mm,避免探針放下時發生碰撞。
G28 Y;   Y軸歸零
G28 X;   X軸歸零
G1 X100 Y100 F6000;  擠出頭位移到平台中心
M401;  放下探針
G28 z;  Z軸歸零
G29;  平台補正偵測
G1 Z5 F3000 ; 抬高Z軸
M109 S[first_layer_temperature];  等待溫度到達工作溫度
M82;   E軸使用絕對座標




修改好之後重新做切片,就可以開始測試平台自動補正的功能了。
實際使用時Z軸高度可能還是會有些誤差,需要回頭微調 Marlin 中的 Z_PROBE_OFFSET_FROM_EXTRUDER 參數。

參考資料



52 則留言:

  1. 可以把Z-STOP 和探針並聯在一起嗎?

    回覆刪除
    回覆
    1. 如果你的End-Stop是使用Normal Open的設定,那就可以並連兩個微動開關一起使用。否則不行

      刪除
  2. 如果使用NC,是可以串連。但是控制板得韌體會需要修改。

    回覆刪除
  3. 作者已經移除這則留言。

    回覆刪除
  4. 問一下自動校正後底部會變薄這是甚麼原因 用Slic3r

    回覆刪除
    回覆
    1. 歸零後擠出頭的位置仍然太低。
      Z_PROBE_OFFSET_FROM_EXTRUDER 再微調看看吧~
      Z軸的誤差容許直很小,要花很多時間校正。
      如果懶得重新燒Marlin,也可以直接在Slic3r的
      Printer Settings -> General -> Size and cooldinates -> Z offset
      做微調。

      刪除
    2. 感覺是底部少印了幾層

      刪除
  5. 問一下設原點時要比平台鎖到底嗎

    回覆刪除
    回覆
    1. 探針的最低點,要比噴頭的最低點還低,但不要低過一公分,避免探測過程中發生碰撞。

      刪除
  6. 問一下你按列印時不會原點復歸嗎? 我好像都未圓點復歸 可以取消嗎?

    回覆刪除
    回覆
    1. G-code Prefix修改 要記得做呀~
      我設計的G-code Prefix做完不會回去原始的原點,應該也沒必要。
      擠出頭會停留在第三個偵測點那邊。

      刪除
  7. 應該說一開始先原點復歸 然後再自動定位^^a
    G-code Prefix 有修改 KISSlicer

    回覆刪除
  8. 請教~我是用I2 也可以照你上列步驟使用嗎?? 或者要修改哪裡呢?? 謝謝!!?

    回覆刪除
    回覆
    1. 軟體的部分一樣,硬體就見招拆招囉~

      刪除
    2. 我軟體已設定好 硬體也安裝了 但是 他只會在 X0. Y0. 的地方原地校正四次 是哪裡有錯誤?? 測量面的邊界??

      刪除
    3. "設定測量位置" 這個步驟檢查看看有沒有正確~

      刪除
  9. 請問你伺服馬達和跟你探頭列印機是怎麼連接的?我找了好多地方都找不到那麼細的螺絲。

    回覆刪除
    回覆
    1. 是探針腳,寫錯,不好意思。

      刪除
    2. 我已經有製做另一個版本的自動校正了,感覺新的方法比較容易而且精確。不過中文的說明還沒撰寫,英文的版本請參考這邊:
      http://www.thingiverse.com/thing:273805

      刪除
    3. 哦,那個我研究好久,但是一直搞不懂它的原理

      刪除
  10. 好玩!如果沒看錯,是把 Z 軸的限位開關拿來用,本來是設定常開改成常閉,開關和 X 軸一起上下跑。當擠出頭壓下降直到被玻璃基板頂起後開路觸發限位。這和舊的比起來降低擠出頭負擔但反過來擠出頭會和玻璃基板接觸到,故校正前擠出頭清潔應該滿重要的?

    回覆刪除
    回覆
    1. 沒錯,列印前最好先預熱擠出頭,然後把殘料清除再讓機器做歸零。要不然殘料確實會影響Z軸歸零的結果。

      刪除
  11. 可以分享Prusa i3平台自動補正的KISSlicer設定組態檔案嗎?

    回覆刪除
    回覆
    1. 不好意思,設定值千變萬化,我給出我的設定值,在你的機器一定一定行不通。所以還是自己花時間研究一下各設定的意思,以及適合的設定值吧~

      刪除
  12. 請問 Repetier-Host m401跟m402的指令都無法使用
    另外請問伺服機的探針角度會有差嗎? 一樣的伺服機165 方向跟您顛倒
    再者 機器做0點定位 伺服機的探針角度會超出列印件的空間(明顯的卡住而且齒輪還在轉)

    回覆刪除
    回覆
    1. 1. 你的M280指令有作用嗎?如果沒辦法控制伺服機,那是不是你的伺服機控制線路沒裝對?
      2. 角度要自己觀察,不是值接抄我的設定值。
      3. 在裝了伺服機之後,End Stop的位置是不是需要重新調整?

      刪除
    2. m280的指令有功能 只有401 402 沒動作
      伺服機的0點似乎我裝錯邊了
      感謝您的指教

      刪除
  13. 我是使用KOSSEL
    最近校正平台實在是遇到很大的問題
    有特別幾個點會去磨平台
    有人告訴我是微動開關太難觸發
    我能貼照片跟影片給你看看嗎

    回覆刪除
    回覆
    1. 有問題可以到這邊來討論~
      https://www.facebook.com/groups/reprap.taipei/

      刪除
  14. 我的機器是用的Ramps1.4 和 Mega2560还有smart control LCD,当我燒你留在thingiverse的固件鏈接以後,機器沒有辦法運動,屏幕也沒有顯示。我看到軟件檢測熱床和擠出頭的溫度非常不對。能告訴我有可能是哪裡出了問題么?

    回覆刪除
    回覆
    1. 你是從https://github.com/ErikZalm/Marlin 下載Marlin嗎?
      那邊下載的是Marlin原始發佈的版本,需要修改設定才能使用。
      依照機器不同而需要修改的參數請參照其他文章,自動校正需要設定的部分參照這篇文章。

      刪除
  15. 可以提供改好的prusa i3程式嗎? 除了測量數據

    回覆刪除
  16. 你好 我安裝使用過你的新方法了
    Z歸零沒有問題
    AUTO LEVEL 沒有問題
    但列印時有列印位置過低而依直無法成功的問題
    >我調整 Z_PROBE_OFFSET_FROM_EXTRUDER 道不同值
    (從小到大, 從政到負, 都試過了)
    可是我發現不管歸零, 或列印時 LCD 裡的 Z 位置相同於我設定的值, 不過實際位置還是過低
    意思是我的 Z_PROBE_OFFSET_FROM_EXTRUDER 調整的只是LCD在ENDSTOP 打開時原本顯示是零, 改成我設定的值
    但實際位置並無改變
    請問使用新設計要如何解決列印位置過低的問題?

    回覆刪除
    回覆
    1. EEPROM似乎會記錄這個 Z OFFSET 的值
      你得要從LCD控制器裡面去回復設定

      刪除
  17. 像前面的M-code G-code調整
    可以用哪種程式做測試??

    回覆刪除
  18. 我想請問如果要用新版的Z軸校正http://www.thingiverse.com/thing:273805,限位開關能用光學的嗎?

    回覆刪除
    回覆
    1. 如果用光學式的,校正方式都一模一樣嗎?const bool Z_MIN_ENDSTOP_INVERTING = 設定成true嗎?

      刪除
  19. 請問CURA可以使用此G-CODE嗎?
    怎麼用呢?

    回覆刪除
    回覆
    1. g-code可以用,只需要替換掉跟擠出頭溫度相關的標籤。

      刪除
    2. 可是我用了之後。只有探測,列印時Z軸沒轉耶

      刪除
    3. 然後列印的時候會發生有的地方黏得住
      有些地方會跟著跑

      刪除
  20. 請問伺服馬達隔一段時間都會有微動的現像, 由其是在轉動z軸的時候, 而且轉動z軸完的一小段時間內, 都還會聽到伺服馬達每隔一小段時間都會有"卡卡"很像在轉動的聲音.

    回覆刪除
    回覆
    1. 藍色便宜的那款九克伺服機,品質很差,會自己抖動算是"正常"現象。

      刪除
    2. 謝謝!我還以為是我的ramps電路板有問題...總算擺脫手動校正的地獄了....

      刪除
  21. 您好~
    想請問如果我也有自動校正的一樣的感應器,但是上面的墊片不見了,在哪裡可以找到一樣的呢??

    回覆刪除
  22. 微動開關的價錢已經夠低了,直接重買一個啦!

    回覆刪除
  23. 我使用Cura這套來列印時Start GCode有問題,第一圈都沒辦法出料
    後來我不用M82指令並且參考Cura原本的GCode做一些修改後出料就正常了!!!!!


    M104 S{print_temperature}; 開始加熱擠出頭
    G92 Z0; 目前的Z位置設為原點
    G1 Z30; Z向上移10mm,避免探針放下時發生碰撞。
    G28 Y0; Y軸歸零
    G28 X0; X軸歸零
    G1 X90 Y90 F3000; 擠出頭位移到平台中心
    M401; 放下探針
    G28 Z0; Z軸歸零
    G29; 平台補正偵測
    G1 Z5 F3000 ; 抬高Z軸
    M109 S{print_temperature}; 等待溫度到達工作溫度
    ;M82; E軸使用絕對座標

    ;====================================
    G92 E0;zero the extruded length
    G1 F200 E3;extrude 3mm of feed stock
    G92 E0;zero the extruded length again
    ;====================================

    ;Put printing message on LCD screen
    M117 Printing...

    回覆刪除
  24. 請問一下 我使用 HOME ALL 功能時 會失敗 噴頭會往下移動 每按一次HOME ALL 就會往下一次 有辦法解決嗎?

    回覆刪除