3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(3)marlin 2.0.9.2 截至发稿时间2021年12月16日

2023-05-16

/**
 * Marlin 3D Printer Firmware

头描述详见其他两个文件头描述
 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 *
 * Based on Sprinter and grbl.
 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <Licenses- GNU Project - Free Software Foundation>.
 *
 */
#pragma once  /*#pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次*/

/**
 * Configuration.h
 * 固件配置文件都在Configuration.h 中
 * Basic settings such as:
 * 基本设置有以下几个方面:
 * - Type of electronics
 * - 电器元件电路配置,意指世界各地某些厂商开发的板卡上的参数,例如对应芯片输出输入管脚定义,高低电平,信号功能等。
 * - Type of temperature sensor
 * - 温度传感器的类型 温度传感器是一种将温度变量转换为可传送的标准化输出信号的传感器。
 * - (常用分为热电偶与热电阻,这里常用于热床和挤出头温度监测,不达到热度主程序不启动。)
 * - Printer geometry  
 * - 打印成品最大体积尺寸,(常态设置长宽高行程)。
 * - Endstop configuration
 * - 限位开关设置 (常态设置为X,Y,Z轴最小起点,也可以根据结构不同设置成最大终点。Min X,Y,Z 和 Max X,Y,Z.)
 * - LCD controller
 * - LCD 显示屏的控制 (marlin标配单色点阵显示器有1602,和12864,还有3.5寸彩屏,4寸彩屏等内置库。
 * - 例:12864液晶屏用的比较多。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。
 * - 我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108、T6963C,ST7920等等。)
 * - Extra features
 * - 还有一些其他的额外功能 (例如:断电续打、打完关机、断料检测、热床调平、WiFi远程传文件、远程管理等。
 * -                      酷炫的还有自制时候安装一些灯,当然这些都可以通过定义管脚编程实现自动化开关亮度调节)
 *
 * Advanced settings can be found in Configuration_adv.h
 * - 更多的高级设置当然可以在高级配置文件里面找到
 */
#define CONFIGURATION_H_VERSION 02000902  /*定义当前配置文件版本是marlin 2.0.9.2版*/

//===========================================================================
//============================= Getting Started =================== /*开始走起正文*/
//===========================================================================

/**
 * Here are some useful links to help get your machine configured and calibrated:
 * 这给你几个链接,可能对于你调配机器有所帮助:调制和校准
 *
 * Example Configs:     Branches · MarlinFirmware/Configurations · GitHub
 * 配置案例大样链接
 * Průša Calculator:    RepRap Calculator - Prusa Printers
 * 在线计算器链接,很有帮助,调配计算很多参数,比如常见的电机转数角度步数对应几何长度计算,各种类型耗材(PLA,ABS)线长和重量以及造价计算的对应关系。
 *                      Filament 耗材   Stepper Motors 步进电机  Acceleration 最大加速度
 * Calibration Guides:  Calibration - RepRap
 *      调校指南          Triffid Hunter's Calibration Guide - RepRap
 *                      https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
 *                      https://youtu.be/wAL9d7FgInk
 *
 * Calibration Objects: The Essential Calibration Set by coasterman - Thingiverse
 * 调校可用到的打印物体文件 XYZ 20mm Calibration Cube by iDig3Dprinting - Thingiverse
 */

//===========================================================================
//========================== DELTA / SCARA / TPARA ==========================  DELTA三角洲架构,SCARA水平多关节架构,TPARA 
//===========================================================================
//
// Download configurations from the link above and customize for your machine.
// Examples are located in config/examples/delta, .../SCARA, and .../TPARA.
// 从上面的链接下载配置并为您的机器定制。示例位于配置/示例/增量中,.../SCARA和.../TPARA。
//===========================================================================

// @section info

// Author info of this build printed to the host during boot and M115   
   /*这个版本的作者信息可以使用M代码M115反馈打印回传到主机*/
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
   /*定义STRING_CONFIG_H_AUTHOR函数的两个值没有和默认设置,设置固件作者信息,可在窗口通信的是候看到。谁做了改变*/
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
   /*定义SCUSTOM_VERSION_FILE函数,版本文件惯例,根目录的路径(无引号)*/
/**
 * *** VENDORS PLEASE READ ***
 *       制造商供应商请阅读
 * Marlin allows you to add a custom boot image for Graphical LCDs. 
 * 马林允许您为图形液晶显示器添加自定义引导映像。
 * With this option Marlin will first show your custom screen followed
 * 有了这个选项,马林将首先显示您的自定义屏幕
 * by the standard Marlin logo with version number and web URL.
 * 由标准的马林标志与版本号和网址。
 * We encourage you to take advantage of this new feature and we also
 * respectfully request that you retain the unmodified Marlin boot screen.
 * 我们鼓励您利用这一新功能,我们还敬请您保留未修改的马林引导屏幕。
 */

// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
   /*启动时显示马林引导屏幕。**支持批量生产模式** */
#define SHOW_BOOTSCREEN  
   /*定义 点亮启动屏幕,如果注释掉这行的话开机就不会显示开机初始画面,直接进入主界面。*/
// Show the bitmap in Marlin/_Bootscreen.h on startup.
   /* 启动时显示的位图(开机画面)在 Marlin/_ Bootsscreen . h文件中 */
//#define SHOW_CUSTOM_BOOTSCREEN
  /* 也可以定义第二顺序可以显示厂商自定义开机画面logo,取消//行首注释,即可显示 */
// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
  /* 显示位图屏幕状态文件在马林文件夹下 Statusscreen.h 中 */
//#define CUSTOM_STATUS_SCREEN_IMAGE
  /*定义 屏幕待机状态,如果注释掉这行的话就不会显示待机状态,直接运行下一步程序。*/
// @section machine 机器选择

/**
 * 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.
 * 串行端口-1是USB仿真串行端口(如果有的话)。
 * Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
 * 注意:第一个串行端口(-1或0)将始终由Arduino引导加载程序使用。
 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
#define SERIAL_PORT 0
  /* 启动串行接口 0 ,以实现与主机通讯 */

/**
 * 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.
 * 250000在大多数情况下是可行的,但是如果在主机打印过程中,可能您通常会遇到掉线的情况。
 * You may try up to 1000000 to speed up SD file transfer.
 * 您也可以尝试高达1000000来加速SD文件传输。
 * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
 */
#define BAUDRATE 250000
  /* 定义 默认运行250000 比特率 可自行修改 */
//#define BAUD_RATE_GCODE     // Enable G-code M575 to set the baud rate
  /* 定义 BAUD_RATE_GCODE  比特率改变可用M575命令,在做上位机时不通过改变固件即可更改。 可自行修改设置比特率 
     ([2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]) */
/**
 * Select a secondary serial port on the board to use for communication with the host.
 * 在主板上选择另外一个即第二个串行接口作为与主机通讯
 * Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
 * 目前以太网(-2)仅在Tinesy 4.1板上受支持。
 * :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
//#define SERIAL_PORT_2 -1
  /* 定义运行第二个串行接口,取消注释即可运行。 */
//#define BAUDRATE_2 250000   // Enable to override BAUDRATE
  /* 定义运行第二个串行接口通讯速率设置为250000,取消注释即可运行。启用以覆盖BAUDRATE */
/**
 * Select a third serial port on the board to use for communication with the host.
 * 在主板上选择另外一个即第三个串行接口作为与主机通讯
 * Currently only supported for AVR, DUE, LPC1768/9 and STM32/STM32F1
 * 目前仅在AVR系列,DUE系列,LPC1768/9和STM32系列/STM32F1系列芯片主板上受支持。
 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
//#define SERIAL_PORT_3 1
   /* 定义运行第三个串行接口,取消注释即可运行。 */
//#define BAUDRATE_3 250000   // Enable to override BAUDRATE
   /* 定义运行第三个串行接口通讯速率设置为250000,取消注释即可运行。启用以覆盖BAUDRATE */
// Enable the Bluetooth serial interface on AT90USB devices
   /* 支持AT90USB驱动 设备上启用蓝牙串行接口 */
//#define BLUETOOTH
  /* 定义运行蓝牙串行接口,取消注释即可运行。 */
// Choose the name from boards.h that matches your setup
  /* 选用与你匹配主板的名字,可在主板库 boards.h 文件中查询,然后调用启用安装。 */
#ifndef MOTHERBOARD 
    /* #ifndef是"if not defined"的简写,是宏定义的一种,它是可以根据是否已经定义了一个变量来进行分支选择,一般用于调试调用等。 */
  #define MOTHERBOARD BOARD_RAMPS_14_EFB
   /* 马林固件默认运行定义运行RAMPS_14_EFB主板,取消注释即可运行选择其他主板,
      RAMPS_14_EFB主板长这个样子https://reprap.org/wiki/RAMPS_1.4。 */
#endif 
   /* #ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。
       #ifndef 标识1 //判断"标识1"是否定义,如果被定义则返回假,如果没有被定义则返回真。

      语句1 #ifndef 标识1

       语句2 #define 标识1

        语句3 #endif

          语句4 ……

            语句5 ……

     该段代码意思是:如果标识1没有被定义,则重定义标识1,即执行语句2、语句3;如果标识1已经被定义,
     则直接跳过语句2、语句3,直接执行语句4、语句5、……

     */ 
   

// Name displayed in the LCD "Ready" message and Info menu
  /* 液晶屏“就绪待机等待”信息 和信息菜单中显示的名称 */
//#define CUSTOM_MACHINE_NAME "3D Printer"
   /* 定义运行显示自定义名称“3D打印机”,名称可更改,取消注释即可运行显示。 */
// Printer's unique ID, used by some programs to differentiate between machines.
   /* 打印机的唯一标识,被一些程序用来区分机器. */
