个人资料
归档
正文

3D打印(5): 自动调平

(2020-11-19 18:49:29) 下一个

https://www.repetier.com/documentation/repetier-firmware/z-probing/ 有编改

在开始定义自动调平之前,您应该知道自己在做什么,可以更改的内容以及在哪里可以更改哪些错误。
最重要的工具是z探针。这是一种在开关等压力下切换数字引脚的设备,该设备已连接到挤出机,例如它会在喷嘴碰到床之前正常触发。一旦知道触发时床上方的喷嘴高度,我们就可以使用它来测量床在z方向上的位置。

我们通常要做的第一件事是使床铺平整。为此,我们至少要测量3个点,然后计算出平均平面。与理论常数z的差向我们展示了在相同高度上的任何位置都需要步进多少。这可以通过软件步进(如果z螺母没有回退间隙)或床身的机械移动(改变三点平面的两个点)来完成。虽然效果不错,但是这忽略了一些错误:

大多数床不是完全平整的。特别是在高温下,它们会弯曲
。测量并不总是100%准确。
。测量可能会使您的床弯曲。
。如果您的打印机有问题,则应测量一个n x n的网格以获得更好的床身近似度。

当所用z探针需要相当大的力时,它可能会依据位置不同使得床面弯曲。为此,我们有一个弯曲校正,可通过弯曲校正测量值。特别是在弯曲不是x和y的线性函数的情况下,这会受到一些限制。然后,您必须将测量值限制为3个点,并为其设置弯曲校正。

即使平均旋转平面,您仍然会遇到凹凸。运气好的话,平均颠簸可以忽略不计,您可以忽略它。在更极端的情况下,尤其是随着床尺寸的增加,能够跟随第一层床的曲率,并随着z值的增加将校正修正为零,那将是很棒的。这将有助于正确地绑定。此功能称为失真校正,从v0.92.8开始,此功能适用于所有打印机类型。它可以通过测量变形图并将其存储在eeprom(理想情况下)或ram(然后需要每次测量)中来工作。同样从0.92.8开始,我们假设失真永远不变,因为它是床的特性。因此,重新计算旋转不会重置变形图。

Z探针和Z归位
对于具有z探针的打印机,最好的解决方案是使用z max。这允许在打印过程中重新定位,例如如果暂停后电机关闭并且您可能不信任当前位置。此外,归位时倾斜的床不会碰到喷嘴/探针,也没有问题。您只需要先将z归位,再将xy归位,不会碰到任何东西,简单且安全。唯一的缺点是,您需要将归位到z max置为零,然后再下降开始打印。这可能需要30秒,有人不喜欢,许多打印也要花费数小时。因此,他们很确定想回到z min。

好吧,您必须知道的第一件事是传统的z min终点止挡在这里不起作用。让我们采取一些不太可能的极端来描述这一点。床通常是不平的,假设左边缘比右前边缘高1cm,而两个后边缘甚至高1cm。常规的z归位是最低点,且防止再下移;因此在此示例中,它必须与右前边缘相匹配。如果我们先将Z放回原位,在除右前边缘之外的任何位置喷嘴将撞到床面。这显然不行,您需要的是安装在挤出机上的z传感器。为了告诉固件希望将z-probe也用作z min终点,方法是将两者都设置为同一引脚!这样,我们可以在任何地方测量床的高度。但若我们不知道要测量的位置,这也没用,因此我们必须先将x和y归零。好吧,如果z的高度合适这不是问题。为什么?如果不合适而在低z处测量,挤出机/探针仍然可能会与床相撞。因此,在版本v1.0即2017年1月14日后,您可以在归位之前将z提高。仅是为了避免碰撞。但若挤出机已经接近顶部怎么办?如果您有z max限位开关,那么它的触发即可保证安全。好吧我接受,下一步?现在,xy归位正在安全的进行中,我们需要一个z可归位的坐标。原来这是在xy原始位置完成的,现在z探头不在喷嘴所在的位置,且必须在床上才能进行有效的测量。为此,固件将使用z探针的坐标偏移量再予测量。如果幸运的话它可以正常工作,因为x已归位x min而且探头位于喷嘴的左侧;如果不行,HOME_ORDER_XYTZ用来设置设置探测坐标,还需设置喷嘴的最低温度(仅在挤出机是z探针的一部分时才重要)。我们首先移至该坐标,然后测量带偏移的高度,这样可以克服z min归位的最后一个问题。

