Configuration.h

Created Diff never expires
22 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
592 lines
19 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
588 lines
/**
/**
* Marlin 3D Printer Firmware
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
*
* Based on Sprinter and grbl.
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
*
* This program is free software: you can redistribute it and/or modify
* 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
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
*/
*/
#pragma once
#pragma once


/**
/**
* Configuration.h
* Configuration.h
*
*
* Basic settings such as:
* Basic settings such as:
*
*
* - Type of electronics
* - Type of electronics
* - Type of temperature sensor
* - Type of temperature sensor
* - Printer geometry
* - Printer geometry
* - Endstop configuration
* - Endstop configuration
* - LCD controller
* - LCD controller
* - Extra features
* - Extra features
*
*
* Advanced settings can be found in Configuration_adv.h
* Advanced settings can be found in Configuration_adv.h
*
*
*/
*/
#define CONFIGURATION_H_VERSION 020005
#define CONFIGURATION_H_VERSION 020005


//===========================================================================
//===========================================================================
//============================= Getting Started =============================
//============================= Getting Started =============================
//===========================================================================
//===========================================================================


/**
/**
* Here are some standard links for getting your machine calibrated:
* Here are some standard links for getting your machine calibrated:
*
*
* http://reprap.org/wiki/Calibration
* http://reprap.org/wiki/Calibration
* http://youtu.be/wAL9d7FgInk
* http://youtu.be/wAL9d7FgInk
* http://calculator.josefprusa.cz
* http://calculator.josefprusa.cz
* http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
* http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
* http://www.thingiverse.com/thing:5573
* http://www.thingiverse.com/thing:5573
* https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
* https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
* http://www.thingiverse.com/thing:298812
* http://www.thingiverse.com/thing:298812
*/
*/


//===========================================================================
//===========================================================================
//============================= DELTA Printer ===============================
//============================= DELTA Printer ===============================
//===========================================================================
//===========================================================================
// For a Delta printer start with one of the configuration files in the
// For a Delta printer start with one of the configuration files in the
// config/examples/delta directory and customize for your machine.
// config/examples/delta directory and customize for your machine.
//
//


//===========================================================================
//===========================================================================
//============================= SCARA Printer ===============================
//============================= SCARA Printer ===============================
//===========================================================================
//===========================================================================
// For a SCARA printer start with the configuration files in
// For a SCARA printer start with the configuration files in
// config/examples/SCARA and customize for your machine.
// config/examples/SCARA and customize for your machine.
//
//


// @section info
// @section info


// Author info of this build printed to the host during boot and M115
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Gavin Balcomb,mesh bed leveling V1.1)" // Who made the changes.
#define STRING_CONFIG_H_AUTHOR "(EZY3D LAB, Artillery X1 MBL Marlin 2.0.5)" // Who made the changes.
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)


/**
/**
* *** VENDORS PLEASE READ ***
* *** VENDORS PLEASE READ ***
*
*
* Marlin allows you to add a custom boot image for Graphical LCDs.
* Marlin allows you to add a custom boot image for Graphical LCDs.
* With this option Marlin will first show your custom screen followed
* With this option Marlin will first show your custom screen followed
* by the standard Marlin logo with version number and web URL.
* by the standard Marlin logo with version number and web URL.
*
*
* We encourage you to take advantage of this new feature and we also
* We encourage you to take advantage of this new feature and we also
* respectfully request that you retain the unmodified Marlin boot screen.
* respectfully request that you retain the unmodified Marlin boot screen.
*/
*/


// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
#define SHOW_BOOTSCREEN
#define SHOW_BOOTSCREEN


// Show the bitmap in Marlin/_Bootscreen.h on startup.
// Show the bitmap in Marlin/_Bootscreen.h on startup.
//#define SHOW_CUSTOM_BOOTSCREEN
//#define SHOW_CUSTOM_BOOTSCREEN


// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
//#define CUSTOM_STATUS_SCREEN_IMAGE
//#define CUSTOM_STATUS_SCREEN_IMAGE


// @section machine
// @section machine


/**
/**
* Select the serial port on the board to use for communication with the host.
* 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.
* 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.
* Serial port -1 is the USB emulated serial port, if available.
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
* 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]
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
*/
#define SERIAL_PORT 0
#define SERIAL_PORT 0


