網頁

3D印表機多個列印件增加速度的秘訣



當你有很多的零件要放在一起列印時,請將物件由高至低依序緊鄰排列,因為像圖上這種兩個較高的列印間相隔很遠時,噴頭在移動會耗費掉許多時間(然後中間那個物件就像電燈泡一樣在那邊擋路),同時移動的距離這麼遠,不僅浪費時間同時也會造成牽絲的現象產生,對於外觀的影響其實也不太好。

因此在列印時最好自己先將列印件依序排序好,不要跳來跳去的排列,這樣一來在列印上會比較好一點。而我知道有另外一種列印方式是在同一個盤面上,機器先將A零件印完再去印B零件,但問題是這種功能多半只會用在比較小型與比較矮的列印件上,因為要考慮到噴頭移動時不能撞到的問題,所以在排版會有許多的顧慮,因此我個人並沒有很常使用。

Prusa i3自動校正擠出機與加熱床PID

PID控制在機械與電機系統中是十分重要的技術。姑且不論其運作原理,從一個加熱器的功能來說,PID可以讓加熱到目標溫度的過程又快又準又穩,PID真的不是三言兩語可以解釋,自己調整其參數又抓不著頭緒。

幸好在3D印表機的韌體Marlin裡面,已經很貼心地幫我們做了一個功能,那就是自動調整PID參數(M303: Run PID tuning)

Gcode- RepRapWiki中我們得知,這個G-code將艱難的PID參數調整過程,化為一串簡單的指令,讓我們能輕鬆的調整出適當的PID參數,與其說調整不如說是讓電腦自動的測試出參數。

關於PID的調整也可以參考"陳亮宇"前輩所撰寫的Marlin 擠出頭溫度控制PID值校正一文。同時他也手動的測試與調整PID參數,並進行模擬實驗,是了解PID很不錯的文章PID控制動手玩玩看


接著讓我們開始自動調整PID參數的過程吧,首先我們打開Repetier-Host視窗,並接上3D印表機,在手動輸入G-code的地方打上M303 C8 S185(C是指在目標溫度上下震盪8次;S後面是目標溫度,建議設置自己常用的列印溫度)。

【擠出頭PID自動校正中】


這時候我們只要在旁邊等它跑完8個波浪並顯示OK,就可以得到它自動校正後的PID值了。

【擠出頭PID自動校正完畢】


這時候我們已經有擠出機加熱棒的PID參數了,接著打開3D印表機韌體的Marlin→ Configuration.h,並將校正後的PID值修改到程式內。

【修改Marlin擠出頭PID值】



記得別忘了加熱床也要進行PID調整,我們用一樣的方法也來把加熱床校正一下。我都是印PLA材料而已,因此加熱床的工作溫度是50度左右。(你可以視你最常使用的溫度做PID校正的基準)

這時候我們輸入M303 E-1 C8 S50來校正加熱床的PID值,E0一般是指加熱頭(沒打的話就默認)而E1一般指的是加熱床。where E0 is the first temperature control module (usually the hot end) and E1 is the second temperature control module (usually the bed)

M303 E-1 C<cycles> S<temperature>

【加熱床PID自動校正中】


【加熱床PID自動校正完畢】


這時候我們一樣到Marlin→ Configuration.h把校正後的PID值修改一下。
(記得加熱床跟擠出頭是不同PID位置,不要搞混了)

【修改Marlin加熱床PID值】


一般而言調整過PID的加熱曲線應該是要這樣的,升溫快速又不會超出太多,同時後面的溫度可以穩住。




簡單來說PID調的好大概要滿足幾點:
1.升溫快
2.第一個超越目標值的溫度不應過大(最大超越量)
3.後面的溫度要穩住在目標值附近,不宜偏差過多

但是我上圖是沒在運作時截圖的,因此曲線當然很漂亮。這時讓我們看看工作中的溫度圖長怎樣吧。

【校正PID後的實際列印溫度曲線】


從圖中我們可以看到紅線為擠出頭,藍線為加熱床。在一開始紅線直逼198度,離目標溫度185度差了13度,最大超越量約7%,如果是還沒工作的時候(列印前),這樣還可以接受,超過20度就不好了。