注:原来的z home时的挤出头高度是校准到0.25mm(一张白纸)。用z min探针调平时,为防床面不平探针必须放高,探针激活时的高度必须用来导出挤出头的高度,这由z偏移量即探针与挤出头的高度差来计算。xy的偏移量需测量,影响有限且可在打印后修正。

配置固件
  Z-探针
          
从0.90版开始,Repetier-Firmware支持自动调平。对于自动调平,您需要z探针以自动或半自动的方式测量距离。自动方式时z探针随挤压机一起移动;半自动z探针可以是cnc机器用来测量工具高度的开关,由于它未与挤出机连接,因此需要将其放在挤出机下方,然后用户单击开始测量,尔后挤出机将移至下一个位置,并等待下一个信号开始测量。第一步是在configuration.h文件中配置z-probe:

/ * Z探测* /
#define FEATURE_Z_PROBE true
/ *归位后,将校正z位置以补偿用于涂层。由于您可以更改涂层,因此该值存储在
EEPROM(如果启用),因此您可以在不同涂层之间切换而无需重新校准z。
* /
#define Z_PROBE_Z_OFFSET 0 //偏移到涂层形成的真实床面高度
/ *如何测量z min
 0 =触发是实际床忽略涂层的高度
 1 =触发是当前涂层
 
 对于模式1,将当前涂层厚度添加到测得的z测头距离。这样,真实床始终是参考高度。用于电感式传感器或z min终止涂层对结果没有影响,因此应使用模式0。
* /
#define Z_PROBE_Z_OFFSET_MODE 0
#define Z_PROBE_PIN 63
#define Z_PROBE_PULLUP true
#define Z_PROBE_ON_HIGH true
#define Z_PROBE_X_OFFSET -11.2625
define Z_PROBE_Y_OFFSET -6.5
//等待信号开始。有效信号是探针命中和确定按钮。如果您需要手动触发探针,则这是必需的。
#define Z_PROBE_WAIT_BEFORE_TEST false
/ **探测时z轴的速度,单位为mm/s * /
#define Z_PROBE_SPEED 5
#define Z_PROBE_XY_SPEED 150
#define Z_PROBE_SWITCHING_DISTANCE 1.5 //激活探针后安全关闭探针的距离
#define Z_PROBE_REPETITIONS 5          //在某一点重复探测。
/ **高度是激活的探针位置和喷嘴高度之间的差。 * /
#define Z_PROBE_HEIGHT 39.91
/ **探头(挤出机和z传感器)和床之间的间隙。必须大于初始z高度误差! * /
#define Z_PROBE_BED_DISTANCE 30.0
/ **这些脚本在响应之前运行。 Z探针完成后。需要时可在此区间添加代码以激活/停用探针。 * /
#define Z_PROBE_START_SCRIPT“”
#define Z_PROBE_FINISHED_SCRIPT“”
/ *自动找平允许对3个点进行z探针计算以计算倾斜度并补偿打印错误。此功能需要有效的z探针,并且您应该在顶部而不是底部设置z-endstop。 同样的3点用于G33命令。
* /
#define FEATURE_AUTOLEVEL true
#define Z_PROBE_X1 -69.28
#定义Z_PROBE_Y1 -40
#define Z_PROBE_X2 69.28
#定义Z_PROBE_Y2 -40
#定义Z_PROBE_X3 0
#定义Z_PROBE_Y3 80

