3D打印机固件 marlin_2.0.X 中文翻译 配置详解

2022-10-04 16:12:33 浏览数 (2)

基于对应机型的配置文件,结合官方文档食用。如果出现翻译错误,官方文档为主,我才不负责人:),然而官方文档也是写得挺乱的

文件配置的内容非常多,新手可能会遇到不知道哪些功能需要启用,不建议全部看完。而文中的一些参考视频都需要访问国外网站

开始前你需要知道的一些事情,这些事情在配置过程中并不会都排上用场,但知道有助于你配置并优化打印机

  • 框架结构类
    • 各个机械配件的详细信息,比如同步轮的直径、丝杆的螺距、并联臂两孔中心距
    • 机器的架构,在config/examples选择对应机器架构的配置文件,这样会节省大量时间,如果目录没有就下载
    • 挤出机数量和挤出方式
    • End Stop 的位置 (XYZ轴电机的起点或终点)
  • 电子电路类
    • 驱动打印机的控制板型号,比如 RAMPS
    • 步进电机驱动器详细信息,比如驱动电流,最小微步
    • 步进电机的详细参数,比如步距角、最大电流
    • 热敏电阻型号 (探测热端/热床的温度)
    • 液晶显示屏的型号
    • 探针信息

配置文件有两个

Configuration.h 包含硬件核心、语言和控制器的设置,以及最常见的功能和组件的设置,主要配置的地方。

Configuration_adv.h 提供更详细的自定义选项,附加组件,实验功能和其他功能。

以下配置以 kossel(delta) Arduino Mega2560 Ramps 1.4 作为示例

目录

[TOC]

Configuration 文件

版本控制

代码语言:javascript复制
#define CONFIGURATION_H_VERSION 020004

固件基本信息

代码语言:javascript复制
#define STRING_CONFIG_H_AUTHOR "(none, default config)"
#define SHOW_BOOTSCREEN
#define SHOW_CUSTOM_BOOTSCREEN
#define CUSTOM_STATUS_SCREEN_IMAGE
  • 作者和固件的信息,这些信息会在 Marlin 启动时、连接终端、重启和执行 M115 时显示,可以用于区分不同配置文件的版本
  • 定义它可以在打印机启动时,开机画面会显示在 LCD 上
  • 定义它可以使用自定义的启动画面,编译时会自动寻找Marlin/_Bootscreen.h位图文件
  • 定义它可以使用自定义的状态画面,编译时会自动寻找Marlin/_Statusscreen.h位图文件

硬件基本信息

串行端口

串行端口的配置选项,暂时不知道怎样使用

代码语言:javascript复制
#define SERIAL_PORT 0
#define SERIAL_PORT_2 -1

波特率与蓝牙

代码语言:javascript复制
#define BAUDRATE 115200
#define BLUETOOTH
  • 波特率设置,使用电脑或其他终端连接时需要用到
  • 启动蓝牙功能,比如说基于 AT90USB

控制板

代码语言:javascript复制
#define MOTHERBOARD BOARD_RAMPS_14_EFB

这是最重要的设置,Marlin 需要知道它运行在什么控制板上,这个设置会影响功能分配到那个引脚上,错误配置将导致不可预测的后果。

Marlinsrccoreboards.h找到你控制板的型号,用它的 ID 替换实例代码里的BOARD_RAMPS_14_EFB(define 的名字也行)。你可能发现你的开发板型号有好几个 ID,你可以参考

代码后面跟着的注释去选择正确的 ID。 例如:

代码语言:javascript复制
#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)

这个是 RAMPS 1.4 相关的 ID 号,可以看到后面注释把不同的功能分配到 Power out 上,比如说 1020 的功能有一个挤出头,一把吹件风扇,一个热床,而 1021 是有两个挤出头,一个热床,没有吹件风扇。

打印机命名

定义打印机的名称,名称将会出现在 LCD 屏幕上和 M115

代码语言:javascript复制
#define CUSTOM_MACHINE_NAME "3D Printer"

打印机 UUID

设置 UUID,有些软件可以用 UUID 区分不同的打印机,你可以通过 UUIDTools 获取随机生成的 UUID

代码语言:javascript复制
#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"

挤出基本信息

挤出机数量

代码语言:javascript复制
#define EXTRUDERS 1

这里可以定义 0 - 6 个挤出机 (官方网站是 0 - 6 个,配置文件的注释是 1 - 8 个,哪个新用哪个,并且这里算的不是喷头数量),如果不是单喷头单挤出机的情况,将在下面详细定义,但这里也需要设置挤出机的数量

细丝直径

代码语言:javascript复制
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

这里定义的直径是耗材上标注的直径,如果它标注 1.75,但实际测量是 1.70,这里也填 1.75

> This value is used by Marlin to compensate for Filament Width when printing in volumetric mode (See M200), and by the Unified Bed Leveling command G26 when printing a test grid.

(参考机翻) 当打印机在容积模式 (详见 M200) 和使用统一床平整命令 (G26) 打印测试网格时,Marlin 会使用这个值补偿细丝宽度,你可以使用M404 W修改此值

你可以使用 M404 W修改此值

多路材料挤出

如果你的机器是支持多路耗材挤出的,这里有相关的配置,如果你只有单喷头单挤出,你可以直接跳过这段配置

单喷头多挤出
代码语言:javascript复制
#define SINGLENOZZLE

如果你是使用 E3D Cyclops 或其他类似的多路材料喷头复用套件 (科普连接),你需要启用这个选项

代码语言:javascript复制
#define MK2_MULTIPLEXER
#if ENABLED(MK2_MULTIPLEXER)
  //#define E_MUX0_PIN 40  // Always Required
  //#define E_MUX1_PIN 42  // Needed for 3 to 8 inputs
  //#define E_MUX2_PIN 44  // Needed for 5 to 8 inputs
#endif

有些控制板支持一个步进电机驱动器驱动 2 - 8 个步进电机,支持多路挤出,你可以启用MK2_MULTIPLEXER,并配置E_MUX0_PINE_MUX1_PINE_MUX2_PIN,这些配置会覆盖默认的 DIO 选择器的引脚设置。有些机型的配置文件可能已经配置好相关的引脚

Prusa MMU2 挤出装置
代码语言:javascript复制
#define PRUSA_MMU2

Prusa MMU2 的挤出套件 (科普连接),前提你的控制板有一个空闲的串口,你还需要设置一些东西:

  • 启用 NOZZLE_PARK_FEATURE
  • 设置 EXTRUDERS = 5

详细设置可以在Configuration_adv.h找到

单喷头单挤出机
代码语言:javascript复制
#define SWITCHING_EXTRUDER
#if ENABLED(SWITCHING_EXTRUDER)
  #define SWITCHING_EXTRUDER_SERVO_NR 0
  #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]
  #if EXTRUDERS > 3
    #define SWITCHING_EXTRUDER_E23_SERVO_NR 1
  #endif
#endif

如果你使用的是单喷头单挤出机套件 (参考装置),你需要配置在这里配置套件相关的参数

双喷头双挤出电机切换装置
代码语言:javascript复制
#define SWITCHING_NOZZLE
#if ENABLED(SWITCHING_NOZZLE)
  #define SWITCHING_NOZZLE_SERVO_NR 0
  //#define SWITCHING_NOZZLE_E1_SERVO_NR 1          // If two servos are used, the index of the second
  #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 }   // Angles for E0, E1 (single servo) or lowered/raised (dual servo)
#endif

如果你使用两套独立挤出套件并可以使用电机切换 (参考装置 0:05-0:12),你需要在这里依照实际情况配置相关参数

X轴独立支架喷头选择装置

如果你的喷头都不是直接被 X 轴电机所驱动,而是通过独立支架连接喷头间接驱动 (参考装置),你需要启用这个功能,下面是三个不同的连接方式,根据实际情况选择一个即可

代码语言:javascript复制
#define PARKING_EXTRUDER
#define MAGNETIC_PARKING_EXTRUDER
  • 使用电磁的启用PARKING_EXTRUDER
  • 使用磁铁的启用MAGNETIC_PARKING_EXTRUDER

,而独立支架使用电磁连接不同喷头 ,你需要启用这个功能,并且需要配置SOL1_PINSOL2_PIN

喷头对接交换装置

如果你是 E3D Tool Changer 或者类似的喷头切换方案 (科普视频),你需要启用这个功能,下面是三个不同的对接方式,根据实际情况选择一个即可

代码语言:javascript复制
#define SWITCHING_TOOLHEAD
#define MAGNETIC_SWITCHING_TOOLHEAD
#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD
  • 使用伺服器 (科普视频就是使用伺服器的连接方式) 的启用SWITCHING_TOOLHEAD
  • 使用磁铁的启用MAGNETIC_SWITCHING_TOOLHEAD
  • 使用电磁的启用 (科普视频)Electromagnetic

详细配置如下,根据实际情况配置

