目录
一、简介
Marlin 是一种开源的 3D 打印机固件,广泛应用于各种 3D 打印机的控制系统。它最初是为了 RepRap 3D 打印机而开发的,但随着时间的推移,它已经成为了许多不同类型和品牌的 3D 打印机的首选固件。Marlin 下载地址:https://download.csdn.net/download/qq_26043945/89110565
以下是 Marlin 固件的一些主要特点和功能:
-
开源与可定制:Marlin 是开源的,这意味着用户可以访问和修改其源代码,以满足特定的打印需求或硬件要求。用户可以根据自己的打印机配置进行定制,调整各种参数和设置。
-
广泛的硬件兼容性:Marlin 支持多种类型的 3D 打印机,包括 FDM(熔融沉积建模)和某些其他类型的打印机。它支持各种步进电机驱动器、加热元件、温度传感器和输入/输出设备。
-
丰富的配置选项:Marlin 提供了大量的配置选项,允许用户调整打印速度、加速度、温度控制、回抽设置、层高等参数,以优化打印质量和性能。
-
先进的运动控制:Marlin 固件具有高效的步进电机控制算法,可以精确控制打印机的运动。它支持多种插补模式,如线性插补和圆弧插补,以实现更平滑的打印轨迹。
-
温度管理:Marlin 提供了先进的温度控制功能,可以精确控制挤出机和热床的温度。它支持 PID(比例-积分-微分)温度控制算法,以快速稳定地达到并维持目标温度。
-
用户界面和监控:Marlin 支持多种用户界面,包括 LCD 显示屏和串行通信接口(如 USB 和串口)。用户可以通过这些接口监控打印状态、控制打印机,甚至上传新的 G-code 文件进行打印。
-
安全和故障处理:Marlin 固件具有故障检测和处理功能,可以检测并处理诸如热失控、电机失步等问题。它还支持热端和热床的安全温度限制,以防止过热。
-
社区支持:由于 Marlin 是开源的,因此有一个庞大的社区支持网络,包括开发者、用户和爱好者。这个社区提供了丰富的文档、教程、配置示例和故障解决方案,使得使用 Marlin 变得更加容易。
总的来说,Marlin 固件因其开源性、可定制性和广泛的硬件兼容性而受到了广大 3D 打印机用户和开发者的青睐。它不断发展和改进,为 3D 打印技术提供了强大的支持和动力。
二、Configuration.h
具体参数配置
1.1 控制主板选择
// Choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif
可以在文件夹 “ Marlin-2.1.2.2\Marlin\src\core ” 下找到 “ boards.h ” 文件,按自己对应的控制主板,选择对应的控制板。
在 “ boards.h ” 文件中,我使用的是Ramps 1.4 控制板。对应的选项有下面几种:
#define BOARD_RAMPS_14_EFB 1020 // RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
#define BOARD_RAMPS_14_EEB 1021 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Bed)
#define BOARD_RAMPS_14_EFF 1022 // RAMPS 1.4 (Power outputs: Hotend, Fan0, Fan1)
#define BOARD_RAMPS_14_EEF 1023 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Fan)
#define BOARD_RAMPS_14_SF 1024 // RAMPS 1.4 (Power outputs: Spindle, Controller Fan)
这些代码行是在 Marlin 固件中定义的不同 RAMPS 1.4 主板的标识符。RAMPS(RepRap Arduino Mega Pololu Shield)是一个流行的 3D 打印机电子扩展板,它通常连接到一个 Arduino Mega 2560 控制器板上。这些标识符用于在 Marlin 的配置过程中选择正确的硬件配置。
以下是每个标识符的简要解释:
-
#define BOARD_RAMPS_14_EFB 1020
- EFB 代表:Extruder(挤出机,即热端)、Fan(风扇)、Bed(热床)。这表示 RAMPS 1.4 主板的配置是控制一个热端、一个风扇和一个热床。
-
#define BOARD_RAMPS_14_EEB 1021
- EEB 代表:Extruder(热端)0、Extruder(热端)1、Bed(热床)。这表示主板配置为控制两个热端和一个热床。
-
#define BOARD_RAMPS_14_EFF 1022
- EFF 代表:Extruder(热端)、Fan 0、Fan 1。这表示主板配置为控制一个热端和两个风扇。
-
#define BOARD_RAMPS_14_EEF 1023
- EEF 代表:Extruder(热端)0、Extruder(热端)1、Fan。这表示主板配置为控制两个热端和一个风扇。
-
#define BOARD_RAMPS_14_SF 1024
- SF 代表:Spindle(主轴)、Fan(控制器风扇)。这表示主板配置为控制一个主轴电机和一个控制器风扇。
1.2 连接串口选择
打开默认的arduino连接串口。
/**
* Select the serial port on the board to use for communication with the host.
* This allows the connection of wireless adapters (for instance) to non-default port pins.
* Serial port -1 is the USB emulated serial port, if available.
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
*
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
#define SERIAL_PORT 0
1.3 连接波特率选择
我使用的是250000的波特率,可以按照自己的需求进行改动。
/**
* Serial Port Baud Rate
* This is the default communication speed for all serial ports.
* Set the baud rate defaults for additional serial ports below.
*
* 250000 works in most cases, but you might try a lower speed if
* you commonly experience drop-outs during host printing.
* You may try up to 1000000 to speed up SD file transfer.
*
* :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
*/
#define BAUDRATE 250000
1.4 电机控制模块选择
对应的运动部件X、Y、Z、挤出机我都使用的是 A4988 ,然后下面是我对应的配置参数。
/**
* 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.
*
* Use TMC2208/TMC2208_STANDALONE for TMC2225 drivers and TMC2209/TMC2209_STANDALONE for TMC2226 drivers.
*
* Options: A4988, A5984, DRV8825, LV8729, 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', '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 A4988
#define Y_DRIVER_TYPE A4988
#define Z_DRIVER_TYPE A4988
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
//#define I_DRIVER_TYPE A4988
//#define J_DRIVER_TYPE A4988
//#define K_DRIVER_TYPE A4988
//#define U_DRIVER_TYPE A4988
//#define V_DRIVER_TYPE A4988
//#define W_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE A4988
//#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
1.5 挤出机配置
1.5.1 挤出机数量
下面这几行代码定义了打印机的挤出机数量。在这里,它被设置为1,表示这台打印机只有一个挤出机。注释部分给出了挤出机数量的可选范围,从0到8。
// This defines the number of extruders
// :[0, 1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 1
1.5.2 耗材直径
下面的代码定义了默认的丝材直径。通常,常见的丝材直径有1.75mm和2.85mm。在这段代码中,它被设置为1.75mm。
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
1.6 温度控制设定
1.6.1 温度传感器类型
这里设置的是温度传感器的类型,我有一个挤出机和一个热床,然后使用的是 PT100 上拉4.7K电阻进行测温,所以我设置为:147 ,对应如下所示。
#define TEMP_SENSOR_0 147
#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 147
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_CHAMBER 0
#define TEMP_SENSOR_COOLER 0
#define TEMP_SENSOR_BOARD 0
#define TEMP_SENSOR_REDUNDANT 0
1.6.2 挤出机温度稳定范围
#if HAS_E_TEMP_SENSOR
#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
#endif
#if HAS_E_TEMP_SENSOR
:这是一个条件编译指令,表示如果定义了HAS_E_TEMP_SENSOR
(即存在挤出机温度传感器),则编译以下的代码块。#define TEMP_RESIDENCY_TIME 10
:定义了挤出机热端达到目标温度后需要等待的“稳定”时间,单位是秒。在M109命令中,当挤出机达到目标温度后,固件会等待这个时间以确保温度稳定。#define TEMP_WINDOW 1
:定义了判断温度是否达到目标时的温度窗口,单位是摄氏度。这个值用于在“温度达到”定时器中判断当前温度是否接近目标温度。#define TEMP_HYSTERESIS 3
:定义了温度与目标温度接近到何种程度时才被认为是“足够接近”。这个值用于减少在目标温度附近频繁的加热和冷却循环。
1.6.3 热床温度稳定范围
#if TEMP_SENSOR_BED
#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190
#define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
#define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
#endif
#if TEMP_SENSOR_BED
:这是一个条件编译指令,表示如果定义了TEMP_SENSOR_BED
(即存在加热床温度传感器),则编译以下的代码块。#define TEMP_BED_RESIDENCY_TIME 10
:定义了加热床达到目标温度后需要等待的“稳定”时间,单位是秒。在M190命令中,当加热床达到目标温度后,固件会等待这个时间以确保温度稳定。#define TEMP_BED_WINDOW 1
和#define TEMP_BED_HYSTERESIS 3
:这两个定义与挤出机的类似,分别用于加热床的温度窗口和滞后。
1.6.4 最小温度
// 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
1.6.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 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define HEATER_5_MAXTEMP 275
#define HEATER_6_MAXTEMP 275
#define HEATER_7_MAXTEMP 275
#define BED_MAXTEMP 150
#define CHAMBER_MAXTEMP 60
1.6.6 过载温度
在加热(和打印)过程中,温度常常会超过目标温度几度(特别是在PID调整之前)。将目标温度设置得太接近最大温度(MAXTEMP)可能会导致打印机因超温而关闭。这段代码中的宏定义用于防止将温度设置得过于接近最大温度。
/**
* Thermal Overshoot
* During heatup (and printing) the temperature can often "overshoot" the target by many degrees
* (especially before PID tuning). Setting the target temperature too close to MAXTEMP guarantees
* a MAXTEMP shutdown! Use these values to forbid temperatures being set too close to MAXTEMP.
*/
#define HOTEND_OVERSHOOT 15 // (°C) Forbid temperatures over MAXTEMP - OVERSHOOT
#define BED_OVERSHOOT 10 // (°C) Forbid temperatures over MAXTEMP - OVERSHOOT
#define COOLER_OVERSHOOT 2 // (°C) Forbid temperatures closer than OVERSHOOT
#define HOTEND_OVERSHOOT 15:
定义了一个宏HOTEND_OVERSHOOT
,它的值为15。这表示在设置喷头(Hotend)的目标温度时,不允许超过最大温度减去这个过载值。#define BED_OVERSHOOT 10:
定义了一个宏BED_OVERSHOOT
,它的值为10。这表示在设置打印床(Bed)的目标温度时,也不允许超过最大温度减去这个过载值。#define COOLER_OVERSHOOT 2:
定义了一个宏COOLER_OVERSHOOT
,它的值为2。这里需要注意的是,这个宏的注释与其他两个稍有不同,它表示的是禁止设置温度“过于接近”过载值,而不是禁止超过最大温度减去过载值。这可能意味着这个宏是用于限制冷却器(Cooler)的温度设置,避免其温度设置得离某个参考点(可能是最低温度或某个安全阈值)太近。
这些过载值是为了增加打印机的安全性,防止由于温度设置不当而导致的超温问题。通过限制目标温度与最大温度(或最低温度)之间的差值,可以减少意外发生的风险。
1.7 其它安全设置
1.7.1 挤出机PID设置
#define PIDTEMP // See the PID Tuning Guide at https://reprap.org/wiki/PID_Tuning
//#define MPCTEMP // ** EXPERIMENTAL ** See https://marlinfw.org/docs/features/model_predictive_control.html
#define PID_MAX 255 // Limit hotend current while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
//#define PID_DEBUG // Print PID debug data to the serial port. Use 'M303 D' to toggle activation.
//#define PID_PARAMS_PER_HOTEND // Use separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with G-code: M301 E[extruder number, 0-2]
#if ENABLED(PID_PARAMS_PER_HOTEND)
// Specify up to one value per hotend here, according to your setup.
// If there are fewer values, the last one applies to the remaining hotends.
#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 22.20
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114.00
#endif
#else
#define BANG_MAX 255 // Limit hotend current while in bang-bang mode; 255=full current
#endif
上面的代码可以配置多个挤出机的PID数据,也可以配置满功率加热(BANG_MAX)。
- 满功率:当需要满功率加热时,直接注释掉 “ #define PIDTEMP ”代码则可以使用满功率。
- 多挤出机:当使用多个挤出机时,则需要启用 “ //#define PID_PARAMS_PER_HOTEND ” 处的代码,然后通过配置下面的代码,则是对多个挤出机分别进行PID的配置。
- #define DEFAULT_Kp_LIST { 22.20, 22.20 }
- #define DEFAULT_Ki_LIST { 1.08, 1.08 }
- #define DEFAULT_Kd_LIST { 114.00, 114.00 }
- 单挤出机:默认情况是配置的一个挤出机功能,只需在代码不改的情况下,通过更改下面的代码进行PID的配置:
- #define DEFAULT_Kp 22.20
- #define DEFAULT_Ki 1.08
- #define DEFAULT_Kd 114.00
1.7.2 热床PID设置
//#define PIDTEMPBED
#if ENABLED(PIDTEMPBED)
//#define MIN_BED_POWER 0
//#define PID_BED_DEBUG // Print Bed PID 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 10.00
#define DEFAULT_bedKi .023
#define DEFAULT_bedKd 305.4
// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
#else
//#define BED_LIMIT_SWITCHING // Keep the bed temperature within BED_HYSTERESIS of the target
#endif
1.7.3 禁止冷挤出
/**
* 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
这段注释描述了防止低温挤出的功能。当挤出头的温度低于EXTRUDE_MINTEMP
设定的值时,打印机会阻止挤出。注释还提到,可以通过M302
命令来设置最小挤出温度或开启/关闭低温挤出防止功能。最后,注释强烈推荐启用这个选项,以保证打印质量和防止因低温挤出而导致的堵塞或其他问题。
#define PREVENT_COLD_EXTRUSION
这行代码通过定义一个宏PREVENT_COLD_EXTRUSION
来启用低温挤出防止功能。#define EXTRUDE_MINTEMP 170
这行代码定义了EXTRUDE_MINTEMP
宏的值为170,表示挤出头的最低温度限制为170摄氏度。如果挤出头的温度低于这个值,打印机会阻止挤出。
1.7.4 禁止长挤出
/**
* 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
这段注释描述了防止过长挤出的功能。如果单次挤出的长度超过EXTRUDE_MAXLENGTH
设定的值,打印机会停止挤出。注释还提到,对于Bowden挤出机,应该设置足够大的值以允许加载/卸载耗材。
#define PREVENT_LENGTHY_EXTRUDE
这行代码通过定义一个宏PREVENT_LENGTHY_EXTRUDE
来启用防止过长挤出的功能。#define EXTRUDE_MAXLENGTH 200
这行代码定义了EXTRUDE_MAXLENGTH
宏的值为200,表示单次挤出的最大长度限制为200毫米。如果尝试挤出超过这个长度的耗材,打印机会停止挤出。
1.7.5 温度保护
用于启用不同部件的热保护。下面是对每行代码的详细解释:
#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_HOTENDS
这行代码通过定义THERMAL_PROTECTION_HOTENDS
宏来启用所有挤出机的热保护。热保护通常用于监测挤出机的加热器温度,并在温度过高时采取安全措施,如关闭加热器或触发警报,以防止挤出机损坏或发生火灾。#define THERMAL_PROTECTION_BED
这行代码定义THERMAL_PROTECTION_BED
宏来启用加热床的热保护。加热床是3D打印机的一个关键部件,用于在打印过程中保持打印平台在适当的温度。热保护可以监测加热床的温度,并在温度异常时采取相应措施,以确保打印机的安全。#define THERMAL_PROTECTION_CHAMBER
这行代码通过定义THERMAL_PROTECTION_CHAMBER
宏来启用加热舱的热保护。虽然“chamber”这个词可能是“chamber”的拼写错误,但通常在一些高端3D打印机中,会有一个封闭的加热舱来提供稳定的打印环境。热保护能够监测加热舱内的温度,并在需要时采取措施来防止过热。
1.8 打印范围配置
1.8.1 最小及最大限位开关
指定每个轴的限位器的最大值和最小值是否启用。这里我只使用了最小值限位,所以删除了最小限位的注释。
// 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_IMIN_PLUG
//#define USE_JMIN_PLUG
//#define USE_KMIN_PLUG
//#define USE_UMIN_PLUG
//#define USE_VMIN_PLUG
//#define USE_WMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG
//#define USE_IMAX_PLUG
//#define USE_JMAX_PLUG
//#define USE_KMAX_PLUG
//#define USE_UMAX_PLUG
//#define USE_VMAX_PLUG
//#define USE_WMAX_PLUG
1.8.2 限位开关上拉
这段代码是关于3D打印机固件中的端位开关(endstop)上拉电阻的配置。限位开关是3D打印机用来检测打印头或床是否到达其移动范围的极限的传感器。默认所有限位器都上拉电阻,以防止浮动。
如果要单独对每个限位器配置,可以注释掉 “ #define ENDSTOPPULLUPS ”,然后就可以在代码中单独配置限位开关上拉。
注意!!注意!!!这里是判断的没有启用,才运行下面的代码。
// Enable pullup for all endstops to prevent a floating state
#define ENDSTOPPULLUPS
#if DISABLED(ENDSTOPPULLUPS)
// Disable ENDSTOPPULLUPS to set pullups individually
//#define ENDSTOPPULLUP_XMIN
//#define ENDSTOPPULLUP_YMIN
//#define ENDSTOPPULLUP_ZMIN
//#define ENDSTOPPULLUP_IMIN
//#define ENDSTOPPULLUP_JMIN
//#define ENDSTOPPULLUP_KMIN
//#define ENDSTOPPULLUP_UMIN
//#define ENDSTOPPULLUP_VMIN
//#define ENDSTOPPULLUP_WMIN
//#define ENDSTOPPULLUP_XMAX
//#define ENDSTOPPULLUP_YMAX
//#define ENDSTOPPULLUP_ZMAX
//#define ENDSTOPPULLUP_IMAX
//#define ENDSTOPPULLUP_JMAX
//#define ENDSTOPPULLUP_KMAX
//#define ENDSTOPPULLUP_UMAX
//#define ENDSTOPPULLUP_VMAX
//#define ENDSTOPPULLUP_WMAX
//#define ENDSTOPPULLUP_ZMIN_PROBE
#endif
1.8.3 限位开关下拉
这段代码是关于3D打印机固件中的端位开关(endstop)下拉电阻的配置,与上面的上拉是一样的配置方式。限位开关是3D打印机用来检测打印头或床是否到达其移动范围的极限的传感器。
// Enable pulldown for all endstops to prevent a floating state
//#define ENDSTOPPULLDOWNS
#if DISABLED(ENDSTOPPULLDOWNS)
// Disable ENDSTOPPULLDOWNS to set pulldowns individually
//#define ENDSTOPPULLDOWN_XMIN
//#define ENDSTOPPULLDOWN_YMIN
//#define ENDSTOPPULLDOWN_ZMIN
//#define ENDSTOPPULLDOWN_IMIN
//#define ENDSTOPPULLDOWN_JMIN
//#define ENDSTOPPULLDOWN_KMIN
//#define ENDSTOPPULLDOWN_UMIN
//#define ENDSTOPPULLDOWN_VMIN
//#define ENDSTOPPULLDOWN_WMIN
//#define ENDSTOPPULLDOWN_XMAX
//#define ENDSTOPPULLDOWN_YMAX
//#define ENDSTOPPULLDOWN_ZMAX
//#define ENDSTOPPULLDOWN_IMAX
//#define ENDSTOPPULLDOWN_JMAX
//#define ENDSTOPPULLDOWN_KMAX
//#define ENDSTOPPULLDOWN_UMAX
//#define ENDSTOPPULLDOWN_VMAX
//#define ENDSTOPPULLDOWN_WMAX
//#define ENDSTOPPULLDOWN_ZMIN_PROBE
#endif
1.8.4 限位触发方式
不同的限位器型号,会产生不同的型号,有些闭合时会发出高电平,有些会发出低电平,如果你使用 M119
测试时发现检测与现实相反了,激活其中某个限位器以相反信号。
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define I_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define J_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define K_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define U_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define V_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define W_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // 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 I_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define J_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define K_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define U_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define V_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define W_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.
1.9 步进电机驱动
1.9.1 步进电机移动1mm步数
具体配置步进电机的步数参考网址:https://blog.prusa3d.com/calculator_3416/。
/**
* Default Axis Steps Per Unit (linear=steps/mm, rotational=steps/°)
* Override with M92
* X, Y, Z [, I [, J [, K...]]], E0 [, E1[, E2...]]
*/
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }
X轴、Y轴我使用的皮带传动,我使用的是2GT的同步轮(皮带轮齿数为20),以及2GT的皮带(皮带节距为2mm),对应的如下所示。
Z轴我使用的是 M5 丝杆(丝杆螺距为0.8mm),对应的如下所示。
1.9.2 移动速度
指打印机在打印过程中各个轴移动的速度。这段代码的目的是为X、Y、Z轴以及挤出机(E轴)设置默认的最大移动速度。
/**
* Default Max Feed Rate (linear=mm/s, rotational=°/s)
* Override with M203
* X, Y, Z [, I [, J [, K...]]], E0 [, E1[, E2...]]
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
:这行代码它包含了一个数组,数组中的每个值分别对应一个轴的最大进给率。
-
300
:X轴的最大进给率,单位是毫米每秒(mm/s)。这意味着在默认情况下,X轴可以以最大300毫米每秒的速度进行移动。 -
300
:Y轴的最大进给率,单位同样是毫米每秒(mm/s)。这意味着在默认情况下,Y轴也可以以最大300毫米每秒的速度进行移动。 -
5
:Z轴的最大进给率,单位是毫米每秒(mm/s)。与X轴和Y轴相比,Z轴的最大进给率通常设置得较低,这是因为打印过程中Z轴(负责打印层的升降)的移动通常需要更精确的控制。 -
25
:E轴(挤出机)的最大进给率,这里可能表示的是挤出机每秒钟可以转动的最大圈数或者挤出的最大材料体积(具体取决于固件如何解释这个值)。由于挤出过程需要精确控制材料的流量,因此其最大进给率通常也设置得相对较低。
这个配置同样可以根据实际的打印机硬件和打印需求进行调整。例如,如果你的打印机硬件支持更高的移动速度,或者你需要提高打印速度以提高生产效率,那么可以适当增加这些值。然而,过高的进给率可能会导致打印质量下降或打印机无法正常工作,因此需要根据实际情况进行权衡和调整。
1.9.3 最大移动速度
这段代码是3D打印机固件配置中关于限制最大移动速度,步进电机的最高速度,单位是 mm/s,默认这里是没有启用的。
//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
#if ENABLED(LIMITED_MAX_FR_EDITING)
#define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
#endif
简而言之,这段代码提供了一个选项来限制步进电机最大移动速度,确保它们不会超过默认值的2倍(如果启用了这个功能的话)。同时,还定义了一个数组来指定每个轴的最大进给率编辑限制的具体值。这种限制有助于防止用户不小心设置过高的进给率,从而可能导致打印失败或损坏打印机。
1.9.4 默认最大加速度
这段代码是3D打印机固件中关于默认最大加速度的定义。加速度描述的是速度随时间变化的快慢,对于3D打印机来说,它决定了各个轴在加速或减速过程中的性能表现。默认最大加速度单位是 mm/s。
/**
* Default Max Acceleration (speed change with time) (linear=mm/(s^2), rotational=°/(s^2))
* (Maximum start speed for accelerated moves)
* Override with M201
* X, Y, Z [, I [, J [, K...]]], E0 [, E1[, E2...]]
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
这个配置同样可以根据实际的打印机硬件和打印需求进行调整。例如,如果你的打印机使用了高性能的步进电机或驱动器,可以适当增加这些值以提高打印速度和响应性能。然而,过高的加速度可能会导致机械部件承受过大的压力,从而影响打印质量或缩短打印机寿命,因此需要谨慎设置。
1.9.5 限制最大加速度
这段代码是3D打印机固件中关于限制最大加速度编辑功能的定义,默认这里是没有启用的。(个人感觉配置上面的默认最大加速度不就可以了吗,感觉这里有的多余)。
//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
#define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
#endif
1.9.6 默认加速度
这段代码是3D打印机固件中关于默认加速度的配置。加速度描述了速度随时间变化的快慢,对于3D打印机来说,它决定了各个轴在加速或减速过程中的性能表现。
/**
* Default Acceleration (speed change with time) (linear=mm/(s^2), rotational=°/(s^2))
* Override with M204
*
* M204 P Acceleration
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
1.10 步进电机基本设置
1.10.1 步进电机使能
这段代码是3D打印机固件中关于步进电机使能引脚(Enable Pins)的配置。步进电机使能引脚用于控制步进电机是否通电(即是否激活)。有些步进电机要求低电平(Active Low)信号来激活,而有些则需要高电平(Active High)信号。
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
// :{ 0:'Low', 1:'High' }
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0 // For all extruders
//#define I_ENABLE_ON 0
//#define J_ENABLE_ON 0
//#define K_ENABLE_ON 0
//#define U_ENABLE_ON 0
//#define V_ENABLE_ON 0
//#define W_ENABLE_ON 0
这些选项设置用于步进电机使能的引脚状态。对于低电平有效,最常见的设置是0(LOW) 。对于高电平有效,请使用 1 或HIGH。
1.10.2 运动方向
这段代码是3D打印机固件中关于步进电机方向控制的配置部分。驱动3D打印机各个轴(X、Y、Z)和挤出机(Extruder)运动方向。
// 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
//#define INVERT_I_DIR false
//#define INVERT_J_DIR false
//#define INVERT_K_DIR false
//#define INVERT_U_DIR false
//#define INVERT_V_DIR false
//#define INVERT_W_DIR false
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false
1.10.3 归零方向
每个轴的归零方向,-1 为最小值,1为最大值。一般 Cartesian 和 CoreXY 用最小值归零,而 Delta 用最大值归零
// Direction of endstops when homing; 1=MAX, -1=MIN
// :[-1,1]
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
//#define I_HOME_DIR -1
//#define J_HOME_DIR -1
//#define K_HOME_DIR -1
//#define U_HOME_DIR -1
//#define V_HOME_DIR -1
//#define W_HOME_DIR -1
1.10.4 步进电机移动范围
您可以直接指定床的尺寸。如果 X/Y 滑架能够移动到床外,则可以在下面指定更大的范围。
// The size of the printable area
#define X_BED_SIZE 200
#define Y_BED_SIZE 200