而開始工作後溫度大約在±5度內震盪,但是重點在於第一層過去後,我的工件風扇開啟導致將噴頭溫度往下拉,此時噴頭溫度掉到了176度,但是後面又有在穩定回來。總體而言自動校正PID的功能算是相當簡單實用,不用再為了調整參數而傷透腦筋。

附上一張校正前的溫度圖,沒校正PID前連待機溫度都可以飄成這樣 。(19:50手動開啟工件風扇)

【未校正PID前溫度曲線】


最後祝大家都能找到屬於自己的PID~

(20230318補充:現在的印表機好像在操控面板上都能直接進行PID校正了,不用像早期還要這樣校正完抄寫PID數值還要重燒錄韌體,真的是方便許多。)

參考資料:
RepRap-Wiki
3D印表機 DIY 建構筆記

3D列印完成時自動退出加熱床

當我的3D印表機列印完成後,都要自己手動把加熱床拖出來,那感覺很沒有儀式感,因此我要在切片軟體中新增一些指令,讓它列印完成後能自己退出來。我是使用Prusa i3加上slic3r切片軟體進行3D列印的,因此我要進行以下的設定。

以下是我從切片軟體產生Gcode分別節錄開頭跟結尾的部分
G21 ; set units to millimeters//設定單位是公制
M107 //關閉風扇
M190 S50 ; wait for bed temperature to be reached //等熱床溫度到50度
M104 S180 ; set temperature //設定擠出頭溫度
G28 ; home all axes //移動到原點
G1 Z5 F5000 ; lift nozzle //提高擠出頭
M109 S180 ; wait for temperature to be reached //等擠出機溫度到180度再開始工作
G90 ; use absolute coordinates //使用絕對座標
G92 E0
M82 ; use absolute distances for extrusion //使用絕對座標擠出
G1 F1800.000 E-1.00000
G92 E0
G1 Z0.200 F6000.000
G1 X57.700 Y78.593 F6000.000
 
中間省略~~ 
G1 X65.564 Y91.538 E2.65031 F747.404
G1 F1800.000 E1.65031
G92 E0
M107
M104 S0 ; turn off temperature //關閉擠出頭加熱(設定為0度)
G28 X0 ; home X axis //X軸回歸原點
M84 ; disable motors //關閉馬達

大家有沒有發現在程式碼的最後,只有關閉擠出頭、X軸回歸原點以及關閉步進馬達,程式碼中並沒有設定到加熱床(Y軸)要退出來或回歸原點的設定。

因此為了要讓加熱床漂亮的滑出來增添儀式感,我們要在slic3r切片軟體內做一些設定。在slic3r→Printer Settings→Custom G-code的頁面中,它允許在切片軟體轉成G-code的時候添加一些程式碼。

【slic3r→Printer Settings→Custom G-code】


Start G-code:插入在列印程式碼一開始
End G-code:插入在列印程式碼結束後
Layer change G-code:在每次Z軸提高後插入程式碼
Tool change G-code:在每一次擠出頭改變作動時加入

Layer change和Tool change我沒試過,不過我們的重點是在End G-code的部分,在列印結束後執行加熱床退出的動作。

因此我們可以在End G-code裡面加入一行G1 Y180(我的熱床Y180剛好是推到最外面的位置),不過記得要加在M84之前,不然下了步進馬達關閉的指令後又要它移動可不對,所以我將程式碼修改為下圖。



如此一來當列印完畢時,加熱床就會自己退出來了,如此一來增添了許多的儀式感。



對3D印表機的G-code有興趣的,可以參考這個頁面:RepRapWiki_G-code說明頁

而我為了讓速度快一點,就把XY的移動指令給進行合併,不然要等X軸跑完才會跑Y軸。
G28 X0
G1 Y180

合併為

G1 X0 Y180

如此一來當列印完成後,XY軸就會同時跑到定位了,如果有其它想要加入的功能,也可以多多嘗試看看。

3D列印完畢後自動關閉加熱床


話說這個悲劇應該是裝上熱床後發生的,在這之前我的3D印表機並沒有安裝熱床(因為還要多配好多線),但是因為前一陣子實在是太冷了,怎麼印怎麼翹曲所以才決定裝上熱床。

