国产猛男猛女超爽免费视频,国产精品一区二区不卡小说,免费调教小骚货视频,欧美日韩亚洲免费一区

3D打印機固件Marlin固件基本配置 史上最詳細 

2017-08-12 00:20
Marlin固件基本配置概述
眾所周知,Sprinter固件是之前用的比較多的3D打印機固件,而Marlin固件和Repetier-firmware固件都是由其派生而來。而且這兩款固件的用戶群非?;钴S,而Sprinter固件已經沒有人維護了。在這二者中,Marlin固件的使用更加廣泛,很多打印機控制軟件都兼容Marlin固件。一般用戶在使用Marlin固件的時候只需要改變一下Configuration.h文件中的一些參數即可,非常方便。這對一般3D大打印玩家來說可是非常好的福利喲。今天閃融三維就跟大家一起分享一下這份指南,它是一份簡單的用戶指南,告訴用戶設置的基本信息、怎么運用這些設置、根據不同的需求制定特色功能。
Marlin固件GitHub地址:https://github.com/ErikZalm/Marlin

Marlin固件特點
Marlin相對于Sprinter有很多優(yōu)點,具體為以下幾點:
1. 預加速功能(Look-ahead):
Sprinter在每個角處必須使打印機先停下然后再加速繼續(xù)運行,而預加速只會減速或加速到某一個速度值,從而速度的矢量變化不會超過xy_jerk_velocity。要達到這樣的效果,必須預先處理下一步的運動。這樣一來加快了打印速度,而且在拐角處減少耗材的堆積,曲線打印更加平滑。
2. 支持圓?。ˋrc Support)
Marlin固件可以自動調整分辨率去以接近恒定速度打印一段圓弧,得到最平滑的弧線。這樣做的另一個優(yōu)點是減少串口通信量。因為通過1條G2/G3指令即可打印圓弧,而不用通過多條G1指令。
3. 溫度多重采樣(Temperature Oversampling)
為了降低噪聲的干擾,使PID溫度控制更加有效,Marlin采樣16次取平均值去計算溫度。
4. 自動調節(jié)溫度(AutoTemp)
當打印任務要求擠出速度有較大的變化時,或者實時改變打印速度,那么打印速度也需要隨之改變。通常情況下,較高的打印速度要求較高的溫度,Marlin可以使用M109 S<mintemp> B<maxtemp> F<factor>指令去自動控制溫度。
使用不帶F參數的M109指令不會自動調節(jié)溫度。否則,Marlin會計算緩存中所有移動指令中最大的擠出速度(單位是steps/sec),即所謂的“maxerate”。然后目標溫度值通過公式T = tempmin + factor*maxerate,同時限制在最小溫度(tempmin)和最大溫度(temPMAX)之間。如果目標溫度小于最小溫度,那么自動調節(jié)將不起作用。最理想的情況下,用戶可以不用去控制溫度,只需要在開始使用M109 S B F,并在結束時使用M109 S0。
5. 非易失存儲器(EEPROM)
Marlin固件將一些常用的參數,比如加速度、最大速度、各軸運動單位等存儲在EEPROM中,用戶可以在校準打印機的時候調整這些參數,然后存儲到EEPROM中,這些改變在打印機重啟之后生效而且永久保存。
6. 液晶顯示器菜單(LCD Menu)
如果硬件支持,用戶可以構建一個脫機智能控制器(LCD屏+SD卡槽+編碼器+按鍵)。用戶可以通過液晶顯示器菜單實時調整溫度、加速度、速度、流量倍率,選擇并打印SD卡中的G-Code文件,預加熱,禁用步進電機和其他操作。比較常用的有LCD2004只能控制器和LCD12864只能控制器。
7. SD卡內支持文件夾(SD card folders)
Marlin固件可以讀取SD卡中子文件夾內的G-Code文件,不必是根目錄下的文件。
8. SD卡自動打印(SD card auto print)
若SD卡根目錄中有文件名為 auto[0-9].g 的文件時,打印機會在開機后自動開始打印該文件。
9. 限位開關觸發(fā)記錄(Endstop trigger reporting)
如果打印機運行過程中碰到了限位開關,那么Marlin會將限位開關觸發(fā)的位置發(fā)送到串口,并給出一個警告。這對于用戶分析打印過程中遇到的問題是很有用的。
10. 編碼規(guī)范(Coding paradigm)
Marlin固件采用模塊化編程方式,讓用戶可以清晰地理解整個程序。這為以后將固件升級到ARM系統提供很大的方便
11. 基于中斷的溫度測量(Interrupt based temperature measurements)
一路中斷去處理ADC轉換和檢查溫度變化,這樣就減少了單片機資源的使用。
12. 支持多種機械結構
普通的XYZ正交機械,CoreXY機械,Delta機械以及SCARA機械。