// Choose your own or use a service like Online UUID Generator Tool
   /* 这个链接是一个不错的机器串号在线生成器 */
//#define MACHINE_UUID "e138a2b7-9200-458e-ac60-d92f0f6d06a4"
  /* 定义运行显示自定义串号名称“e138a2b7-9200-458e-ac60-d92f0f6d06a4”,
     名称由上述链接在线串号生成器提供可更改,取消注释即可运行嵌入。 */
/**
 * Define the number of coordinated linear axes.
 * 定义搭配轴的数量
 * See https://github.com/DerAndere1/Marlin/wiki
 * axis 3D printers axes (AXIS*_NAME 'X', 'Y' or 'Z')
 * 三种打印机一般轴名称为X,Y,Z.
 * axes (AXIS*_NAME 'A', 'B' or 'C') or secondary linear axes (AXIS*_NAME 'U', 'V' or 'W').  
 * 更多的数控设备轴名称规范为,A,B,C,E.二者机器人坐标轴为U,V,W。
 * Each linear axis gets its own stepper control and endstop:
 * 每个线性轴都有自己的步进电机控制和限位开关:
 *   Steppers: *_STEP_PIN, *_ENABLE_PIN, *_DIR_PIN, *_ENABLE_ON
 *             步进电机控制信号函数名称为:
 *             _STEP_PIN,脉冲步数引脚,最重要的引脚,通过单片机给这个引脚PWM脉冲信号,控制电机运动轴运动角度。;
 *             _ENABLE_PIN,使能引脚。
 *             _DIR_PIN,控制电机方向引脚,正转或是逆转。
 *             _ENABLE_ON,使能引脚产生的使能信号,高电平停止工作,低电平正常工作;简单理解开关闭合,干还是停。
 *   Endstops: *_STOP_PIN, USE_*MIN_PLUG, USE_*MAX_PLUG
 *              _STOP_PIN,限位开关信号引脚 USE*MIN_PLUG,初始原点位信号 USE*MAX_PLUG,运动范围最长终点信号。
 *       Axes: *_MIN_POS, *_MAX_POS, INVERT_*_DIR
 *              _MIN_POS,轴初始位置信号  _MAX_POS,轴终点位置信号  INVERT_*_DIR,使某轴反转信号。
 *    Planner: DEFAULT_AXIS_STEPS_PER_UNIT, DEFAULT_MAX_FEEDRATE
 *             DEFAULT_AXIS_STEPS_PER_UNIT,默认轴初始位置  
               DEFAULT_MAX_FEEDRATE,  默认最大的轴转速,如挤出机挤出速度。                
 *             DEFAULT_MAX_ACCELERATION, AXIS_RELATIVE_MODES,         
 *             DEFAULT_MAX_ACCELERATION,默认各个轴的移动速度,可以调整修改  
 *             AXIS_RELATIVE_MODES, 轴相应模式
 *             MICROSTEP_MODES, MANUAL_FEEDRATE  微步进模式,  手动_进给速度。
 *
 * :[3, 4, 5, 6] (后边出现括号里的四个值一次对应于X,Y,Z,E四个轴的设置)
 */
//#define LINEAR_AXES 3
   /* 定义运行主线性轴数量 ,取消注释即可运行。*/
/**
 * Axis codes for additional axes:
 * 附加轴的轴名称
 * This defines the axis code that is used in G-code commands to
 * reference a specific axis.
 * 这定义了在g代码命令中用来引用特定轴的轴代码。
 * 'A' for rotational axis parallel to X
 * ”A"代表平行于X轴面旋转的轴
 * 'B' for rotational axis parallel to Y
 * ”B"代表平行于Y轴面旋转的轴
 * 'C' for rotational axis parallel to Z
 * ”C"代表平行于Z轴面旋转的轴
 * 'U' for secondary linear axis parallel to X
 * “U”代表平行于X的次级线性轴
 * 'V' for secondary linear axis parallel to Y
 * “V”代表平行于X的次级线性轴
 * 'W' for secondary linear axis parallel to Z
 * “W”代表平行于X的次级线性轴
 * Regardless of the settings, firmware-internal axis IDs are
 * 无论设置如何,固件内部轴标识为
 * I (AXIS4), J (AXIS5), K (AXIS6).
 */
#if LINEAR_AXES >= 4
  #define AXIS4_NAME 'A' // :['A', 'B', 'C', 'U', 'V', 'W']
  /* 定义默认运行主线性轴A ,没有A轴语句前加注释符,//注释掉即可关闭。 */
#endif
#if LINEAR_AXES >= 5
  #define AXIS5_NAME 'B' // :['A', 'B', 'C', 'U', 'V', 'W']
  /* 定义默认运行主线性轴B ,没有A轴语句前加注释符,//注释掉即可关闭。 */
#endif
#if LINEAR_AXES >= 6
  #define AXIS6_NAME 'C' // :['A', 'B', 'C', 'U', 'V', 'W']
  /* 定义默认运行主线性轴C ,没有A轴语句前加注释符,//注释掉即可关闭。 */
#endif

// @section extruder 选择挤出机

// This defines the number of extruders
   这里定义了挤出机的数量,最多几个,可用作不同功能9色打印。
// :[0, 1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 1
   /* 定义默认保留主挤出机1运行 */
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
   市面常见挤出耗材直径可分为(1.75, 2.85, 3.0, ...).可用体积,长度传感器。
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
   /* 定义默认运行主挤出机采用1.75mm直径耗材 */
// For Cyclops or any "multi-extruder" that shares a single nozzle.
   对于非分体式挤出机。多合一,例如2进1出,3进1出,多进一出等共用单个喷嘴的挤出机。
//#define SINGLENOZZLE
   /* 定义默认保留单喷嘴运行 */
// Save and restore temperature and fan speed on tool-change.
   /* 临时暂停或更换工具时保存并恢复温度和风扇速度。 */
// Set standby for the unselected tool with M104/106/109 T...
   用G代码中的,M104/106/109 T...等代码留作备用工具开发。
#if ENABLED(SINGLENOZZLE)
    /* 定义 单喷嘴 开关*/
  //#define SINGLENOZZLE_STANDBY_TEMP
    /* 定义 开启提升 单喷嘴_待机_温度 具体值见函数解释,一般为G代码 */
  //#define SINGLENOZZLE_STANDBY_FAN
    /* 定义 开启提升 单喷嘴散热风扇_待机_温度 具体值见函数解释,一般为G代码 */
#endif

/**
 * Multi-Material Unit
 * 多材料单位组合
 * Set to one of these predefined models:
 *  设置为以下预定义模型之一:
 *   PRUSA_MMU1           : Průša MMU1 (The "multiplexer" version)  Průša MMU1(“多路混合”版本)
 *   PRUSA_MMU2           : Průša MMU2
 *   PRUSA_MMU2S          : Průša MMU2S (Requires MK3S extruder with motion sensor, EXTRUDERS = 5)
 *                                        需要带运动传感器的MK3S挤出机,挤出机= 5台
 *   EXTENDABLE_EMU_MMU2  : MMU with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
 *   改进版 MMU2              具有可配置耗材细丝数量的MMU(ERCF、SMuFF或与Průša MMU2兼容的类似固件)
 *   EXTENDABLE_EMU_MMU2S : MMUS with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
 *   改进版 MMU2s             具有可配置耗材细丝数量的MMU(ERCF、SMuFF或与Průša MMU2兼容的类似固件)
 * Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
 * 如果内存管理单元出现故障,需要喷嘴停放功能来停放打印头。
 * See additional options in Configuration_adv.h.
 * 请参见高级结构配置库文件中的其他选项
 */
//#define MMU_MODEL PRUSA_MMU2
    /* 定义默认运行MMU_MODEL PRUSA_MMU2模式,注释掉//即可启动配置。 */

// A dual extruder that uses a single stepper motor
   /* 共用一个步进电机的双挤出机 */
   
//#define SWITCHING_EXTRUDER  
  /* 定义启动挤出机开关 ,注释掉即可启用。*/
  
#if ENABLED(SWITCHING_EXTRUDER)
   /* 定义挤出机开关使能。*/
  #define SWITCHING_EXTRUDER_SERVO_NR 0
      /* 定义 挤出机开关私服系统函数 值为 0 低电平 详见此函数库文件 */
  #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]
      /* 定义 挤出机开关伺服轴角度 ,角度可以适配E0,E1,或者E2,E3挤出机 */
  #if EXTRUDERS > 3  /* 当挤出机数量超过3个时候执行以下条件函数 */
    #define SWITCHING_EXTRUDER_E23_SERVO_NR 1
       /* 定义 挤出机开关私服系统函数 值为 1 高电平 详见次函数库文件 */
  #endif
#endif

// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
   /* 一个双头喷嘴 用使用伺服电机提升/降低一个(或两个)喷嘴 这种状态的挤出机时启动这条命令 */
//#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

/**
 * Two separate X-carriages with extruders that connect to a moving part
 * 两个独立的X-龙门托架部件的挤出机.带有连接到移动部件的挤出机
 * via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.
 * 通过螺线管对接机构。需要SOL1_PIN和SOL2_PIN。预留引脚,查看请到该函数库文件定义引脚查询
 */
//#define PARKING_EXTRUDER
 /* 定义 挤出机停车 */

/**
 * Two separate X-carriages with extruders that connect to a moving part
 * 两个独立的X-龙门托架部件的挤出机.带有连接到移动部件的挤出机
 * via a magnetic docking mechanism using movements and no solenoid
 * 通过使用移动的磁性对接机构并且没有螺线管,参照以下网站查看结构。
 * project   : https://www.thingiverse.com/thing:3080893
 * movements : https://youtu.be/0xCEiG9VS3k
 *             https://youtu.be/Bqbcs0CU2FE
 */
