天天看點

3D列印機DIY之六------G代碼指令

        切片軟體對模型進行切片後會生成.gcode檔案,這就是我們常說的G代碼。G代碼是用于指導3D列印機怎麼動作的檔案,其實最主要就是指導列印機的3軸電機和擠出機如何動作,比如某個電機正轉多少、速度多少。

        3D列印機本質就是gcode的執行器,同樣的雕刻機、雷射雕刻機也是。我們把一張平面圖形通過軟體生成G代碼,G代碼就可以控制雷射雕刻機的x、y電機先運動到哪兒、再運動到哪兒、接着運動到哪兒.....一系列運動之後就把平面圖形雕刻出來了。我們把3D模型經過切片軟體處理後,就是把3D模型切成一層一層的平面圖形,同樣的道理控制電機經過一系列運動就可以把模型列印出來了。

        是以3D列印機的控制固件、切片軟體并不複雜,隻要知道了G代碼的文法,就可以自己寫一個G代碼的執行固件、G代碼的生成上位機。甚至不需要G代碼,你可以自己定義一種代碼,然後自己根據定義的代碼來設計執行固件和代碼生成上位機。

M92 E92.640000
M190 S60.000000
M109 S210.000000
;Sliced at: Wed 04-12-2019 20:39:58
;Basic settings: Layer height: 0.2 Walls: 0.8 Fill: 20
;Print time: 59 minutes
;Filament used: 2.708m 8.0g
;Filament cost: None
;M190 S60 ;Uncomment to add your own bed temperature line
;M109 S210 ;Uncomment to add your own temperature line
G21        ;metric values
G90        ;absolute positioning
M82        ;set extruder to absolute mode
M107       ;start with the fan off
G28 X0 Y0  ;move X/Y to min endstops
G28 Z0     ;move Z to min endstops
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0                  ;zero the extruded length
G1 F200 E3              ;extrude 3mm of feed stock
G92 E0                  ;zero the extruded length again
G1 F9000
;Put printing message on LCD screen
M117 Printing...

;Layer count: 250
;LAYER:-2
;RAFT
G0 F9000 X70.699 Y72.424 Z0.300
;TYPE:SUPPORT
G1 F1200 X71.320 Y71.910 E0.10054
G1 X72.120 Y71.371 E0.22086
G1 X72.666 Y71.071 E0.29856
G1 X73.699 Y70.614 E0.43945
G1 X74.884 Y70.287 E0.59277
G1 X75.607 Y70.181 E0.68391
.......
           

        上面是Cura輸出的列印模型的G代碼,第1行到第3行分别是M92、M190、M109指令,後面跟着的是指令的參數。第4行到第10行是“;”後面跟着模型的屬性資訊,“;”是G代碼的注釋符。再後面又是指令号跟着指令參數......當開始列印時,列印機會按照這個G代碼檔案,一行一行的執行。

       了解了G代碼檔案的組成,現在來說一下G代碼檔案中用到的指令。指令隻需要看一下就行,讀G代碼的時候,遇到什麼指令再回來查就可以了。

        G代碼的指令分為:延時的G指令、即時的G指令、即時的M和T指令。延時和即時的差別在于收到指令後,對指令的回應處理不同。控制器收到指令後,都會把指令放入循環隊列中,隻要把延時指令成功放入隊列,控制器就會給出應答,可是對于即時指令,隻有執行該指令後才會給出應答。

  一、延時的G指令

        RepRap固件接收到這些指令後,會先存儲在一個循環隊列緩存裡再執行。這意味着固件在接收到一條指令後馬上可以傳輸下一條。另一方面,這也意味着一組線段可以沒有間斷的情況下連續列印。為了實作指令流的控制,當接受到可緩存的指令時,如果固件把它成功放到本地緩存裡,就立即給出應答,如果本地緩存已滿,則會延時等到緩存有空出的位置時,才給出應答。

G0/G1: 直線移動

        G0和G1指令完全等價,作用就是讓噴頭線性移動到一個特定的位置。參數完整形式為:

G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn
           

或者

G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn
           

使用時,不需要所有的參數全部存在,但至少要有一個參數。其中,

Xnnn表示X軸的移動位置;

Ynnn表示Y軸的移動位置;

Znnn表示Z軸的移動位置;

Ennn表示E軸(擠出頭步進電機)的移動位置;

Fnnn表示移動速度,機關是毫米/每分鐘;

Snnn表示是否檢查限位開關,S0不檢查,S1檢查,預設值是S0;

如:

G1 F1500 
G1 X50 Y25.3 E22.4
           

       這兩行G-code,表示首先将移動速度設定為1500mm/min,然後将擠出頭移動至x=50mm, y=25.3mm的位置上,z軸高度不變,并且将擠出頭步進電機移動至22.4mm的位置上。注意,指令是将擠出頭移動到某個位置,而不是移動多少距離。比如前一個位置是X40 Y20 E20,那麼執行這條指令後,擠出頭往X正方向移動10mm,往Y正方向移動5.3mm,擠出機擠出2.4mm長度的耗材。

G28:複位

        列印機複位指令。執行時會讓3個軸依次往限位開關的方向運作,碰到限位開關後還會減速做一次1mm左右的往返運動,來保證複位的準确性。如果在指令後面加上坐标值,則隻會複位坐标值對應的坐标軸。(坐标值的數字會被忽略)

如:

G28 X0 Y72.3
           

隻會複位x軸和y軸。

一般G代碼檔案開頭都會用此指令來複位3軸。(如上面的示例)

G29:Z軸高度三點測試

這條指令會測試列印平面上三個點的Z軸高度,并在序列槽上輸出結果。參數為Snnn,表示對測試結果的處理方式。S1表示更新記憶體中的Z軸高度值(重置系統會丢失),S2表示更新記憶體以及EEPROM中的Z軸高度值(重置系統不會丢失)。

無參數時,G29指令表示隻從序列槽上輸出結果,不更新記憶體或EEPROM中的Z軸高度值。

一般來說,隻有使用高位限位開關(也就是說,Z軸的限位開關位于Z軸坐标最大處),且在擠出頭上附帶有Z軸高度測試微動開關的機型,适合使用G29指令測試Z軸高度。其他機械配置的機型,不适合使用G29指令。G29指令由固件配置

