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

RepRap 3D打印機G-code命令詳解適用于Repetier-firmware固件 

2018-07-02 11:43
玩過一段時間3D打印機的朋友,都會接觸到G-code文件。所謂G-code文件, 指的是3D模型在進入3D打印機實際打印之前,必須要經(jīng)過切片器處理而成的一種中間格式文件。這種中間格式文件的內(nèi)容,實際上每一行都是3D打印機固件所能理解的命令。而這些命令,也被稱為G-code命令,是3D打印機和電腦之間最重要的命令交互界面。

3d打印gcode代碼.jpg

事實上所有從計算機發(fā)送到3D打印機的內(nèi)容,全部都是G-code命令,沒有任何例外。不論計算機和3D打印機之間是如何連接的,用常見的USB線也好,用SD卡作為G-code文件介質也好,或是用比較新式的TCP/IP連接也可以,這個連接通道中的所有信息,都是G-code命令。這個特征非常重要,牢牢記住這個特征,可以在我們分析、解決很多3D打印機問題的時候,提供強有力的支撐。
既然所有3D打印機都使用G-code作為對外聯(lián)系的唯一信息交互方式,那么這種“語言”的標準就很重要了。不幸的是,雖然所有的3D打印機,都使用G-code作為與計算機的交互語言,但實際上每種3D打印機“說出”的G-code,都多多少少有些不同。這也可以說,每種3D打印機都有自己的“方言”。我們要研究G-code,就要從一種最常見的“方言”,也可以說是“普通話”開始,先了解一種,然后再學習其他類似的語言,相互對比,就很容易了。
我們這篇文章,專門研究的是Repetier公司出品的Repetier-firmware固件所使用的G-code語法。如果這正是你需要的,那么就很方便了。如果你想研究的是其他3D打印機固件,比如marlin之類,那就不太巧了,有些內(nèi)容可能不完全一致。不過,文章中提到的方法,仍然適用,你可以以這篇文章為基礎,自己搞定對marlin的研究。
這篇文章主要面向具有一定技術水平的朋友,從第一節(jié)開始,我們就開始分門別類解釋每一條G-code命令,這對于已經(jīng)了解如何使用G-code的朋友會比較方便。

第一節(jié),基礎運動
既然G-code是計算機指揮3D打印機干活用的一套語言,那么其中最重要的就是運動類的指令。
G0/G1 直線移動
雖然從名字上看,G0叫做“快速直線移動”,而G1叫做“直線移動”,但實際上在Repetier-firmware里面,G0和G1指令是完全等價的,沒有任何區(qū)別。移動是否快速,完全是靠參數(shù)F來決定的(下面會詳細介紹)。這條指令的作用也很簡單,就是將擠出頭線性移動到一個特定的位置。這條指令帶有不少參數(shù),完整的形式是這樣的:
G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn
或者
G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn
使用時,不需要所有的參數(shù)全部存在,但至少要有一個參數(shù)。其中,
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,也就是25mm/s,然后將擠出頭移動至x=50mm, y=25.3mm的位置上,z軸高度不變,并且將擠出頭步進電機移動至22.4mm的位置上。這里,速度、xyz位置都比較好理解,但擠出頭步進電機的位置怎么理解呢?移動至22.4mm處,代表著擠出了多少耗材呢?實際上,這里擠出頭的具體動作,要根據(jù)之前擠出頭步進電機所在的狀態(tài)(也就是位置)而定。比如在這兩條語句之前,擠出頭步進電機已經(jīng)處于20mm的位置處,那么這里擠出頭步進電機只要再前進2.4mm就可以了。
仔細想想,其實擠出頭步進電機的工作方式,與xyz軸完全一樣。xyz軸之所以比較好理解,是因為我們清楚的知道原點(0, 0, 0)的位置在哪里。而對于e軸來說原點的位置也會在打印開始處被初始化到0的位置。知道了原點的位置,就可以正確理解擠出頭步進電機的工作方式了。實際上,擠出頭步進電機仍然是以原點為基礎,只不過是在整個打印過程中持續(xù)增加的。(思考:切片器的擠出頭回抽動作,對應了什么樣的G-code代碼?)
再舉一例,
G1 F1500
G1 X50 Y25.3 E22.4 F3000
這個例子與上面的例子非常類似,唯一的區(qū)別,就是F參數(shù)了。而這兩條語句的意義,除了對XYZE的移動之外,還會將打印速度,從語句執(zhí)行開始時的1500mm/min,提高到語句執(zhí)行結束時的3000mm/min。這里有兩點需要注意。
第一點,F(xiàn)參數(shù)與XYZE參數(shù)一樣,在語句執(zhí)行的過程中線性插值;
第二點,在預先知道第一點的前提下,F(xiàn)參數(shù)使得計算機對3D打印機的控制更加深入和精準了。計算得當?shù)那闆r下,切片器可以精確控制3D打印機的加速和減速過程,使得整個3D打印過程更加順滑。
G2/G3 圓弧移動
這兩條命令中,G2是順時針圓弧移動,G3是逆時針圓弧移動。命令的完整形式是:
G2 Xnnn Ynnn Innn Jnnn Rnnn Ennn Fnnn
或者
G3 Xnnn Ynnn Innn Jnnn Rnnn Ennn Fnnn
其中,
Xnnn表示移動目標點的X坐標;
Ynnn表示移動目標點的Y坐標;
Innn表示圓心位置,值是圓心距離當前位置的X分量;
Jnnn表示圓心位置,值是圓心距離當前位置的Y分量;
Rnnn表示圓形的半徑長度;
Ennn表示E軸(擠出頭步進電機)的移動位置;
Fnnn表示速度,單位是毫米/每分鐘;
根據(jù)勾股定理,R2 = I2 + J2。因此,如果提供了圓心位置參數(shù),就不需要提供半徑參數(shù)了。反之,如果提供了半徑參數(shù),也可以根據(jù)當前點和目標點計算出圓心位置,就不需要提供I/J參數(shù)了。其他幾個的參數(shù)用法,與G0/G1是完全一樣的。
G2/G3命令面臨的最尷尬的問題,是常用的上位機切片器軟件,包括Slic3r以及Cura engine,并不會生成這兩條指令。所有3D模型中的圓弧,在STL文件中已經(jīng)被轉化為使用大量小線段擬合而成的曲線。這樣,切片器自然也不會把這些小線段當做圓弧處理。最終的G-code輸出結果,也只會存在G0/G1指令,而不會存在G2/G3指令。當然,據(jù)打印虎所知,如果你使用的是比較小眾的上位機軟件,比如artCAM等,因為這些軟件的輸入并不是STL文件,因此它們的輸出G-code是很有可能出現(xiàn)G2/G3命令的。
如果確定了你的3D打印機只會接收到G0/G1直線移動命令,那么我們完全可以在3D打印機固件配置中,定義
#define ARC_SUPPORT 0
這樣,所有與G2/G3指令相關的代碼,就都不會編譯,也不會包含在最終的固件代碼中了??梢怨?jié)省一些固件的空間,同時并不會影響任何3D打印機的功能。
還有一個問題留給大家思考:在上位機切片軟件輸出G2/G3命令的情況下,相比于上位機切片軟件輸出G0/G1命令的情況,是否3D打印機打印圓形物體時會更圓呢?(答案是不會。)那么其中的原理是什么?
G4 暫停移動
這條命令讓擠出機在當前位置停止一段時間??赡艿膮?shù)包括:
Pnnn表示停止移動的時間,以毫秒為單位,1000毫秒等于1秒。
Snnn也表示停止移動的時間,以秒為單位。
因此,G4 P2000命令與G4 S2命令是完全等價的。
G10/G11 回抽/反回抽
這兩條命令使擠出頭執(zhí)行一個回抽(G10)或者相反的動作(G11)。所謂回抽,就是讓E軸步進電機反轉一小段。而反回抽則讓E軸步進電機正轉一小段。參數(shù)只有一個:
Snnn表示回抽的距離。S1表示長回抽,S0表示短回抽。
實際上,目前的切片器并不太依賴于G10/G11指令執(zhí)行回抽動作,而是利用G1 Ennn命令直接命令擠出頭步進電機前進或倒退到某一個位置。因此,與G2/G3命令類似,G10/G11命令基本上是個擺設,除非未來有專門的切片器可以生成這兩條指令,否則完全可以將這兩條指令關閉,節(jié)省內(nèi)存空間。在固件配置中,定義
#define FEATURE_RETRACTION 0
可以關閉G10/G11功能,在編譯期去除這段相關的代碼。
G20/G21 設置距離單位
這兩條命令非常簡單,用于設置當前距離單位為英寸(G20)或者毫米(G21)。沒有參數(shù)。
未設置時缺省值是毫米。
G28 歸零
這條命令使3D打印機XYZ軸以及擠出頭E軸歸零。參數(shù)包括:
X表示使X軸歸零
Y表示使Y軸歸零
Z表示使Z軸歸零
E表示重置E軸的位置為0,與XYZ軸不同的是,如果使用了E參數(shù),E軸步進電機并不運動,而是將當前的E軸位置直接設置為0,這樣下面對E軸的運動指令,都會解釋為相對0點的運動。
如果使用時沒有任何參數(shù),直接使用G28,等價于G28 XYZ命令。這時并不會對E軸進行重置為0的操作。
XYZ軸歸零的順序,由固件配置HOMEING_ORDER決定,比如定義為
#define HOMING_ORDER HOME_ORDER_XYZ
就代表著先歸零X軸,然后是Y軸,最后是Z軸。
T 設置當前擠出頭
對于擁有多個擠出頭的3D打印機來說,需要使用T命令選擇當前工作的擠出頭。這條命令有一個無名參數(shù),參數(shù)值直接跟在T后面。例如:
T0表示選擇第一個擠出頭;
T1表示選擇第二個擠出頭;
參數(shù)是T命令最特殊的一點。這與其他所有的G-code命令都不相同。