首先,启用z-probe(FEATURE_Z_PROBE true)并定义探针引脚(Z_PROBE_PIN)。像限位开关脚一样,可以设置上拉Z_PROBE_PULLUP及信号反转Z_PROBE_ON_HIGH。许多用户喜欢使用z min脚,这并非必须。接下来,定义相对于挤出机原点位置的偏移量(用于定义挤出机偏移量的基础)。对于单台挤出机,这是喷嘴的位置;对于多挤出机设置,定义的是挤出机偏移量的原点。

如果需要手动移动z探针,请将Z_PROBE_WAIT_BEFORE_TEST设置为true。在这种情况下,挤出机将悬停在测量点上,并等待您一次激活开关。

Z_PROBE_SPEED以mm/s设置移动速度,而Z_PROBE_XY_SPEED是xy平面上的速度。 Z_PROBE_HEIGHT是z探针触发器和床之间的高度差,始终将此值添加到高度中,以计算总高度(注:这意味着当探针高度为0时的挤出头高度)。接下来是Z_PROBE_BED_DISTANCE,它确定探针开始测量时的高度(探针高度将加上它,注:即在挤出头高度为Z_PROBE_HEIGHT+Z_PROBE_BED_DISTANCE时开始测量)。先从您在固件中设置的猜测床高开始,该高度减去间隙必须总是小于实际的打印区域高度。如果您想启用/禁用z-probe,可以在Z_PROBE_START_SCRIPT和Z_PROBE_FINISHED_SCRIPT中编写所需的g代码,多个命令用反斜线加n分隔。

为了更精确的测量,可以将每个点重复Z_PROBE_REPETITIONS次。探针触发后仅举起Z_PROBE_SWITCHING_DISTANCE毫米以开始下一次测量。根据您的探头类型,该值可以小于0.2 mm,从而重复测量可以很快。

校准Z-Probe
开始时通常会出错的一件事是z探头的校准。因此,应在开始使用它校准所有内容之前完成此操作。首先检查信号是否正确。因此,发送M119并看到z探针显示“ L”为低=未触发。现在,在再次发送M119时手动触发它。现在,对于高=触发,探针值应显示“ H”。如果不是这样,则需要设Z_PROBE_ON_HIGH以反转极性。如果没有任何变化,则说明您使用或配置的引脚错误,或者上拉电阻必须不同,修复并继续。

相关的几个repetier固件的G-code,与Marlin固件的功能未必相同:

- G28 - Home all axis or named axis.
- G29 S<0..2> - Z-Probe at the 3 defined probe points. S = 1 measure avg. zHeight, S = 2 store avg zHeight
- G30 P<0..3> - Single z-probe at current position P = 1 first measurement, P = 2 Last measurement P = 0 or 3 first and last measurement
- G31 - Write signal of probe sensor
- G32 S<0..2> P<0..1> - Autolevel print bed. S = 1 measure zLength, S = 2 Measure and store new zLength

最重要的变量是Z_PROBE_HEIGHT,通常在EEPROM中对其进行调整,直到其具有正确的高度为止(这里的意思是每次调整存入再读出,完成后再写入固件,期间不要断电)。它定义了在z探针触发时喷嘴与底座之间的距离。对于几乎所有探针这都是一个正值,但若使用力反馈传感器或按下挤压机来触发的z探头或许具有0或较小的负值。有几种方法可以确定正确的高度,我现在展示的是所知最准确的方法:您需要一块已知高度的扁平金属块,其高度即参考高度ref_height。先让我们在接近床面但z探针不触发的距离发送:

G30 P0   //测量当前xy下的z高度。挤出机将下降直到触发Z探针,然后返回原高度

将返回的z高度存储为z0以备后用。 现在将喷嘴加热并保持到工作温度,清除所有渗出物,我们发送:

M114    //显示当前位置

将该高度记为Zold。接下来,我们调整z直到金属块恰好位于喷嘴下方。当有间隙时金属块旋转轻松,降得太低则有碰撞声。一旦您认为找到了准确的水平,请再次发送M114并记为高度为Znew。