基本配置
使用Arduino IDE打開marlin.ino,切換到Configuration.h即可查看并修改該文件。或者使用任何一款文本編輯器(notepad,notpad++等)直接打開Configuration.h也可以。Marlin固件的配置主要包含一下幾個方面:
1. 通訊波特率
2. 主板類型,所使用的主板類型
3. 溫度傳感器類型,包括擠出頭溫度傳感器和加熱床的溫度傳感器
4. 溫度配置,包括噴頭溫度和加熱床溫度
5. PID溫控參數,包括噴頭溫度控制和加熱床溫度控制
6. 限位開關
7. 4個軸步進電機方向
8. X/Y/Z三個坐標軸的初始位置
9. 打印機運動范圍
10. 自動調平
11. 運動速度
12. 各軸運動分辨率
13. 脫機控制器

根據筆者的經驗來說,Marlin固件中的Configuration.h將各個配置模塊化,非常便于閱讀及修改,而且注釋非常詳細,英文好的朋友可以很容易地理解各參數的意義。注意到Marlin固件使用C語言編寫,“//”后面的是注釋語句,不會影響代碼的作用。另外Marlin固件中大量使用#define,簡單來講,就是定義的意思,包括定義某個參數的數值,定義某個參數是否存在。
最開始的兩行非注釋語句是定義固件的版本和作者。缺省的版本號就是編譯時間,這個可以不用修改,只需要把作者改為自己的名字即可,注意不能包含中文,不然會亂碼。
#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
#define STRING_CONFIG_H_AUTHOR "www.hfsrsw.com" // who made the changes.

電腦和打印機通過串口進行通訊,要定義好端口和波特率,在此定義的是3D打印主板的端口和波特率,端口號使用默認的0就可以了。Marlin固件默認的波特率是250000,也可以修改為其他值,比如115200,這是標準的ANSI波特率值。
#define SERIAL_PORT 0
#define BAUDRATE 250000

下面定義主板類型,Marlin固件支持非常多種類的3D打印機主板,比如常見的RAMPS1.3/1.4、Melzi、Printrboard、Ultimainboard、Sanguinololu等控制板。需要注意的是不同主板使用不同的腳口和數量,如果該定義和Arduino IDE中使用的主板不一致,肯定會導致編譯不通過。筆者使用的是RAMPS1.4并且D8、D9、D10控制的是一個噴頭加熱、一個加熱床加熱和一個風扇輸出,因此定義為33。
#ifndef MOTHERBOARD
#define MOTHERBOARD 33
#endif

接下來是定義擠出頭的個數及電源類型,筆者使用的是單噴頭打印機,因此定義為1。電源有兩種類型可以選擇,1表示開關電源,2表示X-Box 360 203伏電源,一般都使用的是開關電源,因此定義為1。
#define EXTRUDERS 1
#define POWER_SUPPLY 1

接下來定義溫度傳感器類型,包括每個噴頭使用的溫度傳感器(如果是多噴頭)和加熱床的溫度傳感器類型,常用的溫度傳感器有電熱偶和熱敏電阻兩大類,熱敏電阻又分為很多種。目前的3D打印機主要用的是熱敏電阻,具體是哪種熱敏電阻需要自己判斷或詢問賣家,不出意外的話,都是100k ntc熱敏電阻,即1。根據注釋,1要求4.7k的上拉電阻,而根據RepRap wiki,幾乎所有的3D打印機都使用了4.7K的熱敏電阻上拉電阻。筆者觀察了幾種電路板的電路圖,發(fā)現都使用了4.7K的上拉電阻,如圖1所示。
// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
筆者的打印機為單噴頭,因此第一個噴頭的溫度傳感器配置為1,其他配置為0(0表示沒有使用),加熱床的溫度傳感器也配置為1。
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 1
001948lxf777d7ffszhdbc.png
圖 1  4.7K上拉電阻

