【3D打印机】原来配置Marlin2.0这么简单,别说我没告诉你。

2023-05-16

``

可能由于各人的打印机款式不同,某些参数没有出现在文中,但是只要你完全看完本指南,就可以理解Marlin是如何工作的,我相信在此基础上,你在固件中找到哪些不同配置并不困难。

本文的最终的目标是让你自己学会配置Marlin,消除恐惧,而不是需要依赖向导。

从头开始配置 Marlin 2.0.x
我强烈建议您在设置时遵循本文的顺序。原因是当你编辑固件时,参数也会以相同的顺序找到。这样你就不会在配置的路上留下一个隐藏的危险。

最重要的是要消除你对马林鱼的恐惧,如果这篇文章对你有帮助的话,它就已经完成了它的目标。了解马林你将了解和享受更多一点的3D打印和所有的可能性的令人兴奋的世界。

从marlin2.0固件开始适配自己的打印机咋看起来似乎是个挑战,只有经验丰富的程序员才能做到。但相信我,这种说法与事实相去甚远。

有一点耐心和一个好的文本编辑器(和编程知识),我们可以配置任何基于arduino的打印机与最新的固件版本没有任何问题。

事实上,Marlin是由很多很多文件组成的,但我们最多只需要修改一两个文件就可以编译一个工作的固件,然后将其上传到我们的打印机。当然,您可以随心所欲地自定义Marlin 2,但是我们已经需要修改相当多的文件,我们现在不会提及这些文件,或者稍后再做这些文件。

您可能想知道为什么需要学习配置Marlin 2.0.x。答案多种多样,但最让我信服的是,它为我们提供了安全性、性能改进,当然,还纠正了以前版本中报告的可能错误。

但是,我不否认,在配置和编译过程中,可能会出现难以解决的错误或问题。但有了百度和一点耐心,我们应该不会有太多麻烦。我们是DIY玩家,遇到问题就把问题解决掉就好啦。

在本手册中配置Marlin 2.0.x,正如我上面提到的几行,我们将使用一个“定制”打印机作为一个例子,我设计和建造了一段时间前。您可以看到我所做的更改,然后将其应用到您自己的机器上。我们将打开文件并按顺序(从文件的开头到末尾)更改参数。

请记住,对于配置Marlin 2.0,您需要事先知道机器的所有技术特性和组件。如挤出机类型、打印体积、热敏电阻等。所以,先提前收集好所有这些信息,然后我们马上着手去做。

正如我前面提到的,在配置Marlin 2.0.x时,有两个主要文件来管理一切,一个是基础配置的Configuration.h文件,另一个是高级配置的Configuration_adv.h文件,对于一个DIY爱好者来说,基本上只需要配置完这两个参数,就可以实现自己的3D打印机定制了。

备注:配置文件包含主要硬件、语言和驱动程序设置,以及打印机最常见的功能和组件的设置。在白色中,您可以看到我激活的选项(或默认激活的选项),在深灰色中可以看到未激活的选项。要激活一个选项,我们只需要消除参数前面的两个栏//。

接下来我将一步步带领你们将你们的打印机适配成marlin2.0的版本。

选择串口

#define SERIAL_PORT 0

只需要打开默认的arduino连接串口

通信速度(波特率)

#define BAUDRATE 250000

我们将电脑连接到打印机的速度,默认值是250000,所以我们将保持这个速度。

如果您偶然与您的打印机有通信问题,您可以降低此参数的速度以尝试解决它。

主板或电子产品(主板)

#ifndef MOTHERBOARD
 #define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif

非常重要的参数。在这里,我们将选择我们已经安装在3D打印机的电子设备。由于有许多电子产品可供选择,我们将不得不找出哪一种是我们的,并将其价值放在这里。

您在文件“boards.h”中有一个可兼容电子产品的列表。它位于Marlin固件的以下路径:\Marlin\src\core\boards.h

在我的例子中,我的3D打印机使用的是RAMPS_14_EFB电子板。对于它,我必须写“BOARD_RAMPS_14_EFB”,正如您在示例中看到的那样。你配置一个你自己的。

您的机器名称(CUSTOM_MACHINE_NAME)

#define CUSTOM_MACHINE_NAME "3D Printer"  

这很简单,即您希望新配置的打印机具有的名称。默认情况下,你会注意到它是禁用的,因此这两个栏出现在#define前面的" // "。

我们将删除这两根杆,并留下这样的配置

挤出机数量(挤出机)

#define EXTRUDERS 1

这里,我们将配置挤出机的数量,我们的3D打印机有。默认情况下,初始值是1,因为大多数都有一个挤出机。如果不是这样,请输入正确的挤出机数量。

线材的直径 (DEFAULT_NOMINAL_FILAMENT_DIA)

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

在本节中,我们将选择打印机使用的直径类型。默认是1.75,虽然现在大多数打印机已经在1.75直径。但是假如我们有些使用的不同,那么必须改变它,这很重要。

Prusa多材料套件(PRUSA_MMU2)

//#define MMU_MODEL PRUSA_MMU2

如果你安装了原始的Josef Prusa多材料工具包或其他中国克隆的工具包,那么就打开他,否则保持关闭。

标题温度传感器(TEMP_SENSORS)

