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印表機組裝、測試跟使用,應該也難不倒你。趕快去訂購零件吧!!