我前天剛裝好熱床並且接電腦測試能夠加熱之後,我就把它搬到工作室並採用離線列印。
接著當我印PLA料架的時候,回來才發現印完熱床沒關阿!!

這時我檢查了一下程式碼

G1 X65.564 Y91.538 E2.65031 F747.404
G1 F1800.000 E1.65031
G92 E0
M107
M104 S0 ; turn off temperature //關閉擠出頭加熱(設定為0度)
G28 X0 ; home X axis //X軸回歸原點
M84 ; disable motors //關閉馬達

我的天,結尾的程式碼裡面只關了擠出頭卻沒關閉加熱床,雖然沒有危險之虞,但沒事在那邊加熱耗電實在是沒必要。

因此我們可以在End G-code裡面加入一行M140 S0,意味著關閉加熱床溫度。

【列印完畢關閉加熱床指令】

RepRapWiki的G-code說明頁中,我們可以找到兩組有關加熱床溫度的指令。

M140: Bed Temperature (Fast)
Example: M140 S55
Set the temperature of the build bed to 55oC and return control to the host immediately (i.e. before that temperature has been reached by the bed). There is an optional R field that sets the bed standby temperature: M140 S65 R40.

M190: Wait for bed temperature to reach target temp
Example: M190 S60
This will wait until the bed temperature reaches 60 degrees, printing out the temperature of the hot end and the bed every second.

為了比較兩組程式碼的不同我擷取了我列印的G-code開頭給大家看:

G21 ; set units to millimeters //設定單位是公制
M107 //關閉風扇
[b]M190 S50 ; wait for bed temperature to be reached //等熱床溫度到50度
M104 S180 ; set temperature //設定擠出頭溫度
G28 ; home all axes //移動到原點
G1 Z5 F5000 ; lift nozzle //提高擠出頭

大家可以發現列印前使用的是M190 S50,這個與M140的差異在哪呢?
這兩段程式的差別在於,M190是等待加熱床溫度達到50度之後,才會執行下一段指令,而M140是馬上執行下一段程式碼(立即進行下一步控制)。因為我們是要結束列印,所以直接關閉就好因此使用M140 S0,並且讓他執行下一段程式碼M84; disable motors。如此一來就可以順利地關閉加熱床了。

減少3D列印時的層紋


在Reprap.Taipei的社團中,大家一直在探討一個問題,就是如何減少3D列印時的層紋。好像尤其是在Prusa i3這種牙條結構的機型裡,會更容易有這樣子的問題。

其實FDM的印表機本來就會有層紋,但是如果太過明顯就會變成一個問題了。

關於這點"陳亮宇"前輩寫了一篇很不錯的文章,其主旨在於(逼緊Z軸光軸),使X軸噴頭滑軌在移動時更加"穩定"。Prusa i3 Z 光軸配緊 (橫向水波紋終於有改善了~~)

而社團中"楊朝鈞"前輩提供了另外一種作法,用於逼緊Z軸光軸。列印件請至此:http://www.thingiverse.com/thing:160636


而因為我印表機在印列印件的時候,似乎檔案抓錯還怎麼樣,印出來的很不像話,因此X軸光軸很凸出來,不過我還是用我的方法逼緊了Z軸光軸。

在我自己的心得上覺得,3D印表機的列印要精準,重點都在於要好好的將光軸"固定好",而並非牙條一定要用導螺桿或很高級的聯軸器之類的,之後我會實驗聯軸器是否真的這麼重要。

這篇文章有點輕描淡寫,而且也因為我列印件比較不一樣的關係,我就不分享我的零件圖了。希望大家都能試著將Z軸的光軸固定好。

2018/06/19補充:
這幾年玩下來我覺得有幾個重點可以改善層紋:
1.降低列印的加速度,降低在邊緣時因加減速造成的晃動。
2.機身一定要穩固,就像這篇文章所說的,如果光軸沒有固定好當然會晃動。
3.皮帶要有一定的張力拉緊,不然會造成不必要的晃動,這個可以定期用皮帶張力計進行檢查。

3D印表機之Marlin加熱異常保護功能

話說3D印表機大多數人使用的都是"開源"的形式。也因此並沒有太多的安規、限制等等的措施,大多是屬"實驗"性質的工具。

