2014年4月15日 星期二

End Stop 電路介紹

End Stop 限位開關,對許多不熟悉電子電路的同好還說,是一團難以摸透的迷霧。控制板上明明有三個腳位,為什麼接兩隻腳就可以用?微動開關上,接點有分NC、NO,是什麼意思啊?控制板上的S腳位是作什麼用的?S腳位直接跟 "-" 腳位短接在一起,為什麼不會燒毀?Marlin設定裡面,X_MIN_ENDSTOP_INVERTING 到底要設成 "true",還是"false"?

RAMPS控制板上的限位開關腳位


先來解釋RAMPS控制板上,關於限位開關的腳位。總共有六組限位開關腳位,分別定義給XYZ三軸的MAX/MIN位置。每組腳位各自有 "S"腳位、"-"腳位、"+"腳位。"+"腳位連結到RAMPS系統裡的5V電源供應系統;"-"腳位連結到接地線路;"S"腳位連結到Arduino的數位輸出/入腳位(IO),在Arduino+Marlin系統內,是設定成以一根電阻拉到高電位的"數位輸入"腳位。

電路I/O腳位的秘密


Pull high 電路示意圖

上圖中,PIN12是CPU偵測電位高低的IO腳位。透過一支10K毆母的電阻,接到系統的電源供應線路(5V)。所以當S1按鈕放開的時候,PIN12腳位偵測的的電壓會非常接近5V,軟體系統偵測這支腳位的狀態時,會讀取到"1"的結果。這個狀態下,軟體系統會定義為"Triggered"。當S1按鈕被按下,這時PIN12會直接接地,軟體系統偵測這支腳位的狀態時,會讀取到"0"的結果,判定為"Open"。這時5V的電源,會透過10K的電阻再接到接地點,所以並不會發生電源直接短路到接地線而燒毀電源供應系統(5V穩壓IC)。註1

微動開關腳位的定義




微動開關一般有三支接腳,分別為 "C"共同接腳、"NO" Normal Open 通常開路接腳、"NC" Normal Close 通常短路接腳。顧名思義,"通常開路接腳",在微動開關被放開的時候,跟"C"接腳是斷開的,被按壓後,跟"C"接腳才短路接在一起;"通常短路接腳"則是在放開時,跟"C"接腳短路接在一起,被按壓後才跟"C"接腳斷開不通電。所以透過不同的接線方法,可以選擇被按壓時,是要讓線路通電、或是要斷電。

Marlin內與限位器相關的設定


再來要了解Marlin Configuration.h裡,對於End-Stop腳位狀態的定義,要怎麼設定。一般軟體設計,都會定義IO腳位讀取值為1時,是為腳位驅動(Triggered)。Marlin裡也是這麼設計的。所以當RAMPS的S腳位浮接(不接任合線路)時,會視為Triggered。但是如果硬體線路必須要定義成S腳位為低電位時當作Triggered,這時可透過"ENDSTOP_INVERTING"的設定,改變Marlin對S腳位的定義。當設定值為"true",S腳位接地會變成"Triggered"。

另外還有 "DISABLE_MAX_ENDSTOPS" 跟 "DISABLE_MIN_ENDSTOPS" 兩個設定值,是用來告訴Marlin,是否有接 "MAX_ENDSTOPS" 跟 "MIN_ENDSTOPS"。例如沒有接MAX End-Stop的話,可以把 "//#define DISABLE_MAX_ENDSTOPS" 最前面的 "//" 刪掉,這樣Marlin就不會去讀取MAX End-Stop的狀態了。

融會貫通

綜合上述的所有設計細節,就可以融會貫通的解答END STOP相關的問題了。

如果單純使用微動開關當作限位器,那一定要接RAMPS上的 "S" 跟 "-" 腳位。因為"S"腳位在控制板CPU內部已經被Pull-up到高電位了,所以想要讓"S"腳位的狀態改變,只有把他拉去接地一途。"S"接到"+"是沒有作用的。

"S"腳位在CPU內部已經內見Pull-up電阻了,所以直接連接到"-"接地腳位,是不會燒毀的。

"ENDSTOP_INVERTING"設定值要看End-stop硬體線路的接法而定,如果希望"S"腳位為高電位或浮接時,定義為"Triggered",則"ENDSTOP_INVERTING"要設定成"false";反之如果希望"S"腳位為低電位或接地時,定義為"Triggered",則"ENDSTOP_INVERTING"要設定成"true"。

整個系統上有好幾個會改變狀態的變數,要全部融會貫通,才能設計出讓限位器正常工作的設定。如果不太確定自己能設計出對的設定,建議還是先依照i3組裝筆記內的說明進行安裝。而且務必檢查有沒有接錯,再開始做馬達的測試。