//#define MAGNETIC_PARKING_EXTRUDER
  /* 定义 磁力停车挤出机 注释掉即可使用 */
#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER)
   /* 停车挤压机、磁性停车挤压机 二选一 */

  #define PARKING_EXTRUDER_PARKING_X { -78, 184 }     // X positions for parking the extruders
   /* 定义 停车挤出机 X轴 坐标范围 既两个挤出机间距 */
  #define PARKING_EXTRUDER_GRAB_DISTANCE 1            // (mm) Distance to move beyond the parking point to grab the extruder
   /* 定义 停车挤出机 抓取距离 为 1 (毫米)移动到停车点以外以抓取挤出机的距离 */
  #if ENABLED(PARKING_EXTRUDER)
   /* 定义 停车挤出机使能开关 */
    #define PARKING_EXTRUDER_SOLENOIDS_INVERT           // If enabled, the solenoid is NOT magnetized with applied voltage
    /* 停车挤出机螺线管回抽 如果启用,电磁阀不会被外加电压磁化 */
    #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW  // LOW or HIGH pin signal energizes the coil
    /* 定义 停车挤出机螺线管管脚有效 LOW 低电平 原版应该写错了 应该为 0  低或高引脚信号激励线圈 */
    #define PARKING_EXTRUDER_SOLENOIDS_DELAY 250        // (ms) Delay for magnetic field. No delay if 0 or not defined.
    /* 定义 停车挤出机螺线管延迟转数 250 磁场延迟(毫秒)。如果为0或未定义,则无延迟。 */
    //#define MANUAL_SOLENOID_CONTROL                   // Manual control of docking solenoids with M380 S / M381
    /* 定义 手动螺线管控制 用M380 S / M381手动控制对接电磁阀 M380 和 M381 为G代码命令 */
  #elif ENABLED(MAGNETIC_PARKING_EXTRUDER)
    /* 如果不是前段命令提到的挤出机 执行磁力挤出命令 */
    /* #elif 使您得以创建复合条件指令。如果前面的 #if 和前面的任何 #elif(可选)指令表达式的计算结果都不是 true,则将计算 #elif 表达式。如果 #elif 表达式计算为 true,编译器将计算位于 #elif 和下一个条件指令之间的所有代码。例如:

可以使用运算符 ==(相等)、!=(不相等)、&&(与)及 ||(或)来计算多个符号。还可以用括号将符号和运算符分组。

#elif 等效于使用:

使用 #elif 更简单,因为每个 #if 都需要一个 #endif,而 #elif 即使在没有匹配的 #endif 时也可以使用。

有关如何使用 #elif 的示例,请参见 #if。*/
   
    #define MPE_FAST_SPEED      9000      // (mm/min) Speed for travel before last distance point
    /*定义磁力挤出机最快速度 9000  (毫米/分钟)最后一个距离点之前的行驶速度 */
    #define MPE_SLOW_SPEED      4500      // (mm/min) Speed for last distance travel to park and couple
    /* 定义磁力挤出机最慢速度      4500  (毫米/分钟)最后一次停车和行程距离的速度 */
    #define MPE_TRAVEL_DISTANCE   10      // (mm) Last distance point
    /* 定义 磁力挤出机行程距离  最后距离点收工远离点,因为挤出头有温度,会把模型停留超时融化 */
    #define MPE_COMPENSATION       0      // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling
    /* 定义 磁力挤出机补偿 低电平 0 启动配置 偏移补偿-1,0,1(乘法器),仅用于耦合 */
  #endif

#endif

/**
 * Switching Toolhead
 * 切换工具头
 * Support for swappable and dockable toolheads, such as
 * 支持可交换和可停靠的工具头,例如
 * the E3D Tool Changer. Toolheads are locked with a servo.
 * E3D工具更换器。工具头被伺服系统锁定 有兴趣请见此视频链接 DIY E3D工具更换器_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
 * E3D刀具更换器::Titan Aero刀具适配器_STL模型_3D模型下载_迪威模型
 */
//#define SWITCHING_TOOLHEAD
  /* 定义 开关换刀工具系统 */
/**
 * Magnetic Switching Toolhead
 * 磁性开关换刀工具系统
 * Support swappable and dockable toolheads with a magnetic
 * 支持可交换和可停靠到带有磁性的换刀系统
 * docking mechanism using movement and no servo.
 * 使用移动和无伺服的对接机构
 */
//#define MAGNETIC_SWITCHING_TOOLHEAD
  /* 定义 磁性自动换刀系统 */
/**
 * Electromagnetic Switching Toolhead
 * 电磁性自动换刀系统
 * Parking for CoreXY / HBot kinematics.
 * CoreXY / HBot运动学的停车。
 * Toolheads are parked at one edge and held with an electromagnet.
 * 工具头停在一边,用电磁铁固定。
 * Supports more than 2 Toolheads. See https://youtu.be/JolbsAKTKf4
 * 支持大于2个以上工具头,详见youtube
 */
//#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD
 /* 定义 电磁控制自动换刀工具系统 */

#if ANY(SWITCHING_TOOLHEAD, MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
 /* 如果三种结构之一,条件成立执行相应程序 */
  #define SWITCHING_TOOLHEAD_Y_POS          235         // (mm) Y position of the toolhead dock
  /* 定义 普通自动换刀系统 Y 轴 位置 235 工具头底座的Y位置 */
  #define SWITCHING_TOOLHEAD_Y_SECURITY      10         // (mm) Security distance Y axis
  /* 定义 普通自动换刀系统 Y 轴 安全距离 10 mm (毫米)安全距离Y轴 */
  #define SWITCHING_TOOLHEAD_Y_CLEAR         60         // (mm) Minimum distance from dock for unobstructed X axis
  /* 定义 普通自动换刀系统 Y 轴 悬离  60 mm   不受阻碍的X轴到装置最小距离(毫米) */
  #define SWITCHING_TOOLHEAD_X_POS          { 215, 0 }  // (mm) X positions for parking the extruders
  /* 定义 普通自动换刀系统 X 轴 位置 215 工具头底座的X位置 */
  #if ENABLED(SWITCHING_TOOLHEAD)
    /* 启动 普通自动换刀系统 */
    #define SWITCHING_TOOLHEAD_SERVO_NR       2         // Index of the servo connector
    /* 定义 普通自动换刀系统伺服电机 引脚 2 伺服连接器的索引 */
    #define SWITCHING_TOOLHEAD_SERVO_ANGLES { 0, 180 }  // (degrees) Angles for Lock, Unlock
    /* 定义 普通自动换刀系统伺服电机 轴角度 0,180 锁定、解锁角度(度) */
  #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/min) Extruder prime feedrate
      #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400  // (mm/min) Extruder retract feedrate
    #endif
  #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
    /* 同以上释义 电磁性自动换刀系统 */
    #define SWITCHING_TOOLHEAD_Z_HOP          2         // (mm) Z raise for switching
  #endif
#endif

/**
 * "Mixing Extruder"
 * 混合挤出机
 *   - Adds G-codes M163 and M164 to set and "commit" the current mix factors.
 *    添加g代码M163和M164来设置和“提交”当前混合因子。
 *   - Extends the stepping routines to move multiple steppers in proportion to the mix.
 *   扩展步进程序,按照混合比例移动多个步进器。
 *   - Optional support for Repetier Firmware's 'M164 S<index>' supporting virtual tools.
 *   可选支持重复固件的“M164 S”支持虚拟工具。
 *   - This implementation supports up to two mixing extruders.
 *   该实施方案最多支持两台混合挤出机。
 *   - Enable DIRECT_MIXING_IN_G1 for M165 and mixing in G1 (from Pia Taubert's reference implementation).
 *   为M165启用G1直接混和和G1混和(来自皮娅·陶伯特的参考实现)。
 */
//#define MIXING_EXTRUDER
  /* 定义 混合挤出机 */
#if ENABLED(MIXING_EXTRUDER)
  /* 开启 混合挤出机 */
  #define MIXING_STEPPERS 2        // Number of steppers in your mixing extruder
  /* 定义 混合挤出机步进电机 2 混合挤出机中的步进机数量 */
  #define MIXING_VIRTUAL_TOOLS 16  // Use the Virtual Tool method with M163 and M164
  /* 定义 混合虚拟工具 16 使用M163和M164的虚拟工具方法 */
  //#define DIRECT_MIXING_IN_G1    // Allow ABCDHI mix factors in G1 movement commands
  /* 定义 G1的直接混合 在G1运动命令中允许ABCDHI混合因子 */
  //#define GRADIENT_MIX           // Support for gradient mixing with M166 and LCD
  /* 定义 渐变混合 M166和液晶显示器支持渐变混合 */
  //#define MIXING_PRESETS         // Assign 8 default V-tool presets for 2 or 3 MIXING_STEPPERS
   /* 定义 混合预设 为2或3个混合步进器指定8个默认的垂直工具预设 */
  #if ENABLED(GRADIENT_MIX)
   /* 启动 渐变混合 */
    //#define GRADIENT_VTOOL       // Add M166 T to use a V-tool index as a Gradient alias
     /* 定义 渐变虚拟工具 添加M166 T以使用V形工具索引作为渐变别名 */
  #endif
#endif

// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
/*挤出机的偏移 如果使用多个并在更换时依靠固件定位,请取消注释 */
// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
 /* 对于挤出机0(默认挤出机),偏移量必须为X=0,Y=0 */
// For the other hotends it is their distance from the extruder 0 hotend.
  /* 对其他挤出机来说,这是他们离挤压机的距离。 */
