網頁

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或加熱棒是否有異常了。