接下來是溫度檢測的一些配置,包括雙噴頭溫度差,M109檢測配置,安全溫度配置。下面筆者一一解釋。
首先下面這一句配置雙噴頭溫差最大值,如果溫度超過這個數值,那么打印機會終止工作,因此對于雙噴頭打印機玩家來說,這個參數需要注意。
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
下面這一段配置M109指令完成的指標,我們知道,M109指令設定噴頭溫度并等待,那么等待到什么時候呢?下面這三個參數控制這個時間。第一個參數表示溫度“接近”目標溫度必須持續(xù)10秒才算加熱完成,第二個參數表示和目標溫度相差不超過3°為“接近”,第三個參數表示從溫度與目標溫度相差不超過1度開始計時,從此刻開始,溫度和目標溫度持續(xù)接近10秒鐘,則完成加熱。
#define TEMP_RESIDENCY_TIME 10
#define TEMP_HYSTERESIS 3      
#define TEMP_WINDOW     1     
下面配置安全溫度范圍的下限和上限,包括各個噴頭和加熱床。如果溫度超過下限,那么打印機會拋出MINTEMP的錯誤并終止工作,如果超過上限,那么打印機拋出MAXTEMP的錯誤并終止工作。Marlin用這種方式保護3D打印機。下面的配置最小溫度都是5°,噴頭的最大溫度為275°,熱床的最大溫度為150°。
#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define BED_MINTEMP 5
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define BED_MAXTEMP 150
如果希望M105指令在報告溫度的時候,也報告噴頭和加熱床的功率,則可以將下面兩句的前面的”//”去掉。具體的功率數值需要用戶自己計算得到。
#define EXTRUDER_WATTS (12.0*12.0/6.7)
#define BED_WATTS (12.0*12.0/1.1)      
接下來配置溫度控制方法,Marlin提供兩種溫度控制方法,一種是簡單的bang-bang控制,這種控制方法比較簡單,效果較差,另一種是PID控制,即比例-積分-微分控制方法,這種控制效果比較好。因此筆者使用PID控制。而關于PID控制的詳細資料,請自行查閱。關于PID參數的設置,對普通3D打印機玩家來說影響不是很大,一般的參數設置都能滿足溫度控制的需要,因此使用默認的Ultimaker PID參數即可。對于加熱床來說,使用默認的控制方法即可。
#define PIDTEMP

越過了溫度控制方法之后,就到了保護擠出機的配置,包括防止冷擠出和過長距離的擠出。防止冷擠出就是在噴頭溫度低于某個溫度的時候是擠出動作無效,而過長距離的擠出是指一次擠出的距離不能大于某個長度。第一句是防止冷擠出,第三句是定義冷擠出的溫度,即170°,玩巧克力或食品打印機的朋友需要注意到這個溫度值。第二句是防止冗長擠出,第四局指明了這個距離的數值,為X軸長度與Y軸長度之和。
#define PREVENT_DANGEROUS_EXTRUDE
#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MINTEMP 170
#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH)

接下來的一大段是為了防止溫度失控遭造成著火而設置的,筆者就遇到過這樣的情況,當時熱敏電阻沒有放到噴頭上,然后一直在加熱,最終將PEEK燒爆炸了。這個配置的具體原理是如果測得溫度在很長一段時間內和目標溫度的差大于某個數值,那么打印機會自動終止,從而起到保護打印機的效果。Marlin默認將這幾句注釋掉了,即不做這樣的保護,如果用戶希望做這樣的保護,只需要將注釋取消即可。第一句是配置檢測時間,第二句是控制溫度差距。對于加熱床也有類似的配置,需要注意的是,當前越來越大的熱床被使用,導致加熱速度很慢,要防止被誤查。
#define THERMAL_RUNAWAY_PROTECTION_PERIOD 40
#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS 4
#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD 20
#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS 2