最後,祝大家列印愉快~


----
註1:ATmega-2560 的IO pin 有內建 Pull-Up 電阻在IC內部,不需要在外部電路另外安排 Pull-Up 電阻。ATmega-2560規格書第七頁。

2014年4月8日 星期二

熱敏電阻阻值實測

鑒於上回使用熱敏電阻規格書上給定的特徵值,實做出來的"溫度對電壓"轉換表,仍然與擠出頭的實際溫度有相當的落差,特地買了一個熱電偶溫度計,配合三用電表,嚐試著自己測量可變電阻的特性參數。
熱敏電阻用三用電表測量阻值,同時用熱電偶溫度計測量水溫。

實際測量的溫度對電阻表列
溫度電阻值
81.59890
80.810090
79.410540
74.612430
69.914630
65.417290
60.121200
5525600
50.131300
45.339400
39.651200
35.461800
32.271900
31.673900
25100000

利用Excel 整理出實測值的曲線圖,並且配上透過公式算出來的電阻對溫度曲線,發現B值使用規格書上載明的3950,與實測值有相當的差距。
透過調整B值,讓特性曲線盡量逼近實測值,發現B值取4300會比較恰當。不過由於我使用辦公室開飲機的熱水做溫度測量的標的,所以只能測量室溫到80度左右的電阻值,所以並不能確定80度以上,一直到300度的特性曲線,是否與B值4300的特徵相符。改天再使用加熱鋁塊來測量熱敏電阻在溫度300度附近的特性。

畫特性曲線的EXCEL在此,有興趣的朋友可以參考:https://docs.google.com/spreadsheet/ccc?key=0AgxRsa-TcCE0dFVCT0pxdk5jUG1RTG82UGRkNk1sdlE&usp=sharing

2014年4月1日 星期二

初學者應該如何開始呢?

真是大哉問阿,該從哪開始著手呢?我認為,應該要先從燒壞幾顆4988控制板開始著手。

不燒壞點什麼零件,怎麼能自稱是Maker呢? XD

所以說,如果你是個打算自己從零件採購開始的Maker,我建議可以先從採購機電相關的零件開始。四至五顆步進馬達、RAMPS1.4、Arduino Mega 2560、六個4988控制模組(兩個備品)、三個微動開關,還有一些24AWG多心線、杜邦接頭組。歐,還有電源供應器NES-100-12。其實自己動手組裝3D印表機,最難搞定的,是電機安裝的部分。機械結構照著照片,大多不會裝錯,頂多是沒鎖緊,再補螺絲刀就解決;軟體設定的部份,就算是自己搞不懂怎麼設定也沒關係,使用網友提供的懶人包,也可以輕鬆過關。唯獨電線該怎麼接、電流要怎麼調整,沒人救得了你。安裝示意圖接點一大堆,實際拉出來的電線亂糟糟,實在是對不起來。就算都接對了,還要面對杜邦接頭壓接不確實,接觸不良等等用看得看不出問題的疑難雜症。然後還有馬達電流要怎麼調整的問題,就更頭大了。(這個步驟很多人都發生意外,可能會需要4988備品的步驟在這邊。)所以說電機安裝搞定了,其他部分就算是小菜一盤了。

先買電機零件,還有另外一個好處:可以慢慢再考慮到底要裝配哪款3D印表機。目前幾乎所有的RepRap積層式3D印表機,都可以使用RAMPS1.4系統,當作主要控制器。不管想嘗試看起來最簡單的SmartRAP,或是想挑戰連Sega都說很難搞的Delta型態,其他的i3、Air 2 就更不用說了,都可以使用RAMPS1.4系統。先採購RAMPS,絕對不會後悔(後悔的話請退給代理商,不要來找我  逃~)。

電機零件買齊之後,可以先參考Prusa i3組裝筆記裡面的相關組裝步驟,開始挑戰電機組裝,記得End Stop微動開關千萬別遺漏,沒裝好的話馬達是不會乖乖運作的。要特別注意,要先把Marlin懶人包裡面,溫度感應器的設定改回 "-1",還有LCD控制器也要在最開頭加回 "//" 符號,暫時關閉LCD控制器。因為還沒有安裝熱敏電阻,無法偵測溫度;由於LCD控制器的程式如果沒有溫度資料可以參考,會無法編譯。

安裝好RAMPS系統之後,就可以透過PC上Repetier-Host軟體的"手動控制"面板,開始試玩電機系統,讓三軸歸零、隨意控制三個馬達、試著把馬達控制線順序顛倒插,使馬達改變轉動方向。還有,使用M119指令,觀察End Stop的狀態。