在这一部分的Marlin固件,我们将定义我们的3D打印机中现有的温度传感器。在最新版本2.0.8.2中,增加了对更多挤出机的支持(总共支持11个传感器),包括一个用于腔室温度的传感器。正如你所看到的,有很多这样的传感器,并且在代码本身中出现了一个列表。如果您没有关于您的打印机的信息,请尝试咨询谷歌,因为它可能由使用相同打印机的其他用户记录。

缺省情况下,只有TEMP_SENSOR_0的值为1。在我的例子中,我必须把值5放在这里。因为我也有一个加热床,以提高印刷期间的附着性和避免扭曲问题,我设置TEMP_SENSOR_BED的值1。剩下的置0,因为我没有更多的挤出机或一个封闭的房间在这台打印机。

#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_CHAMBER 0
#define TEMP_SENSOR_COOLER 0

标题温度限制器(MINTEMP & MAXTEMP)

在Marlin 2中配置这些参数是非常重要的,因为它们控制我们打印机的最高和最低温度。

我们将定义每一个可用的传感器必须在哪个范围内。这样,如果任何传感器没有达到或超过这个温度,Marlin会在显示屏上发出一个错误,并关闭Hotend和加热床。

在我的情况下,我通常设置挤出温度在5度(最低)和265度(最高)。如果挤出机或床没有达到5º度,我们将推断热敏电阻没有正确安装,或物理损坏。同样,在意外超过最高温度的情况下,它也会保护我们,这对我们和我们的家园的安全至关重要。

// Below this temperature the heater will be switched off
// because it probably indicates a broken thermistor wire.
#define HEATER_0_MINTEMP   5
#define HEATER_1_MINTEMP   5
#define HEATER_2_MINTEMP   5
#define HEATER_3_MINTEMP   5
#define HEATER_4_MINTEMP   5
#define HEATER_5_MINTEMP   5
#define HEATER_6_MINTEMP   5
#define HEATER_7_MINTEMP   5
#define BED_MINTEMP       5
#define CHAMBER_MINTEMP   5

// Above this temperature the heater will be switched off.
// This can protect components from overheating, but NOT from shorts and failures.
// (Use MINTEMP for thermistor short/failure protection.)
#define HEATER_0_MAXTEMP 265
#define HEATER_1_MAXTEMP 265
#define HEATER_2_MAXTEMP 265
#define HEATER_3_MAXTEMP 265
#define HEATER_4_MAXTEMP 265
#define HEATER_5_MAXTEMP 265
#define HEATER_6_MAXTEMP 265
#define HEATER_7_MAXTEMP 265
#define BED_MAXTEMP     150
#define CHAMBER_MAXTEMP 60

标题PID调优(挤出机)

#if ENABLED(PIDTEMP)
 //#define PID_EDIT_MENU         // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
 //#define PID_AUTOTUNE_MENU     // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
 //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
                                 // Set/get with gcode: M301 E[extruder number, 0-2]

 #if ENABLED(PID_PARAMS_PER_HOTEND)
   // Specify between 1 and HOTENDS values per array.
   // If fewer than EXTRUDER values are provided, the last element will be repeated.
   #define DEFAULT_Kp_LIST { 22.20, 22.20 }
   #define DEFAULT_Ki_LIST {   1.08,   1.08 }
   #define DEFAULT_Kd_LIST { 114.00, 114.00 }
 #else
   #define DEFAULT_Kp 20.3    // Values that I added !!
   #define DEFAULT_Ki 1.43    // Values that I added !!
   #define DEFAULT_Kd 71.84   // Values that I added !!
 #endif
#endif // PIDTEMP

控制控制控制挤出机和加热床温度的算法设置的部分。

我们可以更详细地讨论它是如何工作的,但这不是正确的文章。如果您有兴趣了解更多关于PID调优的知识,我建议您查看REPRAP上关于PID调优的以下文章。

默认情况下,市场上一些最知名的打印机的一些值已经预先确定。由于我的打印机不符合描述,我只是添加了我自己的值。

要从打印机获取值,您可以在Internet上查询这些值,也可以使用一个名为PID Autotune的内部马林函数自己生成这些值。

要做到这一点,将您的打印机连接到Repetier/Simplify3D或任何其他软件,允许您使用Gcode命令。一旦连接上,发送命令M303 E0 S200 C8,这个过程就会开始。

加热冷却8次后,加热结束,显示如下信息。你只需要取Kp、Ki和Kd的值,并在DEFAULT_Kp、DEFAULT_Ki和DEFAULT_Kd字段中输入它们。

bias: 92 d: 92 min: 196.56 max: 203.75
Ku: 32.59 Tu: 54.92
Clasic PID
Kp: 19.56
Ki: 0.71
Kd: 134.26
PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h

PID床整定(热床)

和以前一样,只是我们的加热床。在新固件中,默认情况下它将被禁用。如果您有一个加热床,您必须取消注释#define PIDTEMPBED选项,正如您将在我的配置中看到的那样。

您还可以运行另一个内部马林函数来获得您的床的最佳值。这是通过Gcode命令M303 E-1 C8 S90完成的。

//===========================================================================
//====================== PID > Bed Temperature Control ======================
//===========================================================================