因此,我们现在拥有的是起始高度,因为固件将使用我们的初始Z_PROBE_HEIGHT(ZHold)从第一个探针Z0假定它的起始高度。 我们也知道我们需要上Znew-Zold才能达到ref_height。 由此我们可以计算出所需的由Z_PROBE_HEIGHT(ZHnew)开始的实际值:

So what we now have is starting height as firmware would assume it from first probe Z0 using our initial Z_PROBE_HEIGHT (ZHold). We also know that we needed to go up Znew-Zold to reach ref_height. From this we can compute the exact real value required from Z_PROBE_HEIGHT (ZHnew):

ZHnew = ZHold - Z0 - Znew + Zold + ref_height

在eeprom中输入该值,这使得测量具有尽可能高的精度。

注:我不理解上述公式,也不知道Z-探针是否必须是距离探针而非0/1开关以便支持上述算法。我觉得不必搞得这么复杂。假设Z轴没有反向间隙或即回退-上述算法也隐含了同样的假设。热床上放置已知高度为Href的金属片,记下挤出头接触它时的Z轴高度Zold,再将Z轴上移使得探针触发,记下高度为Znew。探针触发时的挤出头高度即为Znew-Zold+Href,此值即为Z_PROBE_HEIGHT。原文多处用词不清。

提示:如果您始终使用相同的床和涂层,则此方法效果很好。电感式传感器可测量到金属床身部件的距离,因此可以校正可能在其上的不同床身涂层。当前厚度存储在Z_PROBE_Z_OFFSET中(eeprom中的床涂层),对于大多数打印机,应为0。

自动调平
现在,我们有了可以使用的z探针,可以启用自动调平功能。为此,您需要添加“ #define FEATURE_AUTOLEVEL 1”。
然后我们定义我们希望自动调平如何工作。首先,我们定义如何测量平面旋转。可以使用BED_LEVELING_METHOD定义和设置Currentyl 3方法。Method 0~2如下:

        

BED_LEVELING_METHOD 0

该方法在3个探测点处进行测量,并通过这些点创建一个平面。如果你有真正的平面床可以提供最佳效果。这3点不能排成一行。长距离增加数值稳定性。三角打印机应使它们尽可能靠近列。

BED_LEVELING_METHOD 1

这将测量一个网格。探针点1是原点,点2和3跨越网格。我们测量BED_LEVELING_GRID_SIZE指向每个方向,并计算所有方向的回归平面点。如果您有小的隆起测量不准确,这将提供一个很好的总体平面。

BED_LEVELING_METHOD 2

弯曲校正4点测量。这适用于具有旋转轴的悬臂床。不是在侧面而是在床里面在这里,我们可以假设在轴上没有弯曲并且对称弯曲到轴的两侧。因此,探针点2和3建立了对称轴,
点1跨轴镜像到1m。然后使用对称性消除弯曲从1开始并将其用作平面。

接下来,您应该确定校正方法。此更正由BED_CORRECTION_METHOD定义,并允许以下值:

BED_CORRECTION_METHOD 0
使用旋转矩阵。这将使z轴在x / y方向上移动时向上/向下移动以补偿倾斜。对于多台挤出机,请确保其高度与床的倾斜度匹配,否则会刮伤。

BED_CORRECTION_METHOD 1
电动校正。此方法需要一个固定在3个点上的床,其中2个具有电机改变高度。位置定义为
BED_MOTOR_1_X,BED_MOTOR_1_Y,BED_MOTOR_2_X,BED_MOTOR_2_Y,BED_MOTOR_3_X,BED_MOTOR_3_Y
电动机2和3是由电动机驱动程序0和1驱动的电动机。这些电动机可以是Felix Pro 1等额外电动机使用它们或具有3 z轴的系统,可以像Sparkcube这样单独控制电动机做。

您还需要设置以下参数:

#define ENDSTOP_Z_BACK_MOVE 5
#define Z_HOME_DIR 1