終于來到了機械配置部分,首先需要配置的是限位開關。一般的配置是,對所有的限位開關都使用上拉電阻,而機械式限位開關連接在常閉段,那么限位開關在正常情況下(未觸發(fā)),信號端(SIGNAL)為低電位,限位開關觸發(fā)時,開關處于開路狀態(tài),信號端為高電位。這和Marlin中默認的限位開關邏輯相同。

首先保持使用上拉電阻,
#define ENDSTOPPULLUPS
接著就是所有的限位開關都使用上拉電阻形式。
#ifdef ENDSTOPPULLUPS
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif
下面就是限位開關的邏輯配置,如果限位開關連接方式為GND端連接限位開關的COM端,而SIGNAL端連接的是限位開關的常閉(NC)端,那么就把該限位開關對應的邏輯設置為false,否則設置為true。如果使用的打印機只有最小值處的限位開關,那么保持默認設置即可。
const bool X_MIN_ENDSTOP_INVERTING = false;
const bool Y_MIN_ENDSTOP_INVERTING = false;
const bool Z_MIN_ENDSTOP_INVERTING = false;
const bool X_MAX_ENDSTOP_INVERTING = true;
const bool Y_MAX_ENDSTOP_INVERTING = true;
const bool Z_MAX_ENDSTOP_INVERTING = true;
有的打印機并不是使用了6個限位開關,大多數情況下,都是使用3個最小值處的限位開關,而最大值處的限位開關都沒有使用。Marlin固件允許用戶指定所使用的限位開關。下面兩行可以選擇去告訴打印機沒有使用哪些限位開關,筆者打印機只是使用了全部3個最小值處的限位開關,因此禁用最大值處的限位開關。即將第一行的注釋符“//”去掉。
#define DISABLE_MAX_ENDSTOPS
//#define DISABLE_MIN_ENDSTOPS

下面配置步進電機的運動方式,主要配置步進電機的正向反向,根據實際情況改變配置即可,如果發(fā)現某個步進電機運動方向不對,把對應的配置改為相反的值即可。
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true  
#define INVERT_E0_DIR false

緊接著配置回歸初始位位置,-1表示初始位置為坐標最小值處,1表示初始位在坐標最大值處。筆者的打印機配置如下:
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

接下來是關于Marlin如何確定步進電機已經達到邊界的位置,軟限位的方式是通過判斷噴頭的坐標值是否越過打印機范圍,否則根據限位開關的狀態(tài)判斷是否越位。因為筆者的打印機限位開關都在最小值處,為了節(jié)省計算資源,只需要對最大值使用軟限位方式。配置如下:
#define min_software_endstops false
#define max_software_endstops true
那么為了正確判斷噴頭是否越位,需要正確配置打印機的打印范圍。MAX為最大坐標,MIN為最小坐標。筆者的打印機范圍為200×200×160mm,因此配置如下:
#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 160
#define Z_MIN_POS 0
接下來的一大段控制自動調平,筆者認為當前3D打印機都存在一個平臺不平整的問題,因此自動調平沒太大作用,因此沒有使用自動調平,確保下面一句處于注釋狀態(tài)。
//#define ENABLE_AUTO_BED_LEVELING

接下來就該配置步進電機的運動選項了。首先是定義軸的數量,對于單噴頭機器,應該是4軸,分別是X軸、Y軸、Z軸和E軸。然后是回歸初始位的速度,注意單位是毫米每分鐘。Z軸回歸初始位的速度比較慢,E軸不存在初始位,因此設置為0。
#define NUM_AXIS 4
#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0}