#define FEATURE_Z_PROBE 1

決定是否開啟。如果這個配置項定義為0,則編譯時會去除對G29指令的支援,節省記憶體的使用。

指令執行時,列印平面上的三個點,其XY坐标由以下固件配置參數決定:

#define Z_PROBE_X1 -52

#define Z_PROBE_Y1 -30

#define Z_PROBE_X2 52

#define Z_PROBE_Y2 -30

#define Z_PROBE_X3 0

#define Z_PROBE_Y3 60

在指令執行的開始和結束處,會分别執行一段預定義的G-code。預設的預定義内容為:

#define Z_PROBE_START_SCRIPT “G28”

#define Z_PROBE_FINISHED_SCRIPT “”

可以看出,在預設狀态下,開始執行G29時,系統會自動對擠出頭進行複位(G28指令)。結束執行G29時,沒有特殊的動作。

G29指令的Z軸高度測試,通常由一個微動開關控制觸發。這個開關的端口号,由Z_PROBE_PIN單獨指定。

G29指令的輸出,格式為:

X:0.00Y:0.00Z:200.00E:0.00Z-probe:5.01X:-52.00Y:-30.00Z-probe:13.04X:52.00Y:-30.00Z-probe:12.77X:0.00Y:60.00X:0.00Y:60.00Z:-98.48E:0.00

從以上例子的輸出可以看出,G29指令一共測試了三個坐标點,分别在(-52, -30), (53, 30)以及(0, 60)的位置,形成一個正三角形。三個點的Z軸高度相差比較懸殊,在第一個點正好是5mm的情況下,後兩個點分别是13.04mm以及12.77mm。第一行和最後一行,是測試開始時以及測試結束時的擠出頭坐标位置。

G30:Z軸高度單點測試(單步)

這條指令作為一個完整Z軸高度測試過程的一步,測試列印平面上一個點的Z軸高度,并在序列槽上輸出結果。這個完整的Z軸高度測試過程,通常是由3D列印機控制軟體連續發出的,通過參數控制G30的執行狀态。是以在手動工作方式下,G30指令隻适合不帶參數運作(等價于G30 P3,見下面的參數說明)。

指令參數為:Pnnn,表示測試的狀态,P1表示目前這步是整個Z軸高度測試過程的第一步;P2表示目前這步是整個Z軸高度測試過程的最後一步;P3表示目前這步是Z軸高度測試過程的唯一一步,也就是說既是第一步也是最後一步;P0表示目前這步是Z軸高度測試過程中的中間一步。無參數情況下,P的預設值是3。

與G29指令類似,G30指令同樣由固件配置

#define FEATURE_Z_PROBE 1

決定是否開啟。

G30指令的輸出,與上面的G29輸出格式一緻,但隻有其中的一行,需要上位機軟體多次發出G30指令,再綜合處理所有的輸出結果。

G31:輸出Z軸高度測試微動開關狀态

這條指令非常簡單,沒有參數。執行後會輸出目前Z軸高度測試微動開關的目前狀态:

Z-probestate:L

其中L表示微動開關沒有觸發。如果是處于觸發狀态,這裡會輸出H。

G29指令、G30指令、G31指令隻進行Z軸的高度測試,并不進行自動調平。有些上位機3D列印機控制軟體,會通過這一組指令配合自動跳屏算法實作(上位機)熱床自動調平功能。如果希望不通過上位機,隻由3D列印機自身完成自動調平功能,需要使用G32指令。

G32:熱床自動調平

這條指令在G29指令的基礎上,不僅測試列印平面上三個點的Z軸高度,而且還會根據測試的結果,對3D列印機的機械參數進行調整,實作熱床自動調平。G32指令使用的參數與G29指令是一緻的:Snnn,表示測試結果的處理方式。S1表示更新記憶體中的相關參數值(重置系統會丢失),S2表示更新記憶體以及EEPROM中的相關參數值(重置系統不會丢失)。

G32指令執行完成時,不僅Z軸高度參數發生了改變,而且還會根據3D列印機的硬體配置,對熱床進行相應的調平處理。

如果熱床本身是使用步進電機進行高度控制的,那麼程式會自動調整步進電機的位置,使熱床自動調整為平整的狀态;如果熱床本身不能移動(這個應該是更常見的情況),那麼G32指令會在3D列印機記憶體中建構一個轉換矩陣(Transformation matrix),讓未來3D列印機所處理的所有三維空間位置,都先經過這個矩陣的變換,保證在Z=0的情況下,正好與熱床平面完全吻合。由于這裡涉及到高深的計算機圖形學知識,我們就不詳細介紹了。

G32指令,由固件配置

#define FEATURE_AUTOLEVEL 1

決定是否開啟。

G32指令的輸出,格式與G29指令類似:

X:0.00Y:0.00Z:200.00E:0.00Z-probe:5.00X:-52.00Y:-30.00Z-probe:12.97X:52.00Y:-30.00Z-probe:12.76X:0.00Y:60.00Info: 0.99709-0.00319-0.076280.000000.99912-0.41910.076340.0041790.99621Info:AutolevelingenabledX:7.32Y:64.08Z:-95.66E:0.00X:0.00Y:0.00Z:200.00E:0.00

除了與G29指令相似的測量資訊之外,G32指令還輸出了計算得到的自動調平矩陣,并且打開了自動調平功能。需要注意的一點是,G32指令雖然生成了自動調平矩陣,但并沒将其儲存在EEPROM中,是以下次開機這個資訊将會丢失。可以配合M320 S1指令,将自動調平矩陣儲存在EEPROM中。

二、即時的G指令

        以下指令也可以被緩存, 但是直到所有之前緩存的指令被執行完,并且該指令執行後,才會給出應答。 是以主機會等待指令執行完畢(才收到的應答)。這些指令導緻的短暫停頓不會影響機器的正常性能。

G4: 暫停移動

讓噴頭在目前位置停留一段時間。參數可以為:G4 Pnnn或G4 Snnn。Pnnn表示以毫秒為機關,Snnn表示以秒為機關。

如:G4 P2000與G4 S2完全等價,都表示停頓2秒。

在停頓過程中機器仍可以被控制,如擠出頭溫度。

G20:使用英寸作為機關

執行這條指令後,後面的指令都以英寸作為機關。