第二節(jié),Z軸高度測試與自動調平
三角洲類型的3D打印機,由于其打印速度更快,受到很多3D打印用戶的歡迎。與XYZ式3D打印機最大的一個不同,在于三角洲類型3D打印機的運動計算更加復雜,很難依賴人工調平達到較好的打印效果。因此,對Z軸的自動高度測試,以及自動調平相關的功能,就顯得更加重要了。以下G-code命令,是Repetier-firmware對這方面進行支持的一組命令。當然,這些功能并不僅限于三角洲類型的3D打印機。如果是包含了Z軸高度測試微動開關的XYZ式3D打印機,也同樣可以使用這些功能。
G29 Z軸高度三點測試
這條命令測試打印平面上三個點的Z軸高度,并在串口上輸出結果。參數(shù)包括:
Snnn測試結果的處理方式。S1表示更新內(nèi)存中的Z軸高度值(重置系統(tǒng)會丟失),S2表示更新內(nèi)存以及EEPROM中的Z軸高度值(重置系統(tǒng)不會丟失)。
無參數(shù)時,G29命令表示只從串口上輸出結果,不更新內(nèi)存或EEPROM中的Z軸高度值。
一般來說,只有使用高位限位開關(也就是說,Z軸的限位開關位于Z軸坐標最大處),且在擠出頭上附帶有Z軸高度測試微動開關的機型,適合使用G29命令測試Z軸高度。其他機械配置的機型,不適合使用G29命令。G29命令由固件配置
#define FEATURE_Z_PROBE 1
決定是否開啟。如果這個配置項定義為0,則編譯時會去除對G29命令的支持,節(jié)省內(nèi)存的使用。
命令執(zhí)行時,打印平面上的三個點,其XY坐標由以下固件配置參數(shù)決定:
#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
命令執(zhí)行的開始和結束,分別會執(zhí)行一段預定義的G-code。缺省的固件配置定義為:
#define Z_PROBE_START_SCRIPT “G28”
#define Z_PROBE_FINISHED_SCRIPT “”
可以看出,在缺省狀態(tài)下,開始執(zhí)行G29時,系統(tǒng)會自動對擠出頭進行復位(G28命令)。結束執(zhí)行G29時,沒有特殊的動作。
G29命令的Z軸高度測試,通常由一個微動開關控制觸發(fā)。這個開關的端口號,由Z_PROBE_PIN單獨指定。
G29命令的輸出,格式為:
X:0.00 Y:0.00 Z:200.00 E:0.00
Z-probe:5.01 X:-52.00 Y:-30.00
Z-probe:13.04 X:52.00 Y:-30.00
Z-probe:12.77 X:0.00 Y:60.00
X:0.00 Y:60.00 Z:-98.48 E:0.00
從以上例子的輸出可以看出,G29命令一共測試了三個坐標點,分別在(-52, -30), (53, 30)以及(0, 60)的位置,形成一個正三角形。三個點的Z軸高度相差比較懸殊,在第一個點正好是5mm的情況下,后兩個點分別是13.04mm以及12.77mm。第一行和最后一行,是測試開始時以及測試結束時的擠出頭坐標位置。
G30 Z軸高度單點測試(單步)
這條命令作為一個完整Z軸高度測試過程的一步,測試打印平面上一個點的Z軸高度,并在串口上輸出結果。這個完整的Z軸高度測試過程,通常是由3D打印機控制軟件連續(xù)發(fā)出的,通過參數(shù)控制G30的執(zhí)行狀態(tài)。因此在手動工作方式下,G30命令只適合不帶參數(shù)運行(等價于G30 P3,見下面的參數(shù)說明)。
G30命令的參數(shù)包括:
Pnnn表示測試的狀態(tài),P1表示當前這步是整個Z軸高度測試過程的第一步;P2表示當前這步是整個Z軸高度測試過程的最后一步;P3表示當前這步是Z軸高度測試過程的唯一一步,也就是說既是第一步也是最后一步;P0表示當前這步是Z軸高度測試過程中的中間一步。無參數(shù)情況下,P的缺省值是3。
與G29命令類似,G30命令同樣由固件配置
#define FEATURE_Z_PROBE 1
決定是否開啟。
G30命令的輸出,與上面的G29輸出格式一致,但只有其中的一行,需要上位機軟件多次發(fā)出G30命令,再綜合處理所有的輸出結果。
G31 輸出Z軸高度測試微動開關狀態(tài)
這條命令非常簡單,沒有參數(shù)。執(zhí)行后會輸出當前Z軸高度測試微動開關的當前狀態(tài):
Z-probe state:L
其中L表示微動開關沒有觸發(fā)。如果是處于觸發(fā)狀態(tài),這里會輸出H。
G29命令、G30命令、G31命令只進行Z軸的高度測試,并不進行自動調平。有些上位機3D打印機控制軟件,會通過這一組命令配合自動跳屏算法實現(xiàn)(上位機)熱床自動調平功能。如果希望不通過上位機,只由3D打印機自身完成自動調平功能,需要使用G32命令。
G32 熱床自動調平
這條命令在G29命令的基礎上,不僅測試打印平面上三個點的Z軸高度,而且還會根據(jù)測試的結果,對3D打印機的機械參數(shù)進行調整,實現(xiàn)熱床自動調平。G32命令使用的參數(shù)與G29命令是一致的:
Snnn測試結果的處理方式。S1表示更新內(nèi)存中的相關參數(shù)值(重置系統(tǒng)會丟失),S2表示更新內(nèi)存以及EEPROM中的相關參數(shù)值(重置系統(tǒng)不會丟失)。
G32命令執(zhí)行完成時,不僅Z軸高度參數(shù)發(fā)生了改變,而且還會根據(jù)3D打印機的硬件配置,對熱床進行相應的調平處理。
如果熱床本身是使用步進電機進行高度控制的,那么程序會自動調整步進電機的位置,使熱床自動調整為平整的狀態(tài);如果熱床本身不能移動(這個應該是更常見的情況),那么G32命令會在3D打印機內(nèi)存中構建一個轉換矩陣(Transformation matrix),讓未來3D打印機所處理的所有三維空間位置,都先經(jīng)過這個矩陣的變換,保證在Z=0的情況下,正好與熱床平面完全吻合。由于這里涉及到高深的計算機圖形學知識,我們就不詳細介紹了。有修改這方面代碼需求的朋友,可以直接與打印虎進行聯(lián)系。
G32命令,由固件配置
#define FEATURE_AUTOLEVEL 1
決定是否開啟。
G32命令的輸出,格式與G29命令類似:
X:0.00 Y:0.00 Z:200.00 E:0.00
Z-probe:5.00 X:-52.00 Y:-30.00
Z-probe:12.97 X:52.00 Y:-30.00
Z-probe:12.76 X:0.00 Y:60.00
Info: 0.99709 -0.00319 -0.07628 0.00000 0.99912 -0.4191 0.07634 0.004179 0.99621
Info: Autoleveling enabled
X:7.32 Y:64.08 Z:-95.66 E:0.00
X:0.00 Y:0.00 Z:200.00 E:0.00
除了與G29命令相似的測量信息之外,G32命令還輸出了計算得到的自動調平矩陣,并且打開了自動調平功能。需要注意的一點是,G32命令雖然生成了自動調平矩陣,但并沒將其保存在EEPROM中,因此下次開機這個信息將會丟失??梢耘浜螹320 S1命令,將自動調平矩陣保存在EEPROM中。
M251 將當前Z軸位置保存為Z軸高度值
這條命令可以將當前的Z軸位置保存為Z軸高度值,以使前面的Z軸高度手動/自動測量的結果起作用。通常,M251命令只工作在三角洲機型上,并且應該與G29命令聯(lián)合使用(自動測量Z軸高度)。這條命令沒有相關的參數(shù)。
當3D打印機打開EEPROM支持時,這條命令還會將Z軸高度值同時保存在EEPROM中。
只有當固件配置定義
#define Z_HOME_DIR -1
也就是Z軸向正方向歸位,并且定義
#define MAX_HARDWARE_ENDSTOP_Z true
也就是存在硬件的Z軸高位限位開關時,M251命令才會在編譯中包含相關的代碼。
通常,只有三角洲類型的3D打印機才能滿足這兩個條件限制。
M320/M321 開啟/關閉自動調平
開啟(M320)或者關閉(M321)自動調平功能,使自動調平轉換矩陣起作用或不起作用。命令參數(shù)為
Snnn表示是否保存于EEPROM,沒有S參數(shù)或者S0表示不保存于EEPROM,S1表示保存于EEPROM,在關閉自動調平(M321)命令中S3表示將自動調平矩陣清零且保存于EEPROM中;
M320的輸出結果為:
Info:Autoleveling enabled
表示自動調平已經(jīng)打開。
M321的輸出結果為:
Info:Autoleveling disabled
表示自動調平已經(jīng)關閉。
M322 清零自動調平轉換矩陣
清零(M322)自動調平轉換矩陣。顯然,清零這個動作的同時自動調平功能也關閉了。命令參數(shù)為
Snnn表示是否保存于EEPROM,S0表示不保存于EEPROM,S1表示保存于EEPROM;
也就是說,
M321 S3
命令等價于
M322 S1
命令,兩者都是清零自動調平矩陣,關閉自動調平功能,并且將這個設置保存于EEPROM之中。
以上三條命令,與G32命令相同,由固件配置
#define FEATURE_AUTOLEVEL 1
決定是否開啟。
M322的輸出結果為:
Info:Autolevel matrix reset
表示自動調平轉換矩陣已經(jīng)被清零。