接下來配置很重要的四個參數,每個軸的運動分辨率,即每個軸方向上發(fā)生1毫米的運動,對應的步進電機應該轉動多少步。一般來說X軸和Y軸都是步進電機+同步帶結構,Z軸為步進電機+絲桿結構,而擠出機為步進電機+齒輪結構,這四個參數可以通過Repetier-Host軟件中的計算器(工具菜單中)計算得來。
對于X軸和Y軸來說,計算原理為步進電機轉一周為360°,與此同時,同步輪發(fā)生一周的轉動,假如同步輪為17齒,那么同步帶上一點就運動了17個齒距的長度,如果使用同步帶齒距為2毫米,那么就發(fā)生34毫米的運動。而假如步進電機步距角為1.8°,同時驅動器的細分數為1/16,那么步進電機轉一圈就發(fā)生360/1.8*16=3200步。因此X軸和Y軸的分辨率就是3200/34 = 94.12。
對于Z軸來說,步進電機轉一周,同樣轉動了3200步,而假如使用的絲桿導程為8毫米,即絲桿轉一圈,絲桿螺母運動8毫米,那么Z軸的分辨率就是3200/8=400。
而對于擠出機來說,如果為近端擠出,不需要加減速器,那么步進電機轉一周,帶動擠出齒輪轉一周,那么耗材就被擠出“擠出齒輪的周長”這個距離,假如擠出齒輪直徑為10毫米,那么E軸分辨率就是3200/(10*3.14) = 101.86。如果擠出機電機帶有減速器,這個數值還要除以減速比。
因此筆者配置如下:
#define DEFAULT_AXIS_STEPS_PER_UNIT   {74.12,74.12,400,101.86}

剩下的就是最大速度及加速度的配置,一般來說,使用默認值即可。如果發(fā)現打印機抖動很厲害,可能是因為加速度過大的原因,可以將第二行中的前兩個數值改為3000,把三行的默認加速度數值改為1000。
#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 25}
#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}
#define DEFAULT_ACCELERATION          3000
#define DEFAULT_RETRACT_ACCELERATION  3000
#define DEFAULT_XYJERK                20.0
#define DEFAULT_ZJERK                 0.4
#define DEFAULT_EJERK                 5.0

筆者使用的主板是RAMPS1.4,可以選用很多脫機智能控制器,即可以不用聯機,使用顯示屏里面的菜單就可以控制打印機。筆者使用的是LCD12864控制器,因此將下面一句的注釋符去掉,告訴固件使用這款控制器。
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
另外一款比較常用的控制器是LCD2004控制器,使用這一款就需要把下面一句的注釋去掉,并把其他的控制器選項都注釋。用戶也可以選擇其他的控制器,只需做相應的配置即可。
#define REPRAP_DISCOUNT_SMART_CONTROLLER
智能控制器都有預熱菜單,即選擇預熱PLA和預熱ABS,具體的溫度可以進行更改。筆者打印PLA,一般噴頭溫度設置為210°,而加熱床溫度設置為40°;打印ABS的話,噴頭溫度設置為230°,加熱床溫度設置為60°。因此配置如下:
#define PLA_PREHEAT_HOTEND_TEMP 210
#define PLA_PREHEAT_HPB_TEMP 40
#define PLA_PREHEAT_FAN_SPEED 255
#define ABS_PREHEAT_HOTEND_TEMP 230
#define ABS_PREHEAT_HPB_TEMP 60
#define ABS_PREHEAT_FAN_SPEED 255

至此,Marlin基本配置已經完成??梢酝ㄟ^Arduino IDE選擇相應的端口和板子類型,然后編譯上傳到主板上,可以通過Repetier-Host或者PrintRun軟件調試打印機,發(fā)現問題再調整固件的參數,重新上傳,直到打印機正常工作。
聲明:3D打印資源庫(3dzyk)內網友所發(fā)表的所有內容及言論僅代表其本人,并不代表3D打印資源庫(3dzyk)觀點和立場;如對文章有異議或投訴,請联系kefu@3dzyk.cn。
B Color Smilies

全部評論8

12>
3D打印機固件Marlin固件基本配置 史上最詳細 
聯系
我們
快速回復 返回頂部 返回列表
青河县| 陆川县| 确山县| 丽水市| 中超| 会同县| 民县| 棋牌| 枞阳县| 如东县| 平罗县| 罗田县| 聂拉木县| 特克斯县| 西贡区| 云阳县| 阳东县| SHOW| 潜山县| 通化市| 桂林市| 伊通| 商南县| 齐河县| 招远市| 奇台县| 乾安县| 昌黎县| 南阳市| 泽普县| 镇沅| 清流县| 临海市| 仪征市| 太仆寺旗| 绩溪县| 水富县| 高邑县| 芜湖县| 新丰县| 温宿县|