然而3D印表機看似安全,其實也是有些潛在的危險性。最危險的莫過於加熱的噴頭以及熱床了,動輒200多度的高溫在運作,萬一有個意外很可能會導致起火燃燒,更何況列印的時間幾小時,往往都沒有人在旁邊顧的,如此一來保護的功能就更加重要了。

Marlin的設計者在這個方面也下足了苦心,可惜在保護功能中有些美中不足的地方,是什麼呢? 
以下我會逐一介紹。

首先,我們加熱保護功能主要落在噴頭上,加熱床並不是這篇文章討論的重點,不過我有空會再做個加熱床的實驗。(我想都大同小異)

先考慮到網路上許多人談論的問題,我先假設加熱棒與熱敏電阻(偵測溫度的感測器)會發生的狀況大約如下:
1.熱敏電阻電線脫落。
2.熱敏電阻短路。
3.熱敏電阻接著,但加熱棒的電線脫落。
4.熱敏電阻接著,但加熱棒的加熱頭脫落。
5.熱敏電阻頭脫落,但加熱棒依舊接著。

以下我會就這五種情況依序地做實驗。

1.熱敏電阻電線脫落:

【熱敏電阻電線脫落】(拔掉熱敏電阻接頭模擬)


在這種情況下,無論是離線的LCD或是Repetier-Host都會顯示Err.MINTEMP,因為熱敏電阻脫落的關係,導致溫度偵測錯誤,因此在加熱的過程中如果熱敏電阻電線脫落,加熱器會直接關閉。

【Repetier-Host熱敏電阻電線脫落顯示】



【LCD熱敏電阻電線脫落顯示】



2.熱敏電阻短路:

【熱敏電阻短路】(短路熱敏電阻接頭模擬)


在這種情況下,離線的LCD會顯示Err.MAXTEMP而Repetier-Host什麼都不會顯示,但結果都跟第一項一樣,加熱的過程中如果熱敏電阻電線短路,加熱器會直接關閉。

【LCD熱敏電阻短路顯示】


3.熱敏電阻有接上,但加熱棒的電線脫落:

【熱敏電阻接著,但加熱棒的電線脫落】


這種狀況其實沒啥好怕的,了不起就是沒加熱而已,但是這樣並不太好,因此我後面有一種解決方法可以讓加熱器的輸出自動關閉。

4.熱敏電阻接著,但加熱棒的加熱頭脫落:

這個狀況我沒圖片,因為我懶得把加熱棒拔下來。但是大家可以想像一下這種狀況,大概就是加熱棒持續加熱,但是溫度一樣保持在室溫,如此一來可能會導致危險,因為掉落的加熱棒會不斷的加熱輸出。(如果有碰到易燃物會很危險)

因此這種狀況,就很像接下來的狀況五,熱敏電阻依舊偵測到的是室溫,而控制器也沒出現錯誤,但是加熱棒卻不斷的加熱。因為這個狀況其實跟第五種狀況會發生一樣的事情,因此我直接從第五種狀況還解釋,也是本文章所要講的最重要的一節。

5.熱敏電阻頭脫落,但加熱棒依舊接著:

【熱敏電阻頭脫落,但加熱棒依舊接著】


看這張圖片可能看不出來我在接甚麼,為了避免麻煩(懶得拆加熱快上的熱敏電阻),因此我直接將旁邊加熱床的溫度Sensor,用來接上噴頭所屬的溫度感測接腳T0,如此一來就模擬了這種狀況,熱敏電阻脫落在外,但加熱棒接著。

我透過簡單的實驗來演示這個狀況的危險性(本狀況同第四種狀況)。

【加熱棒持續加熱】



【一分鐘過去尚未關閉加熱棒】


經過我簡單的實驗,大家應該能發現第四種與第五種狀況如果發生,那會是多危險的一件事情,萬一熱敏電阻頭、加熱棒頭不甚脫落,很可能會引發火災。

但是Marlin的設計者不可能沒有想到這一點,因此裡面有一個很聰明的設計,可以適當的偵測是否有上述兩種異常狀況,但是美中不足的就是它預設是關閉的。

【Marlin→Configuration_adv.h加熱異常保護預設關閉】



在Marlin→Configuration_adv.h的程式碼中,有兩行這樣子被預設關閉的程式碼。