G21: 使用毫米作為機關

執行這條指令後,後面的指令都以毫米作為機關。

G90/G91:設定坐标模式

這兩條指令用于設定目前坐标模式為絕對坐标模式(G90)或者相對坐标模式(G91)。沒有參數。

未設定時預設值是絕對坐标模式。我們在這篇教程中,所有的例子也都是以絕對坐标模式給出的。

在相對坐标模式下,每次步進電機XYZE移動之後,目前位置都會重置為0。對于以下兩條G-code指令

G0 X1

G0 X-1

如果3D列印機目前處于相對坐标模式下,那麼X軸步進電機會先向正方向移動一個機關,再向反方向移動一個機關。第二條語句,實際移動距離是1個機關(向X軸反方向)。

而如果3D列印機目前處于絕對坐标模式下,那麼X軸步進電機會先移動到X=1的位置處,再移動到X=-1的位置處。第二條語句,實際移動距離是2個機關(向X軸反方向)。

G92:設定目前位置為某個坐标值

把目前位置設定為某個坐标值,可以用來設定零點,如果參數為空表示把目前位置設定為所有軸的的零點。

如:G92 X10 E90       ;表示把目前位置設定為x=10,噴頭坐标=90

再如:G92 E0             ;表示把目前噴頭坐标設定為0

三、即時的M和T指令

M0:列印機停止

列印機會終止任何動作,然後關機。所有的電機和加熱器都會被關掉,這個時候隻能通過reset按鈕來重新開機控制器。

M1: 列印機休眠

列印機會終止任何動作,然後休眠。所有的馬達和加熱器都會被關掉,但是接收到G或M指令時,列印機可以被喚醒并進入工作狀态。

M3:主軸開啟,順時針旋轉(CNC專用)

如:M3 S4000         ;主軸以4000RPM速度順時針旋轉

M4:主軸開啟,逆時針旋轉(CNC專用)

如:M4 S4000         ;主軸以4000RPM速度逆時針旋轉

M5:主軸關閉(CNC專用)

M7:氣霧冷卻系統開啟(CNC專用)

M8:水冷系統開啟(CNC專用)

M9:所有的冷卻系統關閉(CNC專用)

M10:吸塵系統開啟(CNC專用)

M11:吸塵系統關閉(CNC專用)

M17:啟動所有步進電機

M18:關閉所有步進電機

M20:讀取SD卡根目錄中的檔案

讀取SD卡根目錄的檔案,并通過序列槽輸出檔案名。

M21:初始化SD卡

初始化SD卡。如果在機器通電時插入SD卡,會預設初始化SD卡。開始其他SD卡功能時,SD卡一定要先初始化。本指令相當于檔案系統中執行Mount動作。

M22:解除安裝SD卡

解除安裝SD卡,也就是執行Unmount動作。沒有相關的參數。

M23:選擇SD卡中的檔案

選擇一個SD卡上的檔案。檔案選擇之後,可以執行列印、删除等動作。

如:M23 filename.gcode     ;選中filename.gcode檔案

M24:開始列印SD卡中選中的檔案

開始列印通過M23指令選中的檔案。

M25:暫停SD卡列印

暫停列印通過M23指令標明的檔案。

M26:設定目前檔案的目前位置

設定目前檔案的目前位置。參數為:Snnn,表示目前位置的位元組數。

比如我要從目前檔案的100位元組開始寫入資料,那麼就要先用本指令跳到100位元組處。

M27:報告SD卡列印進度

擷取SD卡列印進度。沒有相關參數。

M27指令的輸出,格式為:

SD printing byte 11518/1127578

這條指令供上位機擷取目前的3D列印進度資訊,用于顯示在電腦界面上。

M28:開始往SD卡檔案中寫入資料

接收到此指令後,後續接收到的指令(除了M29)都會被當成資料寫入該檔案。

指令後面會跟着檔案名,如果檔案不存在則會被建立,如果存在則會被覆寫。接收到這條指令後,後續接收到的指令都會被寫入該檔案中,直到接收到M29指令。

如:M28 filename.gcode   

M29:停止往SD卡檔案中寫入資料

接收到此指令後,後續接收到的指令要開始正常執行。

M30:删除SD卡中的檔案

如:M30 filename.gcode         ;删除filename.gcode檔案

M32:建立子目錄

在SD卡上建立一個子目錄。參數為:filename,表示待建立的子目錄(包含目錄名,以/分隔);

以上所有SD卡相關指令,都由固件配置

define SDSUPPORT 1

決定是否開啟。如果固件不需要支援SD卡,關閉這項固件配置,可以節省不少記憶體空間。

M42:直接讀寫端口

此指令直接讀/寫一個Arduino端口,為3D列印控制軟體上位機擴充程式功能提供基礎。參數包括:

Pnnn表示Arduino的輸入/輸出端口;輸出時固件程式會同時輸出到數字端口和模拟端口;輸入時固件程式會從數字端口輸入;

Snnn表示寫入輸出端口的值,0到255之間是合法的數字;當S參數不存在的時候,M42指令起輸入作用;

Repetier-firmware固件中預先定義了一個表格,稱為“敏感端口表格”,所有位于這個表格内的端口,也就是目前已經被步進電機、限位開關以及熱敏電阻占用的端口,都不能被M42指令影響。其他目前未占用的端口,可以由這條指令進行IO操作。

M43: Stand by on material exhausted

M82/M83:設定擠出頭步進電機坐标模式

與G90/G91指令類似,這兩條指令用于設定擠出頭目前坐标模式為絕對坐标模式(M82)或者相對坐标模式(M83)。沒有參數。

未設定時預設值是絕對坐标模式。

需要注意的是,G90/G91設定的坐标模式,同時對XYZE四個軸起作用,但M82/M83設定的坐标模式,隻對E軸(擠出頭步進電機)起作用。

M84:設定步進電機自動關閉時間

當3D列印機一段時間沒有接收到步進電機運動指令之後,3D列印機(為了節能)會自動關閉步進電機。使用M84指令,可以設定這個自動關閉步進電機的時間。參數包括:Snnn,表示步進電機關閉的時間,以秒為機關。

如果使用M84時沒有指定S參數,則步進電機會立即關閉。

M84指令的預設值是360秒。在固件配置中,預設值由