首先使Z轴在撞到终点后下降几毫米。这是必需的,因为我们假设床不平整,并且在x-y旅行期间校正了z高度。重要的是,在这些行程中不要撞到z端点,否则坐标系统会出错。该值必须大于床的最大高度差。 Delta打印机用户在z max处有一个特殊问题。没有碰到终端挡块就不可能移动挤出机。出于相同的原因,也无法以该高度进行打印,因此,最好将ENDSTOP_Z_BACK_MOVE设置为更高的值,以使某些移动可能发生,例如50mm。请记住,轻微的床倾斜也需要侧移!第二组将归零至z-max。再次需要这样做,因为床不是平面的。如果我们有一个z分钟的终点挡块,则只有在床的最低点处触发它。当然,这意味着,对于所有其他位置,归零至z-min会将挤出机头撞到床中。

验证z-probe
在冒险承担任何损失之前,应该测试一下是否正确配置了z-probe。运行一个

G31
检查z探针的信号。它应该是低/关。现在手动触发它并再次发送命令,确保有状态反转。

各轴归位,测量挤出机和床之间的距离。一些命令,例如G30 / G32,在启动时会降到较低的位置,即Z_PROBE_BED_DISTANCE + Z_PROBE_HEIGHT,因此请确保床上方有空间不会碰撞!

若一切正常,进行第一个真正的探针测量。将挤出机移至要测量并发送的位置然后运行:

G30
挤出机现在将下降,直到触发Z探针,然后返回到起始位置,在日志中报告触发z探针所需的距离。如果您使用的是半自动z探针,请点击探针以开始探测。

自动校正
现在一切都已配置并可以正常工作,我们可以开始调整床了。使用调平命令之前,您至少需要使x和y轴回零。 三角打印机将因G32归位,因此可以跳过此操作。根据测量方法的不同,您有或多或少的测试点,如果我们可以减少z轴位移,则可以大大减少时间。如果归位也包括z轴,探针将定位在Z_PROBE_BED_DISTANCE + Z_PROBE_HEIGHT(如果为正)。您应该选择Z_PROBE_BED_DISTANCE,使其高于每个预期的倾斜度。如果您只将x和y归零,因为您不希望将z归零到z max(原作假设仍有人用z max作为调平探针),那么您应该知道在启用归零之前,打印机内部启用的高度为0。因此定位通常会比较高。

一种简单的方法是G29。它将测量3个高度(在探测点处),并将平均值用作打印机高度。这需要在启动之前将其归零至z max。

更好的解决方案是纠正可能的旋转。我们已经定义了测量方式和校正方式,因此不再存在实际差异。启动自动调平的命令是带有可选Sx参数的G32。然后发生以下步骤:

1.禁用失真校正和自动水平校正。 自动调平旋转矩阵将重置。
2.Deltas三角打印机将归位并再次下降到起始高度。
3.如果比max高,探头将由起始高度降低到该高度。
4.测量和校正旋转。
5.如果max z限位存在且参数S不为0,固件将更新打印机高度,以便后续的归位操作可以提供正确的结果。 确保仅当您之前归位到了z max或高度测量完全错误时才进行此操作。
6.更新当前位置。
7.如果参数S为2或更高,则将新矩阵存储在EEPROM中。
8.启用自动校正。
9.启用失真校正(如果之前已启用)。
10.非线性打印机如deltas三角打印机将再次归位以正确定位。
较旧的固件版本(<0.92.8)用S1来于测量和更新z长度。新版在S不为0时,对z max归位s总会执行此操作。

三角(delta)打印机 

重要提示:较新的固件版本(大于0.92)将G33而非G29用于畸变校正。

Delta三角打印机比常规的执教坐标打印机需要更多的校准。您需要先校准挡块。此校准将您在eeprom配置中看到的值更改为“ Tower X终点挡块偏移[步长]”。 Y和Z。诀窍很简单。归位到最大挡块后,固件将向下移动这些步骤,以将挤出机支架定位在精确的中心。必须定义精确的中心位置,否则三角力学的非线性行为将导致错误的几何形状。自己测量这些值几乎是不可能的,因此您需要使用一个简单的技巧。首先回家,并使用以下命令除去所有挤出机的偏移量:

 G28
 G131