//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle
  /* 定义 挤出机偏移X 轴 (毫米)每个喷嘴的相对X偏移 */
//#define HOTEND_OFFSET_Y { 0.0, 5.00 }  // (mm) relative Y-offset for each nozzle
   /* 定义 挤出机偏移Y轴 (毫米)每个喷嘴的相对X偏移 */
//#define HOTEND_OFFSET_Z { 0.0, 0.00 }  // (mm) relative Z-offset for each nozzle
    /* 定义 挤出机偏移Z轴 (毫米)每个喷嘴的相对X偏移 */
// @section machine

/**
 * Power Supply Control
 * 电源供给控制
 * Enable and connect the power supply to the PS_ON_PIN.
 * 启用电源并将电源连接到电源开引脚。
 * Specify whether the power supply is active HIGH or active LOW.
 * 指定电源是高电平有效还是低电平有效。
 */
//#define PSU_CONTROL
  /* 定义 电源供给控制 */
//#define PSU_NAME "Power Supply"
 /* 定义  电源供给控制 名称 电源供给 */

#if ENABLED(PSU_CONTROL)
    /* 启动 电源供给控制 */
  //#define MKS_PWC                 // Using the MKS PWC add-on
    /* 定义 MKS 电源供给控制 用MKS电源供给控制模块 */
  //#define PS_OFF_CONFIRM          // Confirm dialog when power off
    /* 定义 电源关闭确认 关机时确认对话框 */
  //#define PS_OFF_SOUND            // Beep 1s when power off
   /* 定义  电源关闭声音   Bi 1秒 当切断电源时 */
  #define PSU_ACTIVE_STATE LOW      // Set 'LOW' for ATX, 'HIGH' for X-Box
  /* 定义 开关电源控制 活动状态 低电平 为ATX设置“低”,为X-Box设置“高”  */
  //#define PSU_DEFAULT_OFF         // Keep power off until enabled directly with M80
    /* 定义 开关电源控制 默认关闭状态 保持电源关闭,直到直接启用M80代码 */
  //#define PSU_POWERUP_DELAY 250   // (ms) Delay for the PSU to warm up to full power
    /* 定义 开关电源控制 默认延迟 250 ms  (毫秒)延迟PSU预热至满功率 */
  //#define PSU_POWERUP_GCODE  "M355 S1"  // G-code to run after power-on (e.g., case light on)
    /* 定义 开关电源控制 G代码 为 M355 S1 开机后运行的g代码(例如,机箱灯亮) */
  //#define PSU_POWEROFF_GCODE "M355 S0"  // G-code to run before power-off (e.g., case light off)
     /* 定义 开关电源控制 G代码 为 M355 S0 断电前运行的g代码(例如,外壳灯关闭) */
  //#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_COOLER_FAN
     /* 定义 自动开关机电源 冷却器风扇 */
    //#define AUTO_POWER_E_TEMP        50 // (°C) Turn on PSU if any extruder is over this temperature
      /* 定义 自定开关电源 挤出机温度控制 50° 如果有任何挤出机超过这个温度,打开开关电源。 */
    //#define AUTO_POWER_CHAMBER_TEMP  30 // (°C) Turn on PSU if the chamber is over this temperature
      /* 定义 自定开关电源 密封箱温度30° 如果密封箱超过温度,打开开关电源。 */
    //#define AUTO_POWER_COOLER_TEMP   26 // (°C) Turn on PSU if the cooler is over this temperature
      /* 定义 自定开关电源 冷却器温度控制 26° 如果有任何冷却器超过这个温度,打开开关电源。 */
    #define POWER_TIMEOUT              30 // (s) Turn off power if the machine is idle for this duration
      /* 定义 自动开关电源 电源超时 30 秒 如果机器在此期间闲置,请关闭电源 */
    //#define POWER_OFF_DELAY          60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time.
     /* 定义 电源关闭延时 60 秒 M81命令后断电延迟。让风扇跑一会儿很有用 */
  #endif
#endif

/**
 * Marlin 3D Printer Firmware
 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 *
 * Based on Sprinter and grbl.
 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */
#pragma once  /*#pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次*/

/**
 * Configuration.h
 * 固件配置文件都在Configuration.h 中
 * Basic settings such as:
 * 基本设置有以下几个方面:
 * - Type of electronics
 * - 电器元件电路配置,意指世界各地某些厂商开发的板卡上的参数,例如对应芯片输出输入管脚定义,高低电平,信号功能等。
 * - Type of temperature sensor
 * - 温度传感器的类型 温度传感器是一种将温度变量转换为可传送的标准化输出信号的传感器。
 * - (常用分为热电偶与热电阻,这里常用于热床和挤出头温度监测,不达到热度主程序不启动。)
 * - Printer geometry  
 * - 打印成品最大体积尺寸,(常态设置长宽高行程)。
 * - Endstop configuration
 * - 限位开关设置 (常态设置为X,Y,Z轴最小起点,也可以根据结构不同设置成最大终点。Min X,Y,Z 和 Max X,Y,Z.)
 * - LCD controller
 * - LCD 显示屏的控制 (marlin标配单色点阵显示器有1602,和12864,还有3.5寸彩屏,4寸彩屏等内置库。
 * - 例:12864液晶屏用的比较多。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。
 * - 我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108、T6963C,ST7920等等。)
 * - Extra features
 * - 还有一些其他的额外功能 (例如:断电续打、打完关机、断料检测、热床调平、WiFi远程传文件、远程管理等。
 * -                      酷炫的还有自制时候安装一些灯,当然这些都可以通过定义管脚编程实现自动化开关亮度调节)
 *
 * Advanced settings can be found in Configuration_adv.h
 * - 更多的高级设置当然可以在高级配置文件里面找到
 */
#define CONFIGURATION_H_VERSION 02000902  /*定义当前配置文件版本是marlin 2.0.9.2版*/

//===========================================================================
//============================= Getting Started =============================
//===========================================================================
   /*开始走起正文*/
/**
 * Here are some useful links to help get your machine configured and calibrated:
 * 这给你几个链接,可能对于你调配机器有所帮助:调制和校准
 *
 * Example Configs:     https://github.com/MarlinFirmware/Configurations/branches/all
 * 配置案例大样链接
 * Průša Calculator:    https://blog.prusaprinters.org/calculator_3416/
 * 在线计算器链接,很有帮助,调配计算很多参数,比如常见的电机转数角度步数对应几何长度计算,各种类型耗材(PLA,ABS)线长和重量以及造价计算的对应关系。
 *                      Filament 耗材   Stepper Motors 步进电机  Acceleration 最大加速度
 * Calibration Guides:  https://reprap.org/wiki/Calibration
 *      调校指南          https://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
 *                      https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
 *                      https://youtu.be/wAL9d7FgInk
 *
 * Calibration Objects: https://www.thingiverse.com/thing:5573
 * 调校可用到的打印物体文件 https://www.thingiverse.com/thing:1278865
 */

//===========================================================================
//========================== DELTA / SCARA / TPARA ==========================  DELTA三角洲架构,SCARA水平多关节架构,TPARA 直角坐标架构
//===========================================================================
//
// Download configurations from the link above and customize for your machine.
// Examples are located in config/examples/delta, .../SCARA, and .../TPARA.
// 从上面的链接下载配置并为您的机器定制。示例位于配置/示例/增量中,.../SCARA和.../TPARA。
//===========================================================================

// @section info

// Author info of this build printed to the host during boot and M115   
   /*这个版本的作者信息可以使用M代码M115反馈打印回传到主机*/
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
   /*定义STRING_CONFIG_H_AUTHOR函数的两个值没有和默认设置,设置固件作者信息,可在窗口通信的是候看到。谁做了改变*/
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
   /*定义SCUSTOM_VERSION_FILE函数,版本文件惯例,根目录的路径(无引号)*/
/**
 * *** VENDORS PLEASE READ ***
 *       制造商供应商请阅读
 * Marlin allows you to add a custom boot image for Graphical LCDs. 
 * 马林允许您为图形液晶显示器添加自定义引导映像。
 * With this option Marlin will first show your custom screen followed
 * 有了这个选项,马林将首先显示您的自定义屏幕
 * by the standard Marlin logo with version number and web URL.
 * 由标准的马林标志与版本号和网址。
 * We encourage you to take advantage of this new feature and we also
 * respectfully request that you retain the unmodified Marlin boot screen.
 * 我们鼓励您利用这一新功能,我们还敬请您保留未修改的马林引导屏幕。
 */

// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
   /*启动时显示马林引导屏幕。**支持批量生产模式** */
#define SHOW_BOOTSCREEN  
   /*定义 点亮启动屏幕,如果注释掉这行的话开机就不会显示开机初始画面,直接进入主界面。*/
// Show the bitmap in Marlin/_Bootscreen.h on startup.
   /* 启动时显示的位图(开机画面)在 Marlin/_ Bootsscreen . h文件中 */
//#define SHOW_CUSTOM_BOOTSCREEN
  /* 也可以定义第二顺序可以显示厂商自定义开机画面logo,取消//行首注释,即可显示 */
// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
  /* 显示位图屏幕状态文件在马林文件夹下 Statusscreen.h 中 */
//#define CUSTOM_STATUS_SCREEN_IMAGE
  /*定义 屏幕待机状态,如果注释掉这行的话就不会显示待机状态,直接运行下一步程序。*/
// @section machine 机器选择

/**
 * 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.
 * 串行端口-1是USB仿真串行端口(如果有的话)。
 * Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
 * 注意:第一个串行端口(-1或0)将始终由Arduino引导加载程序使用。
 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
#define SERIAL_PORT 0
  /* 启动串行接口 0 ,以实现与主机通讯 */