代码语言:javascript复制
#if ANY(SWITCHING_TOOLHEAD, MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
  #define SWITCHING_TOOLHEAD_Y_POS          235         // (mm) Y position of the toolhead dock
  #define SWITCHING_TOOLHEAD_Y_SECURITY      10         // (mm) Security distance Y axis
  #define SWITCHING_TOOLHEAD_Y_CLEAR         60         // (mm) Minimum distance from dock for unobstructed X axis
  #define SWITCHING_TOOLHEAD_X_POS          { 215, 0 }  // (mm) X positions for parking the extruders
  #if ENABLED(SWITCHING_TOOLHEAD)
    #define SWITCHING_TOOLHEAD_SERVO_NR       2         // Index of the servo connector
    #define SWITCHING_TOOLHEAD_SERVO_ANGLES { 0, 180 }  // (degrees) Angles for Lock, Unlock
  #elif ENABLED(MAGNETIC_SWITCHING_TOOLHEAD)
    #define SWITCHING_TOOLHEAD_Y_RELEASE      5         // (mm) Security distance Y axis
    #define SWITCHING_TOOLHEAD_X_SECURITY   { 90, 150 } // (mm) Security distance X axis (T0,T1)
    //#define PRIME_BEFORE_REMOVE                       // Prime the nozzle before release from the dock
    #if ENABLED(PRIME_BEFORE_REMOVE)
      #define SWITCHING_TOOLHEAD_PRIME_MM           20  // (mm)   Extruder prime length
      #define SWITCHING_TOOLHEAD_RETRACT_MM         10  // (mm)   Retract after priming length
      #define SWITCHING_TOOLHEAD_PRIME_FEEDRATE    300  // (mm/m) Extruder prime feedrate
      #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400  // (mm/m) Extruder retract feedrate
    #endif
  #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
    #define SWITCHING_TOOLHEAD_Z_HOP          2         // (mm) Z raise for switching
  #endif
#endif
单喷头混合挤出

使用两个或以上的挤出机将耗材同时驱动到混合仓,然后从单个喷头挤出混合丝,你需要配置这块代码

代码语言:javascript复制
#define MIXING_EXTRUDER
#if ENABLED(MIXING_EXTRUDER)
  #define MIXING_STEPPERS 2        // Number of steppers in your mixing extruder
  #define MIXING_VIRTUAL_TOOLS 16  // Use the Virtual Tool method with [`M163`](/docs/gcode/M163.html) and [`M164`](/docs/gcode/M164.html)
  //#define DIRECT_MIXING_IN_G1    // Allow ABCDHI mix factors in [`G1`](/docs/gcode/G000-G001.html) movement commands
#endif

这个选项会增加使用 T 指令设置 (M163)、保存 (M164) 和读取 (M165) 混合物的功能

> The extruder still uses a single E axis, while the current mixture is used to determine the proportion of each filament to use. An “experimental” G1 direct mixing option is included.

(机翻参考) 挤出机仍使用单个 E 轴,而当前混合物用于确定要使用的每根长丝的比例。包含“实验性” G1直接混合选项。

喷头偏移

代码语言:javascript复制
//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle
//#define HOTEND_OFFSET_Y { 0.0, 5.00 }  // (mm) relative Y-offset for each nozzle
//#define HOTEND_OFFSET_Z { 0.0, 0.00 }  // (mm) relative Z-offset for each nozzle

如果你有两个或以上的喷头,你需要配置这部分代码,值表示第 N - 1 个喷头与第一个喷头 (0, 0, 0) 的偏移值,有多少个就写多少个

电源设定

如果你使用双电源,例如加热器独立一个电源,为了省电有时候会关闭电源,你需要配置这块代码

代码语言:javascript复制
#define PSU_CONTROL
#define PSU_NAME "Power Supply"

#if ENABLED(PSU_CONTROL)
  #define PSU_ACTIVE_HIGH false // Set 'false' for ATX (1), 'true' for X-Box (2)

  //#define PS_DEFAULT_OFF      // Keep power off until enabled directly with M80

  //#define AUTO_POWER_CONTROL  // Enable automatic control of the PS_ON pin
  #if ENABLED(AUTO_POWER_CONTROL)
    #define AUTO_POWER_FANS           // Turn on PSU if fans need power
    #define AUTO_POWER_E_FANS
    #define AUTO_POWER_CONTROLLERFAN
    #define AUTO_POWER_CHAMBER_FAN
    //#define AUTO_POWER_E_TEMP        50 // (°C) Turn on PSU over this temperature
    //#define AUTO_POWER_CHAMBER_TEMP  30 // (°C) Turn on PSU over this temperature
    #define POWER_TIMEOUT 30
  #endif
#endif

PS_DEFAULT_OFF允许控制板使用M80M81打开和关闭电源 12v。需要配置PS_ON_PIN

温度控制设定

温度传感器类型

代码语言:javascript复制
#define TEMP_SENSOR_0 1
#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_BED 0
#define TEMP_SENSOR_CHAMBER 0

温度传感器是 3D 打印机的重要部分,选择正确的温度传感器型号能让机器更加精准的控制温度

Configuration.h中,这部分选项的上方有型号对照表,这里需要根据你的温度传感器的型号选择正确的参数并填入,如果你找不到匹配的参数,你就选择同品牌相近的,或者使用100k thermistor - best choice for EPCOS 100k (4.7k pullup),也就是 1 ,但是准度就不确定了。0表示未使用

淘宝购买的 NTC/3950/100K 大部分都可以选择1

代码语言:javascript复制
// Dummy thermistor constant temperature readings, for use with 998 and 999
#define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_999_VALUE 100

> Marlin provides two dummy sensors for testing purposes. Set their constant temperature readings here.

(机翻参考) 固件本身提供两个指令用于测试温度虚拟传感器,在这里设置恒定温度、

代码语言:javascript复制
#define TEMP_SENSOR_1_AS_REDUNDANT
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10

启用这个选项可以把 传感器1 用作 传感器2 的冗余传感器,这样可以防止传感器出现故障,如果两个传感器的温差超过MAX_REDUNDANT_TEMP_SENSOR_DIFF所设定的数值,机器将会中断打印并停止加热

温度稳定设定

代码语言:javascript复制
#define TEMP_RESIDENCY_TIME 10  // (seconds)
#define TEMP_HYSTERESIS 3       // (degC) range of  /- temperatures considered "close" to the target one
#define TEMP_WINDOW 1           // (degC) Window around target to start the residency timer x degC early.

这是配置热端稳定温度的条件

  • 在未加热完成的情况下,挤出机开始工作将有可能损坏装置,等待温度稳定TEMP_RESIDENCY_TIME所设定的时间 (秒),加热成功指令 (M109) 后,挤出机才能开始工作
  • TEMP_HYSTERESIS指稳定期间能接受温度的浮动幅度,单位是摄氏度
  • TEMP_WINDOW貌似是设定进入窗口开始计时的条件,具体看注释
代码语言:javascript复制
#define TEMP_BED_RESIDENCY_TIME 10  // (seconds)
#define TEMP_BED_HYSTERESIS 3       // (degC) range of  /- temperatures considered "close" to the target one
#define TEMP_BED_WINDOW 1           // (degC) Window around target to start the residency timer x degC early.

这是热床配置,同上

代码语言:javascript复制
#define TEMP_CHAMBER_HYSTERESIS  3  // (°C) Temperature proximity considered "close enough" to the target

设置温度可以距目标多少,仍然可以认为通过

温度范围

代码语言:javascript复制
#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 BED_MINTEMP 5

这里设置温度传感器的最低温度。这些参数有助于防止温度传感器出现故障而导致打印机过热和着火。

如果任何一个温度传感器的温度低于设定的最低温度或者出现断路,打印机将会被关闭并显示MINTEMP错误

代码语言:javascript复制
#define HEATER_0_MAXTEMP 285
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define BED_MAXTEMP 130

这里设置温度传感器的最高温度。如果实际温度高于这些值,出于安全原因,打印机将立即关闭。对于E3D V6热端,可以使用285作为最大值。

如果任何一个温度传感器的温度高于设定的最高温度或者出现短路,打印机将会被关闭并显示MAXTEMP错误

PID

温度控制使用 PID (Proportional, Integral, Derivative) 方式 (Wikipedia),正确精准的 PID 值能稳定的控制温度,减少浮动,而且能防止加热阶段温度上升过快而损坏热端。

使用 M303 指令会自动测试,并返回正确的PID参数,具体参考RepRap。每次更新/更换电路相关的元件时都推荐调整 PID 值。热端的 PID 可以使用M301LDC设置,热床的 PID 可以使用M304设置

热端
代码语言:javascript复制
#define PIDTEMP
#define BANG_MAX 255     // limits current to nozzle while in bang-bang mode; 255=full current
#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define K1 0.95

启用PIDTEMP使热端使用 PID 进行温度控制,而禁用会使热端进入 bang-bang 模式 (加热只有开与关),在大多数情况下推荐启用 PID,有着保持稳定温度更好的效果

代码语言:javascript复制
#if ENABLED(PIDTEMP)
  //#define PID_EDIT_MENU
  //#define PID_AUTOTUNE_MENU
  //#define PID_DEBUG
  //#define PID_OPENLOOP 1
  //#define SLOW_PWM_HEATERS
  //#define PID_PARAMS_PER_HOTEND
  #define PID_FUNCTIONAL_RANGE 10

启用PID_AUTOTUNE_MENU可以在 LCD 上添加一个选项,能运行自动调谐周期 (运算 PID ) 并自动应用结果。如果您有多个挤出机,并且它们是不同的型号,则启用 PID_PARAMS_PER_HOTEND

代码语言:javascript复制
// Ultimaker
  #define  DEFAULT_Kp 22.2
  #define  DEFAULT_Ki 1.08
  #define  DEFAULT_Kd 114

  // MakerGear
  //#define  DEFAULT_Kp 7.0
  //#define  DEFAULT_Ki 0.1
  //#define  DEFAULT_Kd 12

  // Mendel Parts V9 on 12V
  //#define  DEFAULT_Kp 63.0
  //#define  DEFAULT_Ki 2.25
  //#define  DEFAULT_Kd 440

这些是只是示例参数,纯粹占个位,M303指令的结果比这些更加精准,如果是新的机器,推荐先写入这些默认参数,测试获得精准的参数后,修改并再次烧写