#define STEPPER_INACTIVE_TIME 360L

控制。

M85:設定3D列印機自動關閉時間

當3D列印機一段時間沒有接收到指令之後,3D列印機(為了節能)會自動關閉步進電機以及擠出頭、熱床等裝置。使用M85指令,可以設定這個自動關閉3D列印機的時間。參數包括:Snnn,表示在關閉步進電機之前步進電機沒有活動的時間,以秒為機關。

如果使用M85時沒有指定S參數,或者使用了S0參數,則代表取消3D列印機自動關閉功能,擠出頭、熱床等在工作完成之後,一直會處于目前狀态,而不會被自動關閉。

M85指令的預設值是0(不自動關閉)。在固件配置中,預設值由

#define MAX_INACTIVE_TIME 0L

控制。

M92: 設定AXIS_STEPS_PER_UNIT參數(Sprinter和Marlin固件)

設定步進電機移動1mm對應的脈沖數,可脫機儲存.。在校準的時候非常有用,不用每次都修改程式,然後重新下載下傳。

參數包括:

Xnnn,表示X軸的分辨率;

Ynnn,表示Y軸的分辨率;

Znnn,表示Z軸的分辨率;

Ennn,表示E軸(擠出機步進電機)的分辨率;

M98: 擷取 axis_hysteresis_mm 參數

M99: 設定 axis_hysteresis_mm 參數(Marlin固件)

Example: M99 X<mm> Y<mm> Z<mm> E<mm>

重新設定hysteresis值.。我們知道齒輪等機械結構,在轉換方向時候都會有滞後現象。你可以測量在他們在轉換方向的時候有多長的距離是丢失掉的,然後把它寫入hysteresis值,這樣之後的轉向運動,機器将會進補償運動,來彌補這些誤差。

M99:暫時關閉步進電機(其他)

M99指令可以暫時關閉XYZ軸步進電機一段時間。指令參數包括:

Snnn表示所需暫時關閉步進電機的時間,以秒為機關;

X表示暫時關閉X軸步進電機;

Y表示暫時關閉Y軸步進電機;

Z表示暫時關閉Z軸步進電機;

如果S參數沒有指定,則暫時關閉10秒鐘時間。暫時關閉時間到達之後,重新打開相應軸的步進電機。

M104:設定擠出機(噴頭)溫度

設定擠出頭的目标溫度。執行這條指令後,不需要等待達到這個溫度,控制闆繼續執行下一條G-code語句。相關參數包括:

Snnn,表示目标溫度;

Tnnn,表示對應的擠出頭;

P,表示要等待前面的指令完成之後,再開始設定擠出頭溫度;

Fnnn,表示到達目标溫度之後,是否觸發蜂鳴器。F1表示要觸發;

如果執行指令時沒有帶T參數,則針對目前擠出頭設定目标溫度。

如:M104 S190         ;将擠出機的溫度設定為190度 

M105: 擷取目前溫度(機關:℃)

擷取目前溫度值,包括擠出頭和熱床的溫度。相關參數包括:

X,表示輸出ADC測量的原始值;

M105指令的輸出,格式為:

T:18.97 /0 B:18.75 /0 [email protected]:0 @:0

可以看到,T:之後的部分,代表擠出頭的目前溫度/目标溫度;B:之後的部分代表熱床的目前溫度/目标溫度。

在PID溫度控制模式下,[email protected]:後面的數字代表熱床目前的輸出強度,是一個0~255的值,@:後面的數字,代表擠出頭目前的輸出強度,也是一個0~255的值。例子中,擠出頭、熱床都處于關閉狀态,是以這個位置的值都是0。

M106: 打開風扇

如:M106 S127        ;打開風扇(半速)。'S'表示 PWM值 (0-255). 可簡單了解為:風扇有0-255級強度可選,其中 M106 S0 意味着風扇将被關掉。

在固件配置中,定義

#define FEATURE_FAN_CONTROL 1

表示支援風扇控制功能,在編譯中會包含相關的代碼。

M107: 關閉風扇

不推薦. 請用M106 S0 代替。

M108: 設定擠出機速度

設定擠出機電機的轉速 (不推薦,請使用 M113)

M109: 等待擠出頭加熱達到目标溫度

設定擠出頭的目标溫度,并等待達到這個溫度。相關參數包括:

Snnn,表示目标溫度;

Tnnn,表示對應的擠出頭;

Fnnn,表示到達目标溫度之後,是否觸發蜂鳴器。F1表示要觸發;

如果執行指令時沒有帶T參數,則針對目前擠出頭設定目标溫度。

如: M109 S185      ;等待擠出頭加熱到185度

M110: 設定目前的行碼

設定目前行為第123行. 然後,接下來會執行第124行的指令。

M111:允許/禁止運作時調試标志

運作時調試标志是一組布爾值,一共有6個不同的标志,使用位域(Bit Field)的表示方式。使用者可以利用M111指令修改這些标志的值。相關參數包括:

Snnn表示直接将調試标志設定為S值;

Pnnn表示以位操作的方式,将P值與目前調試标志做某種操作。如果P值是正數,則進行按位或操作(增加P參數所帶的标志位);如果P值是負數,則忽略P的符号,進行取反後按位與操作(去除P參數所帶的标志位);

調試标志的位域,由以下6個布爾值組成:

第1位,值為1,表示是否回顯(Echo)由上位機發送至下位機的指令;

第2位,值為2,表示是否輸出資訊(Info),實際在固件代碼中并未使用;

第3位,值為4,表示是否輸出錯誤(Error),在固件出錯時會将出錯資訊發送回上位機;

第4位,值為8,表示是否進入模拟執行模式(Dry run),在模拟執行模式下,3D列印機不實際執行上位機發送的指令,隻修改3D列印機的記憶體狀态;

第5位,值為16,表示是否進入調試通訊模式(Communication),實際在固件代碼中似乎并未使用;

第6位,值為32,表示是否進入禁止移動模式(No Move),在這個模式下,所有對步進電機的移動指令,都會被忽略;

M112: 緊急停止

所有進行中的動作都會被立即終止,然後關掉Reprap. 所有電機和加熱器都會被關掉. 可以按Reset按鈕(闆上)以重新開機. 

M113: 設定擠出機的 PWM

M114: 擷取擠出頭目前位置