/**
 * 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.
 * 250000在大多数情况下是可行的,但是如果在主机打印过程中,可能您通常会遇到掉线的情况。
 * You may try up to 1000000 to speed up SD file transfer.
 * 您也可以尝试高达1000000来加速SD文件传输。
 * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
 */
#define BAUDRATE 250000
  /* 定义 默认运行250000 比特率 可自行修改 */
//#define BAUD_RATE_GCODE     // Enable G-code M575 to set the baud rate
  /* 定义 BAUD_RATE_GCODE  比特率改变可用M575命令,在做上位机时不通过改变固件即可更改。 可自行修改设置比特率 
     ([2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]) */
/**
 * Select a secondary serial port on the board to use for communication with the host.
 * 在主板上选择另外一个即第二个串行接口作为与主机通讯
 * Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
 * 目前以太网(-2)仅在Tinesy 4.1板上受支持。
 * :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
//#define SERIAL_PORT_2 -1
  /* 定义运行第二个串行接口,取消注释即可运行。 */
//#define BAUDRATE_2 250000   // Enable to override BAUDRATE
  /* 定义运行第二个串行接口通讯速率设置为250000,取消注释即可运行。启用以覆盖BAUDRATE */
/**
 * Select a third serial port on the board to use for communication with the host.
 * 在主板上选择另外一个即第三个串行接口作为与主机通讯
 * Currently only supported for AVR, DUE, LPC1768/9 and STM32/STM32F1
 * 目前仅在AVR系列,DUE系列,LPC1768/9和STM32系列/STM32F1系列芯片主板上受支持。
 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
//#define SERIAL_PORT_3 1
   /* 定义运行第三个串行接口,取消注释即可运行。 */
//#define BAUDRATE_3 250000   // Enable to override BAUDRATE
   /* 定义运行第三个串行接口通讯速率设置为250000,取消注释即可运行。启用以覆盖BAUDRATE */
// Enable the Bluetooth serial interface on AT90USB devices
   /* 支持AT90USB驱动 设备上启用蓝牙串行接口 */
//#define BLUETOOTH
  /* 定义运行蓝牙串行接口,取消注释即可运行。 */
// Choose the name from boards.h that matches your setup
  /* 选用与你匹配主板的名字,可在主板库 boards.h 文件中查询,然后调用启用安装。 */
#ifndef MOTHERBOARD 
    /* #ifndef是"if not defined"的简写,是宏定义的一种,它是可以根据是否已经定义了一个变量来进行分支选择,一般用于调试调用等。 */
  #define MOTHERBOARD BOARD_RAMPS_14_EFB
   /* 马林固件默认运行定义运行RAMPS_14_EFB主板,取消注释即可运行选择其他主板,
      RAMPS_14_EFB主板长这个样子https://reprap.org/wiki/RAMPS_1.4。 */
#endif 
   /* #ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。
       #ifndef 标识1 //判断"标识1"是否定义,如果被定义则返回假,如果没有被定义则返回真。

      语句1 #ifndef 标识1

       语句2 #define 标识1

        语句3 #endif

          语句4 ……

            语句5 ……

     该段代码意思是:如果标识1没有被定义,则重定义标识1,即执行语句2、语句3;如果标识1已经被定义,
     则直接跳过语句2、语句3,直接执行语句4、语句5、……

     */ 
   

// Name displayed in the LCD "Ready" message and Info menu
  /* 液晶屏“就绪待机等待”信息 和信息菜单中显示的名称 */
//#define CUSTOM_MACHINE_NAME "3D Printer"
   /* 定义运行显示自定义名称“3D打印机”,名称可更改,取消注释即可运行显示。 */
// Printer's unique ID, used by some programs to differentiate between machines.
   /* 打印机的唯一标识,被一些程序用来区分机器. */
// Choose your own or use a service like https://www.uuidgenerator.net/version4
   /* 这个链接是一个不错的机器串号在线生成器 */
//#define MACHINE_UUID "e138a2b7-9200-458e-ac60-d92f0f6d06a4"
  /* 定义运行显示自定义串号名称“e138a2b7-9200-458e-ac60-d92f0f6d06a4”,
     名称由上述链接在线串号生成器提供可更改,取消注释即可运行嵌入。 */
/**
 * Define the number of coordinated linear axes.
 * 定义搭配轴的数量
 * See https://github.com/DerAndere1/Marlin/wiki
 * axis 3D printers axes (AXIS*_NAME 'X', 'Y' or 'Z')
 * 三种打印机一般轴名称为X,Y,Z.
 * axes (AXIS*_NAME 'A', 'B' or 'C') or secondary linear axes (AXIS*_NAME 'U', 'V' or 'W').  
 * 更多的数控设备轴名称规范为,A,B,C,E.二者机器人坐标轴为U,V,W。
 * Each linear axis gets its own stepper control and endstop:
 * 每个线性轴都有自己的步进电机控制和限位开关:
 *   Steppers: *_STEP_PIN, *_ENABLE_PIN, *_DIR_PIN, *_ENABLE_ON
 *             步进电机控制信号函数名称为:
 *             _STEP_PIN,脉冲步数引脚,最重要的引脚,通过单片机给这个引脚PWM脉冲信号,控制电机运动轴运动角度。;
 *             _ENABLE_PIN,使能引脚。
 *             _DIR_PIN,控制电机方向引脚,正转或是逆转。
 *             _ENABLE_ON,使能引脚产生的使能信号,高电平停止工作,低电平正常工作;简单理解开关闭合,干还是停。
 *   Endstops: *_STOP_PIN, USE_*MIN_PLUG, USE_*MAX_PLUG
 *              _STOP_PIN,限位开关信号引脚 USE*MIN_PLUG,初始原点位信号 USE*MAX_PLUG,运动范围最长终点信号。
 *       Axes: *_MIN_POS, *_MAX_POS, INVERT_*_DIR
 *              _MIN_POS,轴初始位置信号  _MAX_POS,轴终点位置信号  INVERT_*_DIR,使某轴反转信号。
 *    Planner: DEFAULT_AXIS_STEPS_PER_UNIT, DEFAULT_MAX_FEEDRATE
 *             DEFAULT_AXIS_STEPS_PER_UNIT,默认轴初始位置  
               DEFAULT_MAX_FEEDRATE,  默认最大的轴转速,如挤出机挤出速度。                
 *             DEFAULT_MAX_ACCELERATION, AXIS_RELATIVE_MODES,         
 *             DEFAULT_MAX_ACCELERATION,默认各个轴的移动速度,可以调整修改  
 *             AXIS_RELATIVE_MODES, 轴相应模式
 *             MICROSTEP_MODES, MANUAL_FEEDRATE  微步进模式,  手动_进给速度。
 *
 * :[3, 4, 5, 6] (后边出现括号里的四个值一次对应于X,Y,Z,E四个轴的设置)
 */
//#define LINEAR_AXES 3
   /* 定义运行主线性轴数量 ,取消注释即可运行。*/
/**
 * Axis codes for additional axes:
 * 附加轴的轴名称
 * This defines the axis code that is used in G-code commands to
 * reference a specific axis.
 * 这定义了在g代码命令中用来引用特定轴的轴代码。
 * 'A' for rotational axis parallel to X
 * ”A"代表平行于X轴面旋转的轴
 * 'B' for rotational axis parallel to Y
 * ”B"代表平行于Y轴面旋转的轴
 * 'C' for rotational axis parallel to Z
 * ”C"代表平行于Z轴面旋转的轴
 * 'U' for secondary linear axis parallel to X
 * “U”代表平行于X的次级线性轴
 * 'V' for secondary linear axis parallel to Y
 * “V”代表平行于X的次级线性轴
 * 'W' for secondary linear axis parallel to Z
 * “W”代表平行于X的次级线性轴
 * Regardless of the settings, firmware-internal axis IDs are
 * 无论设置如何,固件内部轴标识为
 * I (AXIS4), J (AXIS5), K (AXIS6).
 */
#if LINEAR_AXES >= 4
  #define AXIS4_NAME 'A' // :['A', 'B', 'C', 'U', 'V', 'W']
  /* 定义默认运行主线性轴A ,没有A轴语句前加注释符,//注释掉即可关闭。 */
#endif
#if LINEAR_AXES >= 5
  #define AXIS5_NAME 'B' // :['A', 'B', 'C', 'U', 'V', 'W']
  /* 定义默认运行主线性轴B ,没有A轴语句前加注释符,//注释掉即可关闭。 */
#endif
#if LINEAR_AXES >= 6
  #define AXIS6_NAME 'C' // :['A', 'B', 'C', 'U', 'V', 'W']
  /* 定义默认运行主线性轴C ,没有A轴语句前加注释符,//注释掉即可关闭。 */
#endif

// @section extruder 选择挤出机

// This defines the number of extruders
   这里定义了挤出机的数量,最多几个,可用作不同功能9色打印。
// :[0, 1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 1
   /* 定义默认保留主挤出机1运行 */
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
   市面常见挤出耗材直径可分为(1.75, 2.85, 3.0, ...).可用体积,长度传感器。
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
   /* 定义默认运行主挤出机采用1.75mm直径耗材 */
// For Cyclops or any "multi-extruder" that shares a single nozzle.
   对于非分体式挤出机。多合一,例如2进1出,3进1出,多进一出等共用单个喷嘴的挤出机。
//#define SINGLENOZZLE
   /* 定义默认保留单喷嘴运行 */
// Save and restore temperature and fan speed on tool-change.
   /* 临时暂停或更换工具时保存并恢复温度和风扇速度。 */