热床
代码语言:javascript复制
//#define PIDTEMPBED

如果你的热床支持 PWM,启用PIDTEMPBED使热床使用 PID 进行温度控制 (与驱动挤出机的 PWM 频率相同)。使用默认的 PID_dT 时,PWM 频率为 7.689Hz,非常适合将方波驱动到阻性负载中,而不会对 FET 发热产生重大影响。

如果您的配置与此配置有很大不同,并且您不了解所涉及的问题,则在确认您的硬件可以正常工作之前,您可能不应该使用床位 PID。使用M303 E-1调节该选项的床 PID。

代码语言:javascript复制
//#define BED_LIMIT_SWITCHING

启用BED_LIMIT_SWITCHING

代码语言:javascript复制
//#define MAX_BED_POWER 255

热床的最大功率。各种模式的温度控制 (PID, bang-bang, bang-bang with hysteresis) 都应遵守此要求。如果使用 255 以外的任何值会启用 PWM 模式。与PIDTEMPBED一样,除非您的热床可以使用 PWM,否则不要启用此功能。

代码语言:javascript复制
#if ENABLED(PIDTEMPBED)

  //#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 10.00
  #define  DEFAULT_bedKi .023
  #define  DEFAULT_bedKd 305.4

  //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

与热端的配置方式一样,而指令使用M303 E-1

安全相关

禁止冷挤出
代码语言:javascript复制
#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170

温度没有达到让耗材软化,这种阶段开始挤出会损坏机器。启用PREVENT_COLD_EXTRUSION,热端的温度低于EXTRUDE_MINTEMP所设定的值,将禁止挤出。M302可以修改这个值

禁止长挤出
代码语言:javascript复制
#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 200

长时间挤出可能不会损坏机器,但可能会浪费大量的耗材。PREVENT_LENGTHY_EXTRUDE主要防止 G1 命令中手滑打错字设定的值过大。对于 Bowden 设置,最大长度应设置为大于或等于 load/eject 长度

温度保护
代码语言:javascript复制
#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

温度保护避免温度过高时损坏机器或者发生无法挽救的事故。比如热敏电阻在打印过程中有可能会松动,Marlin 读取的温度很低,因此可以继续加热,只要温度读数较低,热端就会不停地加热,从而导致冒烟,渗水,打印件损坏甚至起火。

Marlin 提供两段的热保护

  1. 打开加热器时,检查温度实际上是否在升高。如果温度在特定时间段内 (默认情况下为20秒内升高2度) 未能充分升高,则打印机将关闭并显示 “Heating failed” (加热失败) 错误。这需要排查热敏电阻是否有断开、松动或配置错误,或者加热棒是否断开。
  2. 监视热稳定性。如果测得的温度偏离目标温度的时间过长,则打印机将关闭并显示 “Thermal runaway” (热失控) 错误。这种情况需要检查热敏电阻和热端之间是否接触不良,PID 参数不正确或环境温度不利于打印机工作。更多热保护选项在Configuration_adv.h中。大多数情况,这些值可以保留不变,但应根据实际情况进行调整,防止误报。

运动系统

Marlin 支持四种运动系统 (科普视频):Cartesian,Core (H-Bot),Delta 和 SCARA。

Cartesian 是最简单的运动系统,每个步进器应用到轴上。

CoreXY 使用特殊的皮带布局来进行 XY 运动,需要一些额外的数学运算 (科普视频)。

Delta 使用三个垂直的滑块运动转换为 XYZ 运动,该运动通过并联臂固定在滑架上的 “效应器” 中。

SCARA 使用两个角关节在 XY 平面中移动手臂。

代码语言:javascript复制
//#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
//#define COREZX
//#define COREZY

镜像翻转

Delta特殊设置

这项设置是针对 Delta 运动系统的特殊设置,需要做大量的坐标转换的运算,这部分对 Delta 的精度影响是最大的,一些尺寸的数值需要完美的精确。官方文档貌似没有提及?下面将会参考配置文件的注释进行配置

代码语言:javascript复制
#define DELTA

最基本的启动 Delta 设置的选项

代码语言:javascript复制
#define DELTA_SEGMENTS_PER_SECOND 200

由于 Delta 运算量大,有时候 MPU 忙于计算坐标,没有其他算力去运算 LCD 的显示,比如12864 的 LCD,使用起来会有卡顿现象,你需要调低这个值的参数

代码语言:javascript复制
//#define DELTA_HOME_TO_SAFE_ZONE

启用这个功能,Delta 归零触碰限位器后,效应器将会下降到 XY 移动限制的范围内。但有些情况不能启用这个功能,打印机打印完成后一般都会自动归零,但如果打印比较高的模型,归零的下降将有可能会撞上模型,轻则损坏模型,重则损坏打印机。如果你存在这些问题,请不要启用这个功能

代码语言:javascript复制
#define DELTA_CALIBRATION_MENU

启用这项可以在菜单添加三点调平的功能,具体看参考

代码语言:javascript复制
#define DELTA_AUTO_CALIBRATION
#if ENABLED(DELTA_AUTO_CALIBRATION)
    #define DELTA_CALIBRATION_DEFAULT_POINTS 4
#endif
#if EITHER(DELTA_AUTO_CALIBRATION, DELTA_CALIBRATION_MENU)
    #define PROBE_MANUALLY_STEP 0.05      // (mm)
#endif
  • DELTA_AUTO_CALIBRATION添加 G33 自动调平,这个调平的结果将存储在 EEPROM 中,刷新固件不会影响这个值
  • DELTA_CALIBRATION_DEFAULT_POINTS则是探测点的数量
  • PROBE_MANUALLY_STEP是下探过程的速度,单位是mm

接下来的几个选项是重中之重,避免翻译或解释出错,会保留原文

参数都是浮点数,需要保留小数点,即使小数点后是 0

先放一张图上来

代码语言:javascript复制
#define DELTA_PRINTABLE_RADIUS 90.0

> Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).

Delta 的打印面一般是圆形,这里设置的是安全区域,参数是安全区域的半径,一般因为用料或者其他原因,打印机会有一些喷头没办法移动到的死角位,需要从打印面的半径减去这些死角的位置。如果设置不好,迎来的是严重的后果,比如并联臂断裂。单位是mm

代码语言:javascript复制
#define DELTA_DIAGONAL_ROD 215.0

> Center-to-center distance of the holes in the diagonal push rods.

这个是并联臂两边中孔的中心距,具体测量位置看上图同名的位置

代码语言:javascript复制
#define DELTA_HEIGHT 250.00

> Distance between bed and nozzle Z home position

这个是归零后喷嘴和热床之间的距离,这个值可以被 G33 自动调平修改

代码语言:javascript复制
define DELTA_ENDSTOP_ADJ {0.0,0.0,0.0}

这个应该是限位器的偏移量,一开始可以都设,这个值可以被 G33 自动调平修改

代码语言:javascript复制
#define DELTA_RADIUS 105.2

> Horizontal distance bridged by diagonal push rods when effector is centered.

这个是效应器居中时,并联臂连接效应器的中心,到并联臂连接滑车的中心的水平距离,具体测量位置看上图同名的位置,这个值可以被 G33 自动调平修改

代码语言:javascript复制
#define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 }

> Trim adjustments for individual towers > > tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0 > > measured in degrees anticlockwise looking from above the printer

有些情况 X Y Z 塔所面向的方向并不会交汇与一点,也就是三个塔所组成的三角形并不是等边三角形,即使淘宝买的注塑/金属的角件,安装有一定的虚位,这些虚位是为了更容易装上,但安装后会出现偏移的情况。

这里可以从软件层面调整三个塔的角度,这个值可以被 G33 自动调平修改

代码语言:javascript复制
#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }

> Delta radius and diagonal rod adjustments

Delta 的半径和并联臂的调整,官方默认配置文件这两行是注释的,具体作用也没有太多说明

> 我想说说手动调平和自动调平的利弊 > > 国内的一些 3d 打印机的固件都停留在 Marlin 1 的时代,而现在已经更新换代很久了。Marlin 1.x 的时候,Delta 的调平问题一直都是非常困难,上图中需要测量的项目都是 1.x 版本需要填入的参数,看图好像挺容易测,实际太多干扰因素,要拿到绝对精准的数值,很难丝毫不差。 > > 而现在的 2.x,Marlin 尽可能想到各种可能影响精度的因素,其他可以运算的都自己运算,可以说进步非常大,而且上面的参数很多都可以通过 G33 修改,可以逆向运算出差值,门槛已经非常的低。 > > 但是,软件处理机械上的偏差有限,有些情况还是不能处理,比如说热床相对三个塔不垂直,这种情况怎么调,打印出来的成品都是歪的,所以,机械上能精准的尽可能精准,剩下的交给软件吧

限位器

代码语言:javascript复制
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

指定每个轴的限位器是这个轴的最大值还是最小值。大多数打印机三个都是最小值,但 Delta 都使用最大值。探头可以共享 Z min 插头,也可以使用一个或多个额外的连接器

代码语言:javascript复制
#define ENDSTOPPULLUPS

#if DISABLED(ENDSTOPPULLUPS)
  // Disable ENDSTOPPULLUPS to set pullups individually
  //#define ENDSTOPPULLUP_XMAX
  //#define ENDSTOPPULLUP_YMAX
  //#define ENDSTOPPULLUP_ZMAX
  //#define ENDSTOPPULLUP_XMIN
  //#define ENDSTOPPULLUP_YMIN
  //#define ENDSTOPPULLUP_ZMIN
  //#define ENDSTOPPULLUP_ZMIN_PROBE
#endif