/**
* PID Bed Heating
*
* If this option is enabled set PID constants below.
* If this option is disabled, bang-bang will be used and BED_LIMIT_SWITCHING will enable hysteresis.
*
* The PID frequency will be the same as the extruder PWM.
* If PID_dT is the default, and correct for the hardware/configuration, that means 7.689Hz,
* which is fine for driving a square wave into a resistive load and does not significantly
* impact FET heating. This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W
* heater. If your configuration is significantly different than this and you don't understand
* the issues involved, don't use bed PID until someone else verifies that your hardware works.
*/
#define PIDTEMPBED

//#define BED_LIMIT_SWITCHING

/**
* Max Bed Power
* Applies to all forms of bed control (PID, bang-bang, and bang-bang with hysteresis).
* When set to any value below 255, enables a form of PWM to the bed that acts like a divider
* so don't use it unless you are OK with PWM on your bed. (See the comment on enabling PIDTEMPBED)
*/
#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current

if ENABLED(PIDTEMPBED)
 //#define MIN_BED_POWER 0
 //#define PID_BED_DEBUG // Sends debug data to the serial port.

 //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
 //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
 #define DEFAULT_bedKp 347.77
 #define DEFAULT_bedKi 48.46
 #define DEFAULT_bedKd 623.90

 //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
 //from pidautotune
 //#define DEFAULT_bedKp 97.1
 //#define DEFAULT_bedKi 1.41
 //#define DEFAULT_bedKd 1675.16

 // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
#endif // PIDTEMPBED

然而,有时激活PIDTEMPBED参数比不激活它更具破坏性。我建议您不要从一开始就启用它。

冷挤压(PREVENT_COLD_EXTRUSION)

/**
* Prevent extrusion if the temperature is below EXTRUDE_MINTEMP.
* Add M302 to set the minimum extrusion temperature and/or turn
* cold extrusion prevention on and off.
*
* *** IT IS HIGHLY RECOMMENDED TO LEAVE THIS OPTION ENABLED! ***
*/
#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170

这两个功能都管理马林的冷挤压。我们都知道,如果我们的喷头没有打开,是不建议挤出灯丝的。

PREVENT_COLD_EXTRUSION选项,它将直接防止我们挤压材料,如果我们的加热器没有达到定义的最低温度。

我们可以通过EXTRUDE_MINTEMP参数来配置允许马林挤出灯丝的最低温度。默认情况下两者都是活动的,所以您不必担心。

然而,我认为给它命名是很重要的,这样你就能证明它的存在。

挤出长度(prevent_length_extrude)

/**
* Prevent a single extrusion longer than EXTRUDE_MAXLENGTH.
* Note: For Bowden Extruders make this large enough to allow load/unload.
*/
#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 200

如注释中所示,它可以防止灯丝挤出的距离大于我们所配置的距离。这意味着Marlin将只允许你在一个单一的GCODE命令挤压最大200mm。如果您想在一个命令中挤出超过200mm的材料,例如使用Bowden从显示中加载灯丝的函数,您必须修改参数EXTRUDE_MAXLENGTH为一个更高的值。在Marlin 2中,两者都是默认启用的。

热保护(THERMAL_PROTECTION)

/**
* Thermal Protection provides additional protection to your printer from damage
* and fire. Marlin always includes safe min and max temperature ranges which
* protect against a broken or disconnected thermistor wire.
*
* The issue: If a thermistor falls out, it will report the much lower
* temperature of the air in the room, and the the firmware will keep
* the heater on.
*
* If you get "Thermal Runaway" or "Heating failed" errors the
* details can be tuned in Configuration_adv.h
*/

#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
#define THERMAL_PROTECTION_BED     // Enable thermal protection for the heated bed
#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber
#define THERMAL_PROTECTION_COOLER  // Enable thermal protection for the laser cooling

这三个参数激活了马林2.0的额外热保护提供防止损坏我们的打印机。它们必须总是活跃的,事实上它们在Marlin 2中是默认的,所以我们不会以任何方式接触它们。

机械参数(COREXY运动学)

//===========================================================================
//============================= Mechanical Settings =========================
//===========================================================================

// @section machine

// Enable one of the options below for CoreXY, CoreXZ, or CoreYZ kinematics,
// either in the usual order or reversed
//#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
//#define COREZX
//#define COREZY
//#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042

市场上有不同运动学的打印机。例如笛卡尔运动学,delta, tripteron, corexy(及其变体)等等。事实上,我会用一篇不错的文章来讨论所有这些问题。

在这种情况下,您的3D打印机使用COREXY运动学或其任何变体,您应该激活其相应的参数。因为我用了笛卡尔运动学,所以我把所有的东西都去掉了

标题激活限位开关(USE_XMIN_PLUG & USE_XMAX_PLUG)

// Specify here all the endstop connectors that are connected to any endstop or probe.
// Almost all printers will be using one per axis. Probes will use one or more of the
// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

在本节中,我们将向我们的Marlin固件指出我们已经连接到主板的限制开关。最常见的是使用3个限位开关来指示最小行程(或停止)。

通过这种方式,马林确定了归航时在所有轴上的初始位置(0)。还可以安装额外的传感器来确定最大行程。它们将用于防止机器超出严格必要的范围。它们不是必需的,但它们是控制所有未预见到的事情的好选择。

在我的特殊情况下,我在X轴(挤出机)和Y轴(床)上有两个机械限位开关。我也有一个水平传感器在Z,所以我只留下3个最小限制开关激活,你可以看到自己在下面的行。