//// Heating sanity check:
// This waits for the watch period in milliseconds whenever an M104 or M109 increases the target temperature
// If the temperature has not increased at the end of that period, the target temperature is set to zero.
// It can be reset with another M104/M109. This check is also only triggered if the target temperature and the current temperature
// differ by at least 2x WATCH_TEMP_INCREASE
//#define WATCH_TEMP_PERIOD 40000 //40 seconds
//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds

這段程式碼的意思簡單來說,就是如果40秒過去了,感測器溫度還是沒變化就關閉加熱棒。
但我一直不曉得為什麼這麼好的功能預設是關閉的。

因此請務必打開這項功能!

【開啟加熱異常保護功能】


要注意的是,下列兩種狀況:

【無法通過編譯器】


只開啟上面那個編譯器無法編譯通過,要兩個都開啟才行。


【可以編譯通過,但依舊沒有保護功能】


只開啟下面那行是可以編譯通過,因此我順手做了一下實驗,加熱頭在一分鐘過去後依舊沒有關閉,因此請記得把兩行程式碼都開啟。

開啟之後神奇的事情發生了,在第四種或第五種狀況下,加熱超過40秒之後,加熱棒會自動關閉並顯示錯誤。

【Repetier-Host加熱異常,自動關閉加熱】



【LCD加熱異常自動關閉(LCD會閃爍)】

如此一來,大家就不用擔心第四、五種狀況的發生。同理可證第三種狀況,熱敏電阻接著但加熱棒的電線脫落,也會因為溫度沒有上升在40秒之後自動關閉。

大家也可以修改時間,例如我修改成20秒關閉
【修改加熱異常保護功能時間】



最後我總結一下上述五種狀況的結論:
1.熱敏電阻電線脫落:
顯示Err:MINTEMP,加熱棒關閉。

2.熱敏電阻短路:
顯示Err:MAXTEMP,加熱棒關閉。

3.熱敏電阻接著,但加熱棒的電線脫落:
請開啟加熱異常保護功能,40秒後偵測到沒升溫自動關閉。

4.熱敏電阻接著,但加熱棒的加熱頭脫落:
請開啟加熱異常保護功能,40秒後偵測到沒升溫自動關閉。

5.熱敏電阻頭脫落,但加熱棒依舊接著:
請開啟加熱異常保護功能,40秒後偵測到沒升溫自動關閉。

希望大家都能把這個功能開啟,再多加上一層保護!
不過記得在開啟後,可以像我實驗看看,確保功能有確實作動

剛好適逢過年,祝福各位新年平安,財源廣進 。


20230307補充:現在大部分的人都是購買成機了,而我的使用經驗中其實也應該都有這項保護裝置了,所以確實不需要太多緊張就是。但我的經驗是如果今天溫度會一直亂跳,加熱棒在列印中的降溫太高,且調整PID之後還是如此,那可能就要檢查一下是否溫度Sensor或加熱棒是否有異常了。

3D印表機的XYZ的空間座標 基於Prusa i3

在這篇文章中,我會介紹3D印表機結構和空間座標的關係。不過在談Prusa i3結構的空間座標前,我想先聊一聊步進馬達與限位開關的關係。至於限位開關的電路怎麼接,我想有許多的文章都有教學,不清楚地可以拜讀一下這篇文章End Stop 電路介紹


首先我用幾篇自己讀起來覺得很不錯的文章,來跟大家解釋步進馬達的原理
步進馬達基本的構造與動作原理
5相步進馬達的構造
定子的構造
5相步進馬達的動作原理


看完上面4篇文章之後,相信大家對步進馬達也了解許多,而我們一般使用的步進馬達步進角普遍是1.8度,意思就是說步進馬達給一個訊號時它會轉動1.8度的角度。但問題是這個角度在3D印表機的控制來說,還是達不到足夠精密的程度,那這樣該怎麼辦呢?

這時候在步進馬達的驅動晶片上,就有了"微分"的功能,用講的不好講解,還是在看一下網站吧:微步級驅動的動作原理