輸出擠出頭目前位置。沒有相關的參數。

M114指令的輸出,格式為:

X:20.00Y:30.00Z:10.000E:0.0000

M115: 擷取3D列印機資訊

輸出3D列印機資訊。沒有相關的參數。

M115指令的輸出,格式為:

FIRMWARE_NAME:Repetier_0.92.3FIRMWARE_URL:…Printedfilament:0.00mPrintingtime:0days0hours0minSpeedMultiply:100FlowMultiply:100

第一行是固件的版本資訊,很長,沒有列完整。第二行是已經列印了多少米耗材,列印時間是幾天幾小時幾分鐘。第三行是速度系數,參考M220指令。第四行是流率系數,參考M221指令。

M116: 等待溫度達到目标溫度

等待所有擠出頭/熱床到達由之前的M104/M140指令所指定的目标溫度。沒有相關參數。

M117: 在液晶上顯示消息

如:M117 Hello World        ;在液晶上顯示Hello World

M118: Negotiate Features

M119: 輸出限位開關狀态

将目前限位開關狀态輸出。沒有相關的參數。

M119指令的輸出,格式為:

endstopshit:x_min:Ly_min:Lz_min:L

列出了XYZ三個軸的低位限位開關的目前狀态。L代表限位開關沒有觸發。H代表限位開關被觸發了。

M120:測試蜂鳴器

使蜂鳴器發出蜂鳴聲。參數為

Snnn表示發出聲音/不發出聲音的時間,以毫秒為機關;

Pnnn表示重複的次數;

如果3D列印機有蜂鳴器,而且是無源蜂鳴器,那麼通過S參數和P參數的組合,可以得到不同頻率的聲音。比如

M120 S24 P8

可以得到一個較長的蜂鳴聲。如果3D列印機的蜂鳴器是有源蜂鳴器,那麼M120指令隻能控制蜂鳴時間,不能控制蜂鳴器的聲音頻率。

M121: Pop

M126: Open Valve

M127: Close Valve

M128: Extruder Pressure PWM

M129: Extruder pressure off

M130: 設定 PID P 值

M131: 設定 PID I 值

M132: 設定 PID D 值

M133: Set PID I limit value

M134: Write PID values to EEPROM

M136: Print PID settings to host

M140 設定熱床目标溫度

設定熱床的目标溫度。執行這條指令後,不需要等待達到這個溫度,立即開始執行下一條G-code語句。相關參數包括:

Snnn表示目标溫度;

Fnnn表示到達目标溫度之後,是否觸發蜂鳴器。F1表示要觸發;

M141: Chamber Temperature (Fast)

M142: Holding Pressure

M143: 設定最大熱頭溫度

M160: Number of mixed materials

M190: 等待熱床加熱達到目标溫度

設定熱床的目标溫度,并等待達到這個溫度。相關參數包括:

Snnn,表示目标溫度;

Fnnn,表示到達目标溫度之後,是否觸發蜂鳴器。F1表示要觸發;

M200:設定體積擠出模式

将3D列印機設定為“體積擠出模式”,同時設定擠出頭直徑參數。相關參數包括

Tnnn表示對應的擠出頭,無T參數表示使用目前擠出頭;

Dnnn表示擠出頭的實際直徑,無D參數表示關閉體積擠出模式;

體積擠出模式,是相對于預設的“長度擠出模式”而言的另一種擠出模式。在常見的“長度擠出模式”下,G-code中的使E軸運動的G0/G1指令,其參數都是以長度機關mm作為機關的。這樣确實比較簡單,但問題是我們在切片的時候,就必須知道要使用的噴頭直徑,否則無法計算出耗材前進的實際長度。

為了使G-code在生成之後适用于多種不同噴頭直徑的3D列印機機型,我們可以在上位機切片時,将E軸參數變為以體積機關mm3作為機關,然後在下位機固件中,再設定正在使用的噴頭直徑,以達到最終正确輸出的目的。為了以體積機關mm3作為E軸的參數機關,上位機需要将噴頭直徑設定為1.128mm(這樣,耗材每前進1mm,會噴出1mmπ(1.128mm/2)2約等于1mm3的耗材。)同時,下位機要使用下面的語句:

M200 T0 D0.4

将實際的擠出頭噴頭直徑設定為0.4mm。同時在上位機和下位機進行這樣的操作之後,3D列印機可以在E軸參數機關為mm3的情況下,正确完成列印操作。

M201/M202:設定最大加速度

這兩條指令設定列印加速度。包括擠出頭工作時(列印中)的運動加速度(M201),以及擠出頭不工作時(移動中)的運動加速度(M202)。參數為

Xnnn,表示X軸的加速度;

Ynnn,表示Y軸的加速度;

Znnn,表示Z軸的加速度;

Ennn,表示E軸的加速度;

在固件配置中,定義

#define RAMP_ACCELERATION 1

表示支援加速度功能,在編譯中會包含相關的代碼。

M203:監控溫度

使用序列槽輸出監控3D列印機的溫度。參數為

Snnn表示是否監控,S0關閉監控,S1打開監控;

當監控處于打開狀态,可以從序列槽定時擷取目前的溫度資訊。

監控輸出格式與M105指令的輸出結果完全一緻。

M204:設定PID參數

設定擠出頭溫度控制的PID參數,指令參數為

Snnn表示對應的擠出頭,無S參數表示使用目前擠出頭;

Xnnn表示P參數;

Ynnn表示I參數;

Znnn表示D參數;

M207:修改抖動(Jerk)值

修改目前的最大抖動值。指令參數為

Xnnn表示XY軸的最大抖動值;

Znnn表示Z軸的最大抖動值;

Ennn表示E軸的最大抖動值;

XY軸抖動指的是3D列印機同時在X軸和Y軸上移動時,産生的和速度最大值。比如,3D列印機加熱頭正在向X軸正方向全速移動,下一條指令變為向Y軸正方向移動。如果同時在X軸和Y軸上改變速度,那麼實際産生的速度是X方向的速度和Y方向的速度的向量和,這個比較大的速度變化值,會對3D列印機的機械部件産生不利的影響,而且會造成比較大的噪音。這裡的設定,就限制了這個XY軸上和速度的最大值。當然這個值也不能設定的太小,太小的話,首先列印速度會變得很慢,而且列印會産生更多的瑕疵。

Z軸抖動與XY軸抖動意義類似,不同點是Z-Jerk是Z軸方向不為0的抖動速度值。因為這項涉及到Z軸的運動,是以最大速度就低多了。

M207指令的輸出,格式為:

Jerk:20.00ZJerk:0.30

這個輸出意義很簡單,表示XY軸抖動速度為20mm/s,Z軸抖動速度為0.3mm/s。

M208: 設定XYZ軸行程的限制

M209:開啟/關閉自動回抽

開啟/關閉自動回抽功能。指令參數為

Snnn表示是否開啟自動回抽功能,1表示開啟,0表示關閉;

通常上位機切片器負責在合适的位置處加入回抽指令。如果你的切片器功能比較弱,不能加入合适的回抽指令,那麼可以打開這個特性,由固件自動回抽。

在固件配置中,定義

#define FEATURE_RETRACTION 1

表示支援自動回抽功能,在編譯中會包含相關的代碼。

M220:設定速度

設定3D列印機運作速度系數。指令參數為

Snnn表示系數,是一個百分數,如果S參數不存在,則使用預設值100;

3D列印機運作速度系數,是一個在25%到500%範圍内變化的值。這個系數值在3D列印機運作過程中,與切片器給出的3D列印機運動速度基礎值相乘,得到最終的3D列印機實際運動速度值。

M220指令的輸出,格式為:SpeedMultiply:100

M221:設定流率

設定3D列印機的流率系數(Flow rate)。指令參數為

Snnn表示系數,是一個百分數,如果S參數不存在,則使用預設值100;

3D列印機流率系數,是在上位機切片軟體通過耗材直徑、噴頭直徑、層高以及3D列印速度等因素綜合計算得到的E軸運動速度的基礎上,疊加的一個E軸運動速度系數。簡單地說,就是控制擠出頭耗材擠出量的多少。這個系數可以在25%到500%範圍内變化。

M221指令的輸出,格式為:FlowMultiply:100

M226: Gcode Initiated Pause

M227: Enable Automatic Reverse and Prime

M228: Disable Automatic Reverse and Prime

M229: Enable Automatic Reverse and Prime

M230: Disable / Enable Wait for Temperature Change

M240: Start conveyor belt motor / Echo off

M241: Stop conveyor belt motor / echo on

M245: 打開風扇

M246: 關閉風扇

M251:将目前Z軸位置儲存為Z軸高度值

這條指令可以将目前的Z軸位置儲存為Z軸高度值,以使前面的Z軸高度手動/自動測量的結果起作用。通常,M251指令隻工作在三角洲機型上,并且應該與G29指令聯合使用(自動測量Z軸高度)。這條指令沒有相關的參數。

當3D列印機打開EEPROM支援時,這條指令還會将Z軸高度值同時儲存在EEPROM中。

隻有當固件配置定義

#define Z_HOME_DIR -1

也就是Z軸向正方向歸位,并且定義

#define MAX_HARDWARE_ENDSTOP_Z true

也就是存在硬體的Z軸高位限位開關時,M251指令才會在編譯中包含相關的代碼。

通常,隻有三角洲類型的3D列印機才能滿足這兩個條件限制。

M280:多頭重複列印模式設定

有些特殊配置的3D列印機,允許2~4個擠出頭同時工作,并且這些擠出頭動作完全一緻,同時列印出多件完全一樣的列印件,這種工作模式叫做多頭重複列印模式(Ditto mode)。M280指令對這個模式進行設定。指令參數為

Snnn表示這個模式下的擠出頭個數;S0表示關閉多頭重複列印模式;S1S3表示工作在多頭重複列印模式下,并且3D列印機擁有額外的13個擠出頭。

在固件配置中,定義

#define FEATURE_DITTO_PRINTING 1

表示支援多頭重複列印模式功能,在編譯中會包含相關的代碼。

M281:測試硬體看門狗功能

這條指令用于測試CPU硬體中的看門狗功能。實際上,就是造成一個死循環,不再執行“喂狗”動作,進而觸發CPU硬體看門狗,最終(故意地)造成3D列印機重新開機。這條指令隻是用于3D列印機固件開發測試。

M300: 播放提示音

M301: Set PID parameters - Hot End

M302:設定是否允許冷擠出

為了保護3D列印機的擠出頭,通常設定下,E軸的運動必須在擠出頭加熱到一定溫度之後才被允許。在擠出頭冷卻的情況下,所有的E軸運動指令是被3D列印機固件忽略的。但有些情況下我們需要在擠出頭冷卻的情況下運動E軸,這時可以通過M302指令進行設定。指令參數為

Snnn表示是否允許冷擠出,S0表示不允許,S1表示允許,沒有S參數預設表示允許;

M302指令的輸出,為目前是否允許冷擠出。允許時會輸出:Cold extrusion allowed

不允許時會輸出:Code extrusion disallowed

M303:自動測試PID參數

自動測試PID參數值。指令參數為

Pnnn表示待測試的擠出頭編号,從0開始,P<擠出頭個數>代表待測試的是熱床;

Snnn表示列印溫度;

Rnnn代表重複測試次數;

X代表是否儲存于EEPROM中;

由于加熱、散熱需要較多時間,這條指令執行時間很長。

M304: Set PID parameters - Bed

M320/M321:開啟/關閉自動調平

開啟(M320)或者關閉(M321)自動調平功能,使自動調平轉換矩陣起作用或不起作用。指令參數為Snnn,表示是否儲存于EEPROM,沒有S參數或者S0表示不儲存于EEPROM,S1表示儲存于EEPROM,在關閉自動調平(M321)指令中S3表示将自動調平矩陣清零且儲存于EEPROM中;

M320的輸出結果為:

Info:Autolevelingenabled

表示自動調平已經打開。

M321的輸出結果為:

Info:Autolevelingdisabled

表示自動調平已經關閉。

M322:清零自動調平轉換矩陣

清零(M322)自動調平轉換矩陣。顯然,清零這個動作的同時自動調平功能也關閉了。指令參數為Snnn,表示是否儲存于EEPROM,S0表示不儲存于EEPROM,S1表示儲存于EEPROM;

也就是說,M321 S3指令等價于M322 S1指令,兩者都是清零自動調平矩陣,關閉自動調平功能,并且将這個設定儲存于EEPROM之中。