// Set standby for the unselected tool with M104/106/109 T...
   用G代码中的,M104/106/109 T...等代码留作备用工具开发。
#if ENABLED(SINGLENOZZLE)
    /* 定义 单喷嘴 开关*/
  //#define SINGLENOZZLE_STANDBY_TEMP
    /* 定义 开启提升 单喷嘴_待机_温度 具体值见函数解释,一般为G代码 */
  //#define SINGLENOZZLE_STANDBY_FAN
    /* 定义 开启提升 单喷嘴散热风扇_待机_温度 具体值见函数解释,一般为G代码 */
#endif

/**
 * Multi-Material Unit
 * 多材料单位组合
 * Set to one of these predefined models:
 *  设置为以下预定义模型之一:
 *   PRUSA_MMU1           : Průša MMU1 (The "multiplexer" version)  Průša MMU1(“多路混合”版本)
 *   PRUSA_MMU2           : Průša MMU2
 *   PRUSA_MMU2S          : Průša MMU2S (Requires MK3S extruder with motion sensor, EXTRUDERS = 5)
 *                                        需要带运动传感器的MK3S挤出机,挤出机= 5台
 *   EXTENDABLE_EMU_MMU2  : MMU with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
 *   改进版 MMU2              具有可配置耗材细丝数量的MMU(ERCF、SMuFF或与Průša MMU2兼容的类似固件)
 *   EXTENDABLE_EMU_MMU2S : MMUS with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
 *   改进版 MMU2s             具有可配置耗材细丝数量的MMU(ERCF、SMuFF或与Průša MMU2兼容的类似固件)
 * Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
 * 如果内存管理单元出现故障,需要喷嘴停放功能来停放打印头。
 * See additional options in Configuration_adv.h.
 * 请参见高级结构配置库文件中的其他选项
 */
//#define MMU_MODEL PRUSA_MMU2
    /* 定义默认运行MMU_MODEL PRUSA_MMU2模式,注释掉//即可启动配置。 */

// A dual extruder that uses a single stepper motor
   /* 共用一个步进电机的双挤出机 */
   
//#define SWITCHING_EXTRUDER  
  /* 定义启动挤出机开关 ,注释掉即可启用。*/
  
#if ENABLED(SWITCHING_EXTRUDER)
   /* 定义挤出机开关使能。*/
  #define SWITCHING_EXTRUDER_SERVO_NR 0
      /* 定义 挤出机开关私服系统函数 值为 0 低电平 详见此函数库文件 */
  #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]
      /* 定义 挤出机开关伺服轴角度 ,角度可以适配E0,E1,或者E2,E3挤出机 */
  #if EXTRUDERS > 3  /* 当挤出机数量超过3个时候执行以下条件函数 */
    #define SWITCHING_EXTRUDER_E23_SERVO_NR 1
       /* 定义 挤出机开关私服系统函数 值为 1 高电平 详见次函数库文件 */
  #endif
#endif

// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
   /* 一个双头喷嘴 用使用伺服电机提升/降低一个(或两个)喷嘴 这种状态的挤出机时启动这条命令 */
//#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

/**
 * Two separate X-carriages with extruders that connect to a moving part
 * 两个独立的X-龙门托架部件的挤出机.带有连接到移动部件的挤出机
 * via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.
 * 通过螺线管对接机构。需要SOL1_PIN和SOL2_PIN。预留引脚,查看请到该函数库文件定义引脚查询
 */
//#define PARKING_EXTRUDER
 /* 定义 挤出机停车 */

/**
 * Two separate X-carriages with extruders that connect to a moving part
 * 两个独立的X-龙门托架部件的挤出机.带有连接到移动部件的挤出机
 * via a magnetic docking mechanism using movements and no solenoid
 * 通过使用移动的磁性对接机构并且没有螺线管,参照以下网站查看结构。
 * project   : https://www.thingiverse.com/thing:3080893
 * movements : https://youtu.be/0xCEiG9VS3k
 *             https://youtu.be/Bqbcs0CU2FE
 */
//#define MAGNETIC_PARKING_EXTRUDER
  /* 定义 磁力停车挤出机 注释掉即可使用 */
#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER)
   /* 停车挤压机、磁性停车挤压机 二选一 */

  #define PARKING_EXTRUDER_PARKING_X { -78, 184 }     // X positions for parking the extruders
   /* 定义 停车挤出机 X轴 坐标范围 既两个挤出机间距 */
  #define PARKING_EXTRUDER_GRAB_DISTANCE 1            // (mm) Distance to move beyond the parking point to grab the extruder
   /* 定义 停车挤出机 抓取距离 为 1 (毫米)移动到停车点以外以抓取挤出机的距离 */
  #if ENABLED(PARKING_EXTRUDER)
   /* 定义 停车挤出机使能开关 */
    #define PARKING_EXTRUDER_SOLENOIDS_INVERT           // If enabled, the solenoid is NOT magnetized with applied voltage
    /* 停车挤出机螺线管回抽 如果启用,电磁阀不会被外加电压磁化 */
    #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW  // LOW or HIGH pin signal energizes the coil
    /* 定义 停车挤出机螺线管管脚有效 LOW 低电平 原版应该写错了 应该为 0  低或高引脚信号激励线圈 */
    #define PARKING_EXTRUDER_SOLENOIDS_DELAY 250        // (ms) Delay for magnetic field. No delay if 0 or not defined.
    /* 定义 停车挤出机螺线管延迟转数 250 磁场延迟(毫秒)。如果为0或未定义,则无延迟。 */
    //#define MANUAL_SOLENOID_CONTROL                   // Manual control of docking solenoids with M380 S / M381
    /* 定义 手动螺线管控制 用M380 S / M381手动控制对接电磁阀 M380 和 M381 为G代码命令 */
  #elif ENABLED(MAGNETIC_PARKING_EXTRUDER)
    /* 如果不是前段命令提到的挤出机 执行磁力挤出命令 */
    /* #elif 使您得以创建复合条件指令。如果前面的 #if 和前面的任何 #elif(可选)指令表达式的计算结果都不是 true,则将计算 #elif 表达式。如果 #elif 表达式计算为 true,编译器将计算位于 #elif 和下一个条件指令之间的所有代码。例如:

可以使用运算符 ==(相等)、!=(不相等)、&&(与)及 ||(或)来计算多个符号。还可以用括号将符号和运算符分组。

#elif 等效于使用:

使用 #elif 更简单,因为每个 #if 都需要一个 #endif,而 #elif 即使在没有匹配的 #endif 时也可以使用。

有关如何使用 #elif 的示例,请参见 #if。*/
   
    #define MPE_FAST_SPEED      9000      // (mm/min) Speed for travel before last distance point
    /*定义磁力挤出机最快速度 9000  (毫米/分钟)最后一个距离点之前的行驶速度 */
    #define MPE_SLOW_SPEED      4500      // (mm/min) Speed for last distance travel to park and couple
    /* 定义磁力挤出机最慢速度      4500  (毫米/分钟)最后一次停车和行程距离的速度 */
    #define MPE_TRAVEL_DISTANCE   10      // (mm) Last distance point
    /* 定义 磁力挤出机行程距离  最后距离点收工远离点,因为挤出头有温度,会把模型停留超时融化 */
    #define MPE_COMPENSATION       0      // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling
    /* 定义 磁力挤出机补偿 低电平 0 启动配置 偏移补偿-1,0,1(乘法器),仅用于耦合 */
  #endif

#endif

/**
 * Switching Toolhead
 * 切换工具头
 * Support for swappable and dockable toolheads, such as
 * 支持可交换和可停靠的工具头,例如
 * the E3D Tool Changer. Toolheads are locked with a servo.
 * E3D工具更换器。工具头被伺服系统锁定 有兴趣请见此视频链接 https://www.bilibili.com/s/video/BV1D5411a7Cw
 * http://www.3dwhere.com/models/73lxdohdgfe5c8i0
 */
//#define SWITCHING_TOOLHEAD
  /* 定义 开关换刀工具系统 */
/**
 * Magnetic Switching Toolhead
 * 磁性开关换刀工具系统
 * Support swappable and dockable toolheads with a magnetic
 * 支持可交换和可停靠到带有磁性的换刀系统
 * docking mechanism using movement and no servo.
 * 使用移动和无伺服的对接机构
 */
//#define MAGNETIC_SWITCHING_TOOLHEAD
  /* 定义 磁性自动换刀系统 */
/**
 * Electromagnetic Switching Toolhead
 * 电磁性自动换刀系统
 * Parking for CoreXY / HBot kinematics.
 * CoreXY / HBot运动学的停车。
 * Toolheads are parked at one edge and held with an electromagnet.
 * 工具头停在一边,用电磁铁固定。
 * Supports more than 2 Toolheads. See https://youtu.be/JolbsAKTKf4
 * 支持大于2个以上工具头,详见youtube
 */
//#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD
 /* 定义 电磁控制自动换刀工具系统 */

