2013年8月22日 星期四

計算移動1mm,步進馬達需要走幾步?

這問題裡面有幾個變數
1. 控制器發出一個訊號,馬達要轉幾分之幾步。
2. 馬達轉一步,實際上轉了幾度
3. 皮帶齒距有多遠
4. 同步齒輪有幾齒
這幾個變數有了,就可以算出噴頭移動1mm, 控制板需要發送出幾個訊號

自動計算機:Steps per millimeter

XY軸用 belt driven system 做計算


motor step angle : 步進馬達一步轉動的角度。
driver microstepping : 驅動晶片微步進,RAMPS上三個跳線都短接的話,會是 1/16
belt presets : 同步齒輪種類。(我用的是2mm GT2)
pulley tooth count : 同步齒輪齒數
Result是XY軸的 steps per unit

z軸用 leadscrew driven systems 做計算

motor step angle : 步進馬達一步轉動的角度。
driver microstepping : 驅動晶片微步進,RAMPS上三個跳線都短接的話,會是 1/16
presets : 選 M8 或 M5, 視Z軸牙條選用的種類。
Gear ratio : 我們沒有使用齒輪做力距轉換,所以用 "1:1" 就可以。
Result是Z軸的 steps per unit

Marlin 擠出頭溫度控制PID值校正

擠出頭加熱器、溫度感應器安裝好後,先別急著直接指定工作溫度並且加熱。因為控制板上的溫度控制PID參數尚未校正。如果加熱速度過快,有可能會加熱過度並且導致零件燒毀。

Marlin 有提供 PID 參數自動校正的功能 (PID Autotune)

加熱器、溫度感應器線路接妥後,執行G-code "M303 C8 S175" (自動調整PID參數,溫度震盪8次後停止,目標溫度175度。)。

若收到錯誤訊息"PID Autotune failed! Temperature too high",代表初始測試條件會讓溫度超出目標溫度20度。這時候需要修正韌體中的PID_MAX(加熱頭最高電流上限)。請修改Configuration.h中的PID_MAX(譬如改為原本的一半),然後重新燒錄韌體後,再回到上個步驟做 "M303 C8 S175"。如果重複測試後溫度上不去,請提高PID_MAX。如果溫度還是衝過頭,請繼續降低PID_MAX。

待收到 "PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h" 的訊息,請用測試過程中最後一輪的 Kp, Ki and Kd 值,替換掉 Configuration.h 中的 DEFAULT_Kp, DEFAULT_Ki 和 DEFAULT_Kd。之後重新燒錄韌體,完成擠出頭溫度控制校正。


感謝Jacky Yen提供圖片

編按:自動測出來的PID,依我的經驗,仍然會有衝過頭的現象。我是有把P值稍微再調低一點。

2013年8月2日 星期五

Sanguino 控制板 安裝 Marlin 韌體

Note: Sanguinololu 1.3a 在USB 晶片跟1284P的通訊設計上,有些問題,倒致非常多網友買板子買來,卻無法使用。建議請避免再購買Sanguinololu。


Sanguinololu簡介

(譯自http://reprap.org/wiki/Sanguinololu  翻得不好,請多多指教。)

Sanguinololu 是一個相對便宜的 RepRap 綜合控制電路板,使用ATMEGA-1284做主控制器,使用四組 Pololu 模組做步進馬達控制控制,分別控制XYZ三軸和擠出機。提供了I2C, SPI, UART等介面供軟體開發者延伸控制功能。ADC 腳位提供量測功能(測溫度用)。額外的14個GPIO可以增加周邊電路的控制功能,例如SD卡、LCD液晶銀幕等等。

 Marlin 韌體特色:

(譯自 https://github.com/ErikZalm/Marlin  翻得不好,請多多指教。)

Look-ahead (加減速預測):

透過預先分析下一個位置移動指令,Marlin知道下一個指令需要的馬達速度。靠著這樣的資訊,在結束當下指令的馬達轉動之前,不必減速到完全停止,而是直接改變馬達速度去執行下一個指令。這樣可以大幅加快列印的速度。

Arc Support (支援弧線): 

Marlin可以自己決定最佳的弧線分段解析度,得到最平滑的弧線。

Temperature Oversampling  (溫度多重採樣):

為了減少雜訊對溫度測量的干擾,Marlin採樣16次後取平均值來當作加熱時溫度控制的參考依據。

AutoTemp(自動溫度控制):

當環境溫度改變,或是列印速度改變時,擠出頭加熱需要輸出的功率,都需要跟著改變。Marlin利用PID自動控制技術,讓擠出頭能夠穩定得維持工作溫度。

EEPROM(參數記憶功能):

系統運作時需要一些參數來調整工作表現。例如控制溫度的PID參數、步進馬達的"距離 / 步數 對應值",仍然需要依照整個印表機的實際狀況進行調整。這些調整後校準的結果,可以透過EEPROM的記憶功能,保留在控制晶片中。下次開機會自動載入,不需重新校正。

LCD Menu (液晶顯示器選單):

透過外加的液晶顯示器、按鍵模組,Marlin可以提供即時的離機操作。可以控制的功能包括: 改變工作溫度、改變馬達加速度、改變工作速度、改變擠出頭擠出率、選擇SD卡中的檔案進行列印、預熱還有關閉馬達。相關硬體可以參考 http://www.thingiverse.com/thing:12663

SD card folders:

可以讀取SD卡內的資料夾,檔案不必放在卡片內最上層目錄。

SD card auto print:

當SD卡最上層資料夾中,有檔名為 auto[0-9].g 的檔案時,機器會在開機後自動開始列印該檔案。

Endstop trigger reporting:

在列印過程中,當邊界偵測意外被觸發,會留下記錄。這有助於釐清列印失敗的原因。

在Sanguinololu上安裝Marlinl


設定馬達控制的"微步進" (Microstepping)

Microstepping Jumper Settings
微步進的設定,是透過Sanguinololu板子上的跳線來操作。跳線的位置在馬達驅動板的下方,要把馬達驅動板拆下來才能看到跳線。一般會選用 1/8 或是 1/16 步進。要設定成八分之一步進的話,MS1 跟 MS2 要接上短路端子, MS3 維持開路。要設定成十六分之一步進的話,MS1 、 MS2 跟 MS3 都要接上短路端子。四個馬達控制板都要做個自的設定。



下載 Arduino 1.0.1 

(在這個版本上測試沒有出現問題)
Download the Arduino Software
下載後解壓縮到C:\arduino\arduino-1.0.1

下載 Marlin

https://github.com/ErikZalm/Marlin (找 "Download Zip"按鈕進行下載)
載點
解壓縮到C:\arduino\Marlin-Marlin_v1

新增sanguino硬體資訊到Arduino中

將資料夾C:\arduino\Marlin-Marlin_v1\ArduinoAddons\Arduino_1.x.x\sanguino
整個複製到C:\arduino\arduino-1.0.1\hardware

啟動 Arduino

執行C:\arduino\arduino-1.0.1\arduino.exe

在 Arduino 中指定硬體為 Sanguino


將Sanguino與電腦用USB連接

todo: 貼上照片

安裝Sanguino驅動程式

驅動程式請指定在C:\arduino\ 中進行自動搜尋
todo: 貼上照片

設定COM port

選擇正確的COM port

開啟Marlin程式碼

File -> Open
開啟 C\arduino\Marlin-Marlin_v1\Marlin\Marlin.pde

修改設定檔 Configuration.h


#define MOTHERBOARD
主控板種類
修改為 62 ,設定成"使用Sanguinololu 1.2 and above"

#define TEMP_SENSOR_0
擠出頭溫度感應器設定
如果使用100K的熱敏電阻,請修改為1。
如果還沒安裝溫度感應器,可以先改為0。


#define TEMP_SENSOR_1
熱床溫度感應器設定
如果使用100K的熱敏電阻,請修改為1。
如果還沒安裝溫度感應器,可以先改為0。

#define PID_MAX
加熱頭PID控制校正電流百分比,255對應到100%。
建議設定成100或更小,在校正擠出頭PID控制參數時,不要讓擠出頭加熱速度過快。

#define  DEFAULT_Kp
#define  DEFAULT_Ki
#define  DEFAULT_Kd
加熱頭PID控制參數。
要修改成多少,請參考 "擠出頭溫度控制校正"一文。
校正前,請不要啟動電熱頭加熱功能。

#define MAX_BED_POWER
熱床PID控制校正電流百分比,255對應到100%。

#define  DEFAULT_bedKp 10.00
#define  DEFAULT_bedKi .023
#define  DEFAULT_bedKd 305.4
熱床PID控制參數。


#define INVERT_X_DIR true    // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false    // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
如果馬達轉動方向顛倒,可以靠這些參數做修正。

// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
邊界偵測開關的位置,一般都安裝在位置原點的那一側,故設定成-1即可。

// Travel limits after homing
#define X_MAX_POS 205
#define X_MIN_POS 0
#define Y_MAX_POS 205
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0
機器工作區域的設定,單位是 mm。
請依照機器結構做設定。

#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0}  // set the homing speeds (mm/min)
尋找原點時機構運行的速度。如果馬達有失步的問題,可以考慮減小這邊的速度。
Z軸兩顆馬達串聯,如果運轉不順,馬達亂轉的話,可把Z數值從"4*60"改小成"2*60"再試看看。

// default steps per unit for Ultimaker
#define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200.0*8/3,760*1.1}
擠出頭移動1mm,主控板需要發出幾個步進訊號。
數值如何決定,請參考"計算移動1mm,步進馬達需要走幾步?"一文。

#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 25}    // (mm/sec)
擠出頭最高移動速度。如果馬達有失步的問題,可以考慮減小這邊的速度。

#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}
擠出頭移動時最大的加速度
機器運作時如果震動得很嚴重,可能是擠出頭加速減速過猛造成。可以減小這邊的數值來改善。

// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
#define DEFAULT_XYJERK                20.0    // (mm/sec)
#define DEFAULT_ZJERK                 0.4     // (mm/sec)
#define DEFAULT_EJERK                 5.0    // (mm/sec)
速度改變在這個值之內,控制板會不透過加速、減速的過程,直接把速度改到新指定的工作速度。如果起步就會卡住,或是列印過程中有失步,可以考慮減小這幾個設定的值。

上載 Marlin 到 Sanguino

修改完 Configuration.h 後,請存檔。然後直行 File->Upload,將 Marlin 上載到 Sanguino。
上載完成的話,在Arduino的狀態列會出先 Done Upload 字樣。


參考資訊

https://github.com/ErikZalm/Marlin
http://reprap.org/wiki/Sanguinololu
marlin 簡介.pdf (請先加入 FabLab Taipei 的 FB社團)
Ginge's Marlin Builder http://marlinbuilder.robotfuzz.com/



2013年7月31日 星期三

Sanguinololu 搭配 LM2596 降壓電路 控制擠出頭電熱器

Note: Sanguinololu 1.3a 在USB 晶片跟1284P的通訊設計上,有些問題,倒致非常多網友買板子買來,卻無法使用。建議請避免再購買Sanguinololu。

如果馬達驅動使用24V的電壓,可是擠出頭電熱器使用12V。這時候需要加裝降壓電路,以免加熱器無法正常工作,甚至燒毀。

以下為加裝降壓板的線路圖。


Sanguinololu 上 HotEnd 的 輸出腳位,正極連接到主板內部電源供應端,負極連接到主板內部一顆 MOSFET 做PWM的開關閘。故不能直接用 HotEnd 輸出腳位的負極當做降壓板的接地點。降壓板的接地點另外找風扇的接地點來代替,或是直接焊死到主板電源輸入腳位的接地點。

降壓板的輸出端正極連接到加熱器,負極已透過輸入端的負極與主板相接,故可不必再拉線到主板。電熱器的負極就依照原始設計,連接到主板 HotEnd 腳位的負極。

P.S. 如果需要12伏特的電壓驅動風扇,也可以從降壓板上拉電。

2013年7月8日 星期一

RepRap Air 2 DIY 筆記


*文章尚未完成,有建議歡迎留言~

綱要:
  1. 網路資訊
  2. 演進、特色
  3. 材料、採購資訊
  4. 機構組裝
  5. 機構校正
  6. 電機組裝(步進馬達、控制板、EndStop)
  7. 電機校正
  8. 主控板韌體設定
  9. PC端控制軟體
  10. 擠出機構組裝
  11. 擠出機構校正
  12. 擠出頭溫度調整
  13. 工件如何牢固黏合在玻璃平台上
  14. 參考資料

網路資訊



演進、特色


材料、採購資訊

機構
  • 壓克力 610x457mm, 厚 6mm, 2片。(拍賣上搜尋)(Fablab Taipei 雷切)
  • 3D列印零組件(找朋友幫忙印或是拍賣上找)(未來也許Fablab Taipei能夠提供機器讓大家印)(Sega整理的零件模型包)
  • M8 螺絲杆 285 mm 4支,210mm 2支,430mm 1支,(360 mm1支[選擇性]) (建議直接買不鏽鋼的,不要買鍍鋅的。)(建議買兩支100cm, 285 - 285 - 430三支一組裁切,285 - 285 - 210 - 210四支一組裁切。共六刀)
  • M8光軸395mm 6支
  • LM8UU,12個
  • M8 螺帽 (數量待查) (高來螺絲)
  • M8 墊片 (數量待查)
  • M8 35mm 螺絲釘 1支
  • M3螺絲 10mm24支,12mm23支,16mm4支,16mm7支。
  • M3螺帽 58個
  • M3墊片 58片
  • M2螺絲 15mm6支
  • M2螺帽 6個
  • M2墊片 6片
  • 擠料頭 J-Head
  • 2GT 同步齒輪 2 個
  • 皮带2GT-6
  • 高硼矽玻璃板 尺寸200*200*3mm 1片
電機
  • 12V30A 工業電源供應器 1台
  • 步進馬達(Nema 17 或 42型 夠力的) 5個
  • Reprap Sanguinololu Ver1.3a+4个A4988板替代RAMPS 1組
  • 加熱床電路板(20x20cm)

機構組裝

螺絲不要一次鎖到死。第一輪先稍微壓住版子就好,第二輪依"下一個螺絲找對角線上的先鎖"的規則,鎖緊一點就好。第三輪一樣找對角線的螺絲鎖,而且鎖到死。每鎖一個螺帽,就檢查一次整個機構有沒有平整,如果不平整,就需要鬆開數個螺絲,調整到平整之後,再重新鎖緊。

可以使用扭力板手來確認鎖緊的程度。

雙螺帽防鬆介紹


機構校正

todo

步進馬達功率、電壓估算

馬達驅動晶片A4988是"定電流源",會依照控制板上 Vref 的設定,給出固定的電流。如果馬達阻抗小,4988就會減少輸出電壓,如果馬達阻抗大,4988就會提高輸出電壓。如果需要的電壓超過4988收到的輸入電壓,那4988並無法供應如此高的電壓,造成馬達沒有足夠的功率進行轉動。

A4988 驅動板上 Vref  跟 "輸出電流" 的關係,請參考這裡。
http://reprap.org/wiki/Pololu_stepper_driver_board

雙極步進馬達加速和減速過程應用

電機組裝(步進馬達、控制板、EndStop)

* Z軸兩顆馬達串聯的裝法


* 可以利用G-code "M119" 來測試EndStop是否有正常工作。

End Stop 安裝

Sanguinololu上End Stop的接地,接到微動開關的 Common (C) 腳位;SIG接到微動開關的 Normally Open (NO) 腳位。

如果使用RAMPS 1.4 上End Stop的GND,接到微動開關的 Common (C) 腳位;S接到微動開關的 Normally Close (NC) 腳位。

電機校正

A4988@Sanguinololu 的微步進設定 ( 什麼是微步進 )

主控板韌體設定

下載Sanguinololu上的韌體 "Marlin"

下載 Arduino 1.0.1



計算移動1mm,步進馬達需要走幾步?

這問題裡面有幾個變數
1. 控制器發出一個訊號,馬達要轉幾分之幾步。
2. 馬達轉一步,實際上轉了幾度
3. 皮帶齒距有多遠
4. 同步齒輪有幾齒
這幾個變數有了,就可以算出噴頭移動1mm, 控制板需要發送出幾個訊號



XY軸用 belt driven system 做計算

  • motor step angle : 步進馬達一步轉動的角度。
  • driver microstepping : 驅動晶片微步進,Sanguinololu上三個跳線都短接的話,會是 1/16
  • belt presets : 同步齒輪種類。(我用的是2mm GT2)
  • pulley tooth count : 同步齒輪齒數
  • Result是XY軸的 steps per unit
z軸用 leadscrew driven systems 做計算
  • motor step angle : 步進馬達一步轉動的角度。
  • driver microstepping : 驅動晶片微步進,Sanguinololu上三個跳線都短接的話,會是 1/16
  • presets : 選 M8
  • Gear ratio : 我們沒有使用齒輪做力距轉換,所以用 "1:1" 就可以。
  • Result是Z軸的 steps per unit
設定 Marlin
#define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200.0*8/3,760*1.1}  // default steps per unit for Ultimaker
大括號內的數值,就是X,Y,Z,E四個軸的 "移動1mm,步進馬達需要走幾步",要計算,或是測試量出誤差後微調。

PC端控制軟體

Repetier

Repetier整合了切片軟體跟控制軟體,初學者容易上手。

Slic3r切片軟體設定

* retraction 設太多可能會抽斷PLA線,太少會容易產生牽絲的問題

G-Code


M220:set speed factor override percentage(重新設定整體速度參數,單位是"百分比")
Example: M220 S80
S<factor in percent>- set speed factor override percentage

M221: set extrude factor override percentage(重新設定擠出量,單位是"百分比"。可以用來稍微校正線材粗細造成實際擠出量的誤差。)
Example: M221 S70
S<factor in percent>- set extrude factor override percentage

M21: Initialize SD card (初始化SD卡)
Example: M21
The SD card is initialized. If an SD card is loaded when the machine is switched on, this will happen by default. SD card must be initialized for the other SD functions to work.

M22: Release SD card  (釋放SD卡)
Example: M22
SD card is released and can be physically removed.

M24: Start/resume SD print  (開始/繼續SD卡上的工作)
Example: M24
The machine prints from the file selected with the M23 command.

M25: Pause SD print (暫停SD卡上的工作)
Example: M25

M92: Set axis_steps_per_unit (設定"每走1mm需要步進馬達走幾步。測定擠出軸的 steps per unit 可以利用這個指令。)
Example: M92 X<newsteps> Sprinter and Marlin
Allows programming of steps per unit of axis till the electronics are reset for the specified axis. Very useful for calibration.

M303: Run PID tuning (自動調整擠出頭溫度控制的PID參數)
Generate Proportional, Integral and Derivative values for the hotend or bed (E-1). Send the appropriate code and wait for the output to update the firmware.
Hotend Usage: M303 S<temperature> C<cycles> Bed Usage: M303 E-1 C<cycles> S<temperature>
Example: M303 C8 S175 (用175度當作目標,待溫度震盪八次後完成PID參數的計算)

M500 - stores paramters in EEPROM (將控制參數寫入晶片,重開機之後會使用存入的參數)

M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).(讀取晶片中記錄的參數)

擠出軸車削

擠出機構組裝


擠出機構校正


擠出頭溫度控制校正

擠出頭加熱器、溫度感應器安裝好後,先別急著直接指定工作溫度並且加熱。因為控制板上的溫度控制PID參數尚未校正。如果加熱速度過快,有可能會加熱過度並且導致零件燒毀。

Marlin 有提供 PID 參數自動校正的功能 (PID Autotune)

加熱器、溫度感應器線路接妥後,執行G-code "M303 C8 S175" (自動調整PID參數,溫度震盪8次後停止,目標溫度175度。)。

若收到錯誤訊息"PID Autotune failed! Temperature too high",代表初始測試條件會讓溫度超出目標溫度20度。這時候需要修正韌體中的PID_MAX(加熱頭最高電流上限)。請修改Configuration.h中的PID_MAX(譬如改為原本的一半),然後重新燒錄韌體後,再回到上個步驟做 "M303 C8 S175"。如果重複測試後溫度上不去,請提高PID_MAX。如果溫度還是衝過頭,請繼續降低PID_MAX。

待收到 "PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h" 的訊息,請用測試過程中最後一輪的 Kp, Ki and Kd 值,替換掉 Configuration.h 中的 DEFAULT_Kp, DEFAULT_Ki 和 DEFAULT_Kd。之後重新燒錄韌體,完成擠出頭溫度控制校正。


工件如何牢固黏合在玻璃平台上

  • 在玻璃表面上塗口紅膠(PLA)
  • 在玻璃表面上預先擠一層1mm的ABS (ABS)
  • 使用熱床