单行 Gcode 可以有可变的挤出率吗?

3D打印 g代码 挤压 fdm
2021-05-07 04:34:19

相当长篇幅,但希望是有道理的;

我知道 G 代码是逐行执行的,在主打印阶段,每条指令都以设定的速度和设定的挤出量(不是速率,到目前为止)有效地到达位置 XY(假设留在层内)据我所知)。

想象一下,您正在打印一条道路宽度,比如 10 毫米长。如果单个指令说以设定的速度移动 10 毫米并挤出 10 毫米的材料(我猜这不是 10 毫米的长丝),喷嘴和挤出机齿轮无限加速和减速,那么线性量的材料将沿 10 毫米每单位长度挤出。然而,考虑到有一些加速和减速,挤压必须是非线性的。

我的问题如下;- 是否有可能通过具有可变的挤出速率在一行 Gcode 中抵消这种情况?- 无论给出的指令如何,机器都可以这样做吗?- 是否以某种方式接受了这种效果?- 加速喷嘴位置和灯丝的需要是否有效抵消?- 您是否会/是否可以将一条直线的细丝分成多行 G 代码,一些挤出(比如在中间),有些不挤出(比如在每一端)?

4个回答

我的理解是打印机固件将定义每个轴(X、Y、Z 和 E)的最大加速度和速度。当执行一行涉及多个轴的 g 代码时,每个轴的加速度都将受到限制,以便它们都开始和结束,包括一起加速。

在一行的开始和结束期间,当打印喷嘴移动得较慢时,挤出机也将缓慢移动。在线的中间,挤出机将移动得更快。每段距离挤出的材料量将在整个生产线长度上保持不变。

另一种看待它的方式 - 假设您可以在 X 上以较高的最高速度快速加速,但在 Y 上缓慢加速。仅在 X 方向上的移动可能会很快发生。仅在 Y 方向上移动会更慢。如果您想以 45 度角移动,则需要减慢 X 的速度,使其不会超过 Y。

如果您确实想有意地改变一行中每距离的挤压量,则需要将其分成多个带有单独的 g 代码行的段。

让我们来看看...

是否可以通过可变的挤出速率在一行 Gcode 中抵消这种情况?

不,不能。G 代码逐行执行。如果你有一行: G1 X10 F100 F200 F300 一些解析器会接受第一个(F100),一些只会接受最后一个(F300)

无论给出的指令如何,机器都可以这样做吗?

如果您编写自定义G 代码解析器来这样做,您仍然不能这样做,因为没有您希望应用效果的时间尺度。为此,您必须向解析器引入一个新字母(我们称之为 K),您可以使用它来指示机器相应地缩放挤压(例如 G1 X10 F100 K0.24)。然后机器就会知道在运动过程中将 F 参数缩放 0.24。

是否以某种方式接受了这种效果?

嗯……没有?

加速喷嘴位置和灯丝的需要是否有效抵消?

怎么取消?长丝步进机和龙门步进机是步进同步的,因此它们始终以正确的进给率运行。

你会/你能把一条直线的细丝分成多行 G 代码,一些挤出(比如在中间),有些不是(比如在每一端)?

绝对不。gcode 的每一行都必须由机器完成,然后才能考虑任何其他行。您不能让多行 g 代码控制一个运动,因为将无法控制行执行的时间。

虽然 Trish 直接回答了您问题的 G 代码部分,但如果您使用 Marlin,我的回答提供了另一种选择。RepRap 有一个类似的功能叫做压力推进,但这个答案是专注于 Marlin 的功能。

根据马林的说法

在默认条件下,挤出机轴运动的处理方式与 XYZ 线性轴相同。挤出机电机与所有其他电机成线性比例移动,保持完全相同的加速度曲线和开始/停止点。但是挤出机不是线性系统,因此这种方法最明显地导致在每次线性运动结束时挤出额外的材料。

简而言之,由于铺设线时不断挤压,角会导致变圆而不是尖锐。可以通过改变流量来缓解这种情况,尽管这可能会影响打印件其他部分的直线,即在挤出时。马林对此的回答是线性推进。

线性推进时,挤出速率随着打印头速度的变化而变化。当打印头移动得更快时,必须推出更多塑料以铺设一致的线条,并且一旦打印头减速,挤出速度就会降低以进行补偿。印刷品应具有一致的线条。这一切都是使用称为 k 的新因子完成的。来自马林

K 现在是一个有意义的值,单位为 [每 1 毫米/秒挤出速度所需的长丝压缩毫米数] 或 [毫米/毫米/秒]。

可以使用 Marlin 的k 校准工具确定打印机的 k 值,该工具打印出多条直线并指示打印机缓慢打印每行的开头,然后快速打印,然后再次慢速打印。每条线都有不同的 k 值,用户从最一致的线中选择 k 值。

一些注意事项

鲍登式挤出机需要更大的 k 值,即使如此,线性推进也可能不起作用。这是由于鲍登管本身以及挤出机电机和热端之间的材料造成的。这与尝试使用鲍登挤出机打印柔性塑料存在相同的问题。虽然线性推进更适合直接驱动,但也不是不可能在 Bowden 上使用它。

设置线性前进需要一组额外的调谐。虽然这主要意味着调整 k 值,但打印速度可能需要调整(甚至可能允许更快的速度)。

较旧的线性推进版本,至少在 Marlin 上,挤出机电机更加活跃。有些人报告说,打印噪音明显更大。此功能还可能会给 CPU 增加额外的负载。从 v1.5 开始,这些问题应该不再是问题,而是 YMMV。

需要更改固件/G 代码,以便每次打印都可以使用线性前进。如果打印机仅使用一种材料,则可以更改固件。但是,如果在打印机的生命周期内使用多种材料,则 G 代码必须在启动脚本的末尾包含以下命令(更多信息请点击此处)。每种材料的 k 值都不同。该命令的示例如下:

M900 K75 ; Set k-factor for PLA

该链接还建议在固件中打开该功能时将 k 因子值设置为 0。这实质上禁用了固件中的硬编码值。

最后,在使用线性推进时,应禁用切片器设置,如压力推进、结束滑行、缩回后的额外重启长度,因为它们执行类似操作。另一方面,这些设置可能适用于您的打印机,因此您甚至可能不需要使用线性前进。

不是在一条线上,而是...

在 Hyrel 系统上,您可以手动将一个长移动拆分为多个较小的移动,每个移动具有不同的挤压速率。

例如,让我们从 X100 Y100 开始,然后移动到 X100 Y200。在 Hyrel 上,这看起来像这样(如果未指定,则具有继承的 F 率):

  G1 X100 Y200 E1

我们可以通过指定 Feed Rate Multiplier 来改变它:

  M221 S0.9 ; set feed rate multiplier to 90%
  G1 X100 Y110 E1 ; print 10mm
  M221 S0.95 ; set feed rate multiplier to 95%
  G1 X100 Y120 E1 ; print 10mm
  M221 S1 ; set feed rate multiplier to 100%
  G1 X100 Y130 E1 ; print 10mm
  M221 S1.05 ; set feed rate multiplier to 105% 
  ...

我们还可以改变移动之间的所有参数,包括打印速度、加速、减速、冷却和 UV 固化。

我们也使用“线性前进”,因此挤压会随着行进速度而增加。

注意:我为 Hyrel 工作。