现在,放置3个滑块,使其处于相同的高度。为此,我用操纵杆固定所有滑块,使它们轻轻地将操纵杆压在打印机顶部,因为我知道它将随后居中。根据您的打印机,最好从底部(而不是床–可能会偏斜)进行测量。困难的方法是使用x,y,z方向的移动。最简单的方法是用“ M84”关闭电动机并用手滑动。注意不要快速滑动。运动会在电动机中产生电流,并流回电子装置。由于禁用电动机时某些打印机将向下移动,因此较新的版本具有一条命令,仅一次禁用一台电动机。因此,现在最好的方法是使用M99 X0将X电机移动10秒钟。您可以使用S <时间(秒)>更改时间。将Y0和Z0用于其他2轴。一旦所有滑块的高度完全相同,请发送:

 G132 S1
这将测量所需的偏移量。 S1还将结果存储在EEPROM中,因此您无需再次重复。

校准完挡块后,可以像使用直角坐标打印机一样运行床调平程序。

启用和禁用自动调平

运行自动调平命令G32后,固件将切换到自动调平模式。如果添加了S2将其存储在EEPROM中,也可以在打印机重启后幸存下来。然后,仅在床高已变的情况下才需要新的调平。您可以使用以下方法进行更改:

M320;临时激活自动调平
M320 S2;永久激活自动调平
M321;暂时停用自动调平
M321 S2;永久停用自动调平
M322;重置自动调平矩阵
M322 S3;永久重置自动调平矩阵
如果重置自动调平矩阵,则启用和禁用自动调平的行为相同,相当于未做过调平。

失真校正
您运气好,完成了自动调平。如果您的床不是100%平整的,或不是三角打印机,或几何描述不是100%正确,那么床和挤出机喷嘴之间的高度仍非常量。从0.92.8开始,可以使用失真贴图进行校正。我们要做的是测量n x n值的固定网格,并将理论高度和测量高度之间的差异即凹凸贴图bump map存储在eeprom(或ram中,但每次都需要重复)。可用G33命令完成,它将按照您在配置中定义的网格进行测量。仅当z设置正确时,才启动此命令。完成后它将启用失真校正。现在,您的喷嘴也将跟随bump颠簸。随着z的增加它将减少校正,直到不再校正z为止。

注意:失真校正使用32位整数。如果z步长变化乘以点距逐步变化较大,则2 ^ 31计算将溢出,并且结果不确定。在实际情况下,采用典型的校正方法并不会造成太大的影响,但是当在高分辨率打印机上进行较大的z更改测试时,就有可能超过该限制!

G33也有3个特殊命令。

List Bump Map 列出凹凸贴图
G33 L0    ;获得所有测得的颠簸和存储的校正的清单。这些值在各个位置处添加到z,并且在点之间插入z校正。

Adjust Bump Map 调整凹凸贴图
G33 X Y Z    ;将为最近的存储位置设置一个新的校正值。因此,您无需从G33 L0列表中输入确切位置。

Reset Bump Map 重置凹凸贴图
G33 R0    ;将所有校正设置为0。

开启/关闭失真校正
M323     ;显示是否启用校正
M323 S0  ;禁用更正
M323 S0 P1 ;永久禁用更正
M323 S1  ;启用更正
M323 S1 P1 ;永久启用更正
手动床校正
另一种方法是将床调平,使其与x-y移动成方型。这需要较少的计算,并且不会像自动调平一样使z轴磨损(这等于机械自动调平)。唯一的缺点是,将它调好的工作量更大。最简单的办法是床仅做3点支撑。在这种情况下,您要使3个测量点与床架相同。该方法非常简单。您发送“ G29”,固件将测量并输出三个点的高度。然后,重复调整直至三点高度相同。如果满意而且还有z-max限位开关,则还可以发送“ G29 S2”以测量打印区域的高度并将其存储在eeprom中(S1仅测量高度)。

[ 打印 ]
阅读 ()评论 (0)
评论
目前还没有任何评论
登录后才可评论.