步進馬達的驅動晶片透過電流比例的控制,將步進馬達一步1.8度,在劃分為許多的微步。舉例來說我使用的步進馬達驅動電路板A4988,它的微步細分可以達到1/16,意思就是說將每一步(1.8度)再細分為1.8/16=0.1125度左右,如此一來就能滿足3D印表機的精度需求了,然而在更進階的驅動晶片中,甚至可以看到更高的微步分割。

【A4988微步腳位】



如此一來透過微步劃分的技術後,就足夠應付3D印表機中的精度了!
但是限位開關在印表機中主要是要幹嘛呢?

在3D印表機中,限位開關通常被用來檢測和限制機器運動的範圍,以確保擠出機或熱床不會超出印表機的工作範圍。限位開關一般安裝在印表機的各個運動部件的兩端(min與max),它們可以檢測到物運動部件的範圍,並在碰觸到時向控制電路發送訊號,以緊急停止運動並防止損壞。

同時限位開關還可以在機器啟動或列印前進行檢測(Auto home),畢竟大多數的印表機步進馬達都是開迴路控制,也就是本身並不知道噴頭與熱床的位置在哪,而透過歸零校正的方式,可以確保印表機的正常運作。


開迴路的意思大概就是說,步進馬達雖然能精準地控制轉了幾度、移動了多少距離,但是它並不知道它的原點位置(Home)在哪,因此我們必須要在XYZ上各裝上一個限位開關,才能達到歸零的偵測動作。

從這張RAMPS的電路圖中可以看的出來,XYZ各需要一顆限位開關。
【RAMPS電路圖】

但為甚麼一般RAMPS都只接XYZ的min限位開關,而不接max的限位開關呢?
因為在切片程式內,在不失步或異常的狀況下,運動部件是不會跑超過屬於他的行程的,因此大多數的狀況下就不接了,因為以一般家用型3D印表機的步進馬達來說,就算出問題撞到max位置,也頂多卡住發生異音而已,是不太會出甚麼問題損壞機件的。


回歸正題,講了一大堆讓我們來聊聊空間座標吧。
首先3D印表機顧名思義就是印3D的東西,因此一定有所謂的XYZ座標。
而為了方便起見,3D印表機XYZ在G-clode中一律都是正的座標值。

【補充:G-code 是一種指令語言,用於控制3D列印機等自動化機械設備。G-code 中包含一系列指令,描述了噴頭及熱床在空間中的移動路徑、移動速度、擠出速率或溫度控制等。切片軟體的目的就是從3D模型中,轉換成機器讀的懂的語言使其運作】


先從Prusa i3的原理說起,它是熔融沉積造型(FDM)的技術,想像一下XY軸是一張圖畫紙,我們一層一層的疊上去(Z軸),就能做出一個模型出來了。而XY軸的圖畫紙就是我們的第一象限,而大家都知道第一象限的座標是(+,+),沒有負值的。(有些特殊用途的話例外,但在此不多做討論)

【第一象限】

這時讓我們加上Z軸,就是3D印表機的空間座標了。
也就是說紅色方塊的地方就是3D印表機所使用的座標系統。

【3D印表機座標系統】


這時候我們就想要了解,那Prusa i3的原點位置(Home)在哪呢?

這張圖是我對Prusa i3 3D印表機使用Auto home之後的歸零位置。

【Auto home】

由圖片中可以了解,Z軸的原點是噴頭與工作平台接觸的地方(怎麼調整請參考如何校正床台水平)。而XY軸的原點就是我上面圖片的第一象限的(0,0)的位置,如果由上往下拍的話大概如下圖中,紅色熱床的左下角的黑點所示。

【XY HOME位置(黑色圈圈處)】


至於限位開關要怎麼裝呢?下面依序展示各軸的限位開關:
【X END STOP】

【Y END STOP】

【Z END STOP】


我發現在3D印表機的論壇上,常常會有人將END STOP裝反,而出現如下圖的問題。

【顛倒問題(圖片來源Reprap.Taipei)】


為甚麼會這樣呢? 讓我們回顧一下上面的XY空間圖。
【XY座標】

如圖所示,當3D印表機今天要一層一層的畫圖的時候,必須要先回到空間原點(黑圈處),而噴頭就是我們的"鉛筆頭"。回歸原點的時候相對於機台,就是X軸的噴頭要往最左邊跑,而Y軸的熱床要往最上面跑。