限位开关触发高低电平(ENDSTOP_INVERTING)

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.

根据我们使用的传感器或限位开关的类型,它们将有不同的逻辑。它没有更大的神秘性,只是把它们都留在FALSE中,如果其中一个对您不起作用,在这里更改逻辑(您指示TRUE)。

驱动程序配置(DRIVER_TYPE)

/**
* Stepper Drivers
*
* These settings allow Marlin to tune stepper driver timing and enable advanced options for
* stepper drivers that support them. You may also override timing options in Configuration_adv.h.
*
* A4988 is assumed for unspecified drivers.
*
* Options: A4988, A5984, DRV8825, LV8729, L6470, L6474, POWERSTEP01,
*         TB6560, TB6600, TMC2100,
*         TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
*         TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
*         TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE,
*         TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
*/
#define X_DRIVER_TYPE DRV8825
#define Y_DRIVER_TYPE DRV8825
#define Z_DRIVER_TYPE DRV8825
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE DRV8825
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988

使用我们现有的驱动程序配置Marlin 2固件是非常重要的。但是不用担心,这是一个很简单的过程。

默认情况下,你会看到所有的选项都是禁用的,所以你必须启用你将要使用的选项,这将是你在你的板上安装驱动程序的地方。

在我的打印机我有3个马达在3个轴(X, Y, Z),和一个单一的马达为挤出机。所以我启用了必要的选项。如您所见,第一个挤出机总是命名为E0。

但我们不仅必须启用这个选项,还必须指出你已经安装在电子设备上的驱动程序。因为我有DRV8825,我已经将它指示给编译器,仅此而已。

在评论中,你可以看到马林2中可用的所有类型的驱动程序,所以找到你的并将其记录下来。

电机步骤配置(DEFAULT_AXIS_STEPS_PER_UNIT)

/**
``* Default Axis Steps Per Unit (steps/mm)
``* Override with M92
``*                   X, Y, Z, E0 [, E1[, E2...]]
``*/
#define DEFAULT_AXIS_STEPS_PER_UNIT { 160, 160, 800, 803 }

在本节中,我们将告诉打印机每个运动单元将执行多少步。单位可以定义为毫米或英寸。

如果使用英寸,必须激活INCH_MODE_SUPPORT参数。我们不打算激活该参数,因为我们通常使用毫米,在这一节中,我们将介绍我们的步骤为每个轴和挤出机。

您首先需要知道要输入的值,因此我建议您从您的打印机已经可用的一些固件中提取它们(为了安全)。

另一种选择是在互联网上从其他用户那里搜索,浏览论坛,咨询制造商,或者作为最后一种选择,自己计算,就像你在这个视频中看到的那样。

https://www.youtube.com/watch?v=VIHgDiCCY0Y

自动调平传感器位置(NOZZLE_TO_PROBE_OFFSET)

/**
* Nozzle-to-Probe offsets { X, Y, Z }
*
* - Use a caliper or ruler to measure the distance from the tip of
*   the Nozzle to the center-point of the Probe in the X and Y axes.
* - For the Z offset use your best known value and adjust at runtime.
* - Probe Offsets can be tuned at runtime with 'M851', LCD menus, babystepping, etc.
*
* Assuming the typical work area orientation:
* - Probe to RIGHT of the Nozzle has a Positive X offset
* - Probe to LEFT of the Nozzle has a Negative X offset
* - Probe in BACK of the Nozzle has a Positive Y offset
* - Probe in FRONT of the Nozzle has a Negative Y offset
*
* Some examples:
*   #define NOZZLE_TO_PROBE_OFFSET { 10, 10, -1 }   // Example "1"
*   #define NOZZLE_TO_PROBE_OFFSET {-10, 5, -1 }   // Example "2"
*   #define NOZZLE_TO_PROBE_OFFSET { 5, -5, -1 }   // Example "3"
*   #define NOZZLE_TO_PROBE_OFFSET {-15,-10, -1 }   // Example "4"
*
*     +-- BACK ---+
*     |   [+]   |
*   L |       1 | R <-- Example "1" (right+, back+)
*   E | 2       | I <-- Example "2" ( left-, back+)
*   F |[-] N [+]| G <-- Nozzle
*   T |       3   | H <-- Example "3" (right+, front-)
*     | 4         | T <-- Example "4" ( left-, front-)
*     |   [-]   |
*     O-- FRONT --+
*/
#define NOZZLE_TO_PROBE_OFFSET { 37, 2, 0 }

在使用自动调平传感器的情况下(就像我的情况一样),必须表明其相对于喷嘴到Marlin的位置。这是分开的,我们将它定义为坐标,单位是毫米。我的液位传感器位于喷嘴右侧37mm处,在它后面2mm处,所以下面的配置将保持不变

调平速度(XY_PROBE_FEEDRATE)

// X and Y axis travel speed (mm/min) between probes
#define XY_PROBE_FEEDRATE (133*60)

此参数定义了当自动液位传感器在2个测量点之间移动时,马林2将使用的速度。它的默认尺寸是133 * 60mm /min,你可以自行决定是否上传。

电机反转方向(INVERT_X_DIR)

// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false

我们将修改这些参数,如果做一个家或当打印任何部分与我们的打印机,任何马达在错误的方向。默认情况下,它们都配置了FALSE选项,但在我的情况下,我必须反转我的床(Y轴)的方向,如下所示。

