关于这个主题有几个问题,因此一个更通用的解决方案将提供信息,并在其他人的传感器位置略有不同时防止其他人提出多个问题。该答案旨在涵盖相对于喷嘴的任何位置。传感器是什么类型也没有关系,可以是3DTouch、BLTouch、电感式、电容式等,只要你能确定到喷嘴的偏移量(中心到中心)即可。
目前,假设喷嘴只能到达床的整个区域,没有额外的空间。因此,除非传感器运行床,否则使用喷嘴限制,否则传感器根据传感器限制限制喷嘴。这是最安全的假设,可以防止滑架撞到端部安装座。但如果有更多的旅行空间,则可能会在限制中增加额外的抵消。
首先,确定传感器的偏移量(例如,通过测量或从可打印传感器支架的信息中获取,在互联网上找到了许多共享站点; Thingiverse是此类支架的良好来源)。
马林鱼 2.x 的提示
注意马林鱼的版本(分支)!答案是在 1.1.x 分支时编写的,因此对于最新的 1.1.x (1.1.9) 版本完全有效。对于Marlin的2.0.x分支,使用了不同的常量名,使用了不同的策略(设置更简单)。在 中找不到常量名称Configuration.h
,答案(和理论)仍然有帮助。现在可以在Configuration_adv.h 中找到恒定探针偏移值:
MIN_PROBE_EDGE_LEFT
MIN_PROBE_EDGE_RIGHT
MIN_PROBE_EDGE_FRONT
MIN_PROBE_EDGE_BACK
马林鱼的提示 >= 2.0.6
由于版本已再次重命名。现在是:2.0.6
MIN_PROBE_EDGE_*
PROBING_MARGIN_LEFT
PROBING_MARGIN_RIGHT
PROBING_MARGIN_FRONT
PROBING_MARGIN_BACK
请注意,在 Marlin 1.1.x 中,边界设置在绝对位置,而在 Marlin 2.0.x 中,它以离床边缘的偏移值描述。
传感器偏移
使用以下常数设置传感器的位置:
#define X_PROBE_OFFSET_FROM_EXTRUDER [XXX] // X 偏移:-left +right [喷嘴的]
#define Y_PROBE_OFFSET_FROM_EXTRUDER [YYY] // Y 偏移:-front +behind [喷嘴]
其中[XXX]
和[YYY]
是指定传感器相对于喷嘴中心的偏移值。如果两者都是正值,则传感器位于右后,如果都是负值,则位置在左前(使用 Marlin 配置文件中的定义从机器正面看)。其他可能的位置是左后和右前(一个正值和一个负值)。
马林鱼 2.x 的提示
请注意,在 Marlin 2.x 中,这些常量被数组定义替换:
#define NOZZLE_TO_PROBE_OFFSET { XXX, YYY, ZZZ }
ZZZ
Z 偏移在哪里。如果您使用旧的常量,编译时的健全性检查将抛出这些常量不再使用并且应该被删除的断言。
其次,让我们设置传感器区域限制!
传感器区域限制
在下图中,喷嘴、传感器和偏移量定义为:
传感器有四种可能的位置,这导致传感器区域限制(透明红色区域)的以下示意图:
1. 右后感应器:
这意味着传感器可以到达背面和右侧边界,因此限制设置为:
#define LEFT_PROBE_BED_POSITION (X_PROBE_OFFSET_FROM_EXTRUDER)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE)
#define FRONT_PROBE_BED_POSITION (Y_PROBE_OFFSET_FROM_EXTRUDER)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE)
请注意,如果#define MIN_PROBE_EDGE [value]
在配置中定义了最小探头偏移(以考虑传感器宽度/尺寸),则床限制会发生变化(其中 t = MIN_PROBE_EDGE
):
然后通过以下方式设置限制:
#define LEFT_PROBE_BED_POSITION (X_PROBE_OFFSET_FROM_EXTRUDER + MIN_PROBE_EDGE)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION (Y_PROBE_OFFSET_FROM_EXTRUDER + MIN_PROBE_EDGE)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE)
在以下传感器位置放置中,MIN_PROBE_EDGE
将考虑此偏移。
2. 左后传感器:
这意味着传感器可以到达后边界和左边界(对于零MIN_PROBE_EDGE
),因此限制设置为:
#define LEFT_PROBE_BED_POSITION (MIN_PROBE_EDGE)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE + X_PROBE_OFFSET_FROM_EXTRUDER - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION (Y_PROBE_OFFSET_FROM_EXTRUDER + MIN_PROBE_EDGE)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE)
3. 左前方传感器:
这意味着传感器可以到达前边界和左边界(对于零MIN_PROBE_EDGE
),因此限制设置为:
#define LEFT_PROBE_BED_POSITION (MIN_PROBE_EDGE)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE + X_PROBE_OFFSET_FROM_EXTRUDER - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION (MIN_PROBE_EDGE)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE + Y_PROBE_OFFSET_FROM_EXTRUDER - MIN_PROBE_EDGE)
4. 右前方传感器:
这意味着传感器可以到达前边界和右边界(对于零MIN_PROBE_EDGE
),因此限制设置为:
#define LEFT_PROBE_BED_POSITION (X_PROBE_OFFSET_FROM_EXTRUDER + MIN_PROBE_EDGE)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION (MIN_PROBE_EDGE)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE + Y_PROBE_OFFSET_FROM_EXTRUDER - MIN_PROBE_EDGE)
这应该已经解决了定义传感器区域限制的基础知识。当有额外的旅行空间时,它会变得有点复杂。可以在配置文件中找到一个非常容易使用额外旅行空间的方法;例如:
// 归位后的行程限制 (mm),对应于限位器位置。
#define X_MIN_POS [XX]
#define Y_MIN_POS [YY]
其中[XX]
和[YY]
是从端点到原点的偏移值(橙色箭头代表X_MIN_POS
和Y_MIN_POS
):
结果是右后探头的偏移常数:
#define LEFT_PROBE_BED_POSITION (X_PROBE_OFFSET_FROM_EXTRUDER + X_MIN_POS + MIN_PROBE_EDGE)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION (Y_PROBE_OFFSET_FROM_EXTRUDER + Y_MIN_POS + MIN_PROBE_EDGE)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE)
对于所有其他选项,可以应用类似的归位偏移添加。
如果打印头能够在轴的另一端在 X 或 Y 轴上进一步移动,则可以进行类似的添加。
Marlin 2.0.x 解决方案的思考
正如我之前提到的,Marlin 2.0.x 使用床边偏移而不是绝对位置。与前面的图表类比,我们可以绘制一个床位限制图(下面的示例假设探头安装在右后!):
请注意,需要定义从边缘的偏移量,要正确执行此操作,我们需要访问喷嘴偏移量的定义:
#define NOZZLE_TO_PROBE_OFFSET { XXX, YYY, ZZZ }
由于这是定义数组值的部分,因此您首先需要制作一个数组(注意这是一个简单的解决方案,许多人应该能够以有限的编程技能理解,更优雅的解决方案使用 XYZ 结构来访问 X 、Y 或 Z 属性):
请注意,Marlin 2.0.x 会根据定义的偏移量和MIN_PROBE_EDGE
为床的所有 4 侧定义的偏移量自动调整您的探测区域。
见:
#if PROBE_SELECTED && !IS_KINEMATIC
#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE
#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE
#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE
#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE
#endif