#if ANY(SWITCHING_TOOLHEAD, MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
 /* 如果三种结构之一,条件成立执行相应程序 */
  #define SWITCHING_TOOLHEAD_Y_POS          235         // (mm) Y position of the toolhead dock
  /* 定义 普通自动换刀系统 Y 轴 位置 235 工具头底座的Y位置 */
  #define SWITCHING_TOOLHEAD_Y_SECURITY      10         // (mm) Security distance Y axis
  /* 定义 普通自动换刀系统 Y 轴 安全距离 10 mm (毫米)安全距离Y轴 */
  #define SWITCHING_TOOLHEAD_Y_CLEAR         60         // (mm) Minimum distance from dock for unobstructed X axis
  /* 定义 普通自动换刀系统 Y 轴 悬离  60 mm   不受阻碍的X轴到装置最小距离(毫米) */
  #define SWITCHING_TOOLHEAD_X_POS          { 215, 0 }  // (mm) X positions for parking the extruders
  /* 定义 普通自动换刀系统 X 轴 位置 215 工具头底座的X位置 */
  #if ENABLED(SWITCHING_TOOLHEAD)
    /* 启动 普通自动换刀系统 */
    #define SWITCHING_TOOLHEAD_SERVO_NR       2         // Index of the servo connector
    /* 定义 普通自动换刀系统伺服电机 引脚 2 伺服连接器的索引 */
    #define SWITCHING_TOOLHEAD_SERVO_ANGLES { 0, 180 }  // (degrees) Angles for Lock, Unlock
    /* 定义 普通自动换刀系统伺服电机 轴角度 0,180 锁定、解锁角度(度) */
  #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/min) Extruder prime feedrate
      #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400  // (mm/min) Extruder retract feedrate
    #endif
  #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
    /* 同以上释义 电磁性自动换刀系统 */
    #define SWITCHING_TOOLHEAD_Z_HOP          2         // (mm) Z raise for switching
  #endif
#endif

/**
 * "Mixing Extruder"
 * 混合挤出机
 *   - Adds G-codes M163 and M164 to set and "commit" the current mix factors.
 *    添加g代码M163和M164来设置和“提交”当前混合因子。
 *   - Extends the stepping routines to move multiple steppers in proportion to the mix.
 *   扩展步进程序,按照混合比例移动多个步进器。
 *   - Optional support for Repetier Firmware's 'M164 S<index>' supporting virtual tools.
 *   可选支持重复固件的“M164 S”支持虚拟工具。
 *   - This implementation supports up to two mixing extruders.
 *   该实施方案最多支持两台混合挤出机。
 *   - Enable DIRECT_MIXING_IN_G1 for M165 and mixing in G1 (from Pia Taubert's reference implementation).
 *   为M165启用G1直接混和和G1混和(来自皮娅·陶伯特的参考实现)。
 */
//#define MIXING_EXTRUDER
  /* 定义 混合挤出机 */
#if ENABLED(MIXING_EXTRUDER)
  /* 开启 混合挤出机 */
  #define MIXING_STEPPERS 2        // Number of steppers in your mixing extruder
  /* 定义 混合挤出机步进电机 2 混合挤出机中的步进机数量 */
  #define MIXING_VIRTUAL_TOOLS 16  // Use the Virtual Tool method with M163 and M164
  /* 定义 混合虚拟工具 16 使用M163和M164的虚拟工具方法 */
  //#define DIRECT_MIXING_IN_G1    // Allow ABCDHI mix factors in G1 movement commands
  /* 定义 G1的直接混合 在G1运动命令中允许ABCDHI混合因子 */
  //#define GRADIENT_MIX           // Support for gradient mixing with M166 and LCD
  /* 定义 渐变混合 M166和液晶显示器支持渐变混合 */
  //#define MIXING_PRESETS         // Assign 8 default V-tool presets for 2 or 3 MIXING_STEPPERS
   /* 定义 混合预设 为2或3个混合步进器指定8个默认的垂直工具预设 */
  #if ENABLED(GRADIENT_MIX)
   /* 启动 渐变混合 */
    //#define GRADIENT_VTOOL       // Add M166 T to use a V-tool index as a Gradient alias
     /* 定义 渐变虚拟工具 添加M166 T以使用V形工具索引作为渐变别名 */
  #endif
#endif

// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
/*挤出机的偏移 如果使用多个并在更换时依靠固件定位,请取消注释 */
// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
 /* 对于挤出机0(默认挤出机),偏移量必须为X=0,Y=0 */
// For the other hotends it is their distance from the extruder 0 hotend.
  /* 对其他挤出机来说,这是他们离挤压机的距离。 */
//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle
  /* 定义 挤出机偏移X 轴 (毫米)每个喷嘴的相对X偏移 */
//#define HOTEND_OFFSET_Y { 0.0, 5.00 }  // (mm) relative Y-offset for each nozzle
   /* 定义 挤出机偏移Y轴 (毫米)每个喷嘴的相对X偏移 */
//#define HOTEND_OFFSET_Z { 0.0, 0.00 }  // (mm) relative Z-offset for each nozzle
    /* 定义 挤出机偏移Z轴 (毫米)每个喷嘴的相对X偏移 */
// @section machine

/**
 * Power Supply Control
 * 电源供给控制
 * Enable and connect the power supply to the PS_ON_PIN.
 * 启用电源并将电源连接到电源开引脚。
 * Specify whether the power supply is active HIGH or active LOW.
 * 指定电源是高电平有效还是低电平有效。
 */
//#define PSU_CONTROL
  /* 定义 电源供给控制 */
//#define PSU_NAME "Power Supply"
 /* 定义  电源供给控制 名称 电源供给 */

#if ENABLED(PSU_CONTROL)
    /* 启动 电源供给控制 */
  //#define MKS_PWC                 // Using the MKS PWC add-on
    /* 定义 MKS 电源供给控制 用MKS电源供给控制模块 */
  //#define PS_OFF_CONFIRM          // Confirm dialog when power off
    /* 定义 电源关闭确认 关机时确认对话框 */
  //#define PS_OFF_SOUND            // Beep 1s when power off
   /* 定义  电源关闭声音   Bi 1秒 当切断电源时 */
  #define PSU_ACTIVE_STATE LOW      // Set 'LOW' for ATX, 'HIGH' for X-Box
  /* 定义 开关电源控制 活动状态 低电平 为ATX设置“低”,为X-Box设置“高”  */
  //#define PSU_DEFAULT_OFF         // Keep power off until enabled directly with M80
    /* 定义 开关电源控制 默认关闭状态 保持电源关闭,直到直接启用M80代码 */
  //#define PSU_POWERUP_DELAY 250   // (ms) Delay for the PSU to warm up to full power
    /* 定义 开关电源控制 默认延迟 250 ms  (毫秒)延迟PSU预热至满功率 */
  //#define PSU_POWERUP_GCODE  "M355 S1"  // G-code to run after power-on (e.g., case light on)
    /* 定义 开关电源控制 G代码 为 M355 S1 开机后运行的g代码(例如,机箱灯亮) */
  //#define PSU_POWEROFF_GCODE "M355 S0"  // G-code to run before power-off (e.g., case light off)
     /* 定义 开关电源控制 G代码 为 M355 S0 断电前运行的g代码(例如,外壳灯关闭) */
  //#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_COOLER_FAN
     /* 定义 自动开关机电源 冷却器风扇 */
    //#define AUTO_POWER_E_TEMP        50 // (°C) Turn on PSU if any extruder is over this temperature
      /* 定义 自定开关电源 挤出机温度控制 50° 如果有任何挤出机超过这个温度,打开开关电源。 */
    //#define AUTO_POWER_CHAMBER_TEMP  30 // (°C) Turn on PSU if the chamber is over this temperature
      /* 定义 自定开关电源 密封箱温度30° 如果密封箱超过温度,打开开关电源。 */
    //#define AUTO_POWER_COOLER_TEMP   26 // (°C) Turn on PSU if the cooler is over this temperature
      /* 定义 自定开关电源 冷却器温度控制 26° 如果有任何冷却器超过这个温度,打开开关电源。 */
    #define POWER_TIMEOUT              30 // (s) Turn off power if the machine is idle for this duration
      /* 定义 自动开关电源 电源超时 30 秒 如果机器在此期间闲置,请关闭电源 */
    //#define POWER_OFF_DELAY          60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time.
     /* 定义 电源关闭延时 60 秒 M81命令后断电延迟。让风扇跑一会儿很有用 */
  #endif
#endif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(3)marlin 2.0.9.2 截至发稿时间2021年12月16日 的相关文章

  • 北理工-2021年春-《数字逻辑》实验

    北理工 2021年春 数字逻辑 实验 实验二 组合电路设计 实验目的 本实验通过设计一个组合电路实例 xff0c 让学生掌握组合逻辑电路从设计到验证的全过程 通过该实验 xff0c 可以加深学生对组合电路原理和设计的理解 xff0c 同时可
  • 2021 => 手把手教你NFS部署(实用)

    NFS服务 原理 xff1a 供文件共享服务 为Web Server 配置集群中的后端存储 支持多节点同时挂载以及并发送与写入 架构解析 这是一张大型网站高并发架构图 xff0c 我们只需注意图中圈红的地方 建立NFS文件系统本质就是用来进
  • 北航2系921 2021考研历年真题及参考答案(2020-2004)

    需要自取 百度网盘 提取码 xff1a iwbg 关于2020北航921试题 相信大家都听说了 xff0c 2020年的921试题整体难度较2019年小 2019考完后 xff0c 群里面怨声载道 xff0c 信号10年没考电路题了怎么就今
  • 一文加强对React的记忆(2021 年 6 月更新),收藏再也不用查看文档、教程了

    我不经常使用 React xff0c 所以每当我需要在 React 中做最小的事情时 xff0c 我都必须查看文档 教程或在论坛上发布问题 这就是我决定做这个记忆辅助工具的原因 xff0c 鉴于我的记忆力不是那么好 xff0c 我想为什么不
  • 2021-03-15

    float型变量占用32bit xff0c 即4个byte的内存空间 我们先来看下浮点数二进制表达的三个组成部分 三个主要成分是 xff1a Sign xff08 1bit xff09 xff1a 表示浮点数是正数还是负数 0表示正数 xf
  • arXiv Journal 2021-01-11

    想来想去 xff0c 觉得还是把每次在arXiv上扫过的文章简单记录下来 2021 01 11 hep ph 2 papershep th 2 papershep lat 1 paper hep ph 2 papers Title QCD
  • 2021-01-20

    中文字库液晶模块12864示例程序范例 xff1a 液晶屏型号 xff1a JLX12864G 086 PC 3S 接口 xff1a 串行 中文字库 xff1a 带中文字库IC JLX GB2312 竖置横排 驱动IC UC1701X 与S
  • 2021-02-13

    昨天学习了关于位运算的一些常识 xff0c 自己也跟着视频敲了一些位运算代码如下 xff1a package com raisecom tiap ems basic mgt domain acl import java util Array
  • OpenSSH权限提升漏洞(CVE-2021-41617)修复 Centos 7升级Openssh 8.8

    OpenSSH权限提升漏洞 xff08 CVE 2021 41617 xff09 修复 1 准备工作2 安装必须的包3 下载OpenSsh 8 8p14 OpenSsh 解压安装5 配置文件修改6 重启服务7 意外 Centos 7升级Op
  • 2021-02-19

    This node presents a fast and precise method to estimate the planar motion of a lidar from consecutive range scans It is
  • 个人简历2021

    标题 个人简历 日期 2021 09 27 23 42 57 标签 简历 分类 工作 职业发展 说下我的个人简历吧 xff0c 希望大家能够了解我 xff0c 一起在技术这条路上一直走下去 个人信息 姓名性别年龄现居地址邮箱陈作立男29上海
  • 2021总结. 2022展望

    2021 收获了许多 技能上 学习了多个技能 自由泳自由倒立复刻拳王梅威瑟的跳绳训练单板滑雪 总结 技能上尽量是身体力行的 自从看过 囚徒健身 后 被作者的自传所影响 希望成为想他那样的人 认知上 认知上也有了提升 读了许多书 今年比较喜欢
  • 2021-01-11

    C 43 43 指针随便笔记 sizeof 先说一个没有成员函数和参数的类 xff0c 占用一个字节 类中的成员函数 xff0c 作为外部指针时 xff0c 需要记得delete xff0c 否则会内存泄漏 指针的sizeof是指针本身的数
  • 2021-08-10

    LEGO loam第一次测试运行数据包nsh indoor outdoor成功 xff1a 记录以下 xff0c 以免自己忘记步骤 在第一个终端里 xff1a 1 source catkin ws devel setup bash xff0
  • 2021-07-22

    MSP432在keil中通过CMSIS DAP下载程序出现cannot enter debug mode的解决办法 xff1a MSP432下载程序出现cannot enter debug mode 可以通过修改如下设置 Debug里面的两
  • 求旋转后的坐标

    坐标点target 中心点center 角度angle 旋转后坐标 function getRotatePoint targetX targetY centerX centerY angle const rotation angle Mat
  • 2021美赛 MCM\ICM D题

    自古以来 音乐就已成为人类社会的一部分 已成为文化遗产的重要组成部分 为了理解音乐在人类集体经验中所扮演的角色 我们被要求开发一种量化音乐发展的方法 在创作新音乐时 有许多因素会影响艺术家 包括其天赋的创造力 当前的社会或政治事件 使用新乐
  • ES6 Symbol

    概览 const mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol false consol
  • 解决 Mac 左滑浏览器默认的返回事件

    阻止 document body style overscrollBehaviorX none 恢复 document body style overscrollBehaviorX auto 参考 https juejin cn post
  • Python 日期、时间处理、时间戳转换、获取年份、月份、日、星期几、小时、分钟、秒

    引入 time 模块 import time 获取当前时间戳 unix timestamp current time time print unix timestamp current 1596594152 331776 格式化时间 fmt

随机推荐

  • 基于java实现直播,太牛了!

    美团技术一面20分钟 晚7点 xff0c 因为想到下周一才面试 xff0c 我刚准备出去打个羽毛球 xff0c 北京的电话就来了 面试官各种抱歉 xff0c 说开会拖延了 1 自我介绍 说了很多遍了 xff0c 很流畅捡重点介绍完 2 问我
  • java银行面试题目及答案,顺利拿到offer

    二 常见的并发问题 1 脏读 一个事务读取了另一个事务未提交的数据 2 不可重复读 一个事务对同一数据的读取结果前后不一致 两次读取中间被其他事务修改了 3 幻读 幻读是指事务读取某个范围的数据时 xff0c 因为其他事务的操作导致前后两次
  • 白嫖党最爱!javasocket服务端向客户端发消息

    一 公务员都不要35岁以上的 xff0c 何况大公司 这让很多人感到惶恐 xff0c 现在职场上有一种现象 xff1a 很多用人单位会在招聘信息上明确标注 xff0c 年龄需在35岁以下 为什么有经验 有人脉的职场中年人会如此遭 嫌弃 呢
  • Mybatis源码解析:21道Java基础面试题及答案

    10 HashMap和HashTable的区别 答案 xff1a Hashtable和HashMap类有三个重要的不同之处 1 第一个不同主要是历史原因 Hashtable是基于陈旧的Dictionary类的 xff0c HashMap是J
  • Mybatis源码解析:Java泛型详解

    注意 xff1a 泛型的类型参数只能是类类型 xff0c 不能是基本属性类型 xff1b 不能对确切的泛型类型使用instanceof操作 如下面的操作是非法的 xff0c 编译时会出错 if ex num instanceof Gener
  • MySQL数据库优化:Java程序员秋招三面蚂蚁金服

    自我介绍 JVM如何加载一个类的过程 xff0c 双亲委派模型中有哪些方法 xff1f HashMap如何实现的 xff1f HashMap和Concurrent HashMap区别 xff0c Concurrent HashMap 线程安
  • 【shell】shell脚本模板

    参考 xff1a cShell脚本模板 运维 64 小兵的博客 CSDN博客 bin bash set e 打开异常退出功能 set x 打开Debug功能 定义变量 source etc profile 避免用contab ansible
  • ROS中自定义头文件、源文件和可执行文件调用

    编写头文件 头文件创建在功能包 include 功能包名路径下 xff0c 示例内容如下 xff1a ifndef haha define haha namespace haha ns class Person public void ru
  • STM32/51单片机进阶技一 裸机编程(多任务处理编程思想与代码风格)

    文章目录 系列文章目录前言一 裸机编程是什么 xff1f 二 使用步骤 1 main c主函数处理2 中断函数处理总结 前言 在单片机编程当中 xff0c 我们难免会用单片机处理1个 xff0c 2个简单的任务 xff0c 但是当任务数量超
  • 用JavaScript写的猜数字游戏

    先输出游戏目的 xff0c 用Math Random找到随机数 xff0c 其取值在0 1之间 xff0c 故乘100 直到输入的数字和随机数a相等时才跳出循环 否则 xff0c 判断输入值如果大于随机数 xff0c 则输出你猜的数偏大哦
  • 使用JS脚本打开多个网页的方法

    01 问题 如每天都需要刷新重复的网页或许数据 有什么解决办法吗 02 解决方案 大家可以移步是你的Sakura的 打开多个相关联的网页 js脚本打开网页方法 03 代码 span class token tag span class to
  • 安装 rotors-gazebo 时 melodic版本遇到的问题

    针对找不到qt gui的问题 Could not find a package configuration file provided by 34 qt gui 34 with any of the following names qt g
  • Promethus(普罗米修斯)安装与配置

    1 普罗米修斯概述 Prometheus 是由go语言 golang 开发 是一套开源的监控 amp 报警 amp 时间序列数 据库的组合 适合监控docker容器 Prometheus是最初在SoundCloud上构建的开源系统监视和警报
  • 对C++中的继承分析和总结

    文章目录 一 继承的概念二 继承的定义1 继承的定义格式2 继承方式和访问限定符 三 基类和派生类的赋值规则1 派生类赋值给基类2 基类赋值给派生类 四 继承中的重定义 隐藏 五 派生类中的默认成员函数1 不写派生类中的默认成员函数2 写派
  • Linux -- 查看进程 top命令 详解

    我们上篇介绍了 xff0c Linux 中的进程等概念 xff0c 那么 xff0c 在Linux 中如何查看进程呢 xff1f xff1f 我们常用到的有两个命令 xff0c PS 和 top 两个命令 xff0c 今天先来介绍下 top
  • 24届春招百度暑假实习笔试第二题

    题干 解答 该题目在解决的时候 xff0c 需要发现就是对于相同的字符我们应该放在一起 xff0c 这样在进行修改的时候 xff0c 对其他字符的影响才会小 然后连续相同字符个数 和 组成的回文子串数目 它们的通解为 an 61 n 2 4
  • ROS学习(八)launch启动文件的使用方法

    前言 使用命令行输入代码需要不断打开终端比较繁琐 xff0c 而且容易输入错误 xff0c 那么有没有什么方法可以快速启动所需节点呢 xff1f 一 launch文件介绍 Launch文件 xff1a 通过XML文件实现多节点的配置和启动
  • 【git】git lfs

    目录 原理 使用方法 报错记录 certificate signed by unknown authority 原理 项目中的大文件会很占空间 git lfs large file storage 将大文件替换为小指针 当真正需要到这些大文
  • gdb调试应用程序记录

    gdb 调试说明 xff1a 判断程序是否为debug版本 xff1a 方法一 xff1a 命令 xff1a gdb a out 注 xff1a 这里的命令是指在Linux终端下面输入的命令 非debug版本 xff0c 会提示 xff1a
  • 3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(3)marlin 2.0.9.2 截至发稿时间2021年12月16日

    Marlin 3D Printer Firmware 头描述详见其他两个文件头描述 Copyright c 2020 MarlinFirmware https github com MarlinFirmware Marlin Based o