From fe9f088d60a48de369500ef74d6ad0a7c2c809b0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Sep 2018 21:25:40 -0500 Subject: [PATCH] [2.0.x] Anycubic LinearPlus, Trigorilla 1.4 (#11730) --- .../delta/Anycubic/Kossel/Configuration.h | 2150 +++++++++++++++++ .../delta/Anycubic/Kossel/Configuration_adv.h | 1692 +++++++++++++ .../examples/delta/Anycubic/Kossel/README.md | 49 + .../Anycubic/Kossel/images/Version1Probe.jpg | Bin 0 -> 94933 bytes .../Anycubic/Kossel/images/Version2Probe.jpg | Bin 0 -> 51853 bytes Marlin/src/pins/pins_TRIGORILLA_14.h | 49 +- 6 files changed, 3938 insertions(+), 2 deletions(-) create mode 100644 Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h create mode 100644 Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h create mode 100644 Marlin/src/config/examples/delta/Anycubic/Kossel/README.md create mode 100644 Marlin/src/config/examples/delta/Anycubic/Kossel/images/Version1Probe.jpg create mode 100644 Marlin/src/config/examples/delta/Anycubic/Kossel/images/Version2Probe.jpg diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h new file mode 100644 index 0000000000..7848dd83b4 --- /dev/null +++ b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h @@ -0,0 +1,2150 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 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 . + * + */ + +/** + * Choose your version: + */ +// normal size or plus? +//#define ANCYUBIC_KOSSEL_PLUS +// Anycubic Probe version 1 or 2 see README.md; 0 for no probe +#define ANYCUBIC_PROBE_VERSION 0 +// Heated Bed: +// 0 ... no heated bed +// 1 ... aluminium heated bed with "BuildTak-like" sticker +// 2 ... ultrabase heated bed +#define ANYCUBIC_KOSSEL_ENABLE_BED 0 + +/** + * Configuration.h + * + * Basic settings such as: + * + * - Type of electronics + * - Type of temperature sensor + * - Printer geometry + * - Endstop configuration + * - LCD controller + * - Extra features + * + * Advanced settings can be found in Configuration_adv.h + * + */ +#ifndef CONFIGURATION_H +#define CONFIGURATION_H +#define CONFIGURATION_H_VERSION 020000 + +//=========================================================================== +//============================= Getting Started ============================= +//=========================================================================== + +/** + * Here are some standard links for getting your machine calibrated: + * + * http://reprap.org/wiki/Calibration + * http://youtu.be/wAL9d7FgInk + * http://calculator.josefprusa.cz + * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide + * http://www.thingiverse.com/thing:5573 + * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap + * http://www.thingiverse.com/thing:298812 + */ + +//=========================================================================== +//============================= DELTA Printer =============================== +//=========================================================================== +// For a Delta printer start with one of the configuration files in the +// config/examples/delta directory and customize for your machine. +// + +//=========================================================================== +//============================= SCARA Printer =============================== +//=========================================================================== +// For a SCARA printer start with the configuration files in +// config/examples/SCARA and customize for your machine. +// + +// @section info + +// User-specified version info of this build to display in [Pronterface, etc] terminal window during +// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this +// build by the user have been successfully uploaded into firmware. +#define STRING_CONFIG_H_AUTHOR "@brandstaetter, @grbd" // Who made the changes. +#define SHOW_BOOTSCREEN +#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during bootup in line 1 +#define STRING_SPLASH_LINE2 "Welcome to ANYCUBIC" // will be shown during bootup in line 2 + +/** + * *** 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. + */ + +// Enable to show the bitmap in Marlin/_Bootscreen.h on startup. +//#define SHOW_CUSTOM_BOOTSCREEN + +// Enable to show the bitmap in Marlin/_Statusscreen.h on the status screen. +//#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. + * Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader. + * + * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] + */ +#define SERIAL_PORT 0 + +/** + * Select a secondary 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, 0, 1, 2, 3, 4, 5, 6, 7] + */ +//#define SERIAL_PORT_2 -1 + +/** + * This setting determines the communication speed of the printer. + * + * 250000 works in most cases, but you might try a lower speed if + * you commonly experience drop-outs during host printing. + * You may try up to 1000000 to speed up SD file transfer. + * + * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] + */ +#define BAUDRATE 115200 + +// Enable the Bluetooth serial interface on AT90USB devices +//#define BLUETOOTH + +// The following define selects which electronics board you have. +// Please choose the name from boards.h that matches your setup +#ifndef MOTHERBOARD + #define MOTHERBOARD BOARD_TRIGORILLA_14 +#endif + +// Optional custom name for your RepStrap or other custom machine +// Displayed in the LCD "Ready" message +#define CUSTOM_MACHINE_NAME "ANYCUBIC Kossel" + +// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines) +// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4) +//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000" + +// @section extruder + +// This defines the number of extruders +// :[1, 2, 3, 4, 5] +#define EXTRUDERS 1 + +// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc. +#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75 + +// For Cyclops or any "multi-extruder" that shares a single nozzle. +//#define SINGLENOZZLE + +/** + * Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants. + * + * This device allows one stepper driver on a control board to drive + * two to eight stepper motors, one at a time, in a manner suitable + * for extruders. + * + * This option only allows the multiplexer to switch on tool-change. + * Additional options to configure custom E moves are pending. + */ +//#define MK2_MULTIPLEXER +#if ENABLED(MK2_MULTIPLEXER) + // Override the default DIO selector pins here, if needed. + // Some pins files may provide defaults for these pins. + //#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 + +// A dual extruder that uses a single stepper motor +//#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 +#endif + +/** + * Two separate X-carriages with extruders that connect to a moving part + * via a magnetic docking mechanism. Requires SOL1_PIN and SOL2_PIN. + */ +//#define PARKING_EXTRUDER +#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 + #define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined. + #define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders + #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder + #define PARKING_EXTRUDER_SECURITY_RAISE 5 // Z-raise before parking +#endif + +/** + * "Mixing Extruder" + * - Adds a new code, M165, to set the current mix factors. + * - Extends the stepping routines to move multiple steppers in proportion to the mix. + * - Optional support for Repetier Firmware M163, M164, and virtual extruder. + * - This implementation supports only a single extruder. + * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation + */ +//#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 and M164 + //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands +#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). +// 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 +//#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 + +// @section machine + +/** + * Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN + * + * 0 = No Power Switch + * 1 = ATX + * 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC) + * + * :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' } + */ +#define POWER_SUPPLY 0 + +#if POWER_SUPPLY > 0 + // Enable this option to leave the PSU off at startup. + // Power to steppers and heaters will need to be turned on with M80. + //#define PS_DEFAULT_OFF + + //#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 POWER_TIMEOUT 30 + #endif + +#endif + +// @section temperature + +//=========================================================================== +//============================= Thermal Settings ============================ +//=========================================================================== + +/** + * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table + * + * Temperature sensors available: + * + * -4 : thermocouple with AD8495 + * -3 : thermocouple with MAX31855 (only for sensor 0) + * -2 : thermocouple with MAX6675 (only for sensor 0) + * -1 : thermocouple with AD595 + * 0 : not used + * 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup) + * 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) + * 3 : Mendel-parts thermistor (4.7k pullup) + * 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! + * 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan & J-Head) (4.7k pullup) + * 501 : 100K Zonestar (Tronxy X3A) Thermistor + * 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) + * 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) + * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) + * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) + * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) + * 10 : 100k RS thermistor 198-961 (4.7k pullup) + * 11 : 100k beta 3950 1% thermistor (4.7k pullup) + * 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) + * 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" + * 15 : 100k thermistor calibration for JGAurora A5 hotend + * 20 : the PT100 circuit found in the Ultimainboard V2.x + * 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 + * 66 : 4.7M High Temperature thermistor from Dyze Design + * 70 : the 100K thermistor found in the bq Hephestos 2 + * 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor + * + * 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k. + * (but gives greater accuracy and more stable PID) + * 51 : 100k thermistor - EPCOS (1k pullup) + * 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup) + * 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) + * + * 1047 : Pt1000 with 4k7 pullup + * 1010 : Pt1000 with 1k pullup (non standard) + * 147 : Pt100 with 4k7 pullup + * 110 : Pt100 with 1k pullup (non standard) + * + * Use these for Testing or Development purposes. NEVER for production machine. + * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. + * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below. + * + * :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" } + */ +#define TEMP_SENSOR_0 5 +#define TEMP_SENSOR_1 0 +#define TEMP_SENSOR_2 0 +#define TEMP_SENSOR_3 0 +#define TEMP_SENSOR_4 0 + +#if ANYCUBIC_KOSSEL_ENABLE_BED > 0 + #define TEMP_SENSOR_BED 5 +#else + #define TEMP_SENSOR_BED 0 +#endif + +#define TEMP_SENSOR_CHAMBER 0 + +// Dummy thermistor constant temperature readings, for use with 998 and 999 +#define DUMMY_THERMISTOR_998_VALUE 25 +#define DUMMY_THERMISTOR_999_VALUE 100 + +// Use temp sensor 1 as a redundant sensor with sensor 0. If the readings +// from the two sensors differ too much the print will be aborted. +//#define TEMP_SENSOR_1_AS_REDUNDANT +#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10 + +// Extruder temperature must be close to target for this long before M109 returns success +#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. + +// Bed temperature must be close to target for this long before M190 returns success +#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. + +// The minimal temperature defines the temperature below which the heater will not be enabled It is used +// to check that the wiring to the thermistor is not broken. +// Otherwise this would lead to the heater being powered on all the time. +#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 + +// When temperature exceeds max temp, your heater will be switched off. +// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! +// You should use MINTEMP for thermistor short/failure protection. +#define HEATER_0_MAXTEMP 275 +#define HEATER_1_MAXTEMP 275 +#define HEATER_2_MAXTEMP 275 +#define HEATER_3_MAXTEMP 275 +#define HEATER_4_MAXTEMP 275 +#define BED_MAXTEMP 120 + +//=========================================================================== +//============================= PID Settings ================================ +//=========================================================================== +// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning + +// Comment the following line to disable PID and enable bang-bang. +#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 PID_K1 0.95 // Smoothing factor within any PID loop +#if ENABLED(PIDTEMP) + #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result. + //#define PID_DEBUG // Sends debug data to the serial port. + //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX + //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay + //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders) + // Set/get with gcode: M301 E[extruder number, 0-2] + #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature + // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max. + + // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it + + // 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 + + // Anycubic Kossel - run 'M106 S255' & 'M303 E0 C10 S200' + #define DEFAULT_Kp 22.36 + #define DEFAULT_Ki 1.63 + #define DEFAULT_Kd 76.48 + +#endif // PIDTEMP + +//=========================================================================== +//============================= PID > Bed Temperature Control =============== +//=========================================================================== + +/** + * PID Bed Heating + * + * If this option is enabled set PID constants below. + * If this option is disabled, bang-bang will be used and BED_LIMIT_SWITCHING will enable hysteresis. + * + * The PID frequency will be the same as the extruder PWM. + * If PID_dT is the default, and correct for the hardware/configuration, that means 7.689Hz, + * which is fine for driving a square wave into a resistive load and does not significantly + * impact FET heating. This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W + * heater. If your configuration is significantly different than this and you don't understand + * the issues involved, don't use bed PID until someone else verifies that your hardware works. + */ +#if ANYCUBIC_KOSSEL_ENABLE_BED > 0 + #define PIDTEMPBED +#endif +//#define BED_LIMIT_SWITCHING + +/** + * Max Bed Power + * Applies to all forms of bed control (PID, bang-bang, and bang-bang with hysteresis). + * When set to any value below 255, enables a form of PWM to the bed that acts like a divider + * so don't use it unless you are OK with PWM on your bed. (See the comment on enabling PIDTEMPBED) + */ +#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current + +#if ENABLED(PIDTEMPBED) + + // Anycubic Kossel + // this is for the aluminium bed with a BuildTak-like sticker on it + // from pid autotune. "M303 E-1 C8 S60" to run autotune on the bed at 60 degreesC for 8 cycles + #if ANYCUBIC_KOSSEL_ENABLE_BED == 1 + #define DEFAULT_bedKp 374.03 + #define DEFAULT_bedKi 72.47 + #define DEFAULT_bedKd 482.59 + #elif ANYCUBIC_KOSSEL_ENABLE_BED == 2 + // TODO get real PID values for Ultrabase Bed + #define DEFAULT_bedKp 374.03 + #define DEFAULT_bedKi 72.47 + #define DEFAULT_bedKd 482.59 + #endif + + //#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 + +#endif // PIDTEMPBED + +// @section extruder + +/** + * Prevent extrusion if the temperature is below EXTRUDE_MINTEMP. + * Add M302 to set the minimum extrusion temperature and/or turn + * cold extrusion prevention on and off. + * + * *** IT IS HIGHLY RECOMMENDED TO LEAVE THIS OPTION ENABLED! *** + */ +#define PREVENT_COLD_EXTRUSION +#define EXTRUDE_MINTEMP 170 + +/** + * Prevent a single extrusion longer than EXTRUDE_MAXLENGTH. + * Note: For Bowden Extruders make this large enough to allow load/unload. + */ +#define PREVENT_LENGTHY_EXTRUDE +#define EXTRUDE_MAXLENGTH 750 + +//=========================================================================== +//======================== Thermal Runaway Protection ======================= +//=========================================================================== + +/** + * Thermal Protection provides additional protection to your printer from damage + * and fire. Marlin always includes safe min and max temperature ranges which + * protect against a broken or disconnected thermistor wire. + * + * The issue: If a thermistor falls out, it will report the much lower + * temperature of the air in the room, and the the firmware will keep + * the heater on. + * + * If you get "Thermal Runaway" or "Heating failed" errors the + * details can be tuned in Configuration_adv.h + */ + +#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders +#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed + +//=========================================================================== +//============================= Mechanical Settings ========================= +//=========================================================================== + +// @section machine + +// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics +// either in the usual order or reversed +//#define COREXY +//#define COREXZ +//#define COREYZ +//#define COREYX +//#define COREZX +//#define COREZY + +//=========================================================================== +//============================== Delta Settings ============================= +//=========================================================================== +// Enable DELTA kinematics and most of the default configuration for Deltas +#define DELTA + +#if ENABLED(DELTA) + + // Make delta curves from many straight lines (linear interpolation). + // This is a trade-off between visible corners (not enough segments) + // and processor overload (too many expensive sqrt calls). + #define DELTA_SEGMENTS_PER_SECOND 80 + + // Convert feedrates to apply to the Effector instead of the Carriages + //#define DELTA_FEEDRATE_SCALING + + // After homing move down to a height where XY movement is unconstrained + #define DELTA_HOME_TO_SAFE_ZONE + + // Delta calibration menu + // uncomment to add three points calibration menu option. + // See http://minow.blogspot.com/index.html#4918805519571907051 + #define DELTA_CALIBRATION_MENU + + // uncomment to add G33 Delta Auto-Calibration (Enable EEPROM_SETTINGS to store results) + #if ANYCUBIC_PROBE_VERSION > 0 + #define DELTA_AUTO_CALIBRATION + #endif + + // NOTE NB all values for DELTA_* values MUST be floating point, so always have a decimal point in them + + #if ENABLED(DELTA_AUTO_CALIBRATION) + // set the default number of probe points : n*n (1 -> 7) + #define DELTA_CALIBRATION_DEFAULT_POINTS 4 + #endif + + #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) + // Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes + #define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - MIN_PROBE_EDGE // mm + // Set the steprate for papertest probing + #define PROBE_MANUALLY_STEP 0.05 // mm + #endif + + + #if ENABLED(ANCYUBIC_KOSSEL_PLUS) + // Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers). + #define DELTA_PRINTABLE_RADIUS 116.0 // mm + // Center-to-center distance of the holes in the diagonal push rods. + #define DELTA_DIAGONAL_ROD 271.5 // mm + // Horizontal offset from middle of printer to smooth rod center. + #define DELTA_SMOOTH_ROD_OFFSET 186 // mm + // Horizontal offset of the universal joints on the end effector. + #define DELTA_EFFECTOR_OFFSET 31 // mm + // Horizontal offset of the universal joints on the carriages. + #define DELTA_CARRIAGE_OFFSET 20.6 // mm + // Horizontal distance bridged by diagonal push rods when effector is centered. + #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-(DELTA_EFFECTOR_OFFSET)-(DELTA_CARRIAGE_OFFSET)) //mm Get this value from auto calibrate + #else + // Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers). + #define DELTA_PRINTABLE_RADIUS 90.0 // mm + // Center-to-center distance of the holes in the diagonal push rods. + #define DELTA_DIAGONAL_ROD 218.0 // mm + // Horizontal distance bridged by diagonal push rods when effector is centered. + #define DELTA_RADIUS 97.0 //mm Get this value from auto calibrate + #endif + + // height from z=0 to home position + #define DELTA_HEIGHT 320.00 // get this value from auto calibrate + + #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate + + // 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 + #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate + + // delta radius and diaginal rod adjustments measured in mm + //#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 } + //#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 } + +#endif + +//=========================================================================== +//============================== Endstop Settings =========================== +//=========================================================================== + +// @section homing + +// Specify here all the endstop connectors that are connected to any endstop or probe. +// Almost all printers will be using one per axis. Probes will use one or more of the +// extra connectors. Leave undefined any used for non-endstop and non-probe purposes. +//#define USE_XMIN_PLUG +//#define USE_YMIN_PLUG +#if ANYCUBIC_PROBE_VERSION > 0 + #define USE_ZMIN_PLUG // a Z probe +#endif +#define USE_XMAX_PLUG +#define USE_YMAX_PLUG +#define USE_ZMAX_PLUG + +// Enable pullup for all endstops to prevent a floating state +#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 + +// Enable pulldown for all endstops to prevent a floating state +//#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 + +// 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 true // 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 true // set to true to invert the logic of the probe. + +/** + * Stepper Drivers + * + * These settings allow Marlin to tune stepper driver timing and enable advanced options for + * stepper drivers that support them. You may also override timing options in Configuration_adv.h. + * + * A4988 is assumed for unspecified drivers. + * + * Options: A4988, A5984, DRV8825, LV8729, L6470, TB6560, TB6600, TMC2100, + * TMC2130, TMC2130_STANDALONE, TMC2208, TMC2208_STANDALONE, + * TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE, + * TMC5130, TMC5130_STANDALONE + * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE'] + */ +//#define X_DRIVER_TYPE A4988 +//#define Y_DRIVER_TYPE A4988 +//#define Z_DRIVER_TYPE A4988 +//#define X2_DRIVER_TYPE A4988 +//#define Y2_DRIVER_TYPE A4988 +//#define Z2_DRIVER_TYPE A4988 +//#define E0_DRIVER_TYPE A4988 +//#define E1_DRIVER_TYPE A4988 +//#define E2_DRIVER_TYPE A4988 +//#define E3_DRIVER_TYPE A4988 +//#define E4_DRIVER_TYPE A4988 + +// Enable this feature if all enabled endstop pins are interrupt-capable. +// This will remove the need to poll the interrupt pins, saving many CPU cycles. +//#define ENDSTOP_INTERRUPTS_FEATURE + +/** + * Endstop Noise Filter + * + * Enable this option if endstops falsely trigger due to noise. + * NOTE: Enabling this feature means adds an error of +/-0.2mm, so homing + * will end up at a slightly different position on each G28. This will also + * reduce accuracy of some bed probes. + * For mechanical switches, the better approach to reduce noise is to install + * a 100 nanofarads ceramic capacitor in parallel with the switch, making it + * essentially noise-proof without sacrificing accuracy. + * This option also increases MCU load when endstops or the probe are enabled. + * So this is not recommended. USE AT YOUR OWN RISK. + * (This feature is not required for common micro-switches mounted on PCBs + * based on the Makerbot design, since they already include the 100nF capacitor.) + */ +//#define ENDSTOP_NOISE_FILTER + +//============================================================================= +//============================== Movement Settings ============================ +//============================================================================= +// @section motion + +// delta speeds must be the same on xyz +/** + * Default Settings + * + * These settings can be reset by M502 + * + * Note that if EEPROM is enabled, saved values will override these. + */ + +/** + * With this option each E stepper can have its own factors for the + * following movement settings. If fewer factors are given than the + * total number of extruders, the last value applies to the rest. + */ +//#define DISTINCT_E_FACTORS + +/** + * Default Axis Steps Per Unit (steps/mm) + * Override with M92 + * X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] + */ +// 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)) // 80 +#define DEFAULT_AXIS_STEPS_PER_UNIT { DEFAULT_XYZ_STEPS_PER_UNIT, DEFAULT_XYZ_STEPS_PER_UNIT, DEFAULT_XYZ_STEPS_PER_UNIT, 96 } // default steps per unit for Kossel (GT2, 20 tooth) + +/** + * Default Max Feed Rate (mm/s) + * Override with M203 + * X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] + */ +#define DEFAULT_MAX_FEEDRATE { 100, 100, 100, 100} + +/** + * Default Max Acceleration (change/s) change = mm/s + * (Maximum start speed for accelerated moves) + * Override with M201 + * X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] + */ +#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 3000 } + +/** + * Default Acceleration (change/s) change = mm/s + * Override with M204 + * + * M204 P Acceleration + * M204 R Retract Acceleration + * M204 T Travel Acceleration + */ +#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves +#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts +#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves + +/** + * Default Jerk (mm/s) + * Override with M205 X Y Z E + * + * "Jerk" specifies the minimum speed change that requires acceleration. + * When changing speed and direction, if the difference is less than the + * value set here, it may happen instantaneously. + */ +#define DEFAULT_XJERK 5.0 +#define DEFAULT_YJERK DEFAULT_XJERK +#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta +#define DEFAULT_EJERK DEFAULT_XJERK + +/** + * S-Curve Acceleration + * + * This option eliminates vibration during printing by fitting a Bézier + * curve to move acceleration, producing much smoother direction changes. + * + * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained + */ +#define S_CURVE_ACCELERATION + +//=========================================================================== +//============================= Z Probe Options ============================= +//=========================================================================== +// @section probes + +// +// See http://marlinfw.org/docs/configuration/probes.html +// + +/** + * Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN + * + * Enable this option for a probe connected to the Z Min endstop pin. + */ +#if ANYCUBIC_PROBE_VERSION > 0 + #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN +#endif + +/** + * Z_MIN_PROBE_ENDSTOP + * + * Enable this option for a probe connected to any pin except Z-Min. + * (By default Marlin assumes the Z-Max endstop pin.) + * To use a custom Z Probe pin, set Z_MIN_PROBE_PIN below. + * + * - The simplest option is to use a free endstop connector. + * - Use 5V for powered (usually inductive) sensors. + * + * - RAMPS 1.3/1.4 boards may use the 5V, GND, and Aux4->D32 pin: + * - For simple switches connect... + * - normally-closed switches to GND and D32. + * - normally-open switches to 5V and D32. + * + * WARNING: Setting the wrong pin may have unexpected and potentially + * disastrous consequences. Use with caution and do your homework. + * + */ +//#define Z_MIN_PROBE_ENDSTOP + +/** + * Probe Type + * + * Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc. + * Activate one of these to use Auto Bed Leveling below. + */ + +/** + * The "Manual Probe" provides a means to do "Auto" Bed Leveling without a probe. + * Use G29 repeatedly, adjusting the Z height at each point with movement commands + * or (with LCD_BED_LEVELING) the LCD controller. + */ +#if ANYCUBIC_PROBE_VERSION == 0 + #define PROBE_MANUALLY + #define MANUAL_PROBE_START_Z 1.5 +#endif + +/** + * A Fix-Mounted Probe either doesn't deploy or needs manual deployment. + * (e.g., an inductive probe or a nozzle-based probe-switch.) + */ +#if ANYCUBIC_PROBE_VERSION > 0 + #define FIX_MOUNTED_PROBE +#endif + +/** + * Z Servo Probe, such as an endstop switch on a rotating arm. + */ +//#define Z_PROBE_SERVO_NR 0 // Defaults to SERVO 0 connector. +//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles + +/** + * The BLTouch probe uses a Hall effect sensor and emulates a servo. + */ +//#define BLTOUCH +#if ENABLED(BLTOUCH) + //#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed +#endif + +/** + * Enable one or more of the following if probing seems unreliable. + * Heaters and/or fans can be disabled during probing to minimize electrical + * noise. A delay can also be added to allow noise and vibration to settle. + * These options are most useful for the BLTouch probe, but may also improve + * readings with inductive probes and piezo sensors. + */ +//#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 DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors + +// A probe that is deployed and stowed with a solenoid pin (SOL1_PIN) +//#define SOLENOID_PROBE + +// A sled-mounted probe like those designed by Charles Bell. +//#define Z_PROBE_SLED +//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like. + +// +// For Z_PROBE_ALLEN_KEY see the Delta example configurations. +// + +/** + * Z Probe to nozzle (X,Y) offset, relative to (0, 0). + * X and Y offsets must be integers. + * + * In the following example the X and Y offsets are both positive: + * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 + * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * +-- BACK ---+ + * | | + * L | (+) P | R <-- probe (20,20) + * E | | I + * F | (-) N (+) | G <-- nozzle (10,10) + * T | | H + * | (-) | T + * | | + * O-- FRONT --+ + * (0,0) + */ +#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] +#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] + +#if ANYCUBIC_PROBE_VERSION == 0 + #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#elif ANYCUBIC_PROBE_VERSION == 1 + #define Z_PROBE_OFFSET_FROM_EXTRUDER -19.0 // Z offset: -below +above [the nozzle] +#else + #define Z_PROBE_OFFSET_FROM_EXTRUDER -16.8 // Z offset: -below +above [the nozzle] +#endif + +// Certain types of probes need to stay away from edges +#define MIN_PROBE_EDGE 20 + +// X and Y axis travel speed (mm/m) between probes +#define XY_PROBE_SPEED 6000 + +// 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 / 3) + +// The number of probes to perform at each point. +// Set to 2 for a fast/slow probe, using the second probe result. +// Set to 3 or more for slow probes, averaging the results. +#define MULTIPLE_PROBING 3 + +/** + * Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe + * Deploys by touching z-axis belt. Retracts by pushing the probe down. Uses Z_MIN_PIN. + */ +//#define Z_PROBE_ALLEN_KEY + +#if ENABLED(Z_PROBE_ALLEN_KEY) + // 2 or 3 sets of coordinates for deploying and retracting the spring loaded touch probe on G29, + // if servo actuated touch probe is not defined. Uncomment as appropriate for your printer/probe. + + #define Z_PROBE_ALLEN_KEY_DEPLOY_1_X 30.0 + #define Z_PROBE_ALLEN_KEY_DEPLOY_1_Y DELTA_PRINTABLE_RADIUS + #define Z_PROBE_ALLEN_KEY_DEPLOY_1_Z 100.0 + #define Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE XY_PROBE_SPEED + + #define Z_PROBE_ALLEN_KEY_DEPLOY_2_X 0.0 + #define Z_PROBE_ALLEN_KEY_DEPLOY_2_Y DELTA_PRINTABLE_RADIUS + #define Z_PROBE_ALLEN_KEY_DEPLOY_2_Z 100.0 + #define Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE (XY_PROBE_SPEED)/10 + + #define Z_PROBE_ALLEN_KEY_DEPLOY_3_X Z_PROBE_ALLEN_KEY_DEPLOY_2_X * 0.75 + #define Z_PROBE_ALLEN_KEY_DEPLOY_3_Y Z_PROBE_ALLEN_KEY_DEPLOY_2_Y * 0.75 + #define Z_PROBE_ALLEN_KEY_DEPLOY_3_Z Z_PROBE_ALLEN_KEY_DEPLOY_2_Z + #define Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE XY_PROBE_SPEED + + #define Z_PROBE_ALLEN_KEY_STOW_1_X -64.0 // Move the probe into position + #define Z_PROBE_ALLEN_KEY_STOW_1_Y 56.0 + #define Z_PROBE_ALLEN_KEY_STOW_1_Z 23.0 + #define Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE XY_PROBE_SPEED + + #define Z_PROBE_ALLEN_KEY_STOW_2_X -64.0 // Push it down + #define Z_PROBE_ALLEN_KEY_STOW_2_Y 56.0 + #define Z_PROBE_ALLEN_KEY_STOW_2_Z 3.0 + #define Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE (XY_PROBE_SPEED)/10 + + #define Z_PROBE_ALLEN_KEY_STOW_3_X -64.0 // Move it up to clear + #define Z_PROBE_ALLEN_KEY_STOW_3_Y 56.0 + #define Z_PROBE_ALLEN_KEY_STOW_3_Z 50.0 + #define Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE XY_PROBE_SPEED + + #define Z_PROBE_ALLEN_KEY_STOW_4_X 0.0 + #define Z_PROBE_ALLEN_KEY_STOW_4_Y 0.0 + #define Z_PROBE_ALLEN_KEY_STOW_4_Z Z_PROBE_ALLEN_KEY_STOW_3_Z + #define Z_PROBE_ALLEN_KEY_STOW_4_FEEDRATE XY_PROBE_SPEED + +#endif // Z_PROBE_ALLEN_KEY + +/** + * Z probes require clearance when deploying, stowing, and moving between + * probe points to avoid hitting the bed and other hardware. + * Servo-mounted probes require extra space for the arm to rotate. + * Inductive probes need space to keep from triggering early. + * + * Use these settings to specify the distance (mm) to raise the probe (or + * lower the bed). The values set here apply over and above any (negative) + * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * Only integer values >= 1 are valid here. + * + * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. + * But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle. + */ +#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 30 // Z position after probing is done + +#define Z_PROBE_LOW_POINT -2 // Farthest distance below the trigger-point to go before stopping + +// For M851 give a range for adjusting the Z probe offset +#define Z_PROBE_OFFSET_RANGE_MIN -40 +#define Z_PROBE_OFFSET_RANGE_MAX 20 + +// Enable the M48 repeatability test to test probe accuracy +#if ANYCUBIC_PROBE_VERSION > 0 + #define Z_MIN_PROBE_REPEATABILITY_TEST +#endif + +// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 +// :{ 0:'Low', 1:'High' } +#define X_ENABLE_ON 0 +#define Y_ENABLE_ON 0 +#define Z_ENABLE_ON 0 +#define E_ENABLE_ON 0 // For all extruders + +// Disables axis stepper immediately when it's not being used. +// WARNING: When motors turn off there is a chance of losing position accuracy! +#define DISABLE_X false +#define DISABLE_Y false +#define DISABLE_Z false +// Warn on display about possibly reduced accuracy +//#define DISABLE_REDUCED_ACCURACY_WARNING + +// @section extruder + +#define DISABLE_E false // For all extruders +#define DISABLE_INACTIVE_EXTRUDER true // Keep only the active extruder enabled. + +// @section machine + +// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way. +#define INVERT_X_DIR true +#define INVERT_Y_DIR true +#define INVERT_Z_DIR true + +// @section extruder + +// For direct drive extruder v9 set to true, for geared extruder set to false. +#define INVERT_E0_DIR true +#define INVERT_E1_DIR false +#define INVERT_E2_DIR false +#define INVERT_E3_DIR false +#define INVERT_E4_DIR false + +// @section homing + +//#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 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ... + // Be sure you have this distance over your Z_MAX_POS in case. + +// Direction of endstops when homing; 1=MAX, -1=MIN +// :[-1,1] +#define X_HOME_DIR 1 // deltas always home to max +#define Y_HOME_DIR 1 +#define Z_HOME_DIR 1 + +// @section machine + +// The size of the print bed +#define X_BED_SIZE ((DELTA_PRINTABLE_RADIUS) * 2) +#define Y_BED_SIZE ((DELTA_PRINTABLE_RADIUS) * 2) + +// Travel limits (mm) after homing, corresponding to endstop positions. +#define X_MIN_POS -(DELTA_PRINTABLE_RADIUS) +#define Y_MIN_POS -(DELTA_PRINTABLE_RADIUS) +#define Z_MIN_POS 0 +#define X_MAX_POS DELTA_PRINTABLE_RADIUS +#define Y_MAX_POS DELTA_PRINTABLE_RADIUS +#define Z_MAX_POS MANUAL_Z_HOME_POS + +/** + * Software Endstops + * + * - Prevent moves outside the set machine bounds. + * - Individual axes can be disabled, if desired. + * - X and Y only apply to Cartesian robots. + * - Use 'M211' to set software endstops on/off or report current state + */ + +// Min software endstops constrain movement within minimum coordinate bounds +#define MIN_SOFTWARE_ENDSTOPS +#if ENABLED(MIN_SOFTWARE_ENDSTOPS) + #define MIN_SOFTWARE_ENDSTOP_X + #define MIN_SOFTWARE_ENDSTOP_Y + #define MIN_SOFTWARE_ENDSTOP_Z +#endif + +// Max software endstops constrain movement within maximum coordinate bounds +#define MAX_SOFTWARE_ENDSTOPS +#if ENABLED(MAX_SOFTWARE_ENDSTOPS) + #define MAX_SOFTWARE_ENDSTOP_X + #define MAX_SOFTWARE_ENDSTOP_Y + #define MAX_SOFTWARE_ENDSTOP_Z +#endif + +#if ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS) + #define SOFT_ENDSTOPS_MENU_ITEM // Enable/Disable software endstops from the LCD +#endif + +/** + * Filament Runout Sensors + * Mechanical or opto endstops are used to check for the presence of filament. + * + * RAMPS-based boards use SERVO3_PIN for the first runout sensor. + * For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc. + * By default the firmware assumes HIGH=FILAMENT PRESENT. + */ +//#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. + #define FILAMENT_RUNOUT_SCRIPT "M600" +#endif + +//=========================================================================== +//=============================== Bed Leveling ============================== +//=========================================================================== +// @section calibrate + +/** + * Choose one of the options below to enable G29 Bed Leveling. The parameters + * and behavior of G29 will change depending on your selection. + * + * If using a Probe for Z Homing, enable Z_SAFE_HOMING also! + * + * - AUTO_BED_LEVELING_3POINT + * Probe 3 arbitrary points on the bed (that aren't collinear) + * You specify the XY coordinates of all 3 points. + * The result is a single tilted plane. Best for a flat bed. + * + * - AUTO_BED_LEVELING_LINEAR + * Probe several points in a grid. + * You specify the rectangle and the density of sample points. + * The result is a single tilted plane. Best for a flat bed. + * + * - AUTO_BED_LEVELING_BILINEAR + * Probe several points in a grid. + * You specify the rectangle and the density of sample points. + * The result is a mesh, best for large or uneven beds. + * + * - AUTO_BED_LEVELING_UBL (Unified Bed Leveling) + * A comprehensive bed leveling system combining the features and benefits + * of other systems. UBL also includes integrated Mesh Generation, Mesh + * Validation and Mesh Editing systems. + * + * - MESH_BED_LEVELING + * Probe a grid manually + * The result is a mesh, suitable for large or uneven beds. (See BILINEAR.) + * For machines without a probe, Mesh Bed Leveling provides a method to perform + * leveling in steps so you can manually adjust the Z height at each grid-point. + * With an LCD controller the process is guided step-by-step. + */ +#if ANYCUBIC_PROBE_VERSION == 0 + #define AUTO_BED_LEVELING_3POINT +#else +//#define AUTO_BED_LEVELING_LINEAR + #define AUTO_BED_LEVELING_BILINEAR +//#define AUTO_BED_LEVELING_UBL +//#define MESH_BED_LEVELING +#endif +/** + * Normally G28 leaves leveling disabled on completion. Enable + * this option to have G28 restore the prior leveling state. + */ +#define RESTORE_LEVELING_AFTER_G28 + +/** + * Enable detailed logging of G28, G29, M48, etc. + * Turn on with the command 'M111 S32'. + * NOTE: Requires a lot of PROGMEM! + */ +//#define DEBUG_LEVELING_FEATURE + +#if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_BILINEAR) || ENABLED(AUTO_BED_LEVELING_UBL) + // Gradually reduce leveling correction until a set height is reached, + // at which point movement will be level to the machine's XY plane. + // The height can be set with M420 Z + //#define ENABLE_LEVELING_FADE_HEIGHT + + // For Cartesian machines, instead of dividing moves on mesh boundaries, + // split up moves into short segments like a Delta. This follows the + // contours of the bed more closely than edge-to-edge straight moves. + #define SEGMENT_LEVELED_MOVES + #define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one) + + /** + * Enable the G26 Mesh Validation Pattern tool. + */ + //#define 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.0 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool. + #define MESH_TEST_BED_TEMP 60.0 // (°C) Default bed temperature for the G26 Mesh Validation Tool. + #endif + +#endif + +#if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR) + + // Set the number of grid points per dimension. + // Works best with 5 or more points in each dimension. + #define GRID_MAX_POINTS_X 9 + #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X + + // Set the boundaries for probing (where the probe can reach). + #define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS -(MIN_PROBE_EDGE)) + #define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS -(MIN_PROBE_EDGE) + #define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS -(MIN_PROBE_EDGE)) + #define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS -(MIN_PROBE_EDGE) + + // Probe along the Y axis, advancing X after each column + //#define PROBE_Y_FIRST + + #if ENABLED(AUTO_BED_LEVELING_BILINEAR) + + // Beyond the probed grid, continue the implied tilt? + // Default is to maintain the height of the nearest edge. + #define EXTRAPOLATE_BEYOND_GRID + + // + // Experimental Subdivision of the grid by Catmull-Rom method. + // Synthesizes intermediate points to produce a more detailed mesh. + // + //#define ABL_BILINEAR_SUBDIVISION + #if ENABLED(ABL_BILINEAR_SUBDIVISION) + // Number of subdivisions between probe points + #define BILINEAR_SUBDIVISIONS 3 + #endif + + #endif + +#elif ENABLED(AUTO_BED_LEVELING_UBL) + + //=========================================================================== + //========================= Unified Bed Leveling ============================ + //=========================================================================== + + //#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh + + #define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed + #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. + +#elif ENABLED(MESH_BED_LEVELING) + + //=========================================================================== + //=================================== Mesh ================================== + //=========================================================================== + + #define MESH_INSET 10 // Set Mesh bounds as an inset region of the bed + #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 + +#endif // BED_LEVELING + +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if ENABLED(AUTO_BED_LEVELING_3POINT) || ENABLED(AUTO_BED_LEVELING_UBL) + #define PROBE_PT_1_X -40 + #define PROBE_PT_1_Y 60 + #define PROBE_PT_2_X 40 + #define PROBE_PT_2_Y 60 + #define PROBE_PT_3_X 0 + #define PROBE_PT_3_Y -70 +#endif + +/** + * Add a bed leveling sub-menu for ABL or MBL. + * Include a guided procedure if manual probing is enabled. + */ +#define LCD_BED_LEVELING + +#if ENABLED(LCD_BED_LEVELING) + #define MBL_Z_STEP 0.05 // Step size while manually probing Z axis. + #define LCD_PROBE_Z_RANGE 4 // Z Range centered on Z_MIN_POS for LCD Z adjustment +#endif + +// Add a menu item to move between bed corners for manual bed adjustment +//#define LEVEL_BED_CORNERS + +#if ENABLED(LEVEL_BED_CORNERS) + #define LEVEL_CORNERS_INSET 30 // (mm) An inset for corner leveling + //#define LEVEL_CENTER_TOO // Move to the center after the last corner +#endif + +/** + * Commands to execute at the end of G29 probing. + * Useful to retract or move the Z probe out of the way. + */ +//#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" + + +// @section homing + +// The center of the bed is at (X=0, Y=0) +#define BED_CENTER_AT_0_0 + +// Manually set the home position. Leave these undefined for automatic settings. +// For DELTA this is the top-center of the Cartesian print volume. +//#define MANUAL_X_HOME_POS 0 +//#define MANUAL_Y_HOME_POS 0 +#define MANUAL_Z_HOME_POS DELTA_HEIGHT // Distance between the nozzle to printbed after homing + +// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area. +// +// With this feature enabled: +// +// - Allow Z homing only after X and Y homing AND stepper drivers still enabled. +// - If stepper drivers time out, it will need X and Y homing again before Z homing. +// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28). +// - Prevent Z homing when the Z probe is outside bed area. +// +//#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 + +// Delta only homes to Z +#define HOMING_FEEDRATE_Z (100*60) + +// @section calibrate + +/** + * Bed Skew Compensation + * + * This feature corrects for misalignment in the XYZ axes. + * + * Take the following steps to get the bed skew in the XY plane: + * 1. Print a test square (e.g., https://www.thingiverse.com/thing:2563185) + * 2. For XY_DIAG_AC measure the diagonal A to C + * 3. For XY_DIAG_BD measure the diagonal B to D + * 4. For XY_SIDE_AD measure the edge A to D + * + * Marlin automatically computes skew factors from these measurements. + * Skew factors may also be computed and set manually: + * + * - Compute AB : SQRT(2*AC*AC+2*BD*BD-4*AD*AD)/2 + * - XY_SKEW_FACTOR : TAN(PI/2-ACOS((AC*AC-AB*AB-AD*AD)/(2*AB*AD))) + * + * If desired, follow the same procedure for XZ and YZ. + * Use these diagrams for reference: + * + * Y Z Z + * ^ B-------C ^ B-------C ^ B-------C + * | / / | / / | / / + * | / / | / / | / / + * | A-------D | A-------D | A-------D + * +-------------->X +-------------->X +-------------->Y + * XY_SKEW_FACTOR XZ_SKEW_FACTOR YZ_SKEW_FACTOR + */ +//#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 + +//============================================================================= +//============================= Additional Features =========================== +//============================================================================= + +// @section extras + +// +// EEPROM +// +// The microcontroller can store settings in the EEPROM, e.g. max velocity... +// M500 - stores parameters in EEPROM +// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). +// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to. +// +#define EEPROM_SETTINGS // Enable for M500 and M501 commands +//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release! +#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM. + +// +// Host Keepalive +// +// When enabled Marlin will send a busy status message to the host +// every couple of seconds when it can't accept commands. +// +#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 + +// +// M100 Free Memory Watcher +// +//#define M100_FREE_MEMORY_WATCHER // Add M100 (Free Memory Watcher) to debug memory usage + +// +// G20/G21 Inch mode support +// +//#define INCH_MODE_SUPPORT + +// +// M149 Set temperature units support +// +//#define TEMPERATURE_UNITS_SUPPORT + +// @section temperature + +// Preheat Constants +#define PREHEAT_1_TEMP_HOTEND 190 +#define PREHEAT_1_TEMP_BED 60 +#define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255 + +#define PREHEAT_2_TEMP_HOTEND 240 +#define PREHEAT_2_TEMP_BED 100 +#define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255 + +/** + * Nozzle Park + * + * Park the nozzle at the given XYZ position on idle or G27. + * + * The "P" parameter controls the action applied to the Z axis: + * + * P0 (Default) If Z is below park Z raise the nozzle. + * P1 Raise the nozzle always to Z-park height. + * P2 Raise the nozzle by Z-park amount, limited to Z_MAX_POS. + */ +#define NOZZLE_PARK_FEATURE + +#if ENABLED(NOZZLE_PARK_FEATURE) + // Specify a park position as { X, Y, Z } + #define NOZZLE_PARK_POINT { 0, 0, MANUAL_Z_HOME_POS } + #define NOZZLE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define NOZZLE_PARK_Z_FEEDRATE 100 // Z axis feedrate in mm/s (not used for delta printers) +#endif + +/** + * Clean Nozzle Feature -- EXPERIMENTAL + * + * Adds the G12 command to perform a nozzle cleaning process. + * + * Parameters: + * P Pattern + * S Strokes / Repetitions + * T Triangles (P1 only) + * + * Patterns: + * P0 Straight line (default). This process requires a sponge type material + * at a fixed bed location. "S" specifies strokes (i.e. back-forth motions) + * between the start / end points. + * + * P1 Zig-zag pattern between (X0, Y0) and (X1, Y1), "T" specifies the + * number of zig-zag triangles to do. "S" defines the number of strokes. + * Zig-zags are done in whichever is the narrower dimension. + * For example, "G12 P1 S1 T3" will execute: + * + * -- + * | (X0, Y1) | /\ /\ /\ | (X1, Y1) + * | | / \ / \ / \ | + * A | | / \ / \ / \ | + * | | / \ / \ / \ | + * | (X0, Y0) | / \/ \/ \ | (X1, Y0) + * -- +--------------------------------+ + * |________|_________|_________| + * T1 T2 T3 + * + * P2 Circular pattern with middle at NOZZLE_CLEAN_CIRCLE_MIDDLE. + * "R" specifies the radius. "S" specifies the stroke count. + * Before starting, the nozzle moves to NOZZLE_CLEAN_START_POINT. + * + * Caveats: The ending Z should be the same as starting Z. + * Attention: EXPERIMENTAL. G-code arguments may change. + * + */ +//#define NOZZLE_CLEAN_FEATURE + +#if ENABLED(NOZZLE_CLEAN_FEATURE) + // Default number of pattern repetitions + #define NOZZLE_CLEAN_STROKES 12 + + // Default number of triangles + #define NOZZLE_CLEAN_TRIANGLES 3 + + // Specify positions as { X, Y, Z } + #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} + #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)} + + // Circular pattern radius + #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5 + // Circular pattern circle fragments number + #define NOZZLE_CLEAN_CIRCLE_FN 10 + // Middle point of circle + #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT + + // Moves the nozzle to the initial position + #define NOZZLE_CLEAN_GOBACK +#endif + +/** + * Print Job Timer + * + * Automatically start and stop the print job timer on M104/M109/M190. + * + * M104 (hotend, no wait) - high temp = none, low temp = stop timer + * M109 (hotend, wait) - high temp = start timer, low temp = stop timer + * M190 (bed, wait) - high temp = start timer, low temp = none + * + * The timer can also be controlled with the following commands: + * + * M75 - Start the print job timer + * M76 - Pause the print job timer + * M77 - Stop the print job timer + */ +#define PRINTJOB_TIMER_AUTOSTART + +/** + * Print Counter + * + * Track statistical data such as: + * + * - Total print jobs + * - Total successful print jobs + * - Total failed print jobs + * - Total time printing + * + * View the current statistics with M78. + */ +#define PRINTCOUNTER + +//============================================================================= +//============================= LCD and SD support ============================ +//============================================================================= + +// @section lcd + +/** + * LCD LANGUAGE + * + * Select the language to display on the LCD. These languages are available: + * + * en, an, bg, ca, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it, + * jp-kana, nl, pl, pt, pt-br, ru, sk, tr, uk, zh_CN, zh_TW, test + * + * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' } + */ +#define LCD_LANGUAGE en + +/** + * LCD Character Set + * + * Note: This option is NOT applicable to Graphical Displays. + * + * All character-based LCDs provide ASCII plus one of these + * language extensions: + * + * - JAPANESE ... the most common + * - WESTERN ... with more accented characters + * - CYRILLIC ... for the Russian language + * + * To determine the language extension installed on your controller: + * + * - Compile and upload with LCD_LANGUAGE set to 'test' + * - Click the controller to view the LCD menu + * - The LCD will display Japanese, Western, or Cyrillic text + * + * See http://marlinfw.org/docs/development/lcd_language.html + * + * :['JAPANESE', 'WESTERN', 'CYRILLIC'] + */ +#define DISPLAY_CHARSET_HD44780 JAPANESE + +/** + * SD CARD + * + * SD Card support is disabled by default. If your controller has an SD slot, + * you must uncomment the following option or it won't work. + * + */ +#define SDSUPPORT + +/** + * SD CARD: SPI SPEED + * + * Enable one of the following items for a slower SPI transfer speed. + * This may be required to resolve "volume init" errors. + */ +//#define SPI_SPEED SPI_HALF_SPEED +//#define SPI_SPEED SPI_QUARTER_SPEED +//#define SPI_SPEED SPI_EIGHTH_SPEED + +/** + * SD CARD: ENABLE CRC + * + * Use CRC checks and retries on the SD communication. + */ +//#define SD_CHECK_AND_RETRY + +/** + * LCD Menu Items + * + * Disable all menus and only display the Status Screen, or + * just remove some extraneous menu items to recover space. + */ +//#define NO_LCD_MENUS +//#define SLIM_LCD_MENUS + +// +// ENCODER SETTINGS +// +// This option overrides the default number of encoder pulses needed to +// produce one step. Should be increased for high-resolution encoders. +// +#define ENCODER_PULSES_PER_STEP 3 + +// +// Use this option to override the number of step signals required to +// move between next/prev menu items. +// +#define ENCODER_STEPS_PER_MENU_ITEM 1 + +/** + * Encoder Direction Options + * + * Test your encoder's behavior first with both options disabled. + * + * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION. + * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION. + * Reversed Value Editing only? Enable BOTH options. + */ + +// +// This option reverses the encoder direction everywhere. +// +// Set this option if CLOCKWISE causes values to DECREASE +// +#define REVERSE_ENCODER_DIRECTION + +// +// This option reverses the encoder direction for navigating LCD menus. +// +// If CLOCKWISE normally moves DOWN this makes it go UP. +// If CLOCKWISE normally moves UP this makes it go DOWN. +// +//#define REVERSE_MENU_DIRECTION + +// +// Individual Axis Homing +// +// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu. +// +//#define INDIVIDUAL_AXIS_HOMING_MENU + +// +// SPEAKER/BUZZER +// +// If you have a speaker that can produce tones, enable it here. +// By default Marlin assumes you have a buzzer with a fixed frequency. +// +#define SPEAKER + +// +// The duration and frequency for the UI feedback sound. +// Set these to 0 to disable audio feedback in the LCD menus. +// +// Note: Test audio output with the G-Code: +// M300 S P +// +#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2 +#define LCD_FEEDBACK_FREQUENCY_HZ 5000 + +//============================================================================= +//======================== LCD / Controller Selection ========================= +//======================== (Character-based LCDs) ========================= +//============================================================================= + +// +// RepRapDiscount Smart Controller. +// http://reprap.org/wiki/RepRapDiscount_Smart_Controller +// +// Note: Usually sold with a white PCB. +// +#define REPRAP_DISCOUNT_SMART_CONTROLLER + +// +// Original RADDS LCD Display+Encoder+SDCardReader +// http://doku.radds.org/dokumentation/lcd-display/ +// +//#define RADDS_DISPLAY + +// +// ULTIMAKER Controller. +// +//#define ULTIMAKERCONTROLLER + +// +// ULTIPANEL as seen on Thingiverse. +// +//#define ULTIPANEL + +// +// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3) +// http://reprap.org/wiki/PanelOne +// +//#define PANEL_ONE + +// +// GADGETS3D G3D LCD/SD Controller +// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel +// +// Note: Usually sold with a blue PCB. +// +//#define G3D_PANEL + +// +// RigidBot Panel V1.0 +// http://www.inventapart.com/ +// +//#define RIGIDBOT_PANEL + +// +// Makeboard 3D Printer Parts 3D Printer Mini Display 1602 Mini Controller +// https://www.aliexpress.com/item/Micromake-Makeboard-3D-Printer-Parts-3D-Printer-Mini-Display-1602-Mini-Controller-Compatible-with-Ramps-1/32765887917.html +// +//#define MAKEBOARD_MINI_2_LINE_DISPLAY_1602 + +// +// ANET and Tronxy 20x4 Controller +// +//#define ZONESTAR_LCD // Requires ADC_KEYPAD_PIN to be assigned to an analog pin. + // This LCD is known to be susceptible to electrical interference + // which scrambles the display. Pressing any button clears it up. + // This is a LCD2004 display with 5 analog buttons. + +// +// Generic 16x2, 16x4, 20x2, or 20x4 character-based LCD. +// +//#define ULTRA_LCD + +//============================================================================= +//======================== LCD / Controller Selection ========================= +//===================== (I2C and Shift-Register LCDs) ===================== +//============================================================================= + +// +// CONTROLLER TYPE: I2C +// +// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C +// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C +// + +// +// Elefu RA Board Control Panel +// http://www.elefu.com/index.php?route=product/product&product_id=53 +// +//#define RA_CONTROL_PANEL + +// +// Sainsmart (YwRobot) LCD Displays +// +// These require F.Malpartida's LiquidCrystal_I2C library +// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home +// +//#define LCD_SAINSMART_I2C_1602 +//#define LCD_SAINSMART_I2C_2004 + +// +// Generic LCM1602 LCD adapter +// +//#define LCM1602 + +// +// PANELOLU2 LCD with status LEDs, +// separate encoder and click inputs. +// +// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later. +// For more info: https://github.com/lincomatic/LiquidTWI2 +// +// Note: The PANELOLU2 encoder click input can either be directly connected to +// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1). +// +//#define LCD_I2C_PANELOLU2 + +// +// Panucatt VIKI LCD with status LEDs, +// integrated click & L/R/U/D buttons, separate encoder inputs. +// +//#define LCD_I2C_VIKI + +// +// CONTROLLER TYPE: Shift register panels +// + +// +// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH +// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD +// +//#define SAV_3DLCD + +//============================================================================= +//======================= LCD / Controller Selection ======================= +//========================= (Graphical LCDs) ======================== +//============================================================================= + +// +// CONTROLLER TYPE: Graphical 128x64 (DOGM) +// +// IMPORTANT: The U8glib library is required for Graphical Display! +// https://github.com/olikraus/U8glib_Arduino +// + +// +// RepRapDiscount FULL GRAPHIC Smart Controller +// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller +// +//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + +// +// ReprapWorld Graphical LCD +// https://reprapworld.com/?products_details&products_id/1218 +// +//#define REPRAPWORLD_GRAPHICAL_LCD + +// +// Activate one of these if you have a Panucatt Devices +// Viki 2.0 or mini Viki with Graphic LCD +// http://panucatt.com +// +//#define VIKI2 +//#define miniVIKI + +// +// MakerLab Mini Panel with graphic +// controller and SD support - http://reprap.org/wiki/Mini_panel +// +//#define MINIPANEL + +// +// MaKr3d Makr-Panel with graphic controller and SD support. +// http://reprap.org/wiki/MaKr3d_MaKrPanel +// +//#define MAKRPANEL + +// +// Adafruit ST7565 Full Graphic Controller. +// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/ +// +//#define ELB_FULL_GRAPHIC_CONTROLLER + +// +// BQ LCD Smart Controller shipped by +// default with the BQ Hephestos 2 and Witbox 2. +// +//#define BQ_LCD_SMART_CONTROLLER + +// +// Cartesio UI +// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface +// +//#define CARTESIO_UI + +// +// LCD for Melzi Card with Graphical LCD +// +//#define LCD_FOR_MELZI + +// +// SSD1306 OLED full graphics generic display +// +//#define U8GLIB_SSD1306 + +// +// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules +// +//#define SAV_3DGLCD +#if ENABLED(SAV_3DGLCD) + //#define U8GLIB_SSD1306 + #define U8GLIB_SH1106 +#endif + +// +// Original Ulticontroller from Ultimaker 2 printer with SSD1309 I2C display and encoder +// https://github.com/Ultimaker/Ultimaker2/tree/master/1249_Ulticontroller_Board_(x1) +// +//#define ULTI_CONTROLLER + +// +// TinyBoy2 128x64 OLED / Encoder Panel +// +//#define OLED_PANEL_TINYBOY2 + +// +// MKS MINI12864 with graphic controller and SD support +// http://reprap.org/wiki/MKS_MINI_12864 +// +//#define MKS_MINI_12864 + +// +// Factory display for Creality CR-10 +// https://www.aliexpress.com/item/Universal-LCD-12864-3D-Printer-Display-Screen-With-Encoder-For-CR-10-CR-7-Model/32833148327.html +// +// This is RAMPS-compatible using a single 10-pin connector. +// (For CR-10 owners who want to replace the Melzi Creality board but retain the display) +// +//#define CR10_STOCKDISPLAY + +// +// ANET and Tronxy Graphical Controller +// +//#define ANET_FULL_GRAPHICS_LCD // Anet 128x64 full graphics lcd with rotary encoder as used on Anet A6 + // A clone of the RepRapDiscount full graphics display but with + // different pins/wiring (see pins_ANET_10.h). + +// +// MKS OLED 1.3" 128 × 64 FULL GRAPHICS CONTROLLER +// http://reprap.org/wiki/MKS_12864OLED +// +// Tiny, but very sharp OLED display +// +//#define MKS_12864OLED // Uses the SH1106 controller (default) +//#define MKS_12864OLED_SSD1306 // Uses the SSD1306 controller + +// +// AZSMZ 12864 LCD with SD +// https://www.aliexpress.com/store/product/3D-printer-smart-controller-SMART-RAMPS-OR-RAMPS-1-4-LCD-12864-LCD-control-panel-green/2179173_32213636460.html +// +//#define AZSMZ_12864 + +// +// Silvergate GLCD controller +// http://github.com/android444/Silvergate +// +//#define SILVER_GATE_GLCD_CONTROLLER + +//============================================================================= +//============================ Other Controllers ============================ +//============================================================================= + +// +// CONTROLLER TYPE: Standalone / Serial +// + +// +// LCD for Malyan M200 printers. +// +//#define MALYAN_LCD + +// +// CONTROLLER TYPE: Keypad / Add-on +// + +// +// RepRapWorld REPRAPWORLD_KEYPAD v1.1 +// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626 +// +// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key +// is pressed, a value of 10.0 means 10mm per click. +// +//#define REPRAPWORLD_KEYPAD +//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 + +//============================================================================= +//=============================== Extra Features ============================== +//============================================================================= + +// @section extras + +// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino +//#define FAST_PWM_FAN + +// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency +// which is not as annoying as with the hardware PWM. On the other hand, if this frequency +// is too low, you should also increment SOFT_PWM_SCALE. +//#define FAN_SOFT_PWM + +// Incrementing this by 1 will double the software PWM frequency, +// affecting heaters, and the fan if FAN_SOFT_PWM is enabled. +// However, control resolution will be halved for each increment; +// at zero value, there are 128 effective control positions. +#define SOFT_PWM_SCALE 0 + +// If SOFT_PWM_SCALE is set to a value higher than 0, dithering can +// be used to mitigate the associated resolution loss. If enabled, +// some of the PWM cycles are stretched so on average the desired +// duty cycle is attained. +//#define SOFT_PWM_DITHER + +// Temperature status LEDs that display the hotend and bed temperature. +// If all hotends, bed temperature, and target temperature are under 54C +// then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis) +//#define TEMP_STAT_LEDS + +// M240 Triggers a camera by emulating a Canon RC-1 Remote +// Data from: http://www.doc-diy.net/photo/rc-1_hacked/ +//#define PHOTOGRAPH_PIN 23 + +// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure +//#define SF_ARC_FIX + +// Support for the BariCUDA Paste Extruder +//#define BARICUDA + +// Support for BlinkM/CyzRgb +//#define BLINKM + +// Support for PCA9632 PWM LED driver +//#define PCA9632 + +/** + * RGB LED / LED Strip Control + * + * Enable support for an RGB LED connected to 5V digital pins, or + * an RGB Strip connected to MOSFETs controlled by digital pins. + * + * Adds the M150 command to set the LED (or LED strip) color. + * If pins are PWM capable (e.g., 4, 5, 6, 11) then a range of + * luminance values can be set from 0 to 255. + * For Neopixel LED an overall brightness parameter is also available. + * + * *** CAUTION *** + * LED Strips require a MOSFET Chip between PWM lines and LEDs, + * as the Arduino cannot handle the current the LEDs will require. + * Failure to follow this precaution can destroy your Arduino! + * NOTE: A separate 5V power supply is required! The Neopixel LED needs + * more current than the Arduino 5V linear regulator can produce. + * *** CAUTION *** + * + * LED Type. Enable only one of the following two options. + * + */ +//#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 + +// Support for Adafruit Neopixel LED driver +//#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 on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba) + #define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip + #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 +#endif + +/** + * Printer Event LEDs + * + * During printing, the LEDs will reflect the printer status: + * + * - Gradually change from blue to violet as the heated bed gets to target temp + * - Gradually change from violet to red as the hotend gets to temperature + * - Change to white to illuminate work surface + * - Change to green once print has finished + * - Turn off after the print has finished and the user has pushed a button + */ +#if ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED) + #define PRINTER_EVENT_LEDS +#endif + +/** + * R/C SERVO support + * Sponsored by TrinityLabs, Reworked by codexmas + */ + +/** + * Number of servos + * + * For some servo-related options NUM_SERVOS will be set automatically. + * Set this manually if there are extra servos needing manual control. + * Leave undefined or set to 0 to entirely disable the servo subsystem. + */ +//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command + +// Delay (in milliseconds) before the next move will start, to give the servo time to reach its target angle. +// 300ms is a good value but you can try less delay. +// If the servo can't reach the requested position, increase it. +#define SERVO_DELAY { 300 } + +// Only power servos during movement, otherwise leave off to prevent jitter +//#define DEACTIVATE_SERVOS_AFTER_MOVE + +// Allow servo angle to be edited and saved to EEPROM +//#define EDITABLE_SERVO_ANGLES + +#endif // CONFIGURATION_H diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h new file mode 100644 index 0000000000..d90f834672 --- /dev/null +++ b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -0,0 +1,1692 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 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 . + * + */ + +/** + * Configuration_adv.h + * + * Advanced settings. + * Only change these if you know exactly what you're doing. + * Some of these settings can damage your printer if improperly set! + * + * Basic settings can be found in Configuration.h + * + */ +#ifndef CONFIGURATION_ADV_H +#define CONFIGURATION_ADV_H +#define CONFIGURATION_ADV_H_VERSION 020000 + +// @section temperature + +//=========================================================================== +//=============================Thermal Settings ============================ +//=========================================================================== + +// +// Hephestos 2 24V heated bed upgrade kit. +// https://store.bq.com/en/heated-bed-kit-hephestos2 +// +//#define HEPHESTOS2_HEATED_BED_KIT +#if ENABLED(HEPHESTOS2_HEATED_BED_KIT) + #undef TEMP_SENSOR_BED + #define TEMP_SENSOR_BED 70 + #define HEATER_BED_INVERTING true +#endif + +#if DISABLED(PIDTEMPBED) + #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control + #if ENABLED(BED_LIMIT_SWITCHING) + #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS + #endif +#endif + +/** + * Thermal Protection provides additional protection to your printer from damage + * and fire. Marlin always includes safe min and max temperature ranges which + * protect against a broken or disconnected thermistor wire. + * + * The issue: If a thermistor falls out, it will report the much lower + * temperature of the air in the room, and the the firmware will keep + * the heater on. + * + * The solution: Once the temperature reaches the target, start observing. + * If the temperature stays too far below the target (hysteresis) for too + * long (period), the firmware will halt the machine as a safety precaution. + * + * If you get false positives for "Thermal Runaway", increase + * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD + */ +#if ENABLED(THERMAL_PROTECTION_HOTENDS) + #define THERMAL_PROTECTION_PERIOD 40 // Seconds + #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius + + /** + * Whenever an M104, M109, or M303 increases the target temperature, the + * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature + * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and + * requires a hard reset. This test restarts with any M104/M109/M303, but only + * if the current temperature is far enough below the target for a reliable + * test. + * + * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD + * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set + * below 2. + */ + #define WATCH_TEMP_PERIOD 20 // Seconds + #define WATCH_TEMP_INCREASE 2 // Degrees Celsius +#endif + +/** + * Thermal Protection parameters for the bed are just as above for hotends. + */ +#if ENABLED(THERMAL_PROTECTION_BED) + #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius + + /** + * As described above, except for the bed (M140/M190/M303). + */ + #define WATCH_BED_TEMP_PERIOD 60 // Seconds + #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius +#endif + +#if ENABLED(PIDTEMP) + // this adds an experimental additional term to the heating power, proportional to the extrusion speed. + // if Kc is chosen well, the additional required power due to increased melting should be compensated. + //#define PID_EXTRUSION_SCALING + #if ENABLED(PID_EXTRUSION_SCALING) + #define DEFAULT_Kc (100) //heating power=Kc*(e_speed) + #define LPQ_MAX_LEN 50 + #endif +#endif + +/** + * Automatic Temperature: + * The hotend target temperature is calculated by all the buffered lines of gcode. + * The maximum buffered steps/sec of the extruder motor is called "se". + * Start autotemp mode with M109 S B F + * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by + * mintemp and maxtemp. Turn this off by executing M109 without F* + * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp. + * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode + */ +#define AUTOTEMP +#if ENABLED(AUTOTEMP) + #define AUTOTEMP_OLDWEIGHT 0.98 +#endif + +// Show extra position information in M114 +//#define M114_DETAIL + +// Show Temperature ADC value +// Enable for M105 to include ADC values read from temperature sensors. +//#define SHOW_TEMP_ADC_VALUES + +/** + * High Temperature Thermistor Support + * + * Thermistors able to support high temperature tend to have a hard time getting + * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP + * will probably be caught when the heating element first turns on during the + * preheating process, which will trigger a min_temp_error as a safety measure + * and force stop everything. + * To circumvent this limitation, we allow for a preheat time (during which, + * min_temp_error won't be triggered) and add a min_temp buffer to handle + * aberrant readings. + * + * If you want to enable this feature for your hotend thermistor(s) + * uncomment and set values > 0 in the constants below + */ + +// The number of consecutive low temperature errors that can occur +// before a min_temp_error is triggered. (Shouldn't be more than 10.) +//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0 + +// The number of milliseconds a hotend will preheat before starting to check +// the temperature. This value should NOT be set to the time it takes the +// hot end to reach the target temperature, but the time it takes to reach +// the minimum temperature your thermistor can read. The lower the better/safer. +// This shouldn't need to be more than 30 seconds (30000) +//#define MILLISECONDS_PREHEAT_TIME 0 + +// @section extruder + +// Extruder runout prevention. +// If the machine is idle and the temperature over MINTEMP +// then extrude some filament every couple of SECONDS. +//#define EXTRUDER_RUNOUT_PREVENT +#if ENABLED(EXTRUDER_RUNOUT_PREVENT) + #define EXTRUDER_RUNOUT_MINTEMP 190 + #define EXTRUDER_RUNOUT_SECONDS 30 + #define EXTRUDER_RUNOUT_SPEED 1500 // mm/m + #define EXTRUDER_RUNOUT_EXTRUDE 5 // mm +#endif + +// @section temperature + +// Calibration for AD595 / AD8495 sensor to adjust temperature measurements. +// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET. +#define TEMP_SENSOR_AD595_OFFSET 0.0 +#define TEMP_SENSOR_AD595_GAIN 1.0 +#define TEMP_SENSOR_AD8495_OFFSET 0.0 +#define TEMP_SENSOR_AD8495_GAIN 1.0 + +/** + * Controller Fan + * To cool down the stepper drivers and MOSFETs. + * + * The fan will turn on automatically whenever any stepper is enabled + * and turn off after a set period after all steppers are turned off. + */ +//#define USE_CONTROLLER_FAN +#if ENABLED(USE_CONTROLLER_FAN) + //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan + #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled + #define CONTROLLERFAN_SPEED 255 // 255 == full speed +#endif + +// When first starting the main fan, run it at full speed for the +// given number of milliseconds. This gets the fan spinning reliably +// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu) +//#define FAN_KICKSTART_TIME 100 + +/** + * PWM Fan Scaling + * + * Define the min/max speeds for PWM fans (as set with M106). + * + * With these options the M106 0-255 value range is scaled to a subset + * to ensure that the fan has enough power to spin, or to run lower + * current fans with higher current. (e.g., 5V/12V fans with 12V/24V) + * Value 0 always turns off the fan. + * + * Define one or both of these to override the default 0-255 range. + */ +//#define FAN_MIN_PWM 50 +//#define FAN_MAX_PWM 128 + +// @section extruder + +/** + * Extruder cooling fans + * + * Extruder auto fans automatically turn on when their extruders' + * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE. + * + * Your board's pins file specifies the recommended pins. Override those here + * or set to -1 to disable completely. + * + * Multiple extruders can be assigned to the same pin in which case + * the fan will turn on when any selected extruder is above the threshold. + */ +#define E0_AUTO_FAN_PIN ORIG_E0_AUTO_FAN_PIN +#define E1_AUTO_FAN_PIN -1 +#define E2_AUTO_FAN_PIN -1 +#define E3_AUTO_FAN_PIN -1 +#define E4_AUTO_FAN_PIN -1 +#define CHAMBER_AUTO_FAN_PIN -1 +#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed + +/** + * Part-Cooling Fan Multiplexer + * + * This feature allows you to digitally multiplex the fan output. + * The multiplexer is automatically switched at tool-change. + * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans. + */ +#define FANMUX0_PIN -1 +#define FANMUX1_PIN -1 +#define FANMUX2_PIN -1 + +/** + * M355 Case Light on-off / brightness + */ +//#define CASE_LIGHT_ENABLE +#if ENABLED(CASE_LIGHT_ENABLE) + //#define CASE_LIGHT_PIN 4 // Override the default pin if needed + #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW + #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on + #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin) + //#define MENU_ITEM_CASE_LIGHT // Add a Case Light option to the LCD main menu + //#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED. + #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) + #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White } + #endif +#endif + +//=========================================================================== +//============================ Mechanical Settings ========================== +//=========================================================================== + +// @section homing + +// If you want endstops to stay on (by default) even when not homing +// enable this option. Override at any time with M120, M121. +//#define ENDSTOPS_ALWAYS_ON_DEFAULT + +// @section extras + +//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats. + +/** + * Dual Steppers / Dual Endstops + * + * This section will allow you to use extra E drivers to drive a second motor for X, Y, or Z axes. + * + * For example, set X_DUAL_STEPPER_DRIVERS setting to use a second motor. If the motors need to + * spin in opposite directions set INVERT_X2_VS_X_DIR. If the second motor needs its own endstop + * set X_DUAL_ENDSTOPS. This can adjust for "racking." Use X2_USE_ENDSTOP to set the endstop plug + * that should be used for the second endstop. Extra endstops will appear in the output of 'M119'. + * + * Use X_DUAL_ENDSTOP_ADJUSTMENT to adjust for mechanical imperfection. After homing both motors + * this offset is applied to the X2 motor. To find the offset home the X axis, and measure the error + * in X2. Dual endstop offsets can be set at runtime with 'M666 X Y Z'. + */ + +//#define X_DUAL_STEPPER_DRIVERS +#if ENABLED(X_DUAL_STEPPER_DRIVERS) + #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions + //#define X_DUAL_ENDSTOPS + #if ENABLED(X_DUAL_ENDSTOPS) + #define X2_USE_ENDSTOP _XMAX_ + #define X_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Y_DUAL_STEPPER_DRIVERS +#if ENABLED(Y_DUAL_STEPPER_DRIVERS) + #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions + //#define Y_DUAL_ENDSTOPS + #if ENABLED(Y_DUAL_ENDSTOPS) + #define Y2_USE_ENDSTOP _YMAX_ + #define Y_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Z_DUAL_STEPPER_DRIVERS +#if ENABLED(Z_DUAL_STEPPER_DRIVERS) + //#define Z_DUAL_ENDSTOPS + #if ENABLED(Z_DUAL_ENDSTOPS) + #define Z2_USE_ENDSTOP _XMAX_ + #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +/** + * Dual X Carriage + * + * This setup has two X carriages that can move independently, each with its own hotend. + * The carriages can be used to print an object with two colors or materials, or in + * "duplication mode" it can print two identical or X-mirrored objects simultaneously. + * The inactive carriage is parked automatically to prevent oozing. + * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis. + * By default the X2 stepper is assigned to the first unused E plug on the board. + */ +//#define DUAL_X_CARRIAGE +#if ENABLED(DUAL_X_CARRIAGE) + #define X1_MIN_POS X_MIN_POS // set minimum to ensure first x-carriage doesn't hit the parked second X-carriage + #define X1_MAX_POS X_BED_SIZE // set maximum to ensure first x-carriage doesn't hit the parked second X-carriage + #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage + #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed + #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position + #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position + // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software + // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops + // without modifying the firmware (through the "M218 T1 X???" command). + // Remember: you should set the second extruder x-offset to 0 in your slicer. + + // There are a few selectable movement modes for dual x-carriages using M605 S + // Mode 0 (DXC_FULL_CONTROL_MODE): Full control. The slicer has full control over both x-carriages and can achieve optimal travel results + // as long as it supports dual x-carriages. (M605 S0) + // Mode 1 (DXC_AUTO_PARK_MODE) : Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so + // that additional slicer support is not required. (M605 S1) + // Mode 2 (DXC_DUPLICATION_MODE) : Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all + // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at + // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm]) + + // This is the default power-up mode which can be later using M605. + #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_FULL_CONTROL_MODE + + // Default settings in "Auto-park Mode" + #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder + #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder + + // Default x offset in duplication mode (typically set to half print bed width) + #define DEFAULT_DUPLICATION_X_OFFSET 100 + +#endif // DUAL_X_CARRIAGE + +// Activate a solenoid on the active extruder with M380. Disable all with M381. +// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid. +//#define EXT_SOLENOID + +// @section homing + +// Homing hits each endstop, retracts by these distances, then does a slower bump. +#define X_HOME_BUMP_MM 5 +#define Y_HOME_BUMP_MM 5 +#define Z_HOME_BUMP_MM 5 // deltas need the same for all three axes +#define HOMING_BUMP_DIVISOR { 10, 10, 10 } // Re-Bump Speed Divisor (Divides the Homing Feedrate) +//#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially + +// When G28 is called, this option will make Y home before X +//#define HOME_Y_BEFORE_X + +// Enable this if X or Y can't home without homing the other axis first. +//#define CODEPENDENT_XY_HOMING + +// @section machine + +#define AXIS_RELATIVE_MODES {false, false, false, false} + +// Allow duplication mode with a basic dual-nozzle extruder +//#define DUAL_NOZZLE_DUPLICATION_MODE + +// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step. +#define INVERT_X_STEP_PIN false +#define INVERT_Y_STEP_PIN false +#define INVERT_Z_STEP_PIN false +#define INVERT_E_STEP_PIN false + +// Default stepper release if idle. Set to 0 to deactivate. +// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true. +// Time can be set by M18 and M84. +#define DEFAULT_STEPPER_DEACTIVE_TIME 60 +#define DISABLE_INACTIVE_X true +#define DISABLE_INACTIVE_Y true +#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished. +#define DISABLE_INACTIVE_E true + +#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate +#define DEFAULT_MINTRAVELFEEDRATE 0.0 + +//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated + +// @section lcd + +#if ENABLED(ULTIPANEL) + #define MANUAL_FEEDRATE_XYZ 50*60 + #define MANUAL_FEEDRATE { MANUAL_FEEDRATE_XYZ, MANUAL_FEEDRATE_XYZ, MANUAL_FEEDRATE_XYZ, 60 } // Feedrates for manual moves along X, Y, Z, E from panel + #define MANUAL_E_MOVES_RELATIVE // Show LCD extruder moves as relative rather than absolute positions + #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder +#endif + +// @section extras + +// minimum time in microseconds that a movement needs to take if the buffer is emptied. +#define DEFAULT_MINSEGMENTTIME 20000 + +// If defined the movements slow down when the look ahead buffer is only half full +// (don't use SLOWDOWN with DELTA because DELTA generates hundreds of segments per second) +//#define SLOWDOWN + +// Frequency limit +// See nophead's blog for more info +// Not working O +//#define XY_FREQUENCY_LIMIT 15 + +// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end +// of the buffer and all stops. This should not be much greater than zero and should only be changed +// if unwanted behavior is observed on a user's machine when running at very slow speeds. +#define MINIMUM_PLANNER_SPEED 0.05 // (mm/sec) + +// +// Use Junction Deviation instead of traditional Jerk Limiting +// +//#define JUNCTION_DEVIATION +#if ENABLED(JUNCTION_DEVIATION) + #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge +#endif + +/** + * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies + * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible + * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the + * lowest stepping frequencies. + */ +//#define ADAPTIVE_STEP_SMOOTHING + +// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU. +#define MICROSTEP_MODES { 16, 16, 16, 16, 16 } // [1,2,4,8,16] + +/** + * @section stepper motor current + * + * Some boards have a means of setting the stepper motor current via firmware. + * + * The power on motor currents are set by: + * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2 + * known compatible chips: A4982 + * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H + * known compatible chips: AD5206 + * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2 + * known compatible chips: MCP4728 + * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE + * known compatible chips: MCP4451, MCP4018 + * + * Motor currents can also be set by M907 - M910 and by the LCD. + * M907 - applies to all. + * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H + * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2 + */ +//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps +#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) +//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis + +// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro) +//#define DIGIPOT_I2C +#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A) + /** + * Common slave addresses: + * + * A (A shifted) B (B shifted) IC + * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451 + * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451 + * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451 + * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018 + */ + #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT + #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT +#endif + +//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster +#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5 +// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS. +// These correspond to the physical drivers, so be mindful if the order is changed. +#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO + +//=========================================================================== +//=============================Additional Features=========================== +//=========================================================================== + +#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly +#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value +#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value + +//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/ +#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again + +// @section lcd + +// Include a page of printer information in the LCD Main Menu +#define LCD_INFO_MENU + +// Scroll a longer status message into view +#define STATUS_MESSAGE_SCROLLING + +// On the Info Screen, display XY with one decimal place when possible +//#define LCD_DECIMAL_SMALL_XY + +// The timeout (in ms) to return to the status screen from sub-menus +#define LCD_TIMEOUT_TO_STATUS 15000 + +// Add an 'M73' G-code to set the current percentage +//#define LCD_SET_PROGRESS_MANUALLY + +#if ENABLED(SDSUPPORT) || ENABLED(LCD_SET_PROGRESS_MANUALLY) + //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing + #if ENABLED(LCD_PROGRESS_BAR) + #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar + #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message + #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever) + //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it + //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar + #endif +#endif // SDSUPPORT || LCD_SET_PROGRESS_MANUALLY + +/** + * LED Control Menu + * Enable this feature to add LED Control to the LCD menu + */ +//#define LED_CONTROL_MENU +#if ENABLED(LED_CONTROL_MENU) + #define LED_COLOR_PRESETS // Enable the Preset Color menu option + #if ENABLED(LED_COLOR_PRESETS) + #define LED_USER_PRESET_RED 255 // User defined RED value + #define LED_USER_PRESET_GREEN 128 // User defined GREEN value + #define LED_USER_PRESET_BLUE 0 // User defined BLUE value + #define LED_USER_PRESET_WHITE 255 // User defined WHITE value + #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity + //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup + #endif +#endif // LED_CONTROL_MENU + +#if ENABLED(SDSUPPORT) + + // Some RAMPS and other boards don't detect when an SD card is inserted. You can work + // around this by connecting a push button or single throw switch to the pin defined + // as SD_DETECT_PIN in your board's pins definitions. + // This setting should be disabled unless you are using a push button, pulling the pin to ground. + // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER). + #define SD_DETECT_INVERTED + + #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place. + + // Reverse SD sort to show "more recent" files first, according to the card's FAT. + // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended. + #define SDCARD_RATHERRECENTFIRST + + // Add an option in the menu to run all auto#.g files + //#define MENU_ADDAUTOSTART + + /** + * Continue after Power-Loss (Creality3D) + * + * Store the current state to the SD Card at the start of each layer + * during SD printing. If the recovery file is found at boot time, present + * an option on the LCD screen to continue the print from the last-known + * point in the file. + */ + //#define POWER_LOSS_RECOVERY + #if ENABLED(POWER_LOSS_RECOVERY) + //#define POWER_LOSS_PIN 44 // Pin to detect power loss + //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss + #endif + + /** + * Sort SD file listings in alphabetical order. + * + * With this option enabled, items on SD cards will be sorted + * by name for easier navigation. + * + * By default... + * + * - Use the slowest -but safest- method for sorting. + * - Folders are sorted to the top. + * - The sort key is statically allocated. + * - No added G-code (M34) support. + * - 40 item sorting limit. (Items after the first 40 are unsorted.) + * + * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the + * compiler to calculate the worst-case usage and throw an error if the SRAM + * limit is exceeded. + * + * - SDSORT_USES_RAM provides faster sorting via a static directory buffer. + * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer. + * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!) + * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!) + */ + //#define SDCARD_SORT_ALPHA + + // SD Card Sorting options + #if ENABLED(SDCARD_SORT_ALPHA) + #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each. + #define FOLDER_SORTING -1 // -1=above 0=none 1=below + #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code. + #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. + #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) + #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. + #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! + #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting. + // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM. + #endif + + // This allows hosts to request long names for files and folders with M33 + //#define LONG_FILENAME_HOST_SUPPORT + + // Enable this option to scroll long filenames in the SD card menu + #define SCROLL_LONG_FILENAMES + + /** + * This option allows you to abort SD printing when any endstop is triggered. + * This feature must be enabled with "M540 S1" or from the LCD menu. + * To have any effect, endstops must be enabled during SD printing. + */ + //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED + + /** + * This option makes it easier to print the same SD Card file again. + * On print completion the LCD Menu will open with the file selected. + * You can just click to start the print, or navigate elsewhere. + */ + //#define SD_REPRINT_LAST_SELECTED_FILE + + /** + * Auto-report SdCard status with M27 S + */ + //#define AUTO_REPORT_SD_STATUS + +#endif // SDSUPPORT + +/** + * Additional options for Graphical Displays + * + * Use the optimizations here to improve printing performance, + * which can be adversely affected by graphical display drawing, + * especially when doing several short moves, and when printing + * on DELTA and SCARA machines. + * + * Some of these options may result in the display lagging behind + * controller events, as there is a trade-off between reliable + * printing performance versus fast display updates. + */ +#if ENABLED(DOGLCD) + // Show SD percentage next to the progress bar + //#define DOGM_SD_PERCENT + + // Enable to save many cycles by drawing a hollow frame on the Info Screen + #define XYZ_HOLLOW_FRAME + + // Enable to save many cycles by drawing a hollow frame on Menu Screens + #define MENU_HOLLOW_FRAME + + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. + //#define USE_BIG_EDIT_FONT + + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. + //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 + + // Swap the CW/CCW indicators in the graphics overlay + //#define OVERLAY_GFX_REVERSE + + #if ENABLED(U8GLIB_ST7920) + /** + * ST7920-based LCDs can emulate a 16 x 4 character display using + * the ST7920 character-generator for very fast screen updates. + * Enable LIGHTWEIGHT_UI to use this special display mode. + * + * Since LIGHTWEIGHT_UI has limited space, the position and status + * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the + * length of time to display the status message before clearing. + * + * Set STATUS_EXPIRE_SECONDS to zero to never clear the status. + * This will prevent position updates from being displayed. + */ + //#define LIGHTWEIGHT_UI + #if ENABLED(LIGHTWEIGHT_UI) + #define STATUS_EXPIRE_SECONDS 20 + #endif + #endif + +#endif // DOGLCD + +// @section safety + +// The hardware watchdog should reset the microcontroller disabling all outputs, +// in case the firmware gets stuck and doesn't do temperature regulation. +#define USE_WATCHDOG + +#if ENABLED(USE_WATCHDOG) + // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on. + // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset. + // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled. + //#define WATCHDOG_RESET_MANUAL +#endif + +// @section lcd + +/** + * Babystepping enables movement of the axes by tiny increments without changing + * the current position values. This feature is used primarily to adjust the Z + * axis in the first layer of a print in real-time. + * + * Warning: Does not respect endstops! + */ +#define BABYSTEPPING +#if ENABLED(BABYSTEPPING) + //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA! + #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way + #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion. + //#define BABYSTEP_ZPROBE_OFFSET // Enable to combine M851 and Babystepping + #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. + #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds. + // Note: Extra time may be added to mitigate controller latency. + //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor +#endif + +// @section extruder + +/** + * Linear Pressure Control v1.5 + * + * Assumption: advance [steps] = k * (delta velocity [steps/s]) + * K=0 means advance disabled. + * + * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions! + * + * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak. + * Larger K values will be needed for flexible filament and greater distances. + * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk) + * print acceleration will be reduced during the affected moves to keep within the limit. + * + * See http://marlinfw.org/docs/features/lin_advance.html for full instructions. + * Mention @Sebastianv650 on GitHub to alert the author of any issues. + */ +//#define LIN_ADVANCE +#if ENABLED(LIN_ADVANCE) + #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed + //#define LA_DEBUG // If enabled, this will generate debug information output over USB. +#endif + +// @section leveling + +#if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_UBL) + // Override the mesh area if the automatic (max) area is too large + //#define MESH_MIN_X MESH_INSET + //#define MESH_MIN_Y MESH_INSET + //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET) + //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) +#endif + +/** + * Repeatedly attempt G29 leveling until it succeeds. + * Stop after G29_MAX_RETRIES attempts. + */ +//#define G29_RETRY_AND_RECOVER +#if ENABLED(G29_RETRY_AND_RECOVER) + #define G29_MAX_RETRIES 3 + #define G29_HALT_ON_FAILURE + /** + * Specify the GCODE commands that will be executed when leveling succeeds, + * between attempts, and after the maximum number of retries have been tried. + */ + #define G29_SUCCESS_COMMANDS "M117 Bed leveling done." + #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0" + #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1" + /** + * Specify an action command to send to the host on a recovery attempt or failure. + * Will be sent in the form '//action:ACTION_ON_G29_FAILURE', e.g. '//action:probe_failed'. + * The host must be configured to handle the action command. + */ + #define G29_ACTION_ON_RECOVER "probe_rewipe" + #define G29_ACTION_ON_FAILURE "probe_failed" +#endif + +// @section extras + +// +// G2/G3 Arc Support +// +#define ARC_SUPPORT // Disable this feature to save ~3226 bytes +#if ENABLED(ARC_SUPPORT) + #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment + #define N_ARC_CORRECTION 25 // Number of intertpolated segments between corrections + //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles + //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes +#endif + +// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes. +//#define BEZIER_CURVE_SUPPORT + +// G38.2 and G38.3 Probe Target +// Set MULTIPLE_PROBING if you want G38 to double touch +//#define G38_PROBE_TARGET +#if ENABLED(G38_PROBE_TARGET) + #define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move) +#endif + +// Moves (or segments) with fewer steps than this will be joined with the next move +#define MIN_STEPS_PER_SEGMENT 6 + +/** + * Minimum delay after setting the stepper DIR (in ns) + * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) + * 20 : Minimum for TMC2xxx drivers + * 200 : Minimum for A4988 drivers + * 400 : Minimum for A5984 drivers + * 500 : Minimum for LV8729 drivers (guess, no info in datasheet) + * 650 : Minimum for DRV8825 drivers + * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet) + * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet) + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MINIMUM_STEPPER_DIR_DELAY 650 + +/** + * Minimum stepper driver pulse width (in µs) + * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers + * 1 : Minimum for A4988, A5984, and LV8729 stepper drivers + * 2 : Minimum for DRV8825 stepper drivers + * 3 : Minimum for TB6600 stepper drivers + * 30 : Minimum for TB6560 stepper drivers + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MINIMUM_STEPPER_PULSE 2 + +/** + * Maximum stepping rate (in Hz) the stepper driver allows + * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE) + * 500000 : Maximum for A4988 stepper driver + * 400000 : Maximum for TMC2xxx stepper drivers + * 250000 : Maximum for DRV8825 stepper driver + * 150000 : Maximum for TB6600 stepper driver + * 130000 : Maximum for LV8729 stepper driver + * 15000 : Maximum for TB6560 stepper driver + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MAXIMUM_STEPPER_RATE 250000 + +// @section temperature + +// Control heater 0 and heater 1 in parallel. +//#define HEATERS_PARALLEL + +//=========================================================================== +//================================= Buffers ================================= +//=========================================================================== + +// @section hidden + +// The number of linear motions that can be in the plan at any give time. +// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering. +#if ENABLED(SDSUPPORT) + #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller +#else + #define BLOCK_BUFFER_SIZE 16 // maximize block buffer +#endif + +// @section serial + +// The ASCII buffer for serial input +#define MAX_CMD_SIZE 96 +#define BUFSIZE 4 + +// Transmission to Host Buffer Size +// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0. +// To buffer a simple "ok" you need 4 bytes. +// For ADVANCED_OK (M105) you need 32 bytes. +// For debug-echo: 128 bytes for the optimal speed. +// Other output doesn't need to be that speedy. +// :[0, 2, 4, 8, 16, 32, 64, 128, 256] +#define TX_BUFFER_SIZE 0 + +// Host Receive Buffer Size +// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough. +// To use flow control, set this buffer size to at least 1024 bytes. +// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048] +//#define RX_BUFFER_SIZE 1024 + +#if RX_BUFFER_SIZE >= 1024 + // Enable to have the controller send XON/XOFF control characters to + // the host to signal the RX buffer is becoming full. + //#define SERIAL_XON_XOFF +#endif + +#if ENABLED(SDSUPPORT) + // Enable this option to collect and display the maximum + // RX queue usage after transferring a file to SD. + //#define SERIAL_STATS_MAX_RX_QUEUED + + // Enable this option to collect and display the number + // of dropped bytes after a file transfer to SD. + //#define SERIAL_STATS_DROPPED_RX +#endif + +// Enable an emergency-command parser to intercept certain commands as they +// enter the serial receive buffer, so they cannot be blocked. +// Currently handles M108, M112, M410 +// Does not work on boards using AT90USB (USBCON) processors! +//#define EMERGENCY_PARSER + +// Bad Serial-connections can miss a received command by sending an 'ok' +// Therefore some clients abort after 30 seconds in a timeout. +// Some other clients start sending commands while receiving a 'wait'. +// This "wait" is only sent when the buffer is empty. 1 second is a good value here. +//#define NO_TIMEOUTS 1000 // Milliseconds + +// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary. +//#define ADVANCED_OK + +// @section extras + +/** + * Firmware-based and LCD-controlled retract + * + * Add G10 / G11 commands for automatic firmware-based retract / recover. + * Use M207 and M208 to define parameters for retract / recover. + * + * Use M209 to enable or disable auto-retract. + * With auto-retract enabled, all G1 E moves within the set range + * will be converted to firmware-based retract/recover moves. + * + * Be sure to turn off auto-retract during filament change. + * + * Note that M207 / M208 / M209 settings are saved to EEPROM. + * + */ +//#define FWRETRACT // ONLY PARTIALLY TESTED +#if ENABLED(FWRETRACT) + #define MIN_AUTORETRACT 0.1 // When auto-retract is on, convert E moves of this length and over + #define MAX_AUTORETRACT 10.0 // Upper limit for auto-retract conversion + #define RETRACT_LENGTH 3 // Default retract length (positive mm) + #define RETRACT_LENGTH_SWAP 13 // Default swap retract length (positive mm), for extruder change + #define RETRACT_FEEDRATE 45 // Default feedrate for retracting (mm/s) + #define RETRACT_ZLIFT 0 // Default retract Z-lift + #define RETRACT_RECOVER_LENGTH 0 // Default additional recover length (mm, added to retract length when recovering) + #define RETRACT_RECOVER_LENGTH_SWAP 0 // Default additional swap recover length (mm, added to retract length when recovering from extruder change) + #define RETRACT_RECOVER_FEEDRATE 8 // Default feedrate for recovering from retraction (mm/s) + #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // Default feedrate for recovering from swap retraction (mm/s) +#endif + +/** + * Extra Fan Speed + * Adds a secondary fan speed for each print-cooling fan. + * 'M106 P T3-255' : Set a secondary speed for + * 'M106 P T2' : Use the set secondary speed + * 'M106 P T1' : Restore the previous fan speed + */ +//#define EXTRA_FAN_SPEED + +/** + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. + * Adds the GCode M600 for initiating filament change. + * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle. + * + * Requires an LCD display. + * Requires NOZZLE_PARK_FEATURE. + * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. + */ +#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate. + #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract. + // This short retract is done immediately, before parking the nozzle. + #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 40 // (mm/s) Unload filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. + #define FILAMENT_CHANGE_UNLOAD_LENGTH 750 // (mm) The length of filament for a complete unload. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + // Set to 0 for manual unloading. + #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load. + #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material. + // 0 to disable start loading and skip to fast load only + #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 40 // (mm/s) Load filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 650 // (mm) Load length of filament, from extruder gear to nozzle. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + #define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted. + #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate. + #define ADVANCED_PAUSE_PURGE_LENGTH 150 // (mm) Length to extrude after loading. + // Set to 0 for manual extrusion. + // Filament can be extruded repeatedly from the Filament Change menu + // until extrusion is consistent, and to purge old filament. + + // Filament Unload does a Retract, Delay, and Purge first: + #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length. + #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract. + #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. + + #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety. + #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. + #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change. + + #define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. + //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change + + #define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. + //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) +#endif + +// @section tmc + +/** + * TMC26X Stepper Driver options + * + * The TMC26XStepper library is required for this stepper driver. + * https://github.com/trinamic/TMC26XStepper + */ +#if HAS_DRIVER(TMC26X) + + #define X_MAX_CURRENT 1000 // in mA + #define X_SENSE_RESISTOR 91 // in mOhms + #define X_MICROSTEPS 16 // number of microsteps + + #define X2_MAX_CURRENT 1000 + #define X2_SENSE_RESISTOR 91 + #define X2_MICROSTEPS 16 + + #define Y_MAX_CURRENT 1000 + #define Y_SENSE_RESISTOR 91 + #define Y_MICROSTEPS 16 + + #define Y2_MAX_CURRENT 1000 + #define Y2_SENSE_RESISTOR 91 + #define Y2_MICROSTEPS 16 + + #define Z_MAX_CURRENT 1000 + #define Z_SENSE_RESISTOR 91 + #define Z_MICROSTEPS 16 + + #define Z2_MAX_CURRENT 1000 + #define Z2_SENSE_RESISTOR 91 + #define Z2_MICROSTEPS 16 + + #define E0_MAX_CURRENT 1000 + #define E0_SENSE_RESISTOR 91 + #define E0_MICROSTEPS 16 + + #define E1_MAX_CURRENT 1000 + #define E1_SENSE_RESISTOR 91 + #define E1_MICROSTEPS 16 + + #define E2_MAX_CURRENT 1000 + #define E2_SENSE_RESISTOR 91 + #define E2_MICROSTEPS 16 + + #define E3_MAX_CURRENT 1000 + #define E3_SENSE_RESISTOR 91 + #define E3_MICROSTEPS 16 + + #define E4_MAX_CURRENT 1000 + #define E4_SENSE_RESISTOR 91 + #define E4_MICROSTEPS 16 + +#endif // TMC26X + +// @section tmc_smart + +/** + * To use TMC2130 stepper drivers in SPI mode connect your SPI pins to + * the hardware SPI interface on your board and define the required CS pins + * in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.). + * You may also use software SPI if you wish to use general purpose IO pins. + * + * The TMC2130Stepper library is required for this stepper driver. + * https://github.com/teemuatlut/TMC2130Stepper + * + * To use TMC2208 stepper UART-configurable stepper drivers + * connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor. + * To use the reading capabilities, also connect #_SERIAL_RX_PIN + * to PDN_UART without a resistor. + * The drivers can also be used with hardware serial. + * + * The TMC2208Stepper library is required for this stepper driver. + * https://github.com/teemuatlut/TMC2208Stepper + */ +#if HAS_TRINAMIC + + #define R_SENSE 0.11 // R_sense resistor for SilentStepStick2130 + #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current + #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256 + + #define X_CURRENT 800 // rms current in mA. Multiply by 1.41 for peak current. + #define X_MICROSTEPS 16 // 0..256 + + #define Y_CURRENT 800 + #define Y_MICROSTEPS 16 + + #define Z_CURRENT 800 + #define Z_MICROSTEPS 16 + + #define X2_CURRENT 800 + #define X2_MICROSTEPS 16 + + #define Y2_CURRENT 800 + #define Y2_MICROSTEPS 16 + + #define Z2_CURRENT 800 + #define Z2_MICROSTEPS 16 + + #define E0_CURRENT 800 + #define E0_MICROSTEPS 16 + + #define E1_CURRENT 800 + #define E1_MICROSTEPS 16 + + #define E2_CURRENT 800 + #define E2_MICROSTEPS 16 + + #define E3_CURRENT 800 + #define E3_MICROSTEPS 16 + + #define E4_CURRENT 800 + #define E4_MICROSTEPS 16 + + /** + * Use software SPI for TMC2130. + * The default SW SPI pins are defined the respective pins files, + * but you can override or define them here. + */ + //#define TMC_USE_SW_SPI + //#define TMC_SW_MOSI -1 + //#define TMC_SW_MISO -1 + //#define TMC_SW_SCK -1 + + /** + * Use Trinamic's ultra quiet stepping mode. + * When disabled, Marlin will use spreadCycle stepping mode. + */ + #define STEALTHCHOP + + /** + * Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions, + * like overtemperature and short to ground. TMC2208 requires hardware serial. + * In the case of overtemperature Marlin can decrease the driver current until error condition clears. + * Other detected conditions can be used to stop the current print. + * Relevant g-codes: + * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. + * M911 - Report stepper driver overtemperature pre-warn condition. + * M912 - Clear stepper driver overtemperature pre-warn condition flag. + * M122 S0/1 - Report driver parameters (Requires TMC_DEBUG) + */ + //#define MONITOR_DRIVER_STATUS + + #if ENABLED(MONITOR_DRIVER_STATUS) + #define CURRENT_STEP_DOWN 50 // [mA] + #define REPORT_CURRENT_CHANGE + #define STOP_ON_ERROR + #endif + + /** + * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD. + * This mode allows for faster movements at the expense of higher noise levels. + * STEALTHCHOP needs to be enabled. + * M913 X/Y/Z/E to live tune the setting + */ + //#define HYBRID_THRESHOLD + + #define X_HYBRID_THRESHOLD 100 // [mm/s] + #define X2_HYBRID_THRESHOLD 100 + #define Y_HYBRID_THRESHOLD 100 + #define Y2_HYBRID_THRESHOLD 100 + #define Z_HYBRID_THRESHOLD 3 + #define Z2_HYBRID_THRESHOLD 3 + #define E0_HYBRID_THRESHOLD 30 + #define E1_HYBRID_THRESHOLD 30 + #define E2_HYBRID_THRESHOLD 30 + #define E3_HYBRID_THRESHOLD 30 + #define E4_HYBRID_THRESHOLD 30 + + /** + * Use stallGuard2 to sense an obstacle and trigger an endstop. + * You need to place a wire from the driver's DIAG1 pin to the X/Y endstop pin. + * X, Y, and Z homing will always be done in spreadCycle mode. + * + * X/Y/Z_HOMING_SENSITIVITY is used for tuning the trigger sensitivity. + * Higher values make the system LESS sensitive. + * Lower value make the system MORE sensitive. + * Too low values can lead to false positives, while too high values will collide the axis without triggering. + * It is advised to set X/Y/Z_HOME_BUMP_MM to 0. + * M914 X/Y/Z to live tune the setting + */ + //#define SENSORLESS_HOMING // TMC2130 only + + #if ENABLED(SENSORLESS_HOMING) + #define X_HOMING_SENSITIVITY 8 + #define Y_HOMING_SENSITIVITY 8 + #define Z_HOMING_SENSITIVITY 8 + #endif + + /** + * Enable M122 debugging command for TMC stepper drivers. + * M122 S0/1 will enable continous reporting. + */ + //#define TMC_DEBUG + + /** + * M915 Z Axis Calibration + * + * - Adjust Z stepper current, + * - Drive the Z axis to its physical maximum, and + * - Home Z to account for the lost steps. + * + * Use M915 Snn to specify the current. + * Use M925 Znn to add extra Z height to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + + /** + * You can set your own advanced settings by filling in predefined functions. + * A list of available functions can be found on the library github page + * https://github.com/teemuatlut/TMC2130Stepper + * https://github.com/teemuatlut/TMC2208Stepper + * + * Example: + * #define TMC_ADV() { \ + * stepperX.diag0_temp_prewarn(1); \ + * stepperY.interpolate(0); \ + * } + */ + #define TMC_ADV() { } + +#endif // TMC2130 || TMC2208 + +// @section L6470 + +/** + * L6470 Stepper Driver options + * + * The Arduino-L6470 library is required for this stepper driver. + * https://github.com/ameyer/Arduino-L6470 + */ +#if HAS_DRIVER(L6470) + + #define X_MICROSTEPS 16 // number of microsteps + #define X_OVERCURRENT 2000 // maxc current in mA. If the current goes over this value, the driver will switch off + #define X_STALLCURRENT 1500 // current in mA where the driver will detect a stall + + #define X2_MICROSTEPS 16 + #define X2_OVERCURRENT 2000 + #define X2_STALLCURRENT 1500 + + #define Y_MICROSTEPS 16 + #define Y_OVERCURRENT 2000 + #define Y_STALLCURRENT 1500 + + #define Y2_MICROSTEPS 16 + #define Y2_OVERCURRENT 2000 + #define Y2_STALLCURRENT 1500 + + #define Z_MICROSTEPS 16 + #define Z_OVERCURRENT 2000 + #define Z_STALLCURRENT 1500 + + #define Z2_MICROSTEPS 16 + #define Z2_OVERCURRENT 2000 + #define Z2_STALLCURRENT 1500 + + #define E0_MICROSTEPS 16 + #define E0_OVERCURRENT 2000 + #define E0_STALLCURRENT 1500 + + #define E1_MICROSTEPS 16 + #define E1_OVERCURRENT 2000 + #define E1_STALLCURRENT 1500 + + #define E2_MICROSTEPS 16 + #define E2_OVERCURRENT 2000 + #define E2_STALLCURRENT 1500 + + #define E3_MICROSTEPS 16 + #define E3_OVERCURRENT 2000 + #define E3_STALLCURRENT 1500 + + #define E4_MICROSTEPS 16 + #define E4_OVERCURRENT 2000 + #define E4_STALLCURRENT 1500 + +#endif // L6470 + +/** + * TWI/I2C BUS + * + * This feature is an EXPERIMENTAL feature so it shall not be used on production + * machines. Enabling this will allow you to send and receive I2C data from slave + * devices on the bus. + * + * ; Example #1 + * ; This macro send the string "Marlin" to the slave device with address 0x63 (99) + * ; It uses multiple M260 commands with one B arg + * M260 A99 ; Target slave address + * M260 B77 ; M + * M260 B97 ; a + * M260 B114 ; r + * M260 B108 ; l + * M260 B105 ; i + * M260 B110 ; n + * M260 S1 ; Send the current buffer + * + * ; Example #2 + * ; Request 6 bytes from slave device with address 0x63 (99) + * M261 A99 B5 + * + * ; Example #3 + * ; Example serial output of a M261 request + * echo:i2c-reply: from:99 bytes:5 data:hello + */ + +// @section i2cbus + +//#define EXPERIMENTAL_I2CBUS +#define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave + +// @section extras + +/** + * Spindle & Laser control + * + * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and + * to set spindle speed, spindle direction, and laser power. + * + * SuperPid is a router/spindle speed controller used in the CNC milling community. + * Marlin can be used to turn the spindle on and off. It can also be used to set + * the spindle speed from 5,000 to 30,000 RPM. + * + * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V + * hardware PWM pin for the speed control and a pin for the rotation direction. + * + * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details. + */ +//#define SPINDLE_LASER_ENABLE +#if ENABLED(SPINDLE_LASER_ENABLE) + + #define SPINDLE_LASER_ENABLE_INVERT false // set to "true" if the on/off function is reversed + #define SPINDLE_LASER_PWM true // set to true if your controller supports setting the speed/power + #define SPINDLE_LASER_PWM_INVERT true // set to "true" if the speed/power goes up when you want it to go slower + #define SPINDLE_LASER_POWERUP_DELAY 5000 // delay in milliseconds to allow the spindle/laser to come up to speed/power + #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // delay in milliseconds to allow the spindle to stop + #define SPINDLE_DIR_CHANGE true // set to true if your spindle controller supports changing spindle direction + #define SPINDLE_INVERT_DIR false + #define SPINDLE_STOP_ON_DIR_CHANGE true // set to true if Marlin should stop the spindle before changing rotation direction + + /** + * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power + * + * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT + * where PWM duty cycle varies from 0 to 255 + * + * set the following for your controller (ALL MUST BE SET) + */ + + #define SPEED_POWER_SLOPE 118.4 + #define SPEED_POWER_INTERCEPT 0 + #define SPEED_POWER_MIN 5000 + #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM + + //#define SPEED_POWER_SLOPE 0.3922 + //#define SPEED_POWER_INTERCEPT 0 + //#define SPEED_POWER_MIN 10 + //#define SPEED_POWER_MAX 100 // 0-100% +#endif + +/** + * Filament Width Sensor + * + * Measures the filament width in real-time and adjusts + * flow rate to compensate for any irregularities. + * + * Also allows the measured filament diameter to set the + * extrusion rate, so the slicer only has to specify the + * volume. + * + * Only a single extruder is supported at this time. + * + * 34 RAMPS_14 : Analog input 5 on the AUX2 connector + * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E) + * 301 RAMBO : Analog input 3 + * + * Note: May require analog pins to be defined for other boards. + */ +//#define FILAMENT_WIDTH_SENSOR + +#if ENABLED(FILAMENT_WIDTH_SENSOR) + #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4] + #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber + + #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it + #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM. + + #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially + + // Display filament width on the LCD status line. Status messages will expire after 5 seconds. + //#define FILAMENT_LCD_DISPLAY +#endif + +/** + * CNC Coordinate Systems + * + * Enables G53 and G54-G59.3 commands to select coordinate systems + * and G92.1 to reset the workspace to native machine space. + */ +//#define CNC_COORDINATE_SYSTEMS + +/** + * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins + */ +//#define PINS_DEBUGGING + +/** + * Auto-report temperatures with M155 S + */ +#define AUTO_REPORT_TEMPERATURES + +/** + * Include capabilities in M115 output + */ +#define EXTENDED_CAPABILITIES_REPORT + +/** + * Disable all Volumetric extrusion options + */ +//#define NO_VOLUMETRICS + +#if DISABLED(NO_VOLUMETRICS) + /** + * Volumetric extrusion default state + * Activate to make volumetric extrusion the default method, + * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter. + * + * M200 D0 to disable, M200 Dn to set a new diameter. + */ + //#define VOLUMETRIC_DEFAULT_ON +#endif + +/** + * Enable this option for a leaner build of Marlin that removes all + * workspace offsets, simplifying coordinate transformations, leveling, etc. + * + * - M206 and M428 are disabled. + * - G92 will revert to its behavior from Marlin 1.0. + */ +//#define NO_WORKSPACE_OFFSETS + +/** + * Set the number of proportional font spaces required to fill up a typical character space. + * This can help to better align the output of commands like `G29 O` Mesh Output. + * + * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0. + * Otherwise, adjust according to your client and font. + */ +#define PROPORTIONAL_FONT_RATIO 1.0 + +/** + * Spend 28 bytes of SRAM to optimize the GCode parser + */ +#define FASTER_GCODE_PARSER + +/** + * User-defined menu items that execute custom GCode + */ +//#define CUSTOM_USER_MENUS +#if ENABLED(CUSTOM_USER_MENUS) + #define USER_SCRIPT_DONE "M117 User Script Done" + #define USER_SCRIPT_AUDIBLE_FEEDBACK + //#define USER_SCRIPT_RETURN // Return to status screen after a script + + #define USER_DESC_1 "Home & UBL Info" + #define USER_GCODE_1 "G28\nG29 W" + + #define USER_DESC_2 "Preheat for PLA" + #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) + + #define USER_DESC_3 "Preheat for ABS" + #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND) + + #define USER_DESC_4 "Heat Bed/Home/Level" + #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29" + + #define USER_DESC_5 "Home & Info" + #define USER_GCODE_5 "G28\nM503" +#endif + +/** + * Specify an action command to send to the host when the printer is killed. + * Will be sent in the form '//action:ACTION_ON_KILL', e.g. '//action:poweroff'. + * The host must be configured to handle the action command. + */ +//#define ACTION_ON_KILL "poweroff" + +/** + * Specify an action command to send to the host on pause and resume. + * Will be sent in the form '//action:ACTION_ON_PAUSE', e.g. '//action:pause'. + * The host must be configured to handle the action command. + */ +//#define ACTION_ON_PAUSE "pause" +//#define ACTION_ON_RESUME "resume" + +//=========================================================================== +//====================== I2C Position Encoder Settings ====================== +//=========================================================================== + +/** + * I2C position encoders for closed loop control. + * Developed by Chris Barr at Aus3D. + * + * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder + * Github: https://github.com/Aus3D/MagneticEncoder + * + * Supplier: http://aus3d.com.au/magnetic-encoder-module + * Alternative Supplier: http://reliabuild3d.com/ + * + * Reilabuild encoders have been modified to improve reliability. + */ + +//#define I2C_POSITION_ENCODERS +#if ENABLED(I2C_POSITION_ENCODERS) + + #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5 + // encoders supported currently. + + #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200. + #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS. + #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or- + // I2CPE_ENC_TYPE_ROTARY. + #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for + // 1mm poles. For linear encoders this is ticks / mm, + // for rotary encoders this is ticks / revolution. + //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper + // steps per full revolution (motor steps/rev * microstepping) + //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel. + #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction. + #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the + // printer will attempt to correct the error; errors + // smaller than this are ignored to minimize effects of + // measurement noise / latency (filter). + + #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2. + #define I2CPE_ENC_2_AXIS Y_AXIS + #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR + #define I2CPE_ENC_2_TICKS_UNIT 2048 + //#define I2CPE_ENC_2_TICKS_REV (16 * 200) + //#define I2CPE_ENC_2_INVERT + #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP + #define I2CPE_ENC_2_EC_THRESH 0.10 + + #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options + #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below. + + #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4. + #define I2CPE_ENC_4_AXIS E_AXIS + + #define I2CPE_ENC_5_ADDR 34 // Encoder 5. + #define I2CPE_ENC_5_AXIS E_AXIS + + // Default settings for encoders which are enabled, but without settings configured above. + #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR + #define I2CPE_DEF_ENC_TICKS_UNIT 2048 + #define I2CPE_DEF_TICKS_REV (16 * 200) + #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE + #define I2CPE_DEF_EC_THRESH 0.1 + + //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given + // axis after which the printer will abort. Comment out to + // disable abort behaviour. + + #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault + // for this amount of time (in ms) before the encoder + // is trusted again. + + /** + * Position is checked every time a new command is executed from the buffer but during long moves, + * this setting determines the minimum update time between checks. A value of 100 works well with + * error rolling average when attempting to correct only for skips and not for vibration. + */ + #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks. + + // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise. + #define I2CPE_ERR_ROLLING_AVERAGE + +#endif // I2C_POSITION_ENCODERS + +/** + * MAX7219 Debug Matrix + * + * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display. + * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage. + */ +//#define MAX7219_DEBUG +#if ENABLED(MAX7219_DEBUG) + #define MAX7219_CLK_PIN 64 + #define MAX7219_DIN_PIN 57 + #define MAX7219_LOAD_PIN 44 + + //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix + #define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral) + #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain. + #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°) + // connector at: right=0 bottom=-90 top=90 left=180 + + /** + * Sample debug features + * If you add more debug displays, be careful to avoid conflicts! + */ + #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning + #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row + #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row + + #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row + // If you experience stuttering, reboots, etc. this option can reveal how + // tweaks made to the configuration are affecting the printer in real-time. +#endif + +/** + * NanoDLP Sync support + * + * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp" + * string to enable synchronization with DLP projector exposure. This change will allow to use + * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands + */ +//#define NANODLP_Z_SYNC +#if ENABLED(NANODLP_Z_SYNC) + //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move. + // Default behaviour is limited to Z axis only. +#endif + +/** + * WiFi Support (Espressif ESP32 WiFi) + */ +//#define WIFISUPPORT +#if ENABLED(WIFISUPPORT) + #define WIFI_SSID "Wifi SSID" + #define WIFI_PWD "Wifi Password" +#endif + +// Enable Marlin dev mode which adds some special commands +//#define MARLIN_DEV_MODE + +#endif // CONFIGURATION_ADV_H diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/README.md b/Marlin/src/config/examples/delta/Anycubic/Kossel/README.md new file mode 100644 index 0000000000..f27d0ada64 --- /dev/null +++ b/Marlin/src/config/examples/delta/Anycubic/Kossel/README.md @@ -0,0 +1,49 @@ +# Readme + +These configurations activate many of the new advanced features of the Marlin firmware: + + * Auto Calibration + * Auto Bed Leveling + * Pause & Filament Change + +**Important**: Before doing anything else after updating the firmware, go to `Configuration > Advanced Settings > Initialize EEPROM` to get rid of old configurations. + +After that you should connect the Z-Probe and start `Configuration > Delta Calibration > Auto Calibration`. When it's done don't forget to also do `Configuration > Delta Calibration > Store Settings` to make it permanent. + +You should also do a `Motion > Bed Leveling > Level bed` followed by `Store Settings` to ensure a perfect leveling. + +Please do a manual paper test (moving the nozzle slowly down to Z0 and checking with a piece of paper). If it's not perfect, use `Configuration > Advanced Settings > Probe Z Offset` to correct the difference and execute the calibration again. + +**Also Important**: if you value your Z-Probe do NOT execute `Configuration > Delta Configuration > Probe Z-offset` - This can destroy the Z-Probe, see issue [#11337](https://github.com/MarlinFirmware/Marlin/issues/11337). + +# Select the Configuration + +**Please select the correct values at the start of the Configuration.h file** + +The Kossel comes in 3 versions: + + * Pulley + * Linear + * Linear Plus + +Pulley and Linear use the same configuration, the Linear Plus is bigger and uses slightly different configurations. + +Typically the probes for the Anycubic Delta Kossel printers come in two different versions. + + * Version 1: Z Probe Offset of -19.0mm + + ![Version 1 Probe](images/Version1Probe.jpg) + + * Version 2: Z Probe Offset of -16.8mm + + ![Version 2 Probe](images/Version2Probe.jpg) + +If you select the `ANYCUBIC_PROBE_VERSION 0`: It's very important to follow the correct procedure to set it up after flashing the firmware, otherwise you might damage the printer by ramming the nozzle into the buildplate: + +* `Configuration > Advanced Settings > Initialize EEPROM` +* `Motion > Move Axis > Soft Endstops` : `Off` +* Auto Home and slowly move the nozzle down until it barely touches the bed. (Do a paper-test: A normal sheet of paper should just feel the drag of the nozzle) and note this number. +* Subtract this number from the value in `Configuration > Delta Calibration > Delta Settings > Height`. (If it's negative, add it). +* Save and try the paper test again to verify your height. +* `Configuration > Store Settings` +* Motion > Bed Leveling (using paper test) diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/images/Version1Probe.jpg b/Marlin/src/config/examples/delta/Anycubic/Kossel/images/Version1Probe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..953373b1ab93d79f24f7cd3363e4c949a1e90d79 GIT binary patch literal 94933 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%0DIeEoa6}C!X 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/Marlin/src/pins/pins_TRIGORILLA_14.h b/Marlin/src/pins/pins_TRIGORILLA_14.h index 70b0a930a9..80ce3bc98c 100644 --- a/Marlin/src/pins/pins_TRIGORILLA_14.h +++ b/Marlin/src/pins/pins_TRIGORILLA_14.h @@ -30,7 +30,52 @@ #define IS_RAMPS_EFB -#define FAN2_PIN 44 -#define ORIG_E0_AUTO_FAN_PIN 44 +// FAN0 / D9 - Typically used for the part fan on Anycubic Delta devices +#define FAN_PIN 9 + +// FAN1 / D7 - Typically unused, can be allocated as Case Fan + +// FAN2 / D44 - Typical Extruder Fan on Anycubic Delta devices +#define FAN2_PIN 44 +#define ORIG_E0_AUTO_FAN_PIN 44 #include "pins_RAMPS.h" + +// TODO 1.4 boards do have an E1 stepper driver. However the pin definitions +// from pins_RAMPS.h are incorrect for this board. e.g., Pin 44 is the Extruder fan. +#undef E1_STEP_PIN +#undef E1_DIR_PIN +#undef E1_ENABLE_PIN +#undef E1_CS_PIN + +// +// AnyCubic made the following changes to 1.1.0-RC8 +// If these are appropriate for your LCD let us know. +// +#if 0 && ENABLED(ULTRA_LCD) + + // LCD Display output pins + #if ENABLED(NEWPANEL) && ENABLED(PANEL_ONE) + #undef LCD_PINS_D6 + #define LCD_PINS_D6 57 + #endif + + // LCD Display input pins + #if ENABLED(NEWPANEL) + #if ENABLED(VIKI2) || ENABLED(miniVIKI) + #undef DOGLCD_A0 + #define DOGLCD_A0 23 + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) + #undef BEEPER_PIN + #define BEEPER_PIN 33 + #undef LCD_BACKLIGHT_PIN + #define LCD_BACKLIGHT_PIN 67 + #endif + #elif ENABLED(MINIPANEL) + #undef BEEPER_PIN + #define BEEPER_PIN 33 + #undef DOGLCD_A0 + #define DOGLCD_A0 42 + #endif + +#endif // ULTRA_LCD