【3D打印机使用教程】RepRap3D打印机G-code命令专家详解【第二节】【卓序科技】
第二节,Z轴高度测试与自动调平
三角洲类型的3D打印机,由于其打印速度更快,受到很多3D打印用户的欢迎。与XYZ式3D打印机最大的一个不同,在于三角洲类型3D打印机的运动计算更加复杂,很难依赖人工调平达到较好的打印效果。因此,对Z轴的自动高度测试,以及自动调平相关的功能,就显得更加重要了。以下G-code命令,是Repetier-firmware对这方面进行支持的一组命令。当然,这些功能并不仅限于三角洲类型的3D打印机。如果是包含了Z轴高度测试微动开关的XYZ式3D打印机,也同样可以使用这些功能。
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.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打印机控制软件连续发出的,通过参数控制G30的执行状态。因此在手动工作方式下,G30命令只适合不带参数运行(等价于G30 P3,见下面的参数说明)。
G30命令的参数包括:
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-probe state: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.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中,因此下次开机这个信息将会丢失。可以配合M320 S1命令,将自动调平矩阵保存在EEPROM中。
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打印机才能满足这两个条件限制。
M320/M321 开启/关闭自动调平
开启(M320)或者关闭(M321)自动调平功能,使自动调平转换矩阵起作用或不起作用。命令参数为
Snnn表示是否保存于EEPROM,没有S参数或者S0表示不保存于EEPROM,S1表示保存于EEPROM,在关闭自动调平(M321)命令中S3表示将自动调平矩阵清零且保存于EEPROM中;
M320的输出结果为:
Info:Autoleveling enabled
表示自动调平已经打开。
M321的输出结果为:
Info:Autoleveling disabled
表示自动调平已经关闭。
M322 清零自动调平转换矩阵
清零(M322)自动调平转换矩阵。显然,清零这个动作的同时自动调平功能也关闭了。命令参数为
Snnn表示是否保存于EEPROM,S0表示不保存于EEPROM,S1表示保存于EEPROM;
也就是说,
M321 S3
命令等价于
M322 S1
命令,两者都是清零自动调平矩阵,关闭自动调平功能,并且将这个设置保存于EEPROM之中。
以上三条命令,与G32命令相同,由固件配置
#define FEATURE_AUTOLEVEL 1
决定是否开启。
M322的输出结果为:
Info:Autolevel matrix reset
表示自动调平转换矩阵已经被清零。