然而,另一种选择是将电机连接电缆倒置,这样就可以为您选择更舒适的解决方案。

打印体积(X_BED_SIZE & Y_BED_SIZE)

// The size of the printable area
#define X_BED_SIZE 210
#define Y_BED_SIZE 210

我们将在这里确定您的加热床的确切尺寸。我的打印机有一个210x210mm的水平床,所以它会这样配置

移动限制(MIN_POS &MAN_POS)

// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 205

一旦我们的打印基地(Heatbed)的大小被定义,我们必须配置Marlin 2的最小和最大移动限制。默认情况下,Marlin的最小值配置为0,我们不应该修改这个值,因为它是HOME。对于最大限制,Marlin在X和Y中直接使用我们的Heatbed的当前尺寸,这是我们在之前的参数中保留的配置。完成配置,在Z轴上,我们必须添加的测量是您的3D打印机的最大打印高度。在我的特殊情况下,我可以打印大约205,所以我输入它的值。

移动限制(MIN_SOFTWARE_ENDSTOPS)

/**
* Software Endstops
*
* - Prevent moves outside the set machine bounds.
* - Individual axes can be disabled, if desired.
* - X and Y only apply to Cartesian robots.
* - Use 'M211' to set software endstops on/off or report current state
*/

// Min software endstops constrain movement within minimum coordinate bounds
#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
 #define MIN_SOFTWARE_ENDSTOP_X
 #define MIN_SOFTWARE_ENDSTOP_Y
 #define MIN_SOFTWARE_ENDSTOP_Z
#endif

// Max software endstops constrain movement within maximum coordinate bounds
#define MAX_SOFTWARE_ENDSTOPS
#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
 #define MAX_SOFTWARE_ENDSTOP_X
 #define MAX_SOFTWARE_ENDSTOP_Y
 #define MAX_SOFTWARE_ENDSTOP_Z
#endif

#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
 //#define SOFT_ENDSTOPS_MENU_ITEM // Enable/Disable software endstops from the LCD
#endif

出于安全原因,并避免损坏我们的打印机组件,缺省情况下,Marlin 2被配置为不能超过最小限制。这意味着当到达限位开关或传感器时,即使手动也不会让发动机进一步前进。然而,就像马林2.0中的许多其他东西一样。

如果您愿意,可以禁用该限制。这是一个我不推荐的选择,但我想评论它的存在。我个人通常去掉Z轴上的极限。但正如我所告诉您的,除非这是必要的,或者您非常清楚自己在做什么,否则您必须保留固件所带来的默认值。

使用“M211”设置软件结束端开/关或报告当前状态

eepm存储(EEPROM_SETTINGS)

#define EEPROM_SETTINGS     // Persistent storage with M500 and M501

Marlin为我们提供了从显示器本身更改打印机配置的可能性,然后将更改保存在Eeprom中。

如果我们想要激活这种可能性,我们必须在固件中激活这个参数。

预热ABS / PLA(预热)

//
// Preheat Constants - Up to 5 are supported without changes
//
#define PREHEAT_1_LABEL       "PLA"
#define PREHEAT_1_TEMP_HOTEND 180
#define PREHEAT_1_TEMP_BED     70
#define PREHEAT_1_TEMP_CHAMBER 35
#define PREHEAT_1_FAN_SPEED     0 // Value from 0 to 255

#define PREHEAT_2_LABEL       "ABS"
#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED   110
#define PREHEAT_2_TEMP_CHAMBER 35
#define PREHEAT_2_FAN_SPEED     0 // Value from 0 to 255

如您所见,如果您已经打乱了您的打印机,马林为您提供了两个初始选项,以在打印之前预热打印机。你可以设定ABS和PLA灯丝的温度,尽管你可以添加更多如果你想。这是非常有用的,因为固件中默认的那些可以改进。我个人不做这些设置

菜单语言(LCD_LANGUAGE)

* LCD LANGUAGE
*
* Select the language to display on the LCD. These languages are available:
*
*   en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, hu, it,
*   jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
*
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
*/
#define LCD_LANGUAGE en

将出现在每个马林2固件菜单中的语言(显示)。

默认是英文的,也可以在这里选择你需要的。

SD卡支持(SDSUPPORT)

/**
* SD CARD
*
* SD Card support is disabled by default. If your controller has an SD slot,
* you must uncomment the following option or it won't work.
*/
#define SDSUPPORT

很可能,激活这个选项是必要的。它允许您使用SDCard加载STL文件。

信不信由你,它在我们的马林固件中是默认禁用的。您将需要激活它,就像我在我的固件中所做的那样。

简化菜单(SLIM_LCD_MENUS)

/**
* LCD Menu Items
*
* Disable all menus and only display the Status Screen, or
* just remove some extraneous menu items to recover space.
*/
//#define NO_LCD_MENUS
#define SLIM_LCD_MENUS

Marlin提供了从其显示中导航无数菜单的能力,这一点让人不知所措(至少对我来说)。顺便说一下,这些参数中的许多应该在固件中预先配置,而不必在动态中修改它们。为了减少这些菜单的数量,Marlin提供了使用SLIM_LCD_MENUS参数简化它们的选项。它不仅可以简化菜单,还可以节省不少内存。我建议您激活这个选项。