默认所有限位器都上拉电阻,以防止浮动,如果要单独对每个限位器配置,可以禁用ENDSTOPPULLUPS,然后单独配置

代码语言:javascript复制
//#define ENDSTOPPULLDOWNS

#if DISABLED(ENDSTOPPULLDOWNS)
  // Disable ENDSTOPPULLDOWNS to set pulldowns individually
  //#define ENDSTOPPULLDOWN_XMAX
  //#define ENDSTOPPULLDOWN_YMAX
  //#define ENDSTOPPULLDOWN_ZMAX
  //#define ENDSTOPPULLDOWN_XMIN
  //#define ENDSTOPPULLDOWN_YMIN
  //#define ENDSTOPPULLDOWN_ZMIN
  //#define ENDSTOPPULLDOWN_ZMIN_PROBE
#endif

默认所有限位器都不下拉电阻,配置方式上

代码语言:javascript复制
// 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 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 Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.

不同的限位器型号,会产生不同的型号,有些闭合时会发出高电平,有些会发出低电平,如果你使用M119测试时发现检测与现实相反了,你激活其中某个限位器以相反信号

代码语言:javascript复制
//#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 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

这里选择步进电机驱动器的型号,并开启某些步进电机驱动器的高级选项。您也可以在Configuration_adv.h中覆盖计时选项。默认情况下使用 A4988

代码语言:javascript复制
#define ENDSTOP_INTERRUPTS_FEATURE

如果你的限位器有中断功能,你可以在这里开启,这样不需要 CPU 去轮询,节省周期

代码语言:javascript复制
#define ENDSTOP_NOISE_FEATURE

如果你的限位器被某些不应该出现的因素干扰而触发,你可以启用这项功能

步进电机驱动

自定义挤出机参数

代码语言:javascript复制
//#define DISTINCT_E_FACTORS

如果你有多个挤出机,而每个挤出机的步进数都不一样,你可以启用这一项,在接下来指定设置,如果挤出机数量大于设置的数量,最后一个数值将会应用于剩下的挤出机

步进电机每毫米步数

代码语言:javascript复制
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 4000, 500 }

这个是打印机精度的关键参数,这里设置的是每毫米,步进电机需要走多少步,可以使用 M92 覆盖这些值。你可以使用Prusa Calculator来获得数值

也有这样设置的

代码语言:javascript复制
// variables to calculate steps
#define XYZ_FULL_STEPS_PER_ROTATION 200
#define XYZ_MICROSTEPS 16
#define XYZ_BELT_PITCH 2
#define XYZ_PULLEY_TEETH 20

// delta speeds must be the same on xyz
#define DEFAULT_XYZ_STEPS_PER_UNIT ((XYZ_FULL_STEPS_PER_ROTATION) * (XYZ_MICROSTEPS) / double(XYZ_BELT_PITCH) / double(XYZ_PULLEY_TEETH))
#define DEFAULT_AXIS_STEPS_PER_UNIT   { DEFAULT_XYZ_STEPS_PER_UNIT, DEFAULT_XYZ_STEPS_PER_UNIT, DEFAULT_XYZ_STEPS_PER_UNIT, 700 }  // default steps per unit for Kossel (GT2, 20 tooth)

这种设置方式不需要使用计算器,只需要输入XYZ_FULL_STEPS_PER_ROTATIONXYZ_MICROSTEPSXYZ_BELT_PITCHXYZ_PULLEY_TEETH即可

不过还是要注意挤出机 E 的参数总是与 XYZ 不一样,这里提供两种测量方式

E_{step} = frac{360°}{angle×microstep×C}

C 为送丝轮周长,angle 为步进电机的步进角度,microstep 为微步

  • 不急还没写

步进电机最高速度

代码语言:javascript复制
#define DEFAULT_MAX_FEEDRATE { 500, 500, 2.25, 45 }

步进电机的最高速度,单位是 mm/s,可以使用 M203 修改

最大加速度

代码语言:javascript复制
#define DEFAULT_MAX_ACCELERATION      { 3000, 3000, 100, 10000 }

默认最大加速度,单位是 mm/s,可以使用 M201 修改

默认加速度

代码语言:javascript复制
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

进一步限制加速度,并可以细分打印,缩进,空运的加速度,可以通过 M204 修改

结点偏差

代码语言:javascript复制
//#define JUNCTION_DEVIATION
#if ENABLED(JUNCTION_DEVIATION)
  #define JUNCTION_DEVIATION_MM 0.02  // (mm) Distance from real junction edge
#endif

> Use Junction Deviation instead of traditional Jerk Limiting. Jerk settings is overriden with Junction Deviation.

(机翻参考) 使用 “结点偏差” 而不是传统的 “抖动限制”。急动设置会被 “交界偏差” 所覆盖。

加速抖动

代码语言:javascript复制
#define DEFAULT_XJERK                 20.0
#define DEFAULT_YJERK                 20.0
#define DEFAULT_ZJERK                  0.4
#define DEFAULT_EJERK                  5.0

这个是步进电机从静止瞬间加速能达到最大的值。有时候打印路径曲折,不断的弯曲,如果快速达到最高速度,所产生的力非常大,对电机负载大,有时候还会“飘”过头,丝会产生偏移。这里一般参考默认即可。可以使用 M205 修改

S 曲线加速

代码语言:javascript复制
#define S_CURVE_ACCELERATION

使用 S 函数平滑加速曲线

Z 探针

代码语言:javascript复制
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

如果你的探针是连接到 Z MIN 所在的引脚,请在所有情况下使用此选项。Delta 的限位器终点始终是 MAX 的位置,所以 Delta 也需要启用这项。

您可以使用此选项配置没有 Z 终点的打印机。在这种情况下,探针将用于 Z 轴归零,并且您将需要启用 Z_SAFE_HOMING 以确保在 Z 轴归零时将探针放置在床上方 (在 X 和 Y 之后执行) 。

代码语言:javascript复制
//#define Z_MIN_PROBE_PIN 32

如果您已将探针连接到除 Z MIN 之外的其他引脚,请使用此选项。启用此选项后,默认情况下,Marlin 将引脚文件中指定的 Z_MIN_PROBE_PIN (通常是 X 或 Z MAX,因为最有可能不使用它们) 。如果需要使用其他引脚,请在Configuration.h中为 Z_MIN_PROBE_PIN 自定义引脚号。

探头类型

探头一般指自动调平传感器,Marlin 支持大量使用探头的方式

无使用
代码语言:javascript复制
//#define PROBE_MANUALLY
//#define MANUAL_PROBE_START_Z 0.2

如果你没有探头,你还是可以通过启用此选项

使用床平整 AUTO_BED_LEVELING_ *,通过 PROBE_MANUALLY,G29 命令仅将喷嘴移动到下一个暂停的探针点。用一张纸调节Z高度,,让纸刚好通过喷嘴而不被喷嘴压死,然后再次发送G29以继续下一个点。

通过 PROBE_MANUALLYG29 命令仅将喷嘴移动到下一个暂停的探针点。用一张纸调节Z高度,,让纸刚好通过喷嘴而不被喷嘴压死,然后再次发送G29以继续下一个点。

您还可以启用LCD_BED_LEVELING来向 LCD 添加 “Level Bed” 菜单项,以进行完全交互式的水平调节。MANUAL_PROBE_START_Z设置手动探测期间打印机最初移动到每个点后开始的高度。禁用此功能后,打印机将移动到第一个探测点的 Z0,然后每个连续的探测点将使用其前面的探测点的高度。

固定式
代码语言:javascript复制
#define FIX_MOUNTED_PROBE

此选项适用于任何已固定就位的探头,无需部署或存放。

舵机驱动式
代码语言:javascript复制
//#define Z_PROBE_SERVO_NR 0       // Defaults to SERVO 0 connector.
//#define Z_SERVO_ANGLES { 70, 0 } // Z Servo Deploy and Stow angles

如果你的探头可以使用舵机部署和回收, 你要指定一个舵机和设置部署和回收的角度。使用M280查找最佳的Z_SERVO_ANGLES值。

BLTouch
代码语言:javascript复制
//#define BLTOUCH

ANTCLABS BLTouch 探头使用定制电路和一块磁铁来升高和降低充当测头的金属引脚。BLTouch 使用舵机驱动,并使用特定的角度进行控制。启用此选项后,其他所需的设置会自动进行配置 (例如,无需设置角度) 。

TOUCH MI
代码语言:javascript复制
//#define TOUCH_MI_PROBE
#if ENABLED(TOUCH_MI_PROBE)
  #define TOUCH_MI_RETRACT_Z 0.5                  // Height at which the probe retracts
  //#define TOUCH_MI_DEPLOY_XPOS (X_MAX_BED   2)  // For a magnet on the right side of the bed
  //#define TOUCH_MI_MANUAL_DEPLOY                // For manual deploy (LCD menu)
#endif

hotends.fr 的 Touch-MI Probe 是个巧妙的装置,通过将 X 轴移动到床边缘的磁铁上来部署并激活。默认情况下,假定磁铁位于左侧并由房屋激活。如果磁铁在右侧,则启用并将 TOUCH_MI_DEPLOY_XPOS 设置为展开位置。另外,还需要以下选项:BABYSTEPPINGBABYSTEP_ZPROBE_OFFSETZ_SAFE_HOMING,以及至少 Z_HOMING_HEIGHT10的高度。

电磁式
代码语言:javascript复制
//#define SOLENOID_PROBE

使用电磁 (定义为 SOL1_PIN) 的探针。

分离式
代码语言:javascript复制
//#define Z_PROBE_SLED
//#define SLED_DOCKING_OFFSET 5