第三節(jié),坐標模式與坐標位置
G90/G91 設置坐標模式
這兩條命令用于設置當前坐標模式為絕對坐標模式(G90)或者相對坐標模式(G91)。沒有參數(shù)。
未設置時缺省值是絕對坐標模式。我們在這篇教程中,所有的例子也都是以絕對坐標模式給出的。
在相對坐標模式下,每次步進電機XYZE移動之后,當前位置都會重置為0。對于以下兩條G-code命令
G0 X1
G0 X-1
如果3D打印機當前處于相對坐標模式下,那么X軸步進電機會先向正方向移動一個單位,再向反方向移動一個單位。第二條語句,實際移動距離是1個單位(向X軸反方向)。
而如果3D打印機當前處于絕對坐標模式下,那么X軸步進電機會先移動到X=1的位置處,再移動到X=-1的位置處。第二條語句,實際移動距離是2個單位(向X軸反方向)。
G92 設置位置
設置3D打印機內(nèi)存中XYZE的位置值。不移動對應的步進電機。參數(shù)包括:
Xnnn表示X軸的位置值;
Ynnn表示Y軸的位置值;
Znnn表示Z軸的位置值;
Ennn表示E軸(擠出機步進電機)的位置值;

第四節(jié),輔助步進電機
一些3D打印機的機械設計,會在XYZE四個步進電機軸之外,使用更多的輔助步進電機。Repetier-firmware提供了一套輔助步進電機指令,讓用戶(以及上位機軟件)可以操作這些輔助步進電機。由于輔助步進電機的用途、參數(shù)各異,為了讓這套指令更加通用,這些指令被設計為非常簡單的形式。
G201 移動步進電機位置
將步進電機P的位置移動到X位置處。參數(shù)包括:
Pnnn表示第P個輔助步進電機;
Xnnn表示這個步進電機的目標位置;
這條命令與G1命令非常類似。
G202 設置當前位置
將X位置設置為步進電機P的當前位置。不實際移動步進電機。參數(shù)包括:
Pnnn表示第P個輔助步進電機;
Xnnn表示這個步進電機的當前位置;
這條命令與G92命令非常類似。
G203 報告當前位置
報告步進電機P的當前位置。參數(shù)包括:
Pnnn表示第P個輔助步進電機;
這條命令與M114命令非常類似。
G203 開啟/關閉步進電機
用于開啟/關閉步進電機P。參數(shù)包括:
Pnnn表示第P個輔助步進電機;
Snnn表示開閉標志,S0表示關閉步進電機,S1表示開啟步進電機;
步進電機開啟后,有兩種可能的狀態(tài)。一種是“運動”狀態(tài),也就是正在進行正向或反向的旋轉。另一種是“保持位置”狀態(tài),也就是保持當前的位置不變。雖然步進電機關閉也不會主動移動位置,但“保持位置”狀態(tài)與步進電機關閉狀態(tài)仍有顯著的區(qū)別?!氨3治恢谩睜顟B(tài)下,當步進電機受力時,會產(chǎn)生一個反向的力矩,使步進電機位置保持不變。
這條命令與“節(jié)能管理”一節(jié)中的M84命令有關。M84命令用于關閉XYZE步進電機,但不能打開這些步進電機。

第五節(jié),SD卡管理
M20 列目錄
顯示SD卡所有目錄內(nèi)容。沒有相關的參數(shù)。
M20命令的輸出,格式為:
Begin file list
a.gcode
TEST/
TEST/c.gcode
b.gcode
End file list
這個目錄內(nèi)容清單,說明了這張SD卡上目前有3個文件,分別是a.gcode,b.gcode以及c.gcode,其中,a.gcode和b.gcode都保存于根目錄下,而c.gcode保存于一個名稱為TEST的文件夾里面。
M21 加載SD卡
嘗試加載SD卡,也就是執(zhí)行Mount動作。沒有相關的參數(shù)。
M22 卸載SD卡
卸載SD卡,也就是執(zhí)行Unmount動作。沒有相關的參數(shù)。
M23 選擇文件
選擇一個SD卡上的文件。參數(shù)為
filename表示被選擇的文件名(包含目錄名,以/分隔);
文件選擇之后,可以執(zhí)行打印、刪除等動作。例如命令
M23 TEST/c.gcode
選定了SD卡TEST文件夾里面的c.gcode文件作為當前文件。
同時輸出格式為:
File opened:c.gcode Size:1127565
File selected
表示文件已經(jīng)順利打開。
M24 開始SD卡打印
打印當前選定的SD卡文件。逐行讀入SD卡文件內(nèi)容G-code代碼,并執(zhí)行。沒有相關參數(shù)。
M25 暫停SD卡打印
暫停當前的SD卡打印。沒有相關參數(shù)。
M26 設置當前文件當前位置
設置當前文件的當前位置。參數(shù)為
Snnn表示當前位置的字節(jié)數(shù)。
M27 獲取SD卡打印進度
獲取SD卡打印進度。沒有相關參數(shù)。
M27命令的輸出,格式為:
SD printing byte 11518/1127578
這條命令供上位機獲取當前的3D打印進度信息,用于顯示在電腦界面上。
M28 寫SD卡文件
寫一個SD卡文件。參數(shù)為:
filename表示待寫入的文件名(包含目錄名,以/分隔);
從執(zhí)行M28命令開始,所有3D打印機接收到的G-code,除了M29命令以外,都會保存至指定的SD卡文件中,而不會被實際執(zhí)行。這條命令可以將一個G-code文件從上位機3D打印控制軟件復制到3D打印機的SD卡上,以供未來執(zhí)行。
M29 結束寫SD卡文件
結束以M28開始的“保存至SD卡文件”狀態(tài),將3D打印機恢復到正常狀態(tài)。從此,所有接收到的G-code命令,都會被直接解釋執(zhí)行。沒有相關參數(shù)。
M30 刪除文件
刪除一個SD卡中的文件。參數(shù)為:
filename表示待刪除的文件名(包含目錄名,以/分隔);
M32 創(chuàng)建子目錄
在SD卡上創(chuàng)建一個子目錄。參數(shù)為:
filename表示待創(chuàng)建的子目錄(包含目錄名,以/分隔);
以上所有SD卡相關指令,都由固件配置
#define SDSUPPORT 1
決定是否開啟。如果固件不需要支持SD卡,關閉這項固件配置,可以節(jié)省不少內(nèi)存空間。

第六節(jié),節(jié)能管理
M84 設置步進電機自動關閉時間
當3D打印機一段時間沒有接收到步進電機運動指令之后,3D打印機(為了節(jié)能)會自動關閉步進電機。使用M84指令,可以設置這個自動關閉步進電機的時間。參數(shù)包括:
Snnn表示步進電機關閉的時間,以秒為單位。
如果使用M84時沒有指定S參數(shù),則步進電機會立即關閉。
M84命令的缺省值是360秒。在固件配置中,缺省值由
#define STEPPER_INACTIVE_TIME 360L
控制。
M85 設置3D打印機自動關閉時間
當3D打印機一段時間沒有接收到指令之后,3D打印機(為了節(jié)能)會自動關閉步進電機以及擠出頭、熱床等設備。使用M85指令,可以設置這個自動關閉3D打印機的時間。參數(shù)包括:
Snnn表示在關閉步進電機之前步進電機沒有活動的時間,以秒為單位。
如果使用M85時沒有指定S參數(shù),或者使用了S0參數(shù),則代表取消3D打印機自動關閉功能,擠出頭、熱床等在工作完成之后,一直會處于當前狀態(tài),而不會被自動關閉。
M85命令的缺省值是0(不自動關閉)。在固件配置中,缺省值由
#define MAX_INACTIVE_TIME 0L
控制。

第七節(jié),溫度管理
M104 設置擠出頭目標溫度
設置擠出頭的目標溫度。執(zhí)行這條命令后,不需要等待達到這個溫度,立即開始執(zhí)行下一條G-code語句。相關參數(shù)包括:
Snnn表示目標溫度;
Tnnn表示對應的擠出頭;
P表示要等待前面的指令完成之后,再開始設置擠出頭溫度;
Fnnn表示到達目標溫度之后,是否觸發(fā)蜂鳴器。F1表示要觸發(fā);
如果執(zhí)行命令時沒有帶T參數(shù),則針對當前擠出頭設置目標溫度。
M140 設置熱床目標溫度
設置熱床的目標溫度。執(zhí)行這條命令后,不需要等待達到這個溫度,立即開始執(zhí)行下一條G-code語句。相關參數(shù)包括:
Snnn表示目標溫度;
Fnnn表示到達目標溫度之后,是否觸發(fā)蜂鳴器。F1表示要觸發(fā);
M105 獲取當前的溫度
獲取當前溫度值,包括擠出頭和熱床的溫度。相關參數(shù)包括:
X表示輸出AD轉換輸入的原始值;
M105命令的輸出,格式為:
T:18.97 /0 B:18.75 /0 B@:0 @:0
可以看到,T:之后的部分,代表擠出頭的當前溫度/目標溫度;B:之后的部分代表熱床的當前溫度/目標溫度。
在PID溫度控制模式下,B@:后面的數(shù)字代表熱床當前的輸出強度,是一個0~255的值,@:后面的數(shù)字,代表擠出頭當前的輸出強度,也是一個0~255的值。例子中,擠出頭、熱床都處于關閉狀態(tài),所以這個位置的值都是0。
M109 等待擠出頭加熱達到目標溫度
設置擠出頭的目標溫度,并等待達到這個溫度。相關參數(shù)包括:
Snnn表示目標溫度;
Tnnn表示對應的擠出頭;
Fnnn表示到達目標溫度之后,是否觸發(fā)蜂鳴器。F1表示要觸發(fā);
如果執(zhí)行命令時沒有帶T參數(shù),則針對當前擠出頭設置目標溫度。
M190 等待熱床加熱達到目標溫度
設置熱床的目標溫度,并等待達到這個溫度。相關參數(shù)包括:
Snnn表示目標溫度;
Fnnn表示到達目標溫度之后,是否觸發(fā)蜂鳴器。F1表示要觸發(fā);
M116 等待溫度達到目標溫度
等待所有擠出頭/熱床到達由之前的M104/M140指令所指定的目標溫度。沒有相關參數(shù)。

第八節(jié),其他常用指令
M92 設置分辨率
設置3D打印機內(nèi)存中XYZE步進電機的分辨率。參數(shù)包括:
Xnnn表示X軸的分辨率;
Ynnn表示Y軸的分辨率;
Znnn表示Z軸的分辨率;
Ennn表示E軸(擠出機步進電機)的分辨率;
M106/M107 打開/關閉風扇
這兩條命令用于打開(M106)或關閉(M107)風扇。相關的參數(shù)包括:
Snnn表示打開風扇時風扇的轉速,取值范圍在0~255之間;
P表示要等待前面的指令完成之后,再開始調整風扇轉速;
在固件配置中,定義
#define FEATURE_FAN_CONTROL 1
表示支持風扇控制功能,在編譯中會包含相關的代碼。
M114 輸出當前位置
輸出擠出頭當前位置。沒有相關的參數(shù)。
M114命令的輸出,格式為:
X:20.00 Y:30.00 Z:10.000 E:0.0000
M115 輸出3D打印機信息
輸出3D打印機信息。沒有相關的參數(shù)。
M115命令的輸出,格式為:
FIRMWARE_NAME:Repetier_0.92.3 FIRMWARE_URL:…
Printed filament:0.00m Printing time:0 days 0 hours 0 min
SpeedMultiply:100
FlowMultiply:100
第一行是固件的版本信息,很長,我沒有列完整。第二行是已經(jīng)打印了多少米耗材,打印時間是幾天幾小時幾分鐘。第三行是速度系數(shù),參考M220命令。第四行是流率系數(shù),參考M221命令。
M119 輸出限位開關狀態(tài)
將當前限位開關狀態(tài)輸出。沒有相關的參數(shù)。
M119命令的輸出,格式為:
endstops hit: x_min:L y_min:L z_min:L
列出了XYZ三個軸的低位限位開關的當前狀態(tài)。L代表限位開關沒有觸發(fā)。H代表限位開關被觸發(fā)了。
M201/M202 設置最大加速度
這兩條命令設置打印加速度。包括擠出頭工作時(打印中)的運動加速度(M201),以及擠出頭不工作時(移動中)的運動加速度(M202)。參數(shù)為
Xnnn表示X軸的加速度;
Ynnn表示Y軸的加速度;
Znnn表示Z軸的加速度;
Ennn表示E軸的加速度;
在固件配置中,定義
#define RAMP_ACCELERATION 1
表示支持加速度功能,在編譯中會包含相關的代碼。
M203 監(jiān)控溫度
使用串口輸出監(jiān)控3D打印機的溫度。參數(shù)為
Snnn表示是否監(jiān)控,S0關閉監(jiān)控,S1打開監(jiān)控;
當監(jiān)控處于打開狀態(tài),可以從串口定時獲取當前的溫度信息。
監(jiān)控輸出格式與M105命令的輸出結果完全一致。
M204 設置PID參數(shù)
設置擠出頭溫度控制的PID參數(shù),命令參數(shù)為
Snnn表示對應的擠出頭,無S參數(shù)表示使用當前擠出頭;
Xnnn表示P參數(shù);
Ynnn表示I參數(shù);
Znnn表示D參數(shù);
M207 修改抖動(Jerk)值
修改當前的最大抖動值。命令參數(shù)為
Xnnn表示XY軸的最大抖動值;
Znnn表示Z軸的最大抖動值;
Ennn表示E軸的最大抖動值;
XY軸抖動指的是3D打印機同時在X軸和Y軸上移動時,產(chǎn)生的和速度最大值。比如,3D打印機加熱頭正在向X軸正方向全速移動,下一條指令變?yōu)橄験軸正方向移動。如果同時在X軸和Y軸上改變速度,那么實際產(chǎn)生的速度是X方向的速度和Y方向的速度的向量和,這個比較大的速度變化值,會對3D打印機的機械部件產(chǎn)生不利的影響,而且會造成比較大的噪音。這里的設置,就限制了這個XY軸上和速度的最大值。當然這個值也不能設置的太小,太小的話,首先打印速度會變得很慢,而且打印會產(chǎn)生更多的瑕疵。
Z軸抖動與XY軸抖動意義類似,不同點是Z-Jerk是Z軸方向不為0的抖動速度值。因為這項涉及到Z軸的運動,因此最大速度就低多了。
M207命令的輸出,格式為:
Jerk:20.00 ZJerk:0.30
這個輸出意義很簡單,表示XY軸抖動速度為20mm/s,Z軸抖動速度為0.3mm/s。
M220 設置速度
設置3D打印機運行速度系數(shù)。命令參數(shù)為
Snnn表示系數(shù),是一個百分數(shù),如果S參數(shù)不存在,則使用缺省值100;
3D打印機運行速度系數(shù),是一個在25%到500%范圍內(nèi)變化的值。這個系數(shù)值在3D打印機運行過程中,與切片器給出的3D打印機運動速度基礎值相乘,得到最終的3D打印機實際運動速度值。
M220命令的輸出,格式為:
SpeedMultiply:100
M221 設置流率
設置3D打印機的流率系數(shù)(Flow rate)。命令參數(shù)為
Snnn表示系數(shù),是一個百分數(shù),如果S參數(shù)不存在,則使用缺省值100;
3D打印機流率系數(shù),是在上位機切片軟件通過耗材直徑、噴頭直徑、層高以及3D打印速度等因素綜合計算得到的E軸運動速度的基礎上,疊加的一個E軸運動速度系數(shù)。簡單地說,就是控制擠出頭耗材擠出量的多少。這個系數(shù)可以在25%到500%范圍內(nèi)變化。
M221命令的輸出,格式為:
FlowMultiply:100
M302 設置是否允許冷擠出
為了保護3D打印機的擠出頭,通常設置下,E軸的運動必須在擠出頭加熱到一定溫度之后才被允許。在擠出頭冷卻的情況下,所有的E軸運動命令是被3D打印機固件忽略的。但有些情況下我們需要在擠出頭冷卻的情況下運動E軸,這時可以通過M302命令進行設置。命令參數(shù)為
Snnn表示是否允許冷擠出,S0表示不允許,S1表示允許,沒有S參數(shù)缺省表示允許;
M302命令的輸出,為當前是否允許冷擠出。允許時會輸出:
Cold extrusion allowed
不允許時會輸出:
Code extrusion disallowed

第九節(jié),較不常用指令
這些指令實在無法歸類了,只能以“較不常用指令”為名字,放在了一起。
M42直接讀寫端口
此命令直接讀/寫一個Arduino端口,為3D打印控制軟件上位機擴展程序功能提供基礎。參數(shù)包括:
Pnnn表示Arduino的輸入/輸出端口;輸出時固件程序會同時輸出到數(shù)字端口和模擬端口;輸入時固件程序會從數(shù)字端口輸入;
Snnn表示寫入輸出端口的值,0到255之間是合法的數(shù)字;當S參數(shù)不存在的時候,M42指令起輸入作用;
Repetier-firmware固件中預先定義了一個表格,稱為“敏感端口表格”,所有位于這個表格內(nèi)的端口,也就是當前已經(jīng)被步進電機、限位開關以及熱敏電阻占用的端口,都不能被M42命令影響。其他當前未占用的端口,可以由這條命令進行IO操作。
M82/M83 設置擠出頭步進電機坐標模式
與G90/G91命令類似,這兩條命令用于設置擠出頭當前坐標模式為絕對坐標模式(M82)或者相對坐標模式(M83)。沒有參數(shù)。
未設置時缺省值是絕對坐標模式。
需要注意的是,G90/G91設置的坐標模式,同時對XYZE四個軸起作用,但M82/M83設置的坐標模式,只對E軸(擠出頭步進電機)起作用。
M99 暫時關閉步進電機
M99命令可以暫時關閉XYZ軸步進電機一段時間。命令參數(shù)包括:
Snnn表示所需暫時關閉步進電機的時間,以秒為單位;
X表示暫時關閉X軸步進電機;
Y表示暫時關閉Y軸步進電機;
Z表示暫時關閉Z軸步進電機;
如果S參數(shù)沒有指定,則暫時關閉10秒鐘時間。暫時關閉時間到達之后,重新打開相應軸的步進電機。
M111 允許/禁止運行時調試標志
運行時調試標志是一組布爾值,一共有6個不同的標志,使用位域(Bit Field)的表示方式。用戶可以利用M111指令修改這些標志的值。相關參數(shù)包括:
Snnn表示直接將調試標志設置為S值;
Pnnn表示以位操作的方式,將P值與當前調試標志做某種操作。如果P值是正數(shù),則進行按位或操作(增加P參數(shù)所帶的標志位);如果P值是負數(shù),則忽略P的符號,進行取反后按位與操作(去除P參數(shù)所帶的標志位);
調試標志的位域,由以下6個布爾值組成:
第1位,值為1,表示是否回顯(Echo)由上位機發(fā)送至下位機的命令;
第2位,值為2,表示是否輸出信息(Info),實際在固件代碼中并未使用;
第3位,值為4,表示是否輸出錯誤(Error),在固件出錯時會將出錯信息發(fā)送回上位機;
第4位,值為8,表示是否進入模擬執(zhí)行模式(Dry run),在模擬執(zhí)行模式下,3D打印機不實際執(zhí)行上位機發(fā)送的命令,只修改3D打印機的內(nèi)存狀態(tài);
第5位,值為16,表示是否進入調試通訊模式(Communication),實際在固件代碼中似乎并未使用;
第6位,值為32,表示是否進入禁止移動模式(No Move),在這個模式下,所有對步進電機的移動命令,都會被忽略;
M117 發(fā)送消息至LCD屏幕
將一條詳細發(fā)送至LCD屏幕,顯示為當前狀態(tài)信息。參數(shù)為
message表示待顯示在LCD屏幕上的文本;
M120 測試蜂鳴器
使蜂鳴器發(fā)出蜂鳴聲。參數(shù)為
Snnn表示發(fā)出聲音/不發(fā)出聲音的時間,以毫秒為單位;
Pnnn表示重復的次數(shù);
如果3D打印機有蜂鳴器,而且是無源蜂鳴器,那么通過S參數(shù)和P參數(shù)的組合,可以得到不同頻率的聲音。比如
M120 S24 P8
可以得到一個較長的蜂鳴聲。如果3D打印機的蜂鳴器是有源蜂鳴器,那么M120指令只能控制蜂鳴時間,不能控制蜂鳴器的聲音頻率。
M200 設置體積擠出模式
將3D打印機設置為“體積擠出模式”,同時設定擠出頭直徑參數(shù)。相關參數(shù)包括
Tnnn表示對應的擠出頭,無T參數(shù)表示使用當前擠出頭;
Dnnn表示擠出頭的實際直徑,無D參數(shù)表示關閉體積擠出模式;
體積擠出模式,是相對于缺省的“長度擠出模式”而言的另一種擠出模式。在常見的“長度擠出模式”下,G-code中的使E軸運動的G0/G1命令,其參數(shù)都是以長度單位mm作為單位的。這樣確實比較簡單,但問題是我們在切片的時候,就必須知道要使用的噴頭直徑,否則無法計算出耗材前進的實際長度。
為了使G-code在生成之后適用于多種不同噴頭直徑的3D打印機機型,我們可以在上位機切片時,將E軸參數(shù)變?yōu)橐泽w積單位mm3作為單位,然后在下位機固件中,再設定正在使用的噴頭直徑,以達到最終正確輸出的目的。為了以體積單位mm3作為E軸的參數(shù)單位,上位機需要將噴頭直徑設定為1.128mm(這樣,耗材每前進1mm,會噴出1mm*π*(1.128mm/2)2約等于1mm3的耗材。)同時,下位機要使用下面的語句:
M200 T0 D0.4
將實際的擠出頭噴頭直徑設置為0.4mm。同時在上位機和下位機進行這樣的操作之后,3D打印機可以在E軸參數(shù)單位為mm3的情況下,正確完成打印操作。
M209 開啟/關閉自動回抽
開啟/關閉自動回抽功能。命令參數(shù)為
Snnn表示是否開啟自動回抽功能,1表示開啟,0表示關閉;
通常上位機切片器負責在合適的位置處加入回抽指令。如果你的切片器功能比較弱,不能加入合適的回抽指令,那么可以打開這個特性,由固件自動回抽。
在固件配置中,定義
#define FEATURE_RETRACTION 1
表示支持自動回抽功能,在編譯中會包含相關的代碼。
M280 多頭重復打印模式設置
有些特殊配置的3D打印機,允許2~4個擠出頭同時工作,并且這些擠出頭動作完全一致,同時打印出多件完全一樣的打印件,這種工作模式叫做多頭重復打印模式(Ditto mode)。M280命令對這個模式進行設置。命令參數(shù)為
Snnn表示這個模式下的擠出頭個數(shù);S0表示關閉多頭重復打印模式;S1~S3表示工作在多頭重復打印模式下,并且3D打印機擁有額外的1~3個擠出頭。
在固件配置中,定義
#define FEATURE_DITTO_PRINTING 1
表示支持多頭重復打印模式功能,在編譯中會包含相關的代碼。
M281 測試硬件看門狗功能
這條命令用于測試CPU硬件中的看門狗功能。實際上,就是造成一個死循環(huán),不再執(zhí)行“喂狗”動作,從而觸發(fā)CPU硬件看門狗,最終(故意地)造成3D打印機重啟。這條命令只是用于3D打印機固件開發(fā)測試。
M303 自動測試PID參數(shù)
自動測試PID參數(shù)值。命令參數(shù)為
Pnnn表示待測試的擠出頭編號,從0開始,P<擠出頭個數(shù)>代表待測試的是熱床;
Snnn表示打印溫度;
Rnnn代表重復測試次數(shù);
X代表是否保存于EEPROM中;
由于加熱、散熱需要較多時間,這條命令執(zhí)行時間很長。
M330 測試蜂鳴器
測試(無源)蜂鳴器,產(chǎn)生一個特定頻率的聲音。命令參數(shù)為
Snnn表示聲音的頻率;
Pnnn表示聲音持續(xù)的時間,以毫秒為單位;
如果命令沒有包含S參數(shù)或者P參數(shù),則會使用缺省值S1以及P1000。

第十節(jié),保存與恢復當前位置
M400 等待當前所有移動指令完成
等待在3D打印機內(nèi)存中待處理的移動命令執(zhí)行完成。沒有相關的參數(shù)。
執(zhí)行這條語句之后,可以保證在下一條G-code命令執(zhí)行時,所有步進電機都不處于運動狀態(tài)中。
M401 保存當前的位置
將當前位置,包括XYZE步進電機,保存于內(nèi)存的一組專用變量中。未來可以用M402命令恢復這組位置。沒有相關的參數(shù)。
M402 恢復之前保存的位置
恢復之前由M401命令保存的位置值。命令參數(shù)為
X表示恢復X位置;
Y表示恢復Y位置;
Z表示恢復Z位置;
E表示恢復E位置;
Fnnn表示使用參數(shù)給定的速度,無F參數(shù)時使用當前速度值;

第十一節(jié),暫停與更換耗材
M600 更換耗材
在擁有顯示屏的3D打印機上,啟動更換耗材向導界面。沒有相關的參數(shù)。
通常,這個向導界面是從顯示屏界面上觸發(fā)的。M600命令提供一個接口,使更換耗材向導界面可以從上位機軟件觸發(fā)。
M601 暫停/恢復擠出頭
暫?;蛘呋謴蛿D出頭。命令參數(shù)為
Snnn表示暫?;蛘呋謴停琒1表示暫停擠出頭,S0表示恢復擠出頭工作;
暫停擠出頭包括停止擠出頭加溫以及停止擠出頭步進電機工作?;謴蛣t相反,加熱擠出頭到原來的溫度。

第十二節(jié),設置與EEPROM管理
固件的設置,是一個比較有趣的話題,很多玩3D打印機的朋友,在遇到設置相關的問題時都會犯迷糊。實際上,對于某一項特定的設置,比如說X軸的步進電機分辨率,在3D打印機主板上,有三個不同的位置(也是三種不同的存儲器)保存了這項內(nèi)容,而它們的值還有可能不同。讓我們先來了解一下這些保存設置內(nèi)容的位置,以方便大家的理解。
首先,是固件配置文件(configuration.h)中的設置值。配置文件中的值,會跟隨固件一起編譯,之后在刷機過程中,保存在了3D打印機的靜態(tài)存儲區(qū)(Flash ROM)中。除了刷機之外,靜態(tài)存儲區(qū)的內(nèi)容不會發(fā)生變動,可以認為是只讀的。每次開機的時候,都是一樣的值在等待著我們。
第二份設置值,保存在電可擦寫靜態(tài)存儲區(qū)(EEPROM)。EEPROM的讀寫代價,比靜態(tài)存儲區(qū)要小。因此,3D打印機允許在刷機之后,修改設置值,而這些修改之后的設置值,就存儲在EEPROM之中。每次開機,程序會先檢查EEPROM,如果EEPROM中是空白的,則將靜態(tài)存儲區(qū)的第一份設置值復制到EEPROM之中。而如果EEPROM中已經(jīng)有保存好的設置值,則程序會直接使用EEPROM中的值。有些朋友在玩3D打印機過程中可能會有這樣的經(jīng)驗,就是明明修改了固件配置文件中的設置值,但刷機之后竟然沒有發(fā)生變化。這種情況,往往就是EEPROM在搗鬼了。我們完全可以使用G-code M502 M500兩條指令(指令的具體含義可以參考下面),重寫EEPROM,解決這樣的問題。
第三份設置,保存在內(nèi)存(RAM)中。實際用戶使用的值,就是內(nèi)存中的值。由于內(nèi)存只在加電情況下能夠保持其中的內(nèi)容,因此每次開機時,3D打印機會根據(jù)上面描述的邏輯,重建內(nèi)存中的設置值。如果某條指令修改的是內(nèi)存中的設置值,那么這也代表著這次修改是一個臨時修改,下次開機這個值就會消失了。
總的來說,三份固件設置,使用的優(yōu)先級是
內(nèi)存 > EEPROM > 配置文件
但設置的持久性,就要反過來了。明確了解了這些,特別有助于我們解決一些與設置相關的問題,自然,看下面這些命令描述的時候,也就不會迷糊了。
M205 輸出EEPROM設置
輸出EEPROM的當前設置值表格。沒有相關的參數(shù)。
M205命令的輸出,格式為:
EPR:2 75 115200 Baudrate
EPR:3 129 0.000 Filament printed [m]
EPR:2 125 0 Printer active
這是一個很長的輸出,我們這里只截取了前三行。每行中,EPR:后面的第一個數(shù)字,是這個設置項值的類型。0代表8bit整數(shù)類型,1代表16bit整數(shù)類型,2代表32bit整數(shù)類型,3代表32bit浮點類型。第二個數(shù)字,是設置項值的位置(即EEPROM中的地址)。第三個數(shù)字,是設置項的值。最后,是設置項的意義。
以第一行為例,第一行設置的是通訊波特率(Baudrate),當前值是115200。波特率設置項,在EEPROM中的位置(地址)是75,這個值是一個32bit整數(shù)類型,因此占據(jù)了從位置75開始的連續(xù)4個字節(jié)(也就是位置75, 76, 77, 78)。
M206 修改EEPROM設置
修改EEPROM中的某個值。命令參數(shù)為
Pnnn表示待修改的值的位置(即EEPROM中的地址);
Tnnn表示值的類型,0代表8bit整數(shù)類型,1代表16bit整數(shù)類型,2代表32bit整數(shù)類型,3代表32bit浮點類型;
Snnn表示值,只能帶整數(shù),用于T為0, 1, 2的情況;
Xnnn表示值,只能帶浮點數(shù),用于T為3的情況;
可以看出,M206指令的使用是很復雜的,需要了解EEPROM中數(shù)值的存儲位置以及數(shù)值類型,才能進行有效的修改。因此打印虎建議除非你完全理解M206指令的含義,否則不要使用這個指令。
M360 輸出固件配置信息
輸出固件配置信息。沒有相關參數(shù)。
M360命令的輸出,格式為:
Config:Baudrate:115200
Config:InputBuffer:127
Config:NumExtruder:1
這是一個很長的輸出,我們這里只截取了前三行。每行中,都有一項配置信息的名稱,以及對應的值。
M500 保存內(nèi)存中的設置值到EEPROM
將3D打印機內(nèi)存中的設置值保存到EEPROM中。沒有相關的參數(shù)。
M501 讀取EEPROM的設置值到內(nèi)存
將EEPROM中的設置值讀取到3D打印機內(nèi)存中。沒有相關的參數(shù)。
M502 將內(nèi)存中的設置值重置
將內(nèi)存中的設置值重置為固件配置(configuration.h)中的值。沒有相關的參數(shù)。
由于每次系統(tǒng)掉電后,內(nèi)存中的值都會消失,重新啟動時從EEPROM中讀取,因此單獨使用M502命令將只對3D打印機掉電重啟之前起作用。如果想起長期作用,需要配合M500,將設置值保存到EEPROM中。