显示类型(LCD /控制器选择)

// RepRapDiscount Smart Controller.
// https://reprap.org/wiki/RepRapDiscount_Smart_Controller
//
// Note: Usually sold with a white PCB.
//
#define REPRAP_DISCOUNT_SMART_CONTROLLER

最后,我们到达了显示设置。如果我们仔细查看Configuration.h文件,就会发现有无数的显示。

它可能看起来有点复杂,但实际上我们所要做的就是找到我们的LCD屏幕的描述并取消注释,以便配置Marlin 2。

有基于文本的显示器、图形LCD显示器、OLED显示器等等。我有一个基于图形称为REPRAP_DISCOUNT_SMART_CONTROLLER。为此,取消对下面一行的注释。

如果你找不到屏幕的名称,我建议你使用Windows的“搜索”功能,这是最快和最简单的方法。

加热床调平(BED_LEVELING)

/**
* Choose one of the options below to enable G29 Bed Leveling. The parameters
* and behavior of G29 will change depending on your selection.
*
* If using a Probe for Z Homing, enable Z_SAFE_HOMING also!
*
* - AUTO_BED_LEVELING_3POINT
*   Probe 3 arbitrary points on the bed (that aren't collinear)
*   You specify the XY coordinates of all 3 points.
*   The result is a single tilted plane. Best for a flat bed.
*
* - AUTO_BED_LEVELING_LINEAR
*   Probe several points in a grid.
*   You specify the rectangle and the density of sample points.
*   The result is a single tilted plane. Best for a flat bed.
*
* - AUTO_BED_LEVELING_BILINEAR
*   Probe several points in a grid.
*   You specify the rectangle and the density of sample points.
*   The result is a mesh, best for large or uneven beds.
*
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
*   A comprehensive bed leveling system combining the features and benefits
*   of other systems. UBL also includes integrated Mesh Generation, Mesh
*   Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
*   Probe a grid manually
*   The result is a mesh, suitable for large or uneven beds. (See BILINEAR.)
*   For machines without a probe, Mesh Bed Leveling provides a method to perform
*   leveling in steps so you can manually adjust the Z height at each grid-point.
*   With an LCD controller the process is guided step-by-step.
*/
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

/**
* Normally G28 leaves leveling disabled on completion. Enable
* this option to have G28 restore the prior leveling state.
*/
#define RESTORE_LEVELING_AFTER_G28

在marlin2.0中有各种各样的方法或功能来帮助我们自己调平我们的床。默认情况下,它们在固件中是不激活的,所以我们必须激活它们才能使用它们。

首先,我们必须取消AUTO_BED_LEVELING_BILINEAR函数和RESTORE_LEVELING_AFTER_G28函数的注释,以便它们在我们的固件中保持活跃。

通过这种方式,我们的传感器将在不同的点下降,并创建一个不同高度的虚拟3D网格。因为我总是喜欢把HOME放在床的中间,所以我启动了Z_SAFE_HOMING选项。

#define Z_SAFE_HOMING