此类探针安装在 X 轴远端的可拆卸 “底座” 上。探测之前,X 滑架移至远端并拿起探针。探测完成后,它将放下探针。SLED_DOCKING_OFFSET 指定 X 轴必须移动的额外距离才能拾取探针。0 是非常完美,实际情况可能需要进一步推进。

机械式
代码语言:javascript复制
//#define RACK_AND_PINION_PROBE
#if ENABLED(RACK_AND_PINION_PROBE)
  #define Z_PROBE_DEPLOY_X  X_MIN_POS
  #define Z_PROBE_RETRACT_X X_MAX_POS
#endif

使用类似 Marty Rice 设计的 Wilson II 机械式探针可以使用此项

内六角扳手式
代码语言:javascript复制
//#define Z_PROBE_ALLEN_KEY

可伸缩的 Z 型探针,使用六角扳手作为探针。具体查看 RepRap。它通过紧靠 z 轴皮带展开,并通过向下推动探针使其缩回。更多信息将包含在即将发布的 Delta 配置页面中。 (都 2.0 了还没写官方文档

探头偏移

代码语言:javascript复制
#define X_PROBE_OFFSET_FROM_EXTRUDER 10  // X offset: -left   right  [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 10  // Y offset: -front  behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0   // Z offset: -below  above  [the nozzle]

探头探测点与喷嘴尖端的相对坐标,具体怎样配置可以参考注释。可以用 M851 Z 或 LCD 覆盖 Z 轴上的偏移,这些偏移量可以通过 M500 保存到 EEPROM

距边缘的距离

代码语言:javascript复制
#define MIN_PROBE_EDGE 10

某些探针需要防止撞到边缘

探测速度

代码语言:javascript复制
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000

// Feedrate (mm/m) for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z

// Feedrate (mm/m) for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)

探测越快越好,但应调整 Z 轴速度以获得最准确的数据。取决于探头,可能需要较低的 Z 探测速度才能获得准确的结果

多个探针

代码语言:javascript复制
//#define MULTIPLE_PROBING 2
//#define EXTRA_PROBING    1

> Probing mutiple times yields better results. Set to 2 for a fast/slow probe - the second probe result will be used. Set to 3 or more for slow probes - the average result will be used.

(机翻参考) 多个探针会产生更好的结果。将快速 / 慢速探针设置为 2 - 将使用第二个探针结果。对于慢速探针,设置为 3 或更大 - 将使用平均结果。

探针安全区

代码语言:javascript复制
#define Z_CLEARANCE_DEPLOY_PROBE   10 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES  5 // Z Clearance between probe points
#define Z_CLEARANCE_MULTI_PROBE     5 // Z Clearance between multiple probes
//#define Z_AFTER_PROBING           5 // Z position after probing is done

#define Z_PROBE_LOW_POINT          -2 // Farthest distance below the trigger-point to go before stopping

Z探针在部署,回收和移动时需要间隙,以避免撞到底座和其他硬件。舵机安装的探头需要额外的空间来使臂旋转。电感式探头需要一定的空间以防止过早触发。

使用这些设置来指定抬起 (放下) 探针的距离 (mm)。设置的值适用于通过Z_PROBE_OFFSET_FROM_EXTRUDERM851 或 LCD 设置的任何探针的 Z 偏移。对于这些设置,只有大于等于1的整数值有效。

代码语言:javascript复制
#define Z_PROBE_OFFSET_RANGE_MIN -20
#define Z_PROBE_OFFSET_RANGE_MAX 20

使用 M851和 LCD 菜单调整Z探针偏移的范围。

测试探针

代码语言:javascript复制
#define Z_MIN_PROBE_REPEATABILITY_TEST

这使您能够使用 M48 测试探针的可靠性。它会为您提供探针的标准偏差。提示:工作中,通常可以接受0.02 mm的床水平偏差。

代码语言:javascript复制
// Before deploy/stow pause for user confirmation
//#define PAUSE_BEFORE_DEPLOY_STOW
#if ENABLED(PAUSE_BEFORE_DEPLOY_STOW)
  //#define PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED // For Manual Deploy Allenkey Probe
#endif

部署 / 回收之前需要用户确认

关闭加热器才探测

代码语言:javascript复制
//#define PROBING_HEATERS_OFF       // Turn heaters off when probing
#if ENABLED(PROBING_HEATERS_OFF)
  //#define WAIT_FOR_BED_HEATER     // Wait for bed to heat back up between probes (to improve accuracy)
#endif
//#define PROBING_FANS_OFF          // Turn fans off when probing
//#define PROBING_STEPPERS_OFF      // Turn steppers off (unless needed to hold position) when probing
//#define DELAY_BEFORE_PROBING 200  // (ms) To prevent vibrations from triggering piezo sensors

如果通常在加热的情况下进行打印,则加热的床和挤出机时进行探测,将产生更加精准的结果。如果由于加热,探针遇到电气噪音,请启用PROBING_HEATERS_OFF。也可以添加延迟以使噪声和振动稳定下来。

步进电机基本设置

电机使能电平

代码语言:javascript复制
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0 // For all extruders

这些选项设置用于步进电机使能的引脚状态。对于低电平有效,最常见的设置是0(LOW) 。对于高电平有效,请使用 1 或HIGH。

非运动状态关电机

代码语言:javascript复制
#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false

不发出运动时,使用这些选项可暂时关闭步进电机。这是为了以比正常电流更高的速度运行步进电机,以产生更大的扭矩为代价,以增加驱动器和步进电机的热量为代价。禁用步进之间的步进使电动机和驱动器有机会冷却。

从理论上讲听起来不错,但在实践中却有缺点。禁用的步进器无法稳定热端。这导致精度差并且带有很大的轴向漂移可能性 (失步) 。大多数3D打印机使用 “开环” 控制系统,这意味着该软件无法确定指令执行后是否按照预定计划运动。它只是发送命令并假定已遵守命令。

实际上,对于校准良好的机器而言没有影响,使用开环系统可以节省大量成本,并具有出色的质量。这里不建议使用这里的方式。有很多更好的方法来解决步进器/驱动器过热的问题。例如:步进/驱动器散热器,主动冷却,轴上的双电机,减少微步进,检查皮带是否过张,检查组件的运动是否平稳等。

代码语言:javascript复制
//#define DISABLE_REDUCED_ACCURACY_WARNING

启用此选项可禁止在可能会降低精度的情况下发出警告。

代码语言:javascript复制
#define DISABLE_E false                     // For all extruders
#define DISABLE_INACTIVE_EXTRUDER    false     // Keep only the active extruder enabled

这个选项的作用类似于DISABLE_ [XYZ],控制的是挤出机,但与一台或多台挤出机有关。

默认设置中,活动的挤出机保持启用状态,同时禁用所有非活动挤出机。对于使用“擦拭塔”或其他方式来确保喷嘴已注满且在两次使用之间高温耗材不下渗的情况下,这是合理的。

电机方向

代码语言:javascript复制
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR 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

这些里可以设置每个轴的电动机反向运动。第一次设置这些时要小心。轴移动方向错误会导致损坏。如果可能的话,不带皮带的情况下正确安装它们。测试之前,将笔架和床移动到中间。使用终端或 LCD “Move Axis” 菜单测试每个轴是否正确移动。如果轴反转,则将插头翻转一下或更改其反转设置。

归零和安全区

Z 轴归零后的高度

代码语言:javascript复制
//#define NO_MOTION_BEFORE_HOMING    // Inhibit movement until all axes have been homed
//#define UNKNOWN_Z_NO_RAISE        // Don't raise Z (lower the bed) if Z is "unknown."
                                    //For beds that fall when Z is powered off.
//#define Z_HOMING_HEIGHT 4

此值在 X 轴与 Y 轴归零前,将 Z 轴提升到指定高度,这对于防止头部撞到床架 (例如螺钉) 上很有用。这也适用于自动床平整,仅在触发时当 Z 轴高度小于定义的值时,否则 Z 轴将不会移动。

归零方向

代码语言:javascript复制
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

每个轴的归零方向,-1 为最小值,1为最大值。一般 Cartesian 和 CoreXY 用最小值归零,而 Delta 用最大值归零

安全区大小

代码语言:javascript复制
#define X_BED_SIZE 200
#define Y_BED_SIZE 200

您可以直接指定床的尺寸。如果 X/Y 滑架能够移动到床外,则可以在下面指定更大的范围。Detail 配置文件直接使用DELTA_PRINTABLE_RADIUS

代码语言:javascript复制
#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 170

这里一般设置打印机的物理极限。通常将[XYZ] _MIN _POS值设置为 0,因为限位器放在床的极限位置。[XYZ] _MAX_POS应该设置为最远的可到达点。默认情况下,这些位置用作您的归零位特殊情况可以使用MANUAL _[XYZ] _HOME_POS选项覆盖这些选项。

可以使用 M206 进行偏移

虚拟限位器 (软件限位器)

代码语言:javascript复制
#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

#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

启用这些选项可从软件上将移动限制在机器的物理边界上 (由[XYZ]_(MIN MAX)_POS设置)。例如,可以将G1 Z-100最小约束为G1 Z0

建议启用这些选项作为安全功能。你可以使用M211 S0禁止这些虚拟限位器

代码语言:javascript复制
#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
  //#define SOFT_ENDSTOPS_MENU_ITEM
#endif

也可以启用这个选项,在 LCD 去启用/禁止虚拟限位器

材料检测

代码语言:javascript复制
//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define NUM_RUNOUT_SENSORS   1     // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
  #define FIL_RUNOUT_INVERTING false // Set to true to invert the logic of the sensor.
  #define FIL_RUNOUT_PULLUP          // Use internal pullup for filament runout pins.
  //#define FIL_RUNOUT_PULLDOWN      // Use internal pulldown for filament runout pins.

  // Set one or more commands to execute on filament runout.
  // (After 'M412 H' Marlin will ask the host to handle the process.)
  #define FILAMENT_RUNOUT_SCRIPT "M600"

  // After a runout is detected, continue printing this length of filament
  // before executing the runout script. Useful for a sensor at the end of
  // a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead.
  //#define FILAMENT_RUNOUT_DISTANCE_MM 25

  #ifdef FILAMENT_RUNOUT_DISTANCE_MM
    // Enable this option to use an encoder disc that toggles the runout pin
    // as the filament moves. (Be sure to set FILAMENT_RUNOUT_DISTANCE_MM
    // large enough to avoid false positives.)
    //#define FILAMENT_MOTION_SENSOR
  #endif
#endif

借助此功能,可以使用机械或光端挡开关来检查材料检测器中是否存在耗材 (通常在耗材的情况下,该开关是关闭的)。如果耗材用完,打印机将自动运行指定的 GCode 脚本 (默认为M600)。基于 RAMPS 的板使用 SERVO3_PIN。对于其他板,您可能需要定义 FIL_RUNOUT_PIN

床调平

在许多情况下,测量床高的变化非常有用。即使3D打印机上的底座完全平整且水平,在机械上仍可能存在缺陷。例如,一台机器可能有一个非常平坦的床,但是 XY 龙门架的一小块是半毫米高。Z 轴的末端可能不完全水平。床在 X 和/或 Y 平面中移动时,床在Z平面中可能会稍微移动。而在 Delta 上,其 XY 轨迹可能呈缠绵碗状。

床补偿或 “ — Bed Leveling” 使用探头或用户协助方法,可以使机器准确测量 XY 平面上各个点的 “床高度”。然后,借助这些数据,机器可以调整运动以更好地对准床的倾斜或“高度”变化。

有关这些功能的更多详细信息,请参阅 MBL 的 G29 和 ABL 的 G29。我们建议您在使用床架之前,尝试使打印机尽可能达到最佳状态,因为所有床架只能补偿有缺陷的硬件,但不会对它进行修复。

床调平类型

床调平是许多 3D 打印机的标准功能。很简单的操作可以获得良好的第一层和良好的床层附着力。所有形式的床平整都使用了G29床探测,M420启用/禁用,并且可以将其结果通过M500保存到 EEPROM。太棒了!

启用床调平:

  • G28禁用床调平,但保持先前的平整数据不变。
  • G29自动或手动探测床的各个点,测量床的高度,计算校正网格或矩阵,然后打开水准补偿。具体行为取决于床整平的配置和类型。
  • M500将床调平数据保存到 EEPROM。使用M501加载它,用M502清除它,并使用M503报告它。
  • M420 S <bool>可用于启用/禁用床调平。例如,必须在M501之后使用M420 S1以启用加载的网格或矩阵,并在G28之后重新启用水平,这将禁用水平补偿。
  • 可以使用LCD_BED_LEVELING选项将 “Level Bed” 菜单项添加到 LCD。
代码语言:javascript复制
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

只需要选择一种调平方式

  • AUTO_BED_LEVELING_3POINT,三点调平,探测三角形中的三个点。平面给出适合于补偿平坦但倾斜的床的变换矩阵。
  • AUTO_BED_LEVELING_LINEAR,网格调平,探测网格中的床。通过最小二乘法生成变换矩阵,以补偿平坦但倾斜的床。
  • AUTO_BED_LEVELING_BILINEAR,通过可选的 Catmull-Rom 曲面细分在网格中探测床。网格数据用于使用双线性插值来调整整个床层的Z高度。适用于三角床,大床或不平坦的床。
  • AUTO_BED_LEVELING_UBL (推荐),结合了3点,线性,双线性和网格水准测量的功能。与双线性调平一样,UBL生成的网格数据用于使用双线性插值来调整整个床层的 Z 高度。当前需要 LCD 控制器。
  • MESH_BED_LEVELING提供了一个自定义G29命令,可使用一张纸或塞尺在几个网格点上测量床高。有关完整过程,请参阅G29。这种类型的调平仅与PROBE_MANUALLY兼容。

只有AUTO_BED_LEVELING_BILINEARAUTO_BED_LEVELING_UBL支持 Delta。当前仅AUTO_BED_LEVELING_BILINEAR支持 SCARA。MESH_BED_LEVELING与 Delta 和 SCARA 不兼容。

G28 恢复调平数据

代码语言:javascript复制
//#define RESTORE_LEVELING_AFTER_G28

正常来说 G28 执行完毕后会取消调平数据的使用,你可以启用这项来让他继续使用调平数据

调试调平

代码语言:javascript复制
//#define DEBUG_LEVELING_FEATURE

使用此选项可以启用额外的归零和调平调试。然后,您可以在 G28G29 V4 之前使用M111 S32获得详细的诊断过程日志。此选项对于找出意外行为的原因或向项目报告问题时很有用。

淡出调平

代码语言:javascript复制
#define ENABLE_LEVELING_FADE_HEIGHT

随着高度的怎加,减少床的高度补偿。

此选项将 Z 参数添加到M420,该参数设置淡入距离,在该淡入距离中将逐渐减小调平。超过给定的 Z 高度,将不再应用调平补偿。适用于MESH_BED_LEVELINGAUTO_BED_LEVELING_BILINEARAUTO_BED_LEVELING_UBL

存在此功能是为了防止床中的不规则物体影响模型的整个高度。淡出调平还可以降低计算运算量,并降低 Z 轴在淡出高度以上的共振。对于对齐良好的机器,此功能可以改善打印效果。示例:要使调平补偿在层印刷的前10毫米处逐渐消失,请使用M420 Z10。如果每层的高度为 0.2mm,则每层之后的流平补偿将减少 1/50(2%) 。超过10毫米,机器将无调平补偿。

G26 网格验证模式

代码语言:javascript复制
/**
 * Enable the G26 Mesh Validation Pattern tool.
 */
#define G26_MESH_VALIDATION   // Enable G26 mesh validation
#if ENABLED(G26_MESH_VALIDATION)
  #define MESH_TEST_NOZZLE_SIZE     0.4   // (mm) Diameter of primary nozzle.
  #define MESH_TEST_LAYER_HEIGHT    0.2   // (mm) Default layer height for the G26 Mesh Validation Tool.
  #define MESH_TEST_HOTEND_TEMP   205   // (°C) Default nozzle temperature for the G26 Mesh Validation Tool.
  #define MESH_TEST_BED_TEMP       60   // (°C) Default bed temperature for the G26 Mesh Validation Tool.
  #define G26_XY_FEEDRATE         20    // (mm/s) Feedrate for XY Moves for the G26 Mesh Validation Tool.

#endif

使用任何基于网格的水平测量系统 (1.1.7) 时,可以激活G26_MESH_VALIDATION以打印测试图案并微调网格。有关完整详细信息,请参见 G26 网格验证。G26 命令接受用于喷嘴尺寸,层高等的参数。上面的子选项指定将应用于省略参数的默认值。

线性/双线性选项

代码语言:javascript复制
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

这些选项指定在 G29 期间在每个尺寸中探测的默认点数。

代码语言:javascript复制
//#define LEFT_PROBE_BED_POSITION 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 - (MIN_PROBE_EDGE))

这些设置指定了使用 G29 进行探测的边界。这很可能是床的一个子部分,因为探头通常无法到达喷嘴可以到达的每个点。设置这些边界时,请考虑探针的 XY 偏移。

代码语言:javascript复制
//#define PROBE_Y_FIRST

如果应该先在 Y 维度而不是 X 维度进行探测,则启用此选项。

双线性选项

代码语言:javascript复制
//#define EXTRAPOLATE_BEYOND_GRID

通常,被探测的网格不会一直延伸到床的边缘。因此,在探测网格的边界之外,Z 调整可以采用以下两种方法之一。Z 高度可以通过最近的网格框的确定的倾斜度继续升高/降低 (最好是在探测了大部分床时) ,或者它可以遵循最近的边缘的轮廓 (默认值) 。启用此选项进行推断。

代码语言:javascript复制
//#define ABL_BILINEAR_SUBDIVISION
#if ENABLED(ABL_BILINEAR_SUBDIVISION)
  // Number of subdivisions between probe points
  #define BILINEAR_SUBDIVISIONS 3
#endif

如果您要保留SRAM,则此选项将使用 Catmull-Rom 曲面细分方法将双线性网格的分辨率相乘。此选项仅适用于双线性调平。如果默认值 3 太昂贵,请尝试 2 或 1。在Marlin 1.1.1中,默认网格将存储在PROGMEM中,就像UBL现在所做的那样。

统一床平整选项

代码语言:javascript复制
#define UBL_MESH_INSET 1          // Mesh inset margin on print area
#define GRID_MAX_POINTS_X 10      // Don't use more than 15 points per axis, implementation limited.
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

  #define UBL_MESH_EDIT_MOVES_Z     // Sophisticated users prefer no movement of nozzle
  #define UBL_SAVE_ACTIVE_ON_M500   // Save the currently active mesh in the current slot on M500

  //#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used
                                          // as the Z-Height correction value.

这些选项指定用于 UBL 的插图,网格和 3 点三角形。请注意,探头的 XY 偏移和移动限制可能会限制床的可探测区域。

网床调平选项

代码语言:javascript复制
#define MESH_INSET 10          // Mesh inset margin on print area
#define GRID_MAX_POINTS_X 3    // Don't use more than 7 points per axis, implementation limited.
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

//#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS

这些选项指定在G29期间将始终在每个尺寸中探测的点数。网格插入用于自动计算探针边界。这些可以在Configuration_adv.h中显式设置。网格探测完成后,MESH_G28_REST_ORIGIN将喷嘴移至Z_MIN_POS处。如果 Z 偏移 (例如,由于home_offset或其他原因) ,则这是为了将 Z 移动到一个好的起点,通常Z = 0。

3 点调平

代码语言:javascript复制
#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL)
  //#define PROBE_PT_1_X 15
  //#define PROBE_PT_1_Y 180
  //#define PROBE_PT_2_X 15
  //#define PROBE_PT_2_Y 20
  //#define PROBE_PT_3_X 170
  //#define PROBE_PT_3_Y 20
#endif

这些选项指定将在G29期间探测三个点的坐标。

LCD 交互式调平

代码语言:javascript复制
//#define LCD_BED_LEVELING
#if ENABLED(LCD_BED_LEVELING)
  #define MESH_EDIT_Z_STEP  0.025 // (mm) Step size while manually probing Z axis.
  #define LCD_PROBE_Z_RANGE 4     // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment
  //#define MESH_EDIT_MENU        // Add a menu to edit mesh points
#endif

LCD_BED_LEVELING在 LCD 上添加了 “Level Bed” 菜单,该菜单开始了逐步指导的水平测量程序,不需要探头。对于网状床找平,对于MBL参见G29,对于 PROBE_MANUALLY 对于 ABL 参见G29。可与 MESH_BED_LEVELING 和 PROBE_MANUALLY(所有形式的自动床平整) 一起使用。请参阅Configuration.h文件以获取子选项。

角调平

代码语言:javascript复制
//#define LEVEL_BED_CORNERS
#if ENABLED(LEVEL_BED_CORNERS)
  #define LEVEL_CORNERS_INSET 30    // (mm) An inset for corner leveling
  #define LEVEL_CORNERS_Z_HOP  4.0  // (mm) Move nozzle up before moving between corners
  #define LEVEL_CORNERS_HEIGHT 0.0  // (mm) Z height of nozzle at leveling points
  //#define LEVEL_CENTER_TOO        // Move to the center after the last corner
#endif

添加菜单项在床角之间移动以手动调整床。

Z探针结束脚本

代码语言:javascript复制
//#define Z_PROBE_END_SCRIPT "G1 Z10 F12000nG1 X15 Y330nG1 Z0.5nG1 Z10"

G29末尾执行的自定义脚本。如果需要多个命令,请用n (换行符) 将它们分开。

归零设置

床中心设为 (0.0)

代码语言:javascript复制
//#define BED_CENTER_AT_0_0

如果床的中心位于X0 Y0,则启用此选项。此设置会影响自动原点位置 (未使用MANUAL_ [XYZ] _POS设置的位置) 的计算方式。Delta 始终启用它。

自定义归零坐标

代码语言:javascript复制
//#define MANUAL_X_HOME_POS 0
//#define MANUAL_Y_HOME_POS 0
//#define MANUAL_Z_HOME_POS 0 // Distance from nozzle to printbed after homing

这些设置用于覆盖原始位置。保留它们未定义的自动设置。对于 Delta 的 Z 轴,必须将 home 设置在最高位置。

Z安全归零

代码语言:javascript复制
#define Z_SAFE_HOMING

#if ENABLED(Z_SAFE_HOMING)
  #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2)    // X point for Z homing when homing all axes (G28).
  #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2)    // Y point for Z homing when homing all axes (G28).
#endif

当使用G28对所有轴进行时,Z 安全归零可以通过在 Z 归零之前移动到定义的 XY 坐标 (默认为床的中部) 来防止探针 (或喷嘴) 位于床身区域之外时 Z 归零。副作用在 Z 归零之前需要 X 和 Y 归零。如果步进驱动程序超时,将再次需要 X 和 Y 归零。

如果将探针 (不是限位器) 用于 Z 归零,则启用此选项。如果使用 Z 限位器进行原点复归,则不需要 Z 安全原点复归,但是也可以启用 Z 安全原点,以使 XY 在原点复归后始终移动到某个自定义位置。

归零速度

代码语言:javascript复制
// Homing speeds (mm/m)
#define HOMING_FEEDRATE_XY (50*60)
#define HOMING_FEEDRATE_Z  (4*60)

用于归零和自动调平的归零速度。这些值可能设置为机器可以达到的最快速度。归零和探测速度受当前最大进给速度和最大加速度设置的限制。

将这些值设置得太高可能会导致精度降低 和/或 跳过步骤。降低加速度可能有助于实现更高的最高速度。

代码语言:javascript复制
#define VALIDATE_HOMING_ENDSTOPS

验证归零是否触发了限位器。

床偏补偿

代码语言:javascript复制
//#define SKEW_CORRECTION

#if ENABLED(SKEW_CORRECTION)
  // Input all length measurements here:
  #define XY_DIAG_AC 282.8427124746
  #define XY_DIAG_BD 282.8427124746
  #define XY_SIDE_AD 200

  // Or, set the default skew factors directly here
  // to override the above measurements:
  #define XY_SKEW_FACTOR 0.0

  //#define SKEW_CORRECTION_FOR_Z
  #if ENABLED(SKEW_CORRECTION_FOR_Z)
    #define XZ_DIAG_AC 282.8427124746
    #define XZ_DIAG_BD 282.8427124746
    #define YZ_DIAG_AC 282.8427124746
    #define YZ_DIAG_BD 282.8427124746
    #define YZ_SIDE_AD 200
    #define XZ_SKEW_FACTOR 0.0
    #define YZ_SKEW_FACTOR 0.0
  #endif

  // Enable this option for M852 to set skew at runtime
  //#define SKEW_CORRECTION_GCODE
#endif

纠正XYZ轴上的未对准情况。请参阅configuration.h中的注释。

单独归位

代码语言:javascript复制
//#define INDIVIDUAL_AXIS_HOMING_MENU

添加单个轴单独归位选项 (Home X,Home Y 和 Home Z) 到 LCD 菜单。

附带功能

EEPROM

代码语言:javascript复制
//#define EEPROM_SETTINGS

诸如M92之类的命令仅会更改易失性存储器中的设置,并且在关闭计算机电源后这些设置会丢失。启用此选项后,设置会保存至内置的 EEPROM,在重新启动后自动加载 EEPROM 的数据,覆盖原有固件内的设置 (只是覆盖到易失性存储器,并不是真的覆盖固件)。

强烈建议使用此选项,因为它使配置更易于管理。不过要注意的是更新固件后 EEPROM 的信息仍然保留。

EEPROM 相关命令:

  • M500:将所有当前设置保存到 EEPROM。
  • M501:将最后保存的所有设置加载到 EEPROM。
  • M502:将所有设置重置为其默认值(由Configuration.h设置,也就是烧写后的默认配置)
  • M503:打印当前设置(在 RAM 中,而不在 EEPROM 中)
代码语言:javascript复制
//#define DISABLE_M503    // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT   // Give feedback on EEPROM commands. Disable to save PROGMEM.

这些 EEPROM 选项应保留不变,但对于 128K 和更小的板,它们可用于恢复某些程序存储器。强烈建议供应商不要使用 DISABLE_M503。要将新的默认设置保存到 EEPROM 中,请先使用M502,再使用M500

可以更改并保存到 EEPROM 的设置用标记。标有的选项可以从 LCD 控制器更改。

终端保持活动

代码语言:javascript复制
#define HOST_KEEPALIVE_FEATURE        // Disable this if your host doesn't like keepalive messages
#define DEFAULT_KEEPALIVE_INTERVAL 2  // Number of seconds between "busy" messages. Set with M113.
#define BUSY_WHILE_HEATING            // Some hosts require "busy" messages even during heating

启用后,打印机在无法接受命令时每隔几秒钟向终端发送一个忙碌状态消息。如果终端不喜欢保持活动消息,请禁用。

使用 DEFAULT_KEEPALIVE_INTERVAL作为忙碌状态消息之间的默认秒数。用M113覆盖。Marlin 1.1.5及更高版本包括BUSY_WHILE_HEATING选项,用于对协议有要求的终端

查看可用内存

代码语言:javascript复制
//#define M100_FREE_MEMORY_WATCHER

启用将添加 M100 指令用于查看内存占用信息

G-code 单位转换

代码语言:javascript复制
//#define INCH_MODE_SUPPORT

添加 G20 和 G21,用于修改解析 G-code 的单位

温度单位转换

代码语言:javascript复制
//#define TEMPERATURE_UNITS_SUPPORT

添加 M149 CM149 KM149 F,用于修改温度单位为摄氏度,开氏度或华氏度。如果没有此选项,则所有温度必须以摄氏度为单位。

LCD 材质预设

代码语言:javascript复制
#define PREHEAT_1_TEMP_HOTEND 180
#define PREHEAT_1_TEMP_BED     70
#define PREHEAT_1_FAN_SPEED     0 // Value from 0 to 255

#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED    110
#define PREHEAT_2_FAN_SPEED     0 // Value from 0 to 255

这些是 Prepare > Preheat 菜单选项的默认值。可以使用M145或 Control > Temperature > Preheat Material X conf 子菜单覆盖这些值。

空转喷头位置

代码语言:javascript复制
//#define NOZZLE_PARK_FEATURE
#if ENABLED(NOZZLE_PARK_FEATURE)
  // Specify a park position as { X, Y, Z_raise }
  #define NOZZLE_PARK_POINT { (X_MIN_POS   10), (Y_MAX_POS - 10), 20 }
  #define NOZZLE_PARK_XY_FEEDRATE 100   // (mm/s) X and Y axes feedrate (also used for delta Z axis)
  #define NOZZLE_PARK_Z_FEEDRATE 5      // (mm/s) Z axis feedrate (not used for delta printers)
#endif

设置空转时喷头所在的位置,并启用 G27

喷头清理

代码语言:javascript复制
//#define NOZZLE_CLEAN_FEATURE
#if ENABLED(NOZZLE_CLEAN_FEATURE)
  ...
#endif

添加了 G12 命令以执行喷嘴清洁过程。有关其他配置选项,请参见Configuration.h里的注释。

打印时间计时器

代码语言:javascript复制
#define PRINTJOB_TIMER_AUTOSTART

使用 M104M109M190 命令时,自动启动和停止打印作业计时器。还添加以下命令来控制计时器:

  • M75 启动打印作业计时器。
  • M76 暂停打印作业计时器。
  • M77 停止打印作业计时器。

打印统计

代码语言:javascript复制
//#define PRINTCOUNTER

统计打印总数、成功/失败数、总打印时间,可以使用 M78 查看这些信息

LCD 语言

界面语言

代码语言:javascript复制
#define LCD_LANGUAGE en

选择界面语言,最新支持的语言可以在 src/core/language.h 找到

HD44780字符集

代码语言:javascript复制
#define DISPLAY_CHARSET_HD44780 JAPANESE

此选项仅适用于基于字符的显示。有需要细看Configuration.h中的注释

LCD 类型

代码语言:javascript复制
//#define ULTRA_LCD // Character based
//#define DOGLCD    // Full graphics display

基本的LCD类型是基于字符的或图形的。一般 Marlin 会自动选择支持的 LCD 类型。如果你的 LCD 支持,需要选择性启用这些选项。

SD 卡

代码语言:javascript复制
#define SDSUPPORT // Enable SD Card Support in Hardware Console

如果你要使用 SD 卡离线打印,必须启用这项

代码语言:javascript复制
//#define SPI_SPEED SPI_HALF_SPEED
//#define SPI_SPEED SPI_QUARTER_SPEED
//#define SPI_SPEED SPI_EIGHTH_SPEED

取消注释这些选项之一可使用较慢的 SPI 传输速度。这样做一般能解决卷初始化错误问题。

CRC 启用

代码语言:javascript复制
//#define SD_CHECK_AND_RETRY

SD 卡通信过程使用 CRC 检查

旋钮

分辨率

代码语言:javascript复制
//#define ENCODER_PULSES_PER_STEP 1

识别一个步骤所需要旋钮发出的脉冲数。对于高分辨率旋钮应增加。

代码语言:javascript复制
//#define ENCODER_STEPS_PER_MENU_ITEM 5

使用此选项可覆盖在下一个/上一个菜单项之间移动所需的步进信号数。

方向

代码语言:javascript复制
//#define REVERSE_ENCODER_DIRECTION
//#define REVERSE_MENU_DIRECTION

测试旋钮方向,你可以先把两个都注释掉,烧写后出现问题的解决方式:

  • 菜单和数值修改都反了,启用REVERSE_ENCODER_DIRECTION
  • 只有菜单反了,启用REVERSE_MENU_DIRECTION
  • 只有数值修改反了,两个都启用

蜂鸣器

代码语言:javascript复制
//#define SPEAKER

默认使用的蜂鸣器是固定音阶,如果你的蜂鸣器可以发出不同的音阶,则启用这项

代码语言:javascript复制
//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
//#define LCD_FEEDBACK_FREQUENCY_HZ 1000

声音的持续时间和频率。将它们设置为 0 可禁用 LCD 菜单中的音频反馈。使用 M300 测试音频输出 S <频率Hz> P <持续时间ms>

LCD 控制面板

Marlin支持对多种控制界面。有两个最受欢迎的 LCD 界面:

REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER带点击轮的单色基于128 x 64像素的LCD控制器。能够显示简单的位图图形和最多5行文本 (上半图)。

REPRAP_DISCOUNT_SMART_CONTROLLER一个20 x 4字符的LCD控制器,带有拨轮 (下半图)。

其他 LCD 控制器大多数都是这些的改进版本。其他类型可以参考官方:

字符 / 图形 LCD

按键矩阵

I2C 字符 / 图形 LCD

额外功能

快速 PWM 风扇

代码语言:javascript复制
//#define FAST_PWM_FAN

增加风扇 PWM 频率。可以在configuration_adv.h文件中调整频率和缩放比例。

使用软件 PWM 驱动风扇

代码语言:javascript复制
//#define FAN_SOFT_PWM
#define SOFT_PWM_SCALE 0
//#define SOFT_PWM_DITHER

使用软件 PWM 驱动风扇。这使用了非常低的频率。如果频率太低,请增加SOFT_PWM_SCALE。如果在SOFT_PWM_SCALE设置为大于 0 的值时遇到分辨率损失,则可以使用SOFT_PWM_DITHER减轻它。

温度状态指示灯

代码语言:javascript复制
//#define TEMP_STAT_LEDS

使用 LED 添加温度状态指示器。

快门引脚

代码语言:javascript复制
//#define PHOTOGRAPH_PIN     23

使用M240来拍照,而这个引脚用来触发相机的快门

SkeinForge 圆弧错误修复

代码语言:javascript复制
//#define SF_ARC_FIX

当使用 Arc Point 作为圆角过程时,用 SkeinForge 切片的文件包含错误的弧 G-Code。此选项可解决该错误,但应保留该选项。

糊状挤出

代码语言:javascript复制
// Support for the BariCUDA Paste Extruder.
//#define BARICUDA

Marlin包括对 Baricuda Extruder 的支持,该 Baricuda Extruder 也托管在GitHub上,用于3D打印糖和巧克力。该功能添加了代码M126M127M128M129,用于控制 Baricuda 的泵和阀门。

RGB 颜色 LED 加成[滑稽]

RGB 可寻址颜色指示器有两种方法在,这两种方法都使用M150 Rr Ug Bb设置颜色以指定 0 到 255 之间的 RGB 分量。

代码语言:javascript复制
//define BlinkM/CyzRgb Support
//#define BLINKM

BLINKM 为某些 LCD 控制器提供背光。使用 I2C 消息设置其颜色。

代码语言:javascript复制
//define PCA9632 PWM LED driver Support
//#define PCA9632

飞利浦 PCA9632 是通用 PWM LED 驱动器,使用 I2C 控制(BlinkM)。

代码语言:javascript复制
//#define RGB_LED
//#define RGBW_LED
#if ENABLED(RGB_LED)  ENABLED(RGBW_LED)
  #define RGB_LED_R_PIN 34
  #define RGB_LED_G_PIN 43
  #define RGB_LED_B_PIN 35
  #define RGB_LED_W_PIN -1
#endif

连接到 5V 数字引脚的 RGB(W)LED ,或连接到由数字引脚控制的 MOSFETs RGB(W) 灯条,需要启用这项。

通过为每个组件分配数字引脚,可以简单地使用 RGB LED。如果这些引脚能够执行硬件 PWM,则可以使用多种颜色。如果使用简单的数字引脚,则只能使用 7 种颜色。添加了M150命令以设置LED(或LED灯带)颜色。如果引脚具有 PWM 功能(例如4、5、6、11),则可以将亮度值的范围设置为 0 至 255。

Adafruit Neopixel LED 驱动器

代码语言:javascript复制
//#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
  #define NEOPIXEL_TYPE   NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
  #define NEOPIXEL_PIN     4       // LED driving pin
  //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
  //#define NEOPIXEL2_PIN    5
  #define NEOPIXEL_PIXELS 30       // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used
  #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
  #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
  //#define NEOPIXEL_STARTUP_TEST  // Cycle through colors at startup
  //#define NEOPIXEL_BKGD_LED_INDEX  0               // Index of the LED to use
  //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
#endif

NEOPIXELS (官方就是这么懒)

根据打印机状态控制 LED

代码语言:javascript复制
#if ENABLED(BLINKM)  ENABLED(RGB_LED)  ENABLED(RGBW_LED)  ENABLED(PCA9632)
  #define PRINTER_EVENT_LEDS
#endif

此选项使打印机对安装的彩色LED,BLINKM 或 PCA9632 提供状态反馈:

随着加热床达到目标温度,逐渐从蓝色变为紫色。

随着温度升高,紫罗兰色逐渐变为红色。

更改为白色以照亮工作表面。

打印完成后变为绿色。

打印完成并且用户按下按钮后关闭。

舵机

代码语言:javascript复制
//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command

可使用舵机的数量。一般出现在 Z 床探头,它由安装在旋转臂上的限位器组成。要将伺服连接器之一用于此类探头,请在上述探头选项中设置 Z_ENDSTOP_SERVO_NR。

代码语言:javascript复制
#define SERVO_DELAY 300

下一个动作开始之前的延迟(mm为单位),以使伺服时间达到其目标角度。300ms是一个不错的选择,但是您可以尝试减少延迟。指定足够大的延迟,以便伺服器有足够的时间在停用之前完成完整的运动。

代码语言:javascript复制
//#define DEACTIVATE_SERVOS_AFTER_MOVE

启用这项舵机仅在运动期间供电,防止抖动。我们建议启用此选项,以防止有源舵机产生的电子噪声干扰其他组件。运动过程中,挤出机电机接线产生的高安培数也会在主动伺服系统中引起波动。将此选项保持启用状态可以避免与伺服相关的麻烦。

Configuration_adv.h

给点时间


> 引用自:「GeanRain Printer」

0 人点赞