/**
/**
* Select a secondary serial port on the board to use for communication with the host.
* Select a secondary serial port on the board to use for communication with the host.
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
*/
//#define SERIAL_PORT_2 -1
//#define SERIAL_PORT_2 -1


/**
/**
* This setting determines the communication speed of the printer.
* This setting determines the communication speed of the printer.
*
*
* 250000 works in most cases, but you might try a lower speed if
* 250000 works in most cases, but you might try a lower speed if
* you commonly experience drop-outs during host printing.
* you commonly experience drop-outs during host printing.
* You may try up to 1000000 to speed up SD file transfer.
* You may try up to 1000000 to speed up SD file transfer.
*
*
* :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
* :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
*/
*/
#define BAUDRATE 250000
#define BAUDRATE 250000


// Enable the Bluetooth serial interface on AT90USB devices
// Enable the Bluetooth serial interface on AT90USB devices
//#define BLUETOOTH
//#define BLUETOOTH


// Choose the name from boards.h that matches your setup
// Choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_MKS_GEN_L
#define MOTHERBOARD BOARD_MKS_GEN_L
#endif
#endif


// Name displayed in the LCD "Ready" message and Info menu
// Name displayed in the LCD "Ready" message and Info menu
#define CUSTOM_MACHINE_NAME "Sidewinder-X1"
#define CUSTOM_MACHINE_NAME "Sidewinder X1"


// Printer's unique ID, used by some programs to differentiate between machines.
// Printer's unique ID, used by some programs to differentiate between machines.
// Choose your own or use a service like http://www.uuidgenerator.net/version4
// Choose your own or use a service like http://www.uuidgenerator.net/version4
//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"


// @section extruder
// @section extruder


// This defines the number of extruders
// This defines the number of extruders
// :[1, 2, 3, 4, 5, 6, 7, 8]
// :[1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 1
#define EXTRUDERS 1


// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75


// For Cyclops or any "multi-extruder" that shares a single nozzle.
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
//#define SINGLENOZZLE


/**
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
*
*
* This device allows one stepper driver on a control board to drive
* 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
* two to eight stepper motors, one at a time, in a manner suitable
* for extruders.
* for extruders.
*
*
* This option only allows the multiplexer to switch on tool-change.
* This option only allows the multiplexer to switch on tool-change.
* Additional options to configure custom E moves are pending.
* Additional options to configure custom E moves are pending.
*/
*/
//#define MK2_MULTIPLEXER
//#define MK2_MULTIPLEXER
#if ENABLED(MK2_MULTIPLEXER)
#if ENABLED(MK2_MULTIPLEXER)
// Override the default DIO selector pins here, if needed.
// Override the default DIO selector pins here, if needed.
// Some pins files may provide defaults for these pins.
// Some pins files may provide defaults for these pins.
//#define E_MUX0_PIN 40 // Always Required
//#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#endif
#endif


/**
/**
* Prusa Multi-Material Unit v2
* Prusa Multi-Material Unit v2
*
*
* Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
* Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
* Requires EXTRUDERS = 5
* Requires EXTRUDERS = 5
*
*
* For additional configuration see Configuration_adv.h
* For additional configuration see Configuration_adv.h
*/
*/
//#define PRUSA_MMU2
//#define PRUSA_MMU2


// A dual extruder that uses a single stepper motor
// A dual extruder that uses a single stepper motor
//#define SWITCHING_EXTRUDER
//#define SWITCHING_EXTRUDER
#if ENABLED(SWITCHING_EXTRUDER)
#if ENABLED(SWITCHING_EXTRUDER)
#define SWITCHING_EXTRUDER_SERVO_NR 0
#define SWITCHING_EXTRUDER_SERVO_NR 0
#define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]
#define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]
#if EXTRUDERS > 3
#if EXTRUDERS > 3
#define SWITCHING_EXTRUDER_E23_SERVO_NR 1
#define SWITCHING_EXTRUDER_E23_SERVO_NR 1
#endif
#endif
#endif
#endif


// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
//#define SWITCHING_NOZZLE
//#define SWITCHING_NOZZLE
#if ENABLED(SWITCHING_NOZZLE)
#if ENABLED(SWITCHING_NOZZLE)
#define SWITCHING_NOZZLE_SERVO_NR 0
#define SWITCHING_NOZZLE_SERVO_NR 0
//#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second
//#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second
#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 (single servo) or lowered/raised (dual servo)
#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 (single servo) or lowered/raised (dual servo)
#endif
#endif


/**
/**
* Two separate X-carriages with extruders that connect to a moving part
* Two separate X-carriages with extruders that connect to a moving part
* via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.
* via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.
*/
*/
//#define PARKING_EXTRUDER
//#define PARKING_EXTRUDER


/**
/**
* Two separate X-carriages with extruders that connect to a moving part
* Two separate X-carriages with extruders that connect to a moving part
* via a magnetic docking mechanism using movements and no solenoid
* via a magnetic docking mechanism using movements and no solenoid
*
*
* project : https://www.thingiverse.com/thing:3080893
* project : https://www.thingiverse.com/thing:3080893
* movements : https://youtu.be/0xCEiG9VS3k
* movements : https://youtu.be/0xCEiG9VS3k
* https://youtu.be/Bqbcs0CU2FE
* https://youtu.be/Bqbcs0CU2FE
*/
*/
//#define MAGNETIC_PARKING_EXTRUDER
//#define MAGNETIC_PARKING_EXTRUDER


#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER)
#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER)


#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
#define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
#define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381


#if ENABLED(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_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_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // (ms) Delay for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // (ms) Delay for magnetic field. No delay if 0 or not defined.
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381


#elif ENABLED(MAGNETIC_PARKING_EXTRUDER)
#elif ENABLED(MAGNETIC_PARKING_EXTRUDER)


#define MPE_FAST_SPEED 9000 // (mm/m) Speed for travel before last distance point
#define MPE_FAST_SPEED 9000 // (mm/m) Speed for travel before last distance point
#define MPE_SLOW_SPEED 4500 // (mm/m) Speed for last distance travel to park and couple
#define MPE_SLOW_SPEED 4500 // (mm/m) Speed for last distance travel to park and couple
#define MPE_TRAVEL_DISTANCE 10 // (mm) Last distance point
#define MPE_TRAVEL_DISTANCE 10 // (mm) Last distance point
#define MPE_COMPENSATION 0 // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling
#define MPE_COMPENSATION 0 // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling


#endif
#endif


#endif
#endif


/**
/**
* Switching Toolhead
* Switching Toolhead
*
*
* Support for swappable and dockable toolheads, such as
* Support for swappable and dockable toolheads, such as
* the E3D Tool Changer. Toolheads are locked with a servo.
* the E3D Tool Changer. Toolheads are locked with a servo.
*/
*/
//#define SWITCHING_TOOLHEAD
//#define SWITCHING_TOOLHEAD


/**
/**
* Magnetic Switching Toolhead
* Magnetic Switching Toolhead
*
*
* Support swappable and dockable toolheads with a magnetic
* Support swappable and dockable toolheads with a magnetic
* docking mechanism using movement and no servo.
* docking mechanism using movement and no servo.
*/
*/
//#define MAGNETIC_SWITCHING_TOOLHEAD
//#define MAGNETIC_SWITCHING_TOOLHEAD


/**
/**
* Electromagnetic Switching Toolhead
* Electromagnetic Switching Toolhead
*
*
* Parking for CoreXY / HBot kinematics.
* Parking for CoreXY / HBot kinematics.
* Toolheads are parked at one edge and held with an electromagnet.
* Toolheads are parked at one edge and held with an electromagnet.
* Supports more than 2 Toolheads. See https://youtu.be/JolbsAKTKf4
* Supports more than 2 Toolheads. See https://youtu.be/JolbsAKTKf4
*/
*/
//#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD
//#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD


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