不知道有沒有眼尖的網友發現,Y軸的加熱床邏輯上跟座標不太一樣,原因是相對於噴頭,如果要在圖紙上畫一條向上的箭頭,加熱床必須往下跑


也因為這個原因,許多網友在自行組裝3D印表機時就在這個地方卡住了,而將馬達的線顛倒過來插,並且將Y軸的END STOP裝在圖片的下方處。

如此一來3D印表機的工作原點變成在如下圖所示的黑點,因此會造成列印出來的工件呈現左右正確,但上下顛倒的狀況


讓我們看看Repetier-Host軟體所顯示的工作原點。大家可以發現在預覽的視窗中,它所指向的工作原點與我上圖的座標相符,因此才能順利打印。



最後要強調的是,XY軸的限位開關安裝距離並沒有這麼考究,因為我們只是要在一張圖紙上(加熱床)畫上工件,XY方向偏了一些也不要緊,頂多浪費了一點列印空間而已。

但是Z軸就不一樣了,因為關係到噴頭與加熱床的距離(這非常重要!!!),因此在Z軸的限位開關上才設計了一顆微調螺絲給我們調整,基本上列印第一層調整的好就成功一半了。

【Z軸微調螺絲】


還有一件事情勢需要去注意的。
當今天列印工作完畢時,切片軟體會執行下面的代碼(slic3r預設,其他切片軟體我就不太確定了)


M104 S0 ; turn off temperature (關閉加熱)
G28 X0 ; home X axis (X軸回歸原點)
M84 ; disable motors (關閉所有步進馬達)

從文章一開始的講解應該能理解,當步進馬達通電之後,它就是屬於"吸住"的狀態,因此除非你硬扳硬拉,不然XY軸是拖不動的,而打印結束後M84指令會讓所有馬達關閉(鬆開),因此就可以手動將加熱床給拖出來,並且取出你的工件了。這一個指令也類似於在LCD控制面板上的Disable Steppers選項。


20230310補充:
現在市售的3D印表機都已經組裝好,很少人需要在自己去了解空間座標以及限位開關了,甚至目前大部分的步進馬達驅動晶片中,都帶有電流感測的功能,也因此多半都是透過用碰撞的方式來歸回原點,如此一來在佈線上也精簡了許多。

比起以前真是幸福許多呢。

如何調整3D印表機擠出量

在3D列印中,擠出量是一個相當重要的參數,倘若發生擠料量過多、過少的問題時很可能會造成封頂不漂亮(有縫隙或是過多)、尺寸公差不正確(如果要印配合件就會影響很大)等等的問題產生。 

而首先我們必須將擠出機的E/step調整到大概的參數,這個參數可以在,
Marlin/Configuration.h/#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,106} 找到。

如果不想重新燒錄Marlin,可以使用Repetier-Host的配置→EEPROM配置去修改E軸的值。


如果機器的LCD可以調整的話,可以在列印時進入Tune調整Flow參數,記住單位是%

例如我要從106E/Step變成85E/Step的話就要做以下計算:
調整後參數/調整前參數×100%=85/106×100%=80%(四捨五入就好)

在Marlin中的80、80、4000、106參數分別是步進馬達移動1mm時所需走的步數,分別代表X軸、Y軸、Z軸與E軸(擠出機),而除了XYZ是可透過公式算出"切確的值"之外,擠出機的參數就必須自己微調了。

在3D印表機中,多半XYZ軸都是透過皮帶與同步輪或是螺桿,搭配上步進馬達去進行帶動,而這種參數是固定的,因為皮帶的齒距與螺桿的螺距都是定值,因此可以透過計算得到。

但是擠出機不一樣,影響擠出機的有線材的粗細(不同廠牌會有點差距)、噴頭的大小(用久孔會變大)、擠出機齒輪的直徑與刻痕等等,影響擠出機的因素其實相當的多,那當然每個人的擠出機參數多少都會有點落差了,就算是同一款噴頭,大概也是會落在"差不多"的區間,很難說都一模一樣。

因此首先我們要先找到自己擠出機的大概參數在哪裡,避免落差太大,關於這點可以參考下列網頁,或是詢問您的賣家或上網尋找與您相同的擠出機:
擠出機步進馬達的 Steps per Unit 該如何計算?
步進馬達參數計算