再來,可以嘗試著調整4988模組上的可變電阻,讓4988吐出更多的電流來驅動馬達。觀察看看馬達是不是會變得更有力量? 馬達會不會變熱? 4988有沒有冒煙等等現象。當然,這個實驗可能會帶來些損失,不過不要擔心,沒燒壞點什麼,是不能自稱Maker的。

好啦,這第一個關卡,也是最難突破的關卡,如果能闖關成功,後續的3D印表機組裝、測試跟使用,應該也難不倒你。趕快去訂購零件吧!!

2014年3月26日 星期三

Marlin 溫度感應器 數值轉換對應表

(2014/03/27)Update: 自己實測了這個自動產生的對應表,結果測得的溫度與實際值仍有相當大的誤差。看來還是要回頭用測量的方式來校正溫度...

3D印表機內使用的溫度感應器,大多使用負溫度係數熱敏電阻(NTC)。溫度越高,阻值越小。 電阻值隨溫度變化的公式如下:

R(t) = R0 * Exp(B*((1/t) - (1/t0)))

其中R0是指溫度在t0時的電阻值。t0是標準參考溫度,一般規格書會以攝氏25度為參考溫度。 公式中溫度相關的參數,都使以凱氏溫度做計算,如果自己要動手做計算,記得要把攝氏溫度加上273.13,轉換成凱氏溫標,才能算出正確的阻值。B值是NTC的特性參數,請在自己所使用的熱敏電阻規格書中找出B值。

這邊提供一個方便的計算機,只要填妥 t0、R0、B值,在按下 "Try it" 按鈕,就會自動產生Marlin所使用的溫度偵測對應轉換表。把轉換表附蓋掉"Marlin/thermistortables.h"內,"temptable_1[][2] PROGMEM"所記錄的轉換表,並且確定"Marlin/Configuration.h"內,"#define TEMP_SENSOR_0"的設定值為"1"。再重新燒錄Marlin到RAMPS 1.4控制板,就可以獲得校準確的溫度偵測值。

由於部落格內不能執行Javascript,只好將計算機另外找網頁安置。請前往這個網址:
https://dl.dropboxusercontent.com/u/1325192/NTC/NTC.htm

參考資訊

阿男的部落格 - 3D列印噴頭的熱敏電阻更換

註記

熔普三維、捷泰 這兩家販售的J-Head應該都是使用這款熱敏電阻,規格特性如下,給大家做參考。

型號:B2-100-3950-1
R @ 25:K100K-1%
B25/50:K3950-1%
元素:熱敏電阻型MJB2
特性
(1)電氣特性
A:電阻值:R(25°C)= 100K±1%
B:B值:B=3950±1%(在25℃和50℃的電阻值計算出)
C:絕緣電阻50MΩ或以上DC500V兆歐表(玻璃和引線之間)
(2)熱時間常數(τ):τ≤10?17S(在靜止空氣中)
(3)熱耗散係數(δ):δ=1.1~1.6MW/°C(在靜止空氣中)
(4)工作溫度範圍:-50~+260°C

2014年3月17日 星期一

列印到一半馬達失步!! 怎麼辦?

慘...

相信大家都有這種經驗(沒遇過的實在是很幸福),一早起床發現列印作品被攔腰截成兩截,列印失步!!開始印的時候都沒問題阿,印的好好的。可是偷懶沒顧著機器,機器就跟著偷懶,出包給你看。(其實就算顧著,一樣會失步,而且束手無策。)G-code裡面幾千個指令中,只要其中一個指令造成馬達失步,整件作品就毀了。這樣失敗的作品,實在是難以見人啊!!

發生失步的原因,其實很簡單,就是工作需要的力量太大,馬達不夠力。所以解決失步的方向,不外乎加強馬達的力量(難),另外就是減輕馬達的負擔。

加強馬達力量的方法,不外乎換更大顆的馬達,或是增加供應給馬達的電流。換更大顆的馬達,得要花大錢重新買,而且買來到底夠不夠力,也沒個準。42型步進馬達的規格中,身長要多長?電流要買多少的?都要靠複雜的仔細計算才能有參考。

另外比較可行的也許是增加供應電流。大家買的馬達,額訂電流(電流上限)大約都是1.5~1.7A,但是4988驅動板上的電流供應設定,一般都不會超過1A。所以電流是可以再繼續提高的,不過4988驅動板要另外買,或是更換Rs電阻。電流提高後,還要面對4988散熱不良會燒毀的困擾,要千萬注意。

以上是增加馬達力量的方法,除了既有4988驅動板的電流調高到接近1A以外,其他方法可行性都不高。另外一方面要設法減低馬達的負載,可以嘗試的方法就比較多了。