/**
/**
* "Mixing Extruder"
* "Mixing Extruder"
* - Adds G-codes M163 and M164 to set and "commit" the current mix factors.
* - Adds G-codes M163 and M164 to set and "commit" the current mix factors.
* - Extends the stepping routines to move multiple steppers in proportion to the mix.
* - Extends the stepping routines to move multiple steppers in proportion to the mix.
* - Optional support for Repetier Firmware's 'M164 S<index>' supporting virtual tools.
* - Optional support for Repetier Firmware's 'M164 S<index>' supporting virtual tools.
* - This implementation supports up to two mixing extruders.
* - This implementation supports up to two mixing extruders.
* - Enable DIRECT_MIXING_IN_G1 for M165 and mixing in G1 (from Pia Taubert's reference implementation).
* - Enable DIRECT_MIXING_IN_G1 for M165 and mixing in G1 (from Pia Taubert's reference implementation).
*/
*/
//#define MIXING_EXTRUDER
//#define MIXING_EXTRUDER
#if ENABLED(MIXING_EXTRUDER)
#if ENABLED(MIXING_EXTRUDER)
#define MIXING_STEPPERS 2 // Number of steppers in your 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 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
//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
//#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
//#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
#if ENABLED(GRADIENT_MIX)
#if ENABLED(GRADIENT_MIX)
//#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
//#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
#endif
#endif
#endif
#endif


// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
// 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).
// 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.
// 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_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_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
//#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle


// @section machine
// @section machine


/**
/**
* Power Supply Control
* Power Supply Control
*
*
* Enable and connect the power supply to the PS_ON_PIN.
* Enable and connect the power supply to the PS_ON_PIN.
* Specify whether the power supply is active HIGH or active LOW.
* Specify whether the power supply is active HIGH or active LOW.
*/
*/
//#define PSU_CONTROL
//#define PSU_CONTROL
//#define PSU_NAME "Power Supply"
//#define PSU_NAME "Power Supply"


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


//#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80
//#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80
//#define PSU_POWERUP_DELAY 100 // (ms) Delay for the PSU to warm up to full power
//#define PSU_POWERUP_DELAY 100 // (ms) Delay for the PSU to warm up to full power


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


// @section temperature
// @section temperature


//===========================================================================
//===========================================================================
//============================= Thermal Settings ============================
//============================= Thermal Settings ============================
//===========================================================================
//===========================================================================


/**
/**
* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
*
*
* Temperature sensors available:
* Temperature sensors available:
*
*
* -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)
* -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)
* -3 : thermocouple with MAX31855 (only for sensors 0-1)
* -3 : thermocouple with MAX31855 (only for sensors 0-1)
* -2 : thermocouple with MAX6675 (only for sensors 0-1)
* -2 : thermocouple with MAX6675 (only for sensors 0-1)
* -4 : thermocouple with AD8495
* -4 : thermocouple with AD8495
* -1 : thermocouple with AD595
* -1 : thermocouple with AD595
* 0 : not used
* 0 : not used
* 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
* 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
* 331 : (3.3V scaled thermistor 1 table for MEGA)
* 331 : (3.3V scaled thermistor 1 table for MEGA)
* 332 : (3.3V scaled thermistor 1 table for DUE)
* 332 : (3.3V scaled thermistor 1 table for DUE)
* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
* 202 : 200k thermistor - Copymaster 3D
* 202 : 200k thermistor - Copymaster 3D
* 3 : Mendel-parts thermistor (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. !!
* 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)
* 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan & J-Head) (4.7k pullup)
* 501 : 100K Zonestar (Tronxy X3A) Thermistor
* 501 : 100K Zonestar (Tronxy X3A) Thermistor
* 512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
* 512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
* 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
* 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)
* 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
* 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
* 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
* 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
* 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
* 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
* 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
* 10 : 100k RS thermistor 198-961 (4.7k pullup)
* 10 : 100k RS thermistor 198-961 (4.7k pullup)
* 11 : 100k beta 3950 1% thermistor (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)
* 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"
* 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
* 15 : 100k thermistor calibration for JGAurora A5 hotend
* 18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
* 18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
* 20 : Pt100 with circuit in the Ultimainboard V2.x with 5v excitation (AVR)
* 20 : Pt100 with circuit in the Ultimainboard V2.x with 5v excitation (AVR)
* 21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v excitation (STM32 \ LPC176x....)
* 21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v excitation (STM32 \ LPC176x....)
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
* 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
* 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
* 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
* 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
* 66 : 4.7M High Temperature thermistor from Dyze Design
* 66 : 4.7M High Temperature thermistor from Dyze Design
* 67 : 450C thermistor from SliceEngineering
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
* 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
* 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* 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)
* (but gives greater accuracy and more stable PID)
* 51 : 100k thermistor - EPCOS (1k pullup)
* 51 : 100k thermistor - EPCOS (1k pullup)
* 52 : 200k thermistor - ATC Semitec 204GT-2 (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)
* 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
*
*
* 1047 : Pt1000 with 4k7 pullup
* 1047 : Pt1000 with 4k7 pullup
* 1010 : Pt1000 with 1k pullup (non standard)
* 1010 : Pt1000 with 1k pullup (non standard)
* 147 : Pt100 with 4k7 pullup
* 147 : Pt100 with 4k7 pullup
* 110 : Pt100 with 1k pullup (non standard)
* 110 : Pt100 with 1k pullup (non standard)
*
*
* 1000 : Custom - Specify parameters in Configuration_adv.h
* 1000 : Custom - Specify parameters in Configuration_adv.h
*
*
* Use these for Testing or Development purposes. NEVER for production machine.
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 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.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
*/
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_CHAMBER 0
#define TEMP_SENSOR_CHAMBER 0


// Dummy thermistor constant temperature readings, for use with 998 and 999
// Dummy thermistor constant temperature readings, for use with 998 and 999
#define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_999_VALUE 100
#define DUMMY_THERMISTOR_999_VALUE 100


// Use temp sensor 1 as a redundant sensor with sensor 0. If the readings
// 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.
// from the two sensors differ too much the print will be aborted.
//#define TEMP_SENSOR_1_AS_REDUNDANT
//#define TEMP_SENSOR_1_AS_REDUNDANT
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10


#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target


#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190
#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190
#define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
#define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
#define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
#define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target


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


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


//===========================================================================
//===========================================================================
//============================= PID Settings ================================
//============================= PID Settings ================================
//===========================================================================
//===========================================================================
// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning


// Comment the following line to disable PID and enable bang-bang.
// Comment the following line to disable PID and enable bang-bang.
#define PIDTEMP
#define PIDTEMP
#define BANG_MAX 255 // Limits current to nozzle while in bang-bang mode; 255=full current
#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_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
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
#if ENABLED(PIDTEMP)
//#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
//#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
//#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
//#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
//#define PID_DEBUG // Sends debug data to the serial port. Use 'M303 D' to toggle activation.
//#define PID_DEBUG // Sends debug data to the serial port. Use 'M303 D' to toggle activation.
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
//#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 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)
//#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]
// 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
#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.
// 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
// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it


// Ultimaker
// Sidewinder X1
#define DEFAULT_Kp 22.2
#define DEFAULT_Kp 14.58
#define DEFAULT_Ki 1.08
#define DEFAULT_Ki 1.14
#define DEFAULT_Kd 114
#define DEFAULT_Kd 46.57


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


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


#endif // PIDTEMP
#endif // PIDTEMP


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


/**
/**
* PID Bed Heating
* PID Bed Heating
*
*
* If this option is enabled set PID constants below.
* 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.
* 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.
* 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,
* 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
* 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
* 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
* 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.
* the issues involved, don't use bed PID until someone else verifies that your hardware works.
*/
*/
#define PIDTEMPBED
#define PIDTEMPBED


//#define BED_LIMIT_SWITCHING
//#define BED_LIMIT_SWITCHING


/**
/**
* Max Bed Power
* Max Bed Power
* Applies to all forms of bed control (PID, bang-bang, and bang-bang with hysteresis).
* 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
* 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)
* 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
#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current


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


// Sidewinder X1
#define DEFAULT_bedKp 244.21
#define DEFAULT_bedKi 45.87
#define DEFAULT_bedKd 325.08


//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//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)
//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 57.71
//#define DEFAULT_bedKp 10.00
#define DEFAULT_bedKi 8.81
//#define DEFAULT_bedKi .023
#define DEFAULT_bedKd 252.09
//#define DEFAULT_bedKd 305.4


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


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


// @section extruder
// @section extruder


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


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


//===========================================================================
//===========================================================================
//======================== Thermal Runaway Protection =======================
//======================== Thermal Runaway Protection =======================
//===========================================================================
//===========================================================================


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

#define THERMAL_PROTECT