當然擠出機的參數絕對沒有所謂的"絕對",機器用久了可能要重新調整,這都是有可能的,因此找到大概參數之後,下面我們要來找出自己機器的"最佳參數"。

首先請大家不要用第一層作為擠出量的參考依據,因為第一層會因為床台與噴頭之間的距離而有所影響,所以先校正好床台水平是非常重要的,怎麼校正請參考我的教學文章:如何校正床台水平

在擠出機校正的相關文章中,"陳亮宇"前輩的這篇文章給我很大的啟發"擠出量校正",他在文章裡面有提到:「最容易觀察出擠料量是否正確的地方,是模型得平面封頂。如果擠料量越正確,應該可以擠出越平滑的頂面。擠料量太少,會出現縫隙,擠料量太多,會向上溢出,一樣不平整。」

上面這句話是非常重要的觀念,千萬不要用第一層來判斷擠出量是否足夠,因為床台與噴頭的距離也會影響,因此最好的做法是印一個薄方塊來進行目視校正。


講了一大堆,那麼實務上到底該怎麼校正擠出量呢?
這裡有兩個小方法,第一個是單純的列印一個方塊,並且觀察封頂時頂面是否平滑。

而第二個方法是列印5mm Calibration Cube Steps,這是我從國外一位網友的文章讀到的,他是利用這種階梯狀的方塊來校準擠出量是否正確,我也是使用這種方式。但是我有些不太喜歡他設計中的5mm空洞,因為有搭橋的問題(雖然才5mm),因此我重新設計了一個5mm Calibration Cube。

以上兩種方式測試的STL檔如下:
Calibration Cube

以下是我測試擠出機參數的實驗圖片,我使用的是國外網站的的5mm階梯塔,因為當時我還沒有繪製我的版本。從圖片上可以看到E/step參數中,E106的有點溢料;E80的有些空洞;而E90的差不多,因此這大概就是我擠出機的參數。



下圖是我想提醒大家,為什麼不要僅觀察第一層就做擠出量校正的原因,圖片上是列印完翻到背面第一層的合照,可以發現床台與噴頭高度也會大大的影響表面填充的效果。



用目測的其實還不夠精準,因此我量測了上圖的三個校正塊來進行校正。

E106/Step

E90/Step

E80/Step

大家可以發現E106/Step讓整個校正塊膨脹了0.5mm,這呼應了我前幾天剛買3D印表機的問題。當時我印了一個10mm的立方體,我一直很困惑為甚麼量起來總是10.6mm,於是當時我上網詢問,甚至有網友回答我,叫我修改XY軸的Step/mm參數來調整尺寸。
在這裡我要告訴大家萬萬不可以這樣做! XYZ的參數是透過計算而來的,絕對沒有什麼偏1步偏2步這種事情,就算調出來矇中了10mm為準確,可能印20mm又跑掉了。(我就這樣調過)

而E90/Step與E80/Step兩個方塊,其實都很接近10mm的尺寸了,但是好像80小了一點,90又大了一點,因此我現在是使用E85 Step/mm的這個參數在列印的。

這樣的校正方法比目測法好很多,大家可以試試看! 



20230302補充:
回顧這篇文章也是8年前寫的了,現在看起來好像也很少人是自組的3D印表機了,想到當時還要這麼複雜的去校正就覺得很辛苦。而我後面才發覺我所提供的兩個方法(目視與尺寸量測),也剛好呼應了PRUSA官方網站所提供的教學Extrusion multiplier calibration

而如果以目前實務上的做法來說,大部分的機器買來其實都已經有固定的參數寫入了,像Bambu Lab 的P1P機台來說,在機器上也沒有可以調整擠出量的選項。因此我個人建議為求一致性,如果真的有需要微調的部分最好還是從切片軟體內的Flow ratio或是Extrusion multiplier參數調整,不同的切片軟體有不一樣的稱呼,不過大體上的意思都是對擠出機的擠出量進行增減。

而在PRUSA的官方建議中,這項數值也不要調整超過正負10%比較好,以我個人的認知來說,如果調整的幅度超過這個範圍,可能就要檢查機器是不是哪邊有出硬體上的問題了。


延伸參考: