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/