#if ENABLED(Z_SAFE_HOMING)
 #define Z_SAFE_HOMING_X_POINT X_CENTER  // X point for Z homing
 #define Z_SAFE_HOMING_Y_POINT Y_CENTER  // Y point for Z homing
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【3D打印机】原来配置Marlin2.0这么简单,别说我没告诉你。 的相关文章

  • OpenMV超声波测距

    OpenMV超声波测距 本文首发于 xff1a https www bilibili com read cv3051569 参考链接 xff1a https blog csdn net bei dai he article details
  • Git常用命令pull、push、fetch

    pull pull意为拉 xff0c 这里引申为拉取代码 在Git命令中使用pull xff0c 会将你的远程代码拉取到本地并进行合并 格式 xff1a git pull lt 远程主机名 gt lt 远程分支名 gt lt 本地分支名 g
  • Ubuntu系统man命令中文汉化

    1 下载中文包 进入 opt xff0c 使用管理权限下载 xff1a wget https src fedoraproject org repo pkgs man pages zh CN manpages zh 1 5 1 tar gz
  • 文末彩蛋 | 这个 Request URL 长得好不一样

    有朋友拿到一个网站请求的链接问这要怎么解密 xff1f 很明显这不是加密的数据 xff0c 这是一张图片 base64 后的结果 xff0c 第一次写爬虫朋友遇到这样的请求 xff0c 可能需要琢磨一下这是什么东西 如果有遇到类似数据 xf
  • Redis(十) 布隆过滤器

    速记 为什么使用布隆过滤器 xff1f 1 为了省内存 xff0c 提高速率 2 因为1所以布隆过滤器不需要百分百正确 3 说存在不一定存在 xff0c 说不存在一定不存在 4 在解决缓存穿透的问题时 xff0c 拦截了大部分的请求 xff
  • 第五章:数学运算-statistics:统计计算-平均值

    5 5 statistics 统计计算 statistics模块实现常用的统计公式 xff0c 允许使用python的各种数值类型 xff08 int float xff0c Decimal和Fraction 来完成高效计算 5 5 1 平
  • 用proxychains4解决rosdep init问题教程

    在终端下载源码 sudo git clone https github com rofl0r proxychains ng git 进入安装目录 cd proxychains ng 配置 configure prefix 61 usr sy
  • 使用 TX2 和 realsense D435i 相机运行 ORBSLAM3

    非 ROS 版本 之后可能会更新 ROS 版本的 ORBSLAM3 配置指南 TODO 目录 TX2 刷机JetPack 4 6 1安装 realsense SDK 2 0编译 opencv 4 5 0编译 Pangolin 0 5编译运行
  • 解决 cv_bridge 与 opencv4 版本冲突问题

    解决了在 ROS melodic noetic 下 cv bridge 与 opencv4 版本冲突导致的 opencv 操作 导致 Segmentation fault core dumped 的问题 目录 问题描述解决方法参考 问题描述
  • 我对onSizeChange方法的源码解析

    如果当前的自定义控件是继承ViewGroup xff0c 那么在ViewGroup重写的layout方法中 xff1a 可知调用父类也就是View的layout方法 再看View的layout方法 xff1a 查看设置自己坐标的setFra
  • 5 个你不知道的关于 Python 类的技巧

    5 个你不知道的关于 Python 类的技巧 1 创建 一个 常量值2 多个类构造函数3 创建枚举4 迭代器5 以列表的形式访问一个类 Python 有许多强大的特性 xff0c 在处理类时提供了极大的灵活性 在这里 xff0c 我将向您展
  • 激光雷达和RTK的标定(无人小车)

    总结一下最近的标定工作 xff0c 标定平台是实验室的无人小车 xff0c 目标是实现激光雷达 lidar 和RTK的标定 xff0c 也就是求解lidar到RTK的位姿变换矩阵 采用的代码是ETH的lidar align https gi
  • 虚拟机安装Ubuntu20.04 + VCS2018

    虚拟机安装Ubuntu20 04 43 VCS2018 前言正文1 准备内容Vmware Workstation 16 prounbuntu 20 04 安装包vcs 43 scl 43 verdi等安装包 2 Ubuntu系统的安装ope
  • input里面file实现上传图片及预览功能

    在这里插入简单的HTML代码片 lt form action 61 34 34 gt 文件 xff1a lt input type 61 34 file 34 name 61 34 myFile 34 id 61 34 myFile 34
  • 创建ROS-wrapper

    创建ROS wrapper 对高博的ygz stereo inertial的开源算法添加ROS node源文件的编写CMakeLists文件的编写分目录下的CMakeLists完整CMakeLists路径 home fei devv ygz
  • 新买了块翼联的AX200的网卡,结果开移动热点的时候遇到了点问题

    买网卡这事的起因要从入手了switch说起 xff0c 直连网不是不能用 xff0c 就是太难用了 xff0c 下载个东西要几十个小时 xff0c 玩个马造2连地图都下载不了 然后试用了3天的网易uu加速器 xff0c 好用是真的好用 xf
  • HDU 1085(Holding Bin-Laden Captive!)

    题意 xff1a 有三种价值分别为 1 2 5 的硬币 xff0c 每一种分别由 a b c 个 xff0c 求这些硬币不能组成的最小价值 分析 xff1a 生成函数板子题 xff08 贴一个讲生成函数的链接https blog csdn
  • 大电流的走线和过孔

    工程师在设计的时候 xff0c 很容易忽略走线宽度的问题 xff0c 因为在数字设计时 xff0c 走线宽度不在 考虑范围里面 通常情况下 xff0c 都会尝试用最小的线宽去设计走线 xff0c 这时 xff0c 在大电流时 xff0c 将
  • c++ 实现基本数据结构代码

    数据结构是计算机科学的一个重要的分支 xff0c 主要研究如何有效地存储和组织数据以便于快速访问和操作 常见的数据结构有 xff1a 数组 xff1a 是一种线性的数据结构 xff0c 可以通过索引来访问数组中的元素 链表 xff1a 是一
  • Jetson开发实战记录(二):Jetson Xavier NX版本区别以及烧录系统

    Jetson开发实战记录 xff08 二 xff09 xff1a Jetson Xavier NX版本区别以及烧录系统 一 Jetson Xavier NX类型1 SD卡槽的版本 xff08 官方版本 xff09 2 带eMMC存储芯片的版