以上三條指令,與G32指令相同,由固件配置

#define FEATURE_AUTOLEVEL 1

決定是否開啟。

M322的輸出結果為:

Info:Autolevelmatrixreset

表示自動調平轉換矩陣已經被清零。

M330:測試蜂鳴器

測試(無源)蜂鳴器,産生一個特定頻率的聲音。指令參數為

Snnn表示聲音的頻率;

Pnnn表示聲音持續的時間,以毫秒為機關;

如果指令沒有包含S參數或者P參數,則會使用預設值S1以及P1000。

M400:等待目前所有移動指令完成

等待在3D列印機記憶體中待處理的移動指令執行完成。沒有相關的參數。

執行這條語句之後,可以保證在下一條G-code指令執行時,所有步進電機都不處于運動狀态中。

M401:儲存目前的位置

将目前位置,包括XYZE步進電機,儲存于記憶體的一組專用變量中。未來可以用M402指令恢複這組位置。沒有相關的參數。

M402:恢複之前儲存的位置

恢複之前由M401指令儲存的位置值。指令參數為

X表示恢複X位置;

Y表示恢複Y位置;

Z表示恢複Z位置;

E表示恢複E位置;

Fnnn表示使用參數給定的速度,無F參數時使用目前速度值;

M600:更換耗材

在擁有顯示屏的3D列印機上,啟動更換耗材向導界面。沒有相關的參數。

通常,這個向導界面是從顯示屏界面上觸發的。M600指令提供一個接口,使更換耗材向導界面可以從上位機軟體觸發。

M601:暫停/恢複擠出頭

暫停或者恢複擠出頭。指令參數為

Snnn表示暫停或者恢複,S1表示暫停擠出頭,S0表示恢複擠出頭工作;

暫停擠出頭包括停止擠出頭加溫以及停止擠出頭步進電機工作。恢複則相反,加熱擠出頭到原來的溫度。

T: 設定目前擠出頭

對于擁有多個擠出頭的3D列印機來說,需要使用T指令選擇目前工作的擠出頭。這條指令的參數值直接跟在T後面即可。例如:

T0表示選擇第一個擠出頭;

T1表示選擇第二個擠出頭;

參數是T指令最特殊的一點。這與其他所有的G-code指令都不相同。

四、輔助步進電機指令

一些3D列印機的機械設計,會在XYZE四個步進電機軸之外,使用更多的輔助步進電機。Repetier-firmware提供了一套輔助步進電機指令,讓使用者(以及上位機軟體)可以操作這些輔助步進電機。由于輔助步進電機的用途、參數各異,為了讓這套指令更加通用,這些指令被設計為非常簡單的形式。

G201:移動步進電機位置

将步進電機P的位置移動到X位置處。參數包括:

Pnnn表示第P個輔助步進電機;

Xnnn表示這個步進電機的目标位置;

這條指令與G1指令非常類似。

G202:設定目前位置

将X位置設定為步進電機P的目前位置。不實際移動步進電機。參數包括:

Pnnn表示第P個輔助步進電機;

Xnnn表示這個步進電機的目前位置;

這條指令與G92指令非常類似。

G203:報告目前位置

報告步進電機P的目前位置。參數包括:

Pnnn表示第P個輔助步進電機;

這條指令與M114指令非常類似。

G203 開啟/關閉步進電機

用于開啟/關閉步進電機P。參數包括:

Pnnn表示第P個輔助步進電機;

Snnn表示開閉标志,S0表示關閉步進電機,S1表示開啟步進電機;

步進電機開啟後,有兩種可能的狀态。一種是“運動”狀态,也就是正在進行正向或反向的旋轉。另一種是“保持位置”狀态,也就是保持目前的位置不變。雖然步進電機關閉也不會主動移動位置,但“保持位置”狀态與步進電機關閉狀态仍有顯著的差別。“保持位置”狀态下,當步進電機受力時,會産生一個反向的力矩,使步進電機位置保持不變。

這條指令與“節能管理”一節中的M84指令有關。M84指令用于關閉XYZE步進電機,但不能打開這些步進電機。

五、設定與EEPROM管理

固件的設定,是一個比較有趣的話題,很多玩3D列印機的朋友,在遇到設定相關的問題時都會犯迷糊。實際上,對于某一項特定的設定,比如說X軸的步進電機分辨率,在3D列印機主機闆上,有三個不同的位置(也是三種不同的存儲器)儲存了這項内容,而它們的值還有可能不同。讓我們先來了解一下這些儲存設定内容的位置,以友善大家的了解。

首先,是固件配置檔案(configuration.h)中的設定值。配置檔案中的值,會跟随固件一起編譯,之後在刷機過程中,儲存在了3D列印機的靜态存儲區(Flash ROM)中。除了刷機之外,靜态存儲區的内容不會發生變動,可以認為是隻讀的。每次開機的時候,都是一樣的值在等待着我們。

第二份設定值,儲存在電可擦寫靜态存儲區(EEPROM)。EEPROM的讀寫代價,比靜态存儲區要小。是以,3D列印機允許在刷機之後,修改設定值,而這些修改之後的設定值,就存儲在EEPROM之中。每次開機,程式會先檢查EEPROM,如果EEPROM中是空白的,則将靜态存儲區的第一份設定值複制到EEPROM之中。而如果EEPROM中已經有儲存好的設定值,則程式會直接使用EEPROM中的值。有些朋友在玩3D列印機過程中可能會有這樣的經驗,就是明明修改了固件配置檔案中的設定值,但刷機之後竟然沒有發生變化。這種情況,往往就是EEPROM在搗鬼了。我們完全可以使用G-code M502 M500兩條指令(指令的具體含義可以參考下面),重寫EEPROM,解決這樣的問題。

第三份設定,儲存在記憶體(RAM)中。實際使用者使用的值,就是記憶體中的值。由于記憶體隻在加電情況下能夠保持其中的内容,是以每次開機時,3D列印機會根據上面描述的邏輯,重建記憶體中的設定值。如果某條指令修改的是記憶體中的設定值,那麼這也代表着這次修改是一個臨時修改,下次開機這個值就會消失了。

總的來說,三份固件設定,使用的優先級是