1. 放鬆皮帶的鬆緊度
皮帶太緊,會增加馬達軸,還有墮輪的摩擦力。合適的鬆緊度,有助於馬達順利運轉,而且兼顧定位的精準度。

2. 減少馬達的負載重量
列印平台的玻璃、列印台底板(有些人使用金屬),是Y軸負荷重量的主要來源。使用較薄的玻璃,或是用玻纖板替代原有的玻璃,可以減輕重量。在強度充足的前提下,列印台底板上盡量鏤空,或使用更輕的材質,也可以減少Y軸馬達的負荷。

X軸最大的重量負荷,來自擠出機馬達。如果把擠出機構改成遠端送料 Bowden 型態,可以大幅降低X軸馬達的負荷。

3. 降低列印速度
車開慢一點,需要的力量就減低了,這不需要再解釋吧~~

4. 降低加速度
這其實是最有效又實惠的解決辦法,可以印得又快又穩。

牛頓運動定理中提到 F(力量) = M(質量) x a(加速度)
當加速度減小,所需的力量也會等比例得減小。雖然質量減小也有幫助,可是質量能減小的比例有限。加速度減小,可以改善失步,但是不代表"最高列印速度"也會跟著降低。只是加速到最高速度需要的時間會增長而已。所以降低加速度,但是不降低列印速度,仍然可以保有相當快的列印速度。只犧牲一些些列印時間,但是又不會失步,一舉兩得!

加速度的設定,建議可以直接透過 LCD修改 Marlin 韌體裡的參數,然後儲存到 EEPROM 裡面。也可以直接修改 Marlin 的 Configuration.h 設定檔,再重新燒錄到 2560 控制板。再不然也可以在切片軟體裡面設定。

Marlin 的加速度設定,分為 Default (預設) 與 Max.(最高) 兩個部分。 Default 是當 G code  執行 G0、G1 等"移動指令"時所使用的加速度,預設值是 3000mm/s2。當 G code 執行 M204 ,嘗試著要修改 Default 加速度時,設定值不能超過 Max. 加速度的值。直接把 Max 加速度設定到3000mm/s2以下,才能有效避免 G code 裡面的 M204 又把加速度調高。

LCD 控制板內選擇 "Control -> Motion -> Amax x" 與 "Control -> Motion -> Amax y" 可以修改 Max. 加速度。修改好後記得要使用 "Control -> Store memory" 把設定值存入 EEPROM 中,下次開機才不必重新再調整一遍。

如果想從 Marlin 的 Configuration.h 做修改,請找到這行:
#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}
把兩個 "9000"的數字調低到合適的數字,再重新燒錄韌體進 2560 控制板。
如果之前使用過 EEPROM 記錄設定值,記得要在LCD選擇"Control -> Restore Failsafe",清除EEPROM中的設定,才會讓燒錄進去的設定值升效。
修改成 #define DEFAULT_MAX_ACCELERATION      {1500,1500,100,10000}


切片軟體 KISSlicer 的加速度設定,在 "Printer -> Speed -> XY Accel [mm/s^2]"


Slic3r 的加速度設定,在 "Print Settings -> Acceleration control (advanced)" 。 如果填 0 ,Slic3r 會使用 3000mm/s2這個預設值。請把這個框框裡所有的 0 ,都修改成合適的加速度。


至於加速度設定多少會合適呢?建議可以用二分法慢慢做實驗。預設值是3000mm/s2,所以第一次測試時使用1500mm/s2。如果不會失步,就再提升至 1500-(3000-1500)/2 = 2250mm/s2;如果會失步,就要再降低至750mm/s2。重複幾次測試之後,應該就可以找出自己機器的合理設定值了。另外要注意,測試時列印速度也許可以設高一點,譬如100mm/s,而且千萬要記得關閉切片軟體的 auto cooling 功能,要不然測試時使用較小件的模型,會讓切片軟體強迫減慢列印速度,導致實驗不準確。

KISSlicer 中,每層列印時間至少要10秒的設定,改成0秒,避免列印速度變慢影響實驗結果。

Slic3r 中,"Enable auto cooling" 自動降溫要取消勾選,避免列印速度變慢影響實驗結果。


以上,希望大家列印時都可以不必再提心吊膽,安穩睡個好覺!

2014年3月12日 星期三

Prusa i3 做搭橋速度實驗

i3 抓來做Bridge 測試,Slic3r的Speed中,Bridges speed 依序測了 60->30 ->90->70->50 (mm/s)。
溫度我設180度,層高0.2。

測試模型在這邊:
http://www.thingiverse.com/thing:269679

Bridge的速度設定在這個地方


看起來速度設60mm/s最理想


ATOM小改裝

1. 4988加上散熱片

2. 晶晶腸散熱片塗上散熱膏