随机推荐

  • ZYNQ7000(AX7020)移植Linux操作系统(二):u-boot的编译和启动

    总述 我们已经在 PC 上已经安装了 Ubuntu 客户操作系统 xff0c 以及在 Ubuntu 操作系统里安装了 SDK 2015 4 工具 要想在 Zynq 平台上运行 Ubuntu 操作系统 xff0c 必项预先制作作镜像文件 xf
  • 10个让你的 Python 代码更具 pythonic 风格的示例

    10个让你的 Python 代码更具 pythonic 风格的示例 1 变量交换 2 函数返回元组 xff08 自动打包 解包 xff09 3 多重比较 4 多重比较 5 列表推导式 6 将 Python 字典当做缓存 7 关键字参数 8
  • 进程的调度算法

    先来先服务调度算法 xff1a 先来先服务调度算法是一种最简单的调度算法 xff0c 也称为先进先出或严格排队方案 当每个进程就绪后 xff0c 它加入就绪队列 当前正运行的进程停止执行 xff0c 选择在就绪队列中存在时间最长的进程运行
  • 华为云服务器购买及使用指南

    前言 作者参与牛客网的买服务器返现活动 xff0c 以某个奇妙的价格价格购入了一个一年的华为云服务器 xff0c 具体多少钱就不透露了 xff0c 不然会被当作广告性能参数如下 xff1a 购买 偶然看到这个活动 xff0c 然后点进去 x
  • JS 简单的事件

    实现鼠标滑过按钮时显示文本 xff0c 滑出时隐藏文本 span class token doctype lt DOCTYPE html gt span span class token tag span class token tag s
  • 在ROS中实现darknet_ros(YOLO V3)检测以及训练自己的数据集

    目录 1 darknet ros介绍 2 darknet ros原始项目编译测试 3 yolov3训练自己的数据集 4 使用自己训练好的数据集 1 darknet ros介绍 Darknet概述 https blog csdn net u0
  • apache options index 设置问题

    禁止显示Apache目录列表 Indexes FollowSymLinks 如何修改目录的配置以禁止显示Apache 目录列表 缺省情况下如果你在浏览器输入地址 xff1a http localhost 8080 如果你的文件根目录里有in
  • Centos7.7安装vncserver虚拟网络控制台

    虚拟网络控制台 xff08 VNC xff09 是一个图形桌面共享软件 xff0c 允许您使用键盘和鼠标远程控制另一台计算机 系统环境 服务端 xff1a Centos7 7 Minimal客户端 xff1a Windows10客户端VNC
  • C语言实现TCP通信

    如果想要自己写一个服务器和客户端 xff0c 我们需要掌握一定的网络编程技术 xff0c 个人认为 xff0c 网络编程中最关键的就是这个东西 socket 套接字 socket 套接字 xff1a 简单来讲 xff0c socket就是用
  • 详细的 win10+VS+Cuda10 环境配置,图文

    为完成CUDA 和OPEN CL的任务 xff0c 这两天配置了基于WIN10和VS2012 2015的环境 发觉网上很多配置CUDA的都是老版本 xff0c 而且过程过于繁琐 xff0c 我重新整理并分享之 我分了3篇记录 xff0c 另
  • Pytorch基础知识(13)对抗样本

    在前面的章节中 xff0c 我们已经看到了深度学习模型在解决各种计算机视觉任务方面的强大能力 我们在不同的数据集上训练和测试多个模型 现在 xff0c 我们将把注意力转向这些模型的健壮性 在本章中 xff0c 我们将介绍对抗样本 对抗样本是
  • ubuntu18.04修改docker0的IP

    当docker的IP与宿主机的IP在同一网段时候 xff0c 会产生错误 xff0c 例如同为172 17 直接修改 etc docker daemon json文件 xff0c 重启时候还是报错 查看docker日志 xff0c 可以看到
  • Flask 项目中使用 bootstrap

    flask 的插件中有一个 flask bootstrap 项目 但是用起来不怎么方便 如果大家感兴趣的话 还是直接在项目中引入 bootstrap flask 项目的目录结构 项目名称 app static span class hljs
  • MediaPipe基础(9)手指计数

    本文实现手指计数 xff0c 可以实现0 5的计数 链接 xff1a https span class token punctuation span span class token operator span pan span class
  • OpenCV基础(19)使用 OpenCV 和 Python 检测 ArUco 标记

    在本教程中 xff0c 您将学习如何使用 OpenCV 和 Python 检测图像和实时视频流中的 ArUco 标记 1 使用 OpenCV 和 Python 检测 ArUco 标记 在本教程的第一部分 xff0c 您将了解 OpenCV
  • 目标跟踪(7)使用 OpenCV 进行简单的对象跟踪

    1 简述 目标跟踪的过程是 1 获取对象检测的初始集 例如边界框坐标的输入集 2 为每个初始检测创建唯一的ID3 然后跟踪每一个在视频中移动的对象 xff0c 保持唯一ID的分配 此外 xff0c 对象跟踪允许我们为每个跟踪对象应用唯一 I
  • 基于OpenCV的轮廓检测(1)

    1 目标 理解什么叫做轮廓学习如何寻找轮廓以及可视化轮廓找出轮廓的不同特征 xff0c 如面积 周长 质心 边框等将看到许多与轮廓相关的函数 2 什么叫做轮廓 轮廓可以简单地解释为连接所有连续点 xff08 沿着边界 xff09 的曲线 x
  • 自动驾驶数据标注技术:如何解决数据标注难题?

    自动驾驶数据标注技术是现代自动驾驶汽车发展过程中必不可少的一部分 xff0c 因为它能够提高自动驾驶汽车的性能 xff0c 确保其安全性和准确性 然而 xff0c 数据标注的难题也给自动驾驶汽车的发展带来了挑战 下面是关于自动驾驶数据标注技
  • 在mac m1上安装docker并在浏览器启动Ubuntu环境

    目录 一些前言 xff08 说明我要这样做的原因 xff0c 很啰嗦 xff0c 建议直接跳过 xff09 安装docker用docker启动ubuntu的环境在ubuntu中安装qt5qt5bug解决qt5卸载 一些前言 xff08 说明
  • 【3D打印机】原来配置Marlin2.0这么简单,别说我没告诉你。

    96 96 可能由于各人的打印机款式不同 xff0c 某些参数没有出现在文中 xff0c 但是只要你完全看完本指南 xff0c 就可以理解Marlin是如何工作的 xff0c 我相信在此基础上 xff0c 你在固件中找到哪些不同配置并不困难