記憶體 > EEPROM > 配置檔案

但設定的持久性,就要反過來了。明确了解了這些,特别有助于我們解決一些與設定相關的問題,自然,看下面這些指令描述的時候,也就不會迷糊了。

M205:輸出EEPROM設定

輸出EEPROM的目前設定值表格。沒有相關的參數。

M205指令的輸出,格式為:

EPR:275 115200BaudrateEPR:3129 0.000Filamentprinted[m]EPR:2125 0Printeractive[s]…

這是一個很長的輸出,我們這裡隻截取了前三行。每行中,EPR:後面的第一個數字,是這個設定項值的類型。0代表8bit整數類型,1代表16bit整數類型,2代表32bit整數類型,3代表32bit浮點類型。第二個數字,是設定項值的位置(即EEPROM中的位址)。第三個數字,是設定項的值。最後,是設定項的意義。

以第一行為例,第一行設定的是通訊波特率(Baudrate),目前值是115200。波特率設定項,在EEPROM中的位置(位址)是75,這個值是一個32bit整數類型,是以占據了從位置75開始的連續4個位元組(也就是位置75, 76, 77, 78)。

M206:修改EEPROM設定

修改EEPROM中的某個值。指令參數為

Pnnn表示待修改的值的位置(即EEPROM中的位址);

Tnnn表示值的類型,0代表8bit整數類型,1代表16bit整數類型,2代表32bit整數類型,3代表32bit浮點類型;

Snnn表示值,隻能帶整數,用于T為0, 1, 2的情況;

Xnnn表示值,隻能帶浮點數,用于T為3的情況;

可以看出,M206指令的使用是很複雜的,需要了解EEPROM中數值的存儲位置以及數值類型,才能進行有效的修改。是以小編建議除非你完全了解M206指令的含義,否則不要使用這個指令。

M360:輸出固件配置資訊

輸出固件配置資訊。沒有相關參數。

M360指令的輸出,格式為:

Config:Baudrate:115200Config:InputBuffer:127Config:NumExtruder:1…

這是一個很長的輸出,我們這裡隻截取了前三行。每行中,都有一項配置資訊的名稱,以及對應的值。

M500:儲存記憶體中的設定值到EEPROM

将3D列印機記憶體中的設定值儲存到EEPROM中。沒有相關的參數。

M501:讀取EEPROM的設定值到記憶體

将EEPROM中的設定值讀取到3D列印機記憶體中。沒有相關的參數。

M502:将記憶體中的設定值重置

将記憶體中的設定值重置為固件配置(configuration.h)中的值。沒有相關的參數。

由于每次系統掉電後,記憶體中的值都會消失,重新啟動時從EEPROM中讀取,是以單獨使用M502指令将隻對3D列印機掉電重新開機之前起作用。如果想起長期作用,需要配合M500,将設定值儲存到EEPROM中。

六、步進電機參考電壓調節

目前市面上支援軟體設定步進電機參考電壓的3D列印機主機闆很少。大部分3D列印機主機闆隻能通過調整微調電位器來控制步進電機參考電壓。在這些3D列印機上,這一組指令是無效的。

M907:設定步進電機參考電壓(百分比值)

設定步進電機參考電壓。指令參數為

Snnn表示對所有步進電機進行統一設定;

Xnnn表示對X軸步進電機進行設定;

Ynnn表示對Y軸步進電機進行設定;

Znnn表示對Z軸步進電機進行設定;

Ennn表示對E軸步進電機進行設定;

所有的參數值,都是一個0~100之間的百分比數值。

M908:設定步進電機參考電壓

與M907指令類似,設定步進電機參考電壓。指令參數為

Pnnn表示步進電機編号;

Snnn表示步進電機參考電壓設定值,要求為0~255之間的一個數值;

這個指令與M907指令類似,同樣要求3D列印機主機闆支援。在不支援軟體調整參考電壓的3D列印機主機闆上,M908指令無效。

M909:輸出步進電機參考電壓值

輸出目前的步進電機參考電壓值。沒有相關的參數。

M910:将步進電機參考電壓值儲存至EEPROM

将M907/M908指令設定的步進電機參考電壓值儲存至EEPROM。沒有相關的參數。

七、需要輔助硬體支援的指令

M80/M81:打開/關閉ATX電源

在配置了ATX電源的3D列印機上,打開(M80)或者關閉(M81)ATX電源。沒有相關的參數。

M340:伺服電機控制

伺服電機控制功能。指令參數為

Pnnn表示伺服電機編号,從0開始,最大為3,可以控制4個伺服電機;

Snnn為控制時間,機關為毫秒,應該是一個500到2500之間的數值;

Rnnn為自動關閉時間,機關為毫秒;

M350:設定步進電機細分數

在支援細分數設定的3D列印機主機闆上(這類主機闆很少見),設定步進電機細分數。指令參數為

Snnn表示将細分數的每一位(bit)都設定為相同的值,S0表示所有都設定為0,S1表示所有都設定為1;

Xnnn表示設定細分數第0位;

Ynnn表示設定細分數第1位;

Znnn表示設定細分數第2位;

Ennn表示設定細分數第3位;

Pnnn表示設定細分數第4位;

需要注意的是,在大多數3D列印機主機闆上,細分數設定是主機闆硬體設計時就固定的,不能通過軟體調整。這種情況下,M350指令無效。

M355:設定照明燈開關

設定照明燈的開關。指令參數為

Snnn表示照明燈的開關狀态,S0表示關閉照明燈,S1表示打開照明燈;

無參數時輸出目前照明燈的狀态。

在固件配置中,定義

#defineCASE_LIGHTS_PIN -1

表示照明燈的電路硬體連接配接pin值,-1代表照明燈未連接配接。

M355指令的輸出,為目前是否打開了照明燈。打開時會輸出:

Caselights on

關閉時會輸出:

Caselights off

參考:

1、https://www.baidu.com/link?url=bszFzxZ32hnxvH9RulYAwVGtKAyoMFRhnC53ipsvZs5DopdZ_2W3P7glJ2TjzHOp&wd=&eqid=b24f850900187bb3000000035de9b34d

2、https://www.cnblogs.com/mazhenyu/p/10711939.html

3、http://linuxcnc.org/docs/2.6/html/gcode/gcode.html#_conventions

繼續閱讀