第十三節(jié),步進電機參考電壓調節(jié)
目前市面上支持軟件設置步進電機參考電壓的3D打印機主板很少。大部分3D打印機主板只能通過調整微調電位器來控制步進電機參考電壓。在這些3D打印機上,這一組命令是無效的。
M907 設置步進電機參考電壓(百分比值)
設置步進電機參考電壓。命令參數(shù)為
Snnn表示對所有步進電機進行統(tǒng)一設置;
Xnnn表示對X軸步進電機進行設置;
Ynnn表示對Y軸步進電機進行設置;
Znnn表示對Z軸步進電機進行設置;
Ennn表示對E軸步進電機進行設置;
所有的參數(shù)值,都是一個0~100之間的百分比數(shù)值。
M908 設置步進電機參考電壓
與M907命令類似,設置步進電機參考電壓。命令參數(shù)為
Pnnn表示步進電機編號;
Snnn表示步進電機參考電壓設置值,要求為0~255之間的一個數(shù)值;
這個命令與M907命令類似,同樣要求3D打印機主板支持。在不支持軟件調整參考電壓的3D打印機主板上,M908命令無效。
M909 輸出步進電機參考電壓值
輸出當前的步進電機參考電壓值。沒有相關的參數(shù)。
M910 將步進電機參考電壓值保存至EEPROM
將M907/M908命令設置的步進電機參考電壓值保存至EEPROM。沒有相關的參數(shù)。

第十四節(jié),需要輔助硬件支持的指令
M80/M81 打開/關閉ATX電源
在配置了ATX電源的3D打印機上,打開(M80)或者關閉(M81)ATX電源。沒有相關的參數(shù)。
M340 伺服電機控制
伺服電機控制功能。命令參數(shù)為
Pnnn表示伺服電機編號,從0開始,最大為3,可以控制4個伺服電機;
Snnn為控制時間,單位為毫秒,應該是一個500到2500之間的數(shù)值;
Rnnn為自動關閉時間,單位為毫秒;
M350 設置步進電機細分數(shù)
在支持細分數(shù)設置的3D打印機主板上(這類主板很少見),設置步進電機細分數(shù)。命令參數(shù)為
Snnn表示將細分數(shù)的每一位(bit)都設置為相同的值,S0表示所有都設置為0,S1表示所有都設置為1;
Xnnn表示設置細分數(shù)第0位;
Ynnn表示設置細分數(shù)第1位;
Znnn表示設置細分數(shù)第2位;
Ennn表示設置細分數(shù)第3位;
Pnnn表示設置細分數(shù)第4位;
需要注意的是,在大多數(shù)3D打印機主板上,細分數(shù)設置是主板硬件設計時就固定的,不能通過軟件調整。這種情況下,M350命令無效。
M355 設置照明燈開關
設置照明燈的開關。命令參數(shù)為
Snnn表示照明燈的開關狀態(tài),S0表示關閉照明燈,S1表示打開照明燈;
無參數(shù)時輸出當前照明燈的狀態(tài)。
在固件配置中,定義
#define CASE_LIGHTS_PIN -1
表示照明燈的電路硬件連接pin值,-1代表照明燈未連接。
M355命令的輸出,為當前是否打開了照明燈。打開時會輸出:
Case lights on
關閉時會輸出:
Case lights off

通過上面的章節(jié),給大家詳細講解了Repetier-firmware支持的所有G-code命令。相信大家對這些命令有了初步了解之后,就想自己試驗一下,看看單步執(zhí)行這些G-code命令是怎樣的效果。到此為止,我們的3D打印機G-code命令相關的內(nèi)容就都介紹完了。希望讀到這篇文章的朋友,獲得所需的知識,并且對3D打印機有一個更深層次的認識。
文章轉載自:打印虎
聲明:3D打印資源庫(3dzyk)內(nèi)網(wǎng)友所發(fā)表的所有內(nèi)容及言論僅代表其本人,并不代表3D打印資源庫(3dzyk)觀點和立場;如對文章有異議或投訴,請联系kefu@3dzyk.cn。
標簽:
RepRap 3D打印機G-code命令詳解適用于Repetier-firmware固件 
快速回復 返回頂部 返回列表
喀喇| 湘西| 仪陇县| 玛曲县| 永胜县| 通河县| 华容县| 海安县| 阜新| 揭西县| 延安市| 乌鲁木齐县| 恩平市| 平和县| 修文县| 金门县| 绥棱县| 杭锦后旗| 诏安县| 澄江县| 永寿县| 新安县| 文水县| 尼勒克县| 永胜县| 黔南| 靖西县| 阳曲县| 海原县| 隆德县| 淳化县| 油尖旺区| 桂林市| 海安县| 会东县| 太原市| 盐亭县| 长子县| 南和县| 黄陵县| 磐石市|