切片软件对模型进行切片后会生成.gcode文件,这就是我们常说的G代码。G代码是用于指导3D打印机怎么动作的文件,其实最主要就是指导打印机的3轴电机和挤出机如何动作,比如某个电机正转多少、速度多少。
3D打印机本质就是gcode的执行器,同样的雕刻机、激光雕刻机也是。我们把一张平面图形通过软件生成G代码,G代码就可以控制激光雕刻机的x、y电机先运动到哪儿、再运动到哪儿、接着运动到哪儿…..一系列运动之后就把平面图形雕刻出来了。我们把3D模型经过切片软件处理后,就是把3D模型切成一层一层的平面图形,同样的道理控制电机经过一系列运动就可以把模型打印出来了。
因此3D打印机的控制固件、切片软件并不复杂,只要知道了G代码的语法,就可以自己写一个G代码的执行固件、G代码的生成上位机。甚至不需要G代码,你可以自己定义一种代码,然后自己根据定义的代码来设计执行固件和代码生成上位机。
上面是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命令完全等价,作用就是让喷头线性移动到一个特定的位置。参数完整形式为:
或者
使用时,不需要所有的参数全部存在,但至少要有一个参数。其中,
Xnnn表示X轴的移动位置;
Ynnn表示Y轴的移动位置;
Znnn表示Z轴的移动位置;
Ennn表示E轴(挤出头步进电机)的移动位置;
Fnnn表示移动速度,单位是毫米/每分钟;
Snnn表示是否检查限位开关,S0不检查,S1检查,缺省值是S0;
如:
这两行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左右的往返运动,来保证复位的准确性。如果在命令后面加上坐标值,则只会复位坐标值对应的坐标轴。(坐标值的数字会被忽略)
如:
只会复位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
G94/G95:进给速率单位
使用了G94指令之后,所有的进给都是以mm/min为单位,即F100指刀具每分钟移动100毫米(默认的)
使用了G95指令之后,所有的进给都是以mm/r为单位,即F100指主轴每转一转,刀具移动100毫米
G17/G18/G19:选择加工平面
三、即时的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 B@:0 @:0
可以看到,T:之后的部分,代表挤出头的当前温度/目标温度;B:之后的部分代表热床的当前温度/目标温度。
在PID温度控制模式下,B@:后面的数字代表热床当前的输出强度,是一个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打印机固件开发测试。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!