From 27340a30165f9f8f45fe4b62b45ac8ec517ce382 Mon Sep 17 00:00:00 2001 From: David Phillips Date: Sat, 2 Nov 2019 20:19:32 +1300 Subject: Add current printer config --- Configuration.h | 2006 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2006 insertions(+) create mode 100644 Configuration.h diff --git a/Configuration.h b/Configuration.h new file mode 100644 index 0000000..8a964f2 --- /dev/null +++ b/Configuration.h @@ -0,0 +1,2006 @@ +/* + This file is part of Repetier-Firmware. + + Repetier-Firmware 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. + + Repetier-Firmware 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 Repetier-Firmware. If not, see . + +*/ + +#ifndef CONFIGURATION_H +#define CONFIGURATION_H + +/* Some words on units: + +From 0.80 onwards the units used are unified for easier configuration, watch out when transferring from older configs! + +Speed is in mm/s +Acceleration in mm/s^2 +Temperature is in degrees Celsius + + +########################################################################################## +## IMPORTANT ## +########################################################################################## + +For easy configuration, the default settings enable parameter storage in EEPROM. +This means, after the first upload many variables can only be changed using the special +M commands as described in the documentation. Changing these values in the configuration.h +file has no effect. Parameters overridden by EEPROM settings are calibration values, extruder +values except thermistor tables and some other parameter likely to change during usage +like advance steps or ops mode. +To override EEPROM settings with config settings, set EEPROM_MODE 0 + +*/ + + +// BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration + +/** Number of extruders. Maximum 6 extruders. */ +#define NUM_EXTRUDER 1 + +/** Set to 1 if all extruder motors go to 1 nozzle that mixes your colors. */ +#define MIXING_EXTRUDER 0 + +//// The following define selects which electronics board you have. Please choose the one that matches your setup +// Gen3 PLUS for RepRap Motherboard V1.2 = 21 +// MEGA/RAMPS up to 1.2 = 3 +// RAMPS 1.3/RAMPS 1.4 = 33 +// Azteeg X3 = 34 +// Azteeg X3 Pro = 35 +// MPX3 (mainly RAMPS compatible) = 38 +// Ultimaker Shield 1.5.7 = 37 +// Gen6 = 5 +// Gen6 deluxe = 51 +// Sanguinololu up to 1.1 = 6 +// Sanguinololu 1.2 and above = 62 +// 3Drag/Velleman K8200 = 66 (experimental) +// Open Motion Controller = 91 +// Melzi board = 63 // Define REPRAPPRO_HUXLEY if you have one for correct HEATER_1_PIN assignment! +// Azteeg X1 = 65 +// 3Drag/Velleman K8200 (experimental) = 66 +// Gen7 1.1 till 1.3.x = 7 +// Gen7 1.4.1 and later = 71 +// Sethi 3D_1 = 72 +// Teensylu (at90usb) = 8 // requires Teensyduino +// Printrboard (at90usb) = 9 // requires Teensyduino +// Printrboard Ref. F or newer= 92 // requires Teensyduino +// Foltyn 3D Master = 12 +// MegaTronics 1.0 = 70 +// Megatronics 2.0 = 701 +// Megatronics 3.0 = 703 // Thermistors predefined not thermocouples +// Minitronics 1.0 = 702 +// RUMBA = 80 // Get it from reprapdiscount +// FELIXprinters = 101 +// Rambo = 301 +// Rambo EInsy = 310 +// PiBot for Repetier V1.0-1.3= 314 +// PiBot for Repetier V1.4 = 315 +// PiBot Controller V2.0 = 316 +// Sanguish Beta = 501 +// Unique One rev. A = 88 +// SAV MK1 = 89 +// MJRice Pica Rev B = 183 +// MJRice Pica Rev C = 184 +// Zonestar ZRIB 2.1 = 39 +// User layout defined in userpins.h = 999 + +#define MOTHERBOARD 33 + +#include "pins.h" + +// Override pin definitions from pins.h +//#define FAN_PIN 4 // Extruder 2 uses the default fan output, so move to an other pin +//#define EXTERNALSERIAL use Arduino serial library instead of build in. Requires more ram, has only 63 byte input buffer. + +/* +We can connect BlueTooth to serial converter module directly to boards based on AtMega2560 or AtMega1280 and some boards based on AtMega2561, AtMega1281 or AtMega1284p +- On Melzi boards connect BT to TX1 and RX1 pins, then set BLUETOOTH_SERIAL to 1 +- On RUMBA boards connect BT to pin 11 and 12 of X3 connector, then set BLUETOOTH_SERIAL to 3 +- On RAMBO boards connect BT to pins 5,6 or 7,8 or 9,10 on Serial connector, then accordingly set BLUETOOTH_SERIAL to 1,2 or 3 +- On RAMPS we must remap Y_ENDSTOPS pins or Z_ENDSTOPZ pins or LCD_ENABLE and LCD_RS pins to another pins, and connect BT to: + a) signals of Y_MIN, Y_MAX, then set BLUETOOTH_SERIAL to 3 (RX from BT to Y_MIN, TX from BT to Y_MAX) + b) signals of Z_MIN, Z_MAX, then set BLUETOOTH_SERIAL to 1 (RX from BT to Z_MIN, TX from BT to Z_MAX) + c) pin 17 and 18 of AUX4 connector, then set BLUETOOTH_SERIAL to 2 (RX from BT to AUX4 p18, TX from BT to AUX4 p17) + Comment out or set the BLUETOOTH_SERIAL to 0 or -1 to disable this feature. +*/ +#define BLUETOOTH_SERIAL 1 // Port number (1..3) - For RUMBA use 3 +#define BLUETOOTH_BAUD 115200 // communication speed + +// Uncomment the following line if you are using Arduino compatible firmware made for Arduino version earlier then 1.0 +// If it is incompatible you will get compiler errors about write functions not being compatible! +//#define COMPAT_PRE1 + +/* Define the type of axis movements needed for your printer. The typical case +is a full cartesian system where x, y and z moves are handled by separate motors. + +0 = full cartesian system, xyz have separate motors. +1 = z axis + xy H-gantry (x_motor = x+y, y_motor = x-y) +2 = z axis + xy H-gantry (x_motor = x+y, y_motor = y-x) +3 = Delta printers (Rostock, Kossel, RostockMax, Cerberus, etc) +4 = Tuga printer (Scott-Russell mechanism) +5 = Bipod system (not implemented) +8 = y axis + xz H-gantry (x_motor = x+z, z_motor = x-z) +9 = y axis + xz H-gantry (x_motor = x+z, z_motor = z-x) +Cases 1, 2, 8 and 9 cover all needed xy and xz H gantry systems. If you get results mirrored etc. you can swap motor connections for x and y. +If a motor turns in the wrong direction change INVERT_X_DIR or INVERT_Y_DIR. +*/ +#define DRIVE_SYSTEM 0 +/* + Normal core xy implementation needs 2 virtual steps for a motor step to guarantee + that every tiny move gets maximum one step regardless of direction. This can cost + some speed, so alternatively you can activate the FAST_COREXYZ by uncommenting + the define. This solves the core movements as nonlinear movements like done for + deltas but without the complicated transformations. Since transformations are still + linear you can reduce delta computations per second to 10 and also use 10 + subsegments instead of 20 to reduce memory usage. +*/ +//#define FAST_COREXYZ + +/* You can write some GCODE to be executed on startup. Use this e.g. to set some +pins. Separate multiple GCODEs with \n +*/ +//#define STARTUP_GCODE "" + +// ########################################################################################## +// ## Calibration ## +// ########################################################################################## + +/** Drive settings for the Delta printers +*/ +#if DRIVE_SYSTEM == DELTA + // *************************************************** + // *** These parameter are only for Delta printers *** + // *************************************************** + +/** \brief Delta drive type: 0 - belts and pulleys, 1 - filament drive */ +#define DELTA_DRIVE_TYPE 0 + +#if DELTA_DRIVE_TYPE == 0 +/** \brief Pitch in mm of drive belt. GT2 = 2mm */ +#define BELT_PITCH 2 +/** \brief Number of teeth on X, Y and Z tower pulleys */ +#define PULLEY_TEETH 20 +#define PULLEY_CIRCUMFERENCE (BELT_PITCH * PULLEY_TEETH) +#elif DELTA_DRIVE_TYPE == 1 +/** \brief Filament pulley diameter in millimeters */ +#define PULLEY_DIAMETER 10 +#define PULLEY_CIRCUMFERENCE (PULLEY_DIAMETER * 3.1415927) +#endif + +/** \brief Steps per rotation of stepper motor */ +#define STEPS_PER_ROTATION 200 + +/** \brief Micro stepping rate of X, Y and Y tower stepper drivers */ +#define MICRO_STEPS 16 + +// Calculations +#define AXIS_STEPS_PER_MM ((float)(MICRO_STEPS * STEPS_PER_ROTATION) / PULLEY_CIRCUMFERENCE) +#define XAXIS_STEPS_PER_MM AXIS_STEPS_PER_MM +#define YAXIS_STEPS_PER_MM AXIS_STEPS_PER_MM +#define ZAXIS_STEPS_PER_MM AXIS_STEPS_PER_MM +#else +// ******************************************************* +// *** These parameter are for all other printer types *** +// ******************************************************* + +/** Drive settings for printers with cartesian drive systems */ +/** \brief Number of steps for a 1mm move in x direction. +For xy gantry use 2*belt moved! +Overridden if EEPROM activated. */ +#define XAXIS_STEPS_PER_MM 80 +/** \brief Number of steps for a 1mm move in y direction. +For xy gantry use 2*belt moved! +Overridden if EEPROM activated.*/ +#define YAXIS_STEPS_PER_MM 80 +/** \brief Number of steps for a 1mm move in z direction Overridden if EEPROM activated.*/ +#define ZAXIS_STEPS_PER_MM 4000 +#endif + +// ########################################################################################## +// ## Extruder configuration ## +// ########################################################################################## + +// You can use either PWM (pulse width modulation) or PDM (pulse density modulation) for +// extruders or coolers. PDM will give more signal changes per second, so on average it gives +// the cleaner signal. The only advantage of PWM is giving signals at a fixed rate and never more +// then PWM. +#define PDM_FOR_EXTRUDER 1 +#define PDM_FOR_COOLER 1 + +// The firmware checks if the heater and sensor got decoupled, which is dangerous. Since it will never reach target +// temperature, the heater will stay on for every which can burn your printer or house. +// As an additional barrier to your smoke detectors (I hope you have one above your printer) we now +// do some more checks to detect if something got wrong. + +// If the temp. is on hold target, it may not sway more then this degrees celsius, or we mark +// sensor as defect. +#define DECOUPLING_TEST_MAX_HOLD_VARIANCE 20 +// Minimum temp. rise we expect after the set duration of full heating is over. +// Always keep a good safety margin to get no false positives. If your period is e.g. 10 seconds +// because at startup you already need 7 seconds until heater starts to rise temp. for sensor +// then you have 3 seconds of increased heating to reach 1°C. +#define DECOUPLING_TEST_MIN_TEMP_RISE 1 +// Set to 1 if you want firmware to kill print on decouple +#define KILL_IF_SENSOR_DEFECT 0 +// for each extruder, fan will stay on until extruder temperature is below this value +#define EXTRUDER_FAN_COOL_TEMP 50 +// Retraction for sd pause over lcd +#define RETRACT_ON_PAUSE 2 +// These commands get executed after storing position and going to park position. +#define PAUSE_START_COMMANDS "" +// These commands get executed before we go to stored position. +#define PAUSE_END_COMMANDS "" +/* Set to 1 if all extruders use the same heater block. Temp. control is then always +controlled by settings in extruder 0 definition. */ +#define SHARED_EXTRUDER_HEATER 0 +/* Speed in mm/s for extruder moves fom internal commands, e.g. switching extruder. */ +#define EXTRUDER_SWITCH_XY_SPEED 100 + +// Extruder offsets in steps not mm! +#define EXT0_X_OFFSET 0 +#define EXT0_Y_OFFSET 0 +#define EXT0_Z_OFFSET 0 +// for skeinforge 40 and later, steps to pull the plastic 1 mm inside the extruder, not out. Overridden if EEPROM activated. +#define EXT0_STEPS_PER_MM 413 //385 +// What type of sensor is used? +// 0 is no thermistor/temperature control +// 1 is 100k thermistor (Epcos B57560G0107F000 - RepRap-Fab.org and many other) +// 2 is 200k thermistor +// 3 is mendel-parts thermistor (EPCOS G550) +// 4 is 10k thermistor +// 8 is ATC Semitec 104GT-2 +// 12 is 100k RS thermistor 198-961 +// 13 is PT100 for E3D/Ultimaker +// 14 is 100K NTC 3950 +// 15 DYZE DESIGN 500°C Thermistor +// 16 is B3 innovations 500°C sensor +// 5 is userdefined thermistor table 0 +// 6 is userdefined thermistor table 1 +// 7 is userdefined thermistor table 2 +// 50 is userdefined thermistor table 0 for PTC thermistors +// 51 is userdefined thermistor table 0 for PTC thermistors +// 52 is userdefined thermistor table 0 for PTC thermistors +// 60 is AD8494, AD8495, AD8496 or AD8497 (5mV/degC and 1/4 the price of AD595 but only MSOT_08 package) +// 61 is AD8494, AD8495, AD8496 or AD8497 (5mV/degC and 1.25 Vref offset like adafruit breakout) +// 97 Generic thermistor table 1 +// 98 Generic thermistor table 2 +// 99 Generic thermistor table 3 +// 100 is AD595 +// 101 is MAX6675 +// 102 is MAX31855 +#define EXT0_TEMPSENSOR_TYPE 1 +// Analog input pin for reading temperatures or pin enabling SS for MAX6675 +#define EXT0_TEMPSENSOR_PIN TEMP_0_PIN +// Which pin enables the heater +#define EXT0_HEATER_PIN HEATER_0_PIN +#define EXT0_STEP_PIN E0_STEP_PIN +#define EXT0_DIR_PIN E0_DIR_PIN +// set to false/true for normal / inverse direction +#define EXT0_INVERSE true +#define EXT0_ENABLE_PIN E0_ENABLE_PIN +// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 +#define EXT0_ENABLE_ON 0 +/* Set to 1 to mirror motor. Pins for mirrored motor are below */ +#define EXT0_MIRROR_STEPPER 0 +#define EXT0_STEP2_PIN E0_STEP_PIN +#define EXT0_DIR2_PIN E0_DIR_PIN +#define EXT0_INVERSE2 false +#define EXT0_ENABLE2_PIN E0_ENABLE_PIN +// The following speed settings are for skeinforge 40+ where e is the +// length of filament pulled inside the heater. For repsnap or older +// skeinforge use higher values. +// Overridden if EEPROM activated. +#define EXT0_MAX_FEEDRATE 30 +// Feedrate from halted extruder in mm/s +// Overridden if EEPROM activated. +#define EXT0_MAX_START_FEEDRATE 10 +// Acceleration in mm/s^2 +// Overridden if EEPROM activated. +#define EXT0_MAX_ACCELERATION 4000 +/** Type of heat manager for this extruder. +- 0 = Simply switch on/off if temperature is reached. Works always. +- 1 = PID Temperature control. Is better but needs good PID values. Defaults are a good start for most extruder. +- 3 = Dead-time control. PID_P becomes dead-time in seconds. + Overridden if EEPROM activated. +*/ +#define EXT0_HEAT_MANAGER 1 +/** Wait x seconds, after reaching target temperature. Only used for M109. Overridden if EEPROM activated. */ +#define EXT0_WATCHPERIOD 1 + +/** \brief The maximum value, I-gain can contribute to the output. + +A good value is slightly higher then the output needed for your temperature. +Values for starts: +130 => PLA for temperatures from 170-180 deg C +180 => ABS for temperatures around 240 deg C + +The precise values may differ for different nozzle/resistor combination. + Overridden if EEPROM activated. +*/ +#define EXT0_PID_INTEGRAL_DRIVE_MAX 140 +/** \brief lower value for integral part + +The I state should converge to the exact heater output needed for the target temperature. +To prevent a long deviation from the target zone, this value limits the lower value. +A good start is 30 lower then the optimal value. You need to leave room for cooling. + Overridden if EEPROM activated. +*/ +#define EXT0_PID_INTEGRAL_DRIVE_MIN 60 +/** P-gain. Overridden if EEPROM activated. */ +#define EXT0_PID_PGAIN_OR_DEAD_TIME 24 +/** I-gain. Overridden if EEPROM activated. +*/ +#define EXT0_PID_I 0.88 +/** Dgain. Overridden if EEPROM activated.*/ +#define EXT0_PID_D 80 +// maximum time the heater is can be switched on. Max = 255. Overridden if EEPROM activated. +#define EXT0_PID_MAX 255 +/** \brief Faktor for the advance algorithm. 0 disables the algorithm. Overridden if EEPROM activated. +K is the factor for the quadratic term, which is normally disabled in newer versions. If you want to use +the quadratic factor make sure ENABLE_QUADRATIC_ADVANCE is defined. +L is the linear factor and seems to be working better then the quadratic dependency. +*/ +#define EXT0_ADVANCE_K 0.0f +#define EXT0_ADVANCE_L 0.0f +/* Motor steps to remove backlash for advance algorithm. These are the steps +needed to move the motor cog in reverse direction until it hits the driving +cog. Direct drive extruder need 0. */ +#define EXT0_ADVANCE_BACKLASH_STEPS 0 +/** \brief Temperature to retract filament when extruder is heating up. Overridden if EEPROM activated. +*/ +#define EXT0_WAIT_RETRACT_TEMP 150 +/** \brief Units (mm/inches) to retract filament when extruder is heating up. Overridden if EEPROM activated. Set +to 0 to disable. +*/ +#define EXT0_WAIT_RETRACT_UNITS 0 + +/** You can run any GCODE command on extruder deselect/select. Separate multiple commands with a new line \n. +That way you can execute some mechanical components needed for extruder selection or retract filament or whatever you need. +The codes are only executed for multiple extruder when changing the extruder. */ +#define EXT0_SELECT_COMMANDS "M117 Extruder 1" +#define EXT0_DESELECT_COMMANDS "" +/** The extruder cooler is a fan to cool the extruder when it is heating. If you turn the extruder on, the fan goes on. */ +#define EXT0_EXTRUDER_COOLER_PIN -1 +/** PWM speed for the cooler fan. 0=off 255=full speed */ +#define EXT0_EXTRUDER_COOLER_SPEED 255 +/** Time in ms between a heater action and test of success. Must be more then time between turning heater on and first temp. rise! + * 0 will disable decoupling test */ +#define EXT0_DECOUPLE_TEST_PERIOD 18000 +/** Pin which toggles regularly during extrusion allowing jam control. -1 = disabled */ +#define EXT0_JAM_PIN -1 +/** Pull-up resistor for jam pin? */ +#define EXT0_JAM_PULLUP false +/* Temperature when using preheat */ +#define EXT0_PREHEAT_TEMP 190 +// =========================== Configuration for second extruder ======================== +#define EXT1_X_OFFSET 0 +#define EXT1_Y_OFFSET 0 +#define EXT1_Z_OFFSET 0 +// for skeinforge 40 and later, steps to pull the plastic 1 mm inside the extruder, not out. Overridden if EEPROM activated. +#define EXT1_STEPS_PER_MM 373 +// What type of sensor is used? +// 0 is no thermistor/temperature control +// 1 is 100k thermistor (Epcos B57560G0107F000 - RepRap-Fab.org and many other) +// 2 is 200k thermistor +// 3 is mendel-parts thermistor (EPCOS G550) +// 4 is 10k thermistor +// 5 is userdefined thermistor table 0 +// 6 is userdefined thermistor table 1 +// 7 is userdefined thermistor table 2 +// 8 is ATC Semitec 104GT-2 +// 50 is userdefined thermistor table 0 for PTC thermistors +// 51 is userdefined thermistor table 0 for PTC thermistors +// 52 is userdefined thermistor table 0 for PTC thermistors +// 60 is AD8494, AD8495, AD8496 or AD8497 (5mV/degC and 1/4 the price of AD595 but only MSOT_08 package) +// 61 is AD8494, AD8495, AD8496 or AD8497 (5mV/degC and 1.25 Vref offset like adafruit breakout) +// 97 Generic thermistor table 1 +// 98 Generic thermistor table 2 +// 99 Generic thermistor table 3 +// 100 is AD595 +// 101 is MAX6675 +#define EXT1_TEMPSENSOR_TYPE 3 +// Analog input pin for reading temperatures or pin enabling SS for MAX6675 +#define EXT1_TEMPSENSOR_PIN TEMP_2_PIN +// Which pin enables the heater +#define EXT1_HEATER_PIN HEATER_2_PIN +#define EXT1_STEP_PIN E1_STEP_PIN +#define EXT1_DIR_PIN E1_DIR_PIN +// set to 0/1 for normal / inverse direction +#define EXT1_INVERSE false +#define EXT1_ENABLE_PIN E1_ENABLE_PIN +// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 +#define EXT1_ENABLE_ON false +/* Set to 1 to mirror motor. Pins for mirrored motor are below */ +#define EXT1_MIRROR_STEPPER 0 +#define EXT1_STEP2_PIN E0_STEP_PIN +#define EXT1_DIR2_PIN E0_DIR_PIN +#define EXT1_INVERSE2 false +#define EXT1_ENABLE2_PIN E0_ENABLE_PIN +// The following speed settings are for skeinforge 40+ where e is the +// length of filament pulled inside the heater. For repsnap or older +// skeinforge use heigher values. +// Overridden if EEPROM activated. +#define EXT1_MAX_FEEDRATE 25 +// Feedrate from halted extruder in mm/s +// Overridden if EEPROM activated. +#define EXT1_MAX_START_FEEDRATE 12 +// Acceleration in mm/s^2 +// Overridden if EEPROM activated. +#define EXT1_MAX_ACCELERATION 10000 +/** Type of heat manager for this extruder. +- 0 = Simply switch on/off if temperature is reached. Works always. +- 1 = PID Temperature control. Is better but needs good PID values. Defaults are a good start for most extruder. + Overridden if EEPROM activated. +*/ +#define EXT1_HEAT_MANAGER 1 +/** Wait x seconds, after reaching target temperature. Only used for M109. Overridden if EEPROM activated. */ +#define EXT1_WATCHPERIOD 1 + +/** \brief The maximum value, I-gain can contribute to the output. + +A good value is slightly higher then the output needed for your temperature. +Values for starts: +130 => PLA for temperatures from 170-180 deg C +180 => ABS for temperatures around 240 deg C + +The precise values may differ for different nozzle/resistor combination. + Overridden if EEPROM activated. +*/ +#define EXT1_PID_INTEGRAL_DRIVE_MAX 130 +/** \brief lower value for integral part + +The I state should converge to the exact heater output needed for the target temperature. +To prevent a long deviation from the target zone, this value limits the lower value. +A good start is 30 lower then the optimal value. You need to leave room for cooling. + Overridden if EEPROM activated. +*/ +#define EXT1_PID_INTEGRAL_DRIVE_MIN 60 +/** P-gain. Overridden if EEPROM activated. */ +#define EXT1_PID_PGAIN_OR_DEAD_TIME 24 +/** I-gain. Overridden if EEPROM activated. +*/ +#define EXT1_PID_I 0.88 +/** D-gain. Overridden if EEPROM activated.*/ +#define EXT1_PID_D 200 +// maximum time the heater is can be switched on. Max = 255. Overridden if EEPROM activated. +#define EXT1_PID_MAX 255 +/** \brief Faktor for the advance algorithm. 0 disables the algorithm. Overridden if EEPROM activated. +K is the factor for the quadratic term, which is normally disabled in newer versions. If you want to use +the quadratic factor make sure ENABLE_QUADRATIC_ADVANCE is defined. +L is the linear factor and seems to be working better then the quadratic dependency. +*/ +#define EXT1_ADVANCE_K 0.0f +#define EXT1_ADVANCE_L 0.0f +/* Motor steps to remove backlash for advance algorithm. These are the steps +needed to move the motor cog in reverse direction until it hits the driving +cog. Direct drive extruder need 0. */ +#define EXT1_ADVANCE_BACKLASH_STEPS 0 + +#define EXT1_WAIT_RETRACT_TEMP 150 +#define EXT1_WAIT_RETRACT_UNITS 0 +#define EXT1_SELECT_COMMANDS "M117 Extruder 2" +#define EXT1_DESELECT_COMMANDS "" +/** The extruder cooler is a fan to cool the extruder when it is heating. If you turn the etxruder on, the fan goes on. */ +#define EXT1_EXTRUDER_COOLER_PIN -1 +/** PWM speed for the cooler fan. 0=off 255=full speed */ +#define EXT1_EXTRUDER_COOLER_SPEED 255 +/** Time in ms between a heater action and test of success. Must be more then time between turning heater on and first temp. rise! + * 0 will disable decoupling test */ +#define EXT1_DECOUPLE_TEST_PERIOD 18000 +/** Pin which toggles regularly during extrusion allowing jam control. -1 = disabled */ +#define EXT1_JAM_PIN -1 +/** Pull-up resistor for jam pin? */ +#define EXT1_JAM_PULLUP false +#define EXT1_PREHEAT_TEMP 190 + +/** If enabled you can select the distance your filament gets retracted during a +M140 command, after a given temperature is reached. */ +#define RETRACT_DURING_HEATUP 1 + +/** Allow retraction with G10/G11 removing requirement for retraction setting in slicer. Also allows filament change if lcd is configured. */ +#define FEATURE_RETRACTION 1 +/** auto-retract converts pure extrusion moves into retractions. Beware that + simple extrusion e.g. over Repetier-Host will then not work! */ +#define AUTORETRACT_ENABLED 0 +#define RETRACTION_LENGTH 3 +#define RETRACTION_LONG_LENGTH 13 +#define RETRACTION_SPEED 40 +#define RETRACTION_Z_LIFT 0 +#define RETRACTION_UNDO_EXTRA_LENGTH 0 +#define RETRACTION_UNDO_EXTRA_LONG_LENGTH 0 +#define RETRACTION_UNDO_SPEED 20 + +/** +If you have a lcd display, you can do a filament switch with M600. +It will change the current extruders filament and temperature must already be high enough. +*/ +#define FILAMENTCHANGE_X_POS 0 +#define FILAMENTCHANGE_Y_POS 0 +#define FILAMENTCHANGE_Z_ADD 1 +/** Does a homing procedure after a filament change. This is good in case +you moved the extruder while changing filament during print. +0 = no homing, 1 = xy homing, 2 = xyz homing +*/ +#define FILAMENTCHANGE_REHOME 1 +/** Will first retract short distance, go to change position and then retract longretract. +Retractions speeds are taken from RETRACTION_SPEED and RETRACTION_UNDO_SPEED +*/ +#define FILAMENTCHANGE_SHORTRETRACT 30 +#define FILAMENTCHANGE_LONGRETRACT 30 + +/* Define how we detect jam/out of filament + 1 = Distance between signal changes increase + 2 = signal gets high + 3 = signal gets low + + 2 and 3 are not jam detections, but only out of filament detection by a switch + that changes the signal! +*/ +#define JAM_METHOD 1 +// Steps normally needed for a full signal cycle. +#define JAM_STEPS 220 +// Steps for reducing speed. Must be higher then JAM_STEPS +#define JAM_SLOWDOWN_STEPS 380 +// New speed multiplier which gets set when slowdown is reached. +#define JAM_SLOWDOWN_TO 70 +// Last fallback. If we slip this much, we want to pause. +#define JAM_ERROR_STEPS 430 +/** To prevent signal bouncing, only consider changes if we are this much steps + away from last signal change. */ +#define JAM_MIN_STEPS 10 +/* +Determine what should be done if a jam is detected +0 : Nothing, just mark extruder as jammed. +1 : Jam/out of filament dialog and block communication. +2 : Message to host/server otherwise continue and mark extruder jammed +*/ +#define JAM_ACTION 1 + +/** PID control only works target temperature +/- PID_CONTROL_RANGE. +If you get much overshoot at the first temperature set, because the heater is going full power too long, you +need to increase this value. For one 6.8 Ohm heater 10 is ok. With two 6.8 Ohm heater use 15. +*/ +#define PID_CONTROL_RANGE 20 + +/** Prevent extrusions longer then x mm for one command. This is especially important if you abort a print. Then the +extrusion position might be at any value like 23344. If you then have an G1 E-2 it will roll back 23 meter! */ +#define EXTRUDE_MAXLENGTH 100 +/** Skip wait, if the extruder temperature is already within x degrees. Only fixed numbers, 0 = off */ +#define SKIP_M109_IF_WITHIN 2 + +/** \brief Set PID scaling + +PID values assume a usable range from 0-255. This can be further limited to EXT0_PID_MAX by to methods. +Set the value to 0: Normal computation, just clip output to EXT0_PID_MAX if computed value is too high. +Set value to 1: Scale PID by EXT0_PID_MAX/256 and then clip to EXT0_PID_MAX. +If your EXT0_PID_MAX is low, you should prefer the second method. +*/ +#define SCALE_PID_TO_MAX 0 + + +#define HEATER_PWM_SPEED 1 // How fast ist pwm signal 0 = 15.25Hz, 1 = 30.51Hz, 2 = 61.03Hz, 3 = 122.06Hz + +/** Temperature range for target temperature to hold in M109 command. 5 means +/-5 degC + +Uncomment define to force the temperature into the range for given watch period. +*/ +//#define TEMP_HYSTERESIS 5 + +/** Userdefined thermistor table + +There are many different thermistors, which can be combined with different resistors. This result +in unpredictable number of tables. As a resolution, the user can define one table here, that can +be used as type 5 for thermistor type in extruder/heated bed definition. Make sure, the number of entries +matches the value in NUM_TEMPS_USERTHERMISTOR0. If you span definition over multiple lines, make sure to end +each line, except the last, with a backslash. The table format is {{adc1,temp1},{adc2,temp2}...} with +increasing adc values. For more informations, read +http://hydraraptor.blogspot.com/2007/10/measuring-temperature-easy-way.html + +If you have a sprinter temperature table, you have to multiply the first value with 4 and the second with 8. +This firmware works with increased precision, so the value reads go from 0 to 4095 and the temperature is +temperature*8. + +If you have a PTC thermistor instead of a NTC thermistor, keep the adc values increasing and use thermistor types 50-52 instead of 5-7! +*/ +/** Number of entries in the user thermistor table 0. Set to 0 to disable it. */ +#define NUM_TEMPS_USERTHERMISTOR0 28 +#define USER_THERMISTORTABLE0 {\ + {1*4,864*8},{21*4,300*8},{25*4,290*8},{29*4,280*8},{33*4,270*8},{39*4,260*8},{46*4,250*8},{54*4,240*8},{64*4,230*8},{75*4,220*8},\ + {90*4,210*8},{107*4,200*8},{128*4,190*8},{154*4,180*8},{184*4,170*8},{221*4,160*8},{265*4,150*8},{316*4,140*8},{375*4,130*8},\ + {441*4,120*8},{513*4,110*8},{588*4,100*8},{734*4,80*8},{856*4,60*8},{938*4,40*8},{986*4,20*8},{1008*4,0*8},{1018*4,-20*8} } + +/** Number of entries in the user thermistor table 1. Set to 0 to disable it. */ +#define NUM_TEMPS_USERTHERMISTOR1 0 +#define USER_THERMISTORTABLE1 {} +/** Number of entries in the user thermistor table 2. Set to 0 to disable it. */ +#define NUM_TEMPS_USERTHERMISTOR2 0 +#define USER_THERMISTORTABLE2 {} + +/** If defined, creates a thermistor table at startup. + +If you don't feel like computing the table on your own, you can use this generic method. It is +a simple approximation which may be not as accurate as a good table computed from the reference +values in the datasheet. You can increase precision if you use a temperature/resistance for +R0/T0, which is near your operating temperature. This will reduce precision for lower temperatures, +which are not really important. The resistors must fit the following schematic: +@code +VREF ---- R2 ---+--- Termistor ---+-- GND + | | + +------ R1 -------+ + | | + +---- Capacitor --+ + | + V measured +@endcode + +If you don't have R1, set it to 0. +The capacitor is for reducing noise from long thermistor cable. If you don't have one, it's OK. + +If you need the generic table, uncomment the following define. +*/ +//#define USE_GENERIC_THERMISTORTABLE_1 + +/* Some examples for different thermistors: + +EPCOS B57560G104+ : R0 = 100000 T0 = 25 Beta = 4036 +EPCOS 100K Thermistor (B57560G1104F) : R0 = 100000 T0 = 25 Beta = 4092 +ATC Semitec 104GT-2 : R0 = 100000 T0 = 25 Beta = 4267 +Honeywell 100K Thermistor (135-104LAG-J01) : R0 = 100000 T0 = 25 Beta = 3974 + +*/ + +/** Reference Temperature */ +#define GENERIC_THERM1_T0 25 +/** Resistance at reference temperature */ +#define GENERIC_THERM1_R0 100000 +/** Beta value of thermistor + +You can use the beta from the datasheet or compute it yourself. +See http://reprap.org/wiki/MeasuringThermistorBeta for more details. +*/ +#define GENERIC_THERM1_BETA 4036 +/** Start temperature for generated thermistor table */ +#define GENERIC_THERM1_MIN_TEMP -20 +/** End Temperature for generated thermistor table */ +#define GENERIC_THERM1_MAX_TEMP 300 +#define GENERIC_THERM1_R1 0 +#define GENERIC_THERM1_R2 4700 + +// The same for table 2 and 3 if needed + +//#define USE_GENERIC_THERMISTORTABLE_2 +#define GENERIC_THERM2_T0 170 +#define GENERIC_THERM2_R0 1042.7 +#define GENERIC_THERM2_BETA 4036 +#define GENERIC_THERM2_MIN_TEMP -20 +#define GENERIC_THERM2_MAX_TEMP 300 +#define GENERIC_THERM2_R1 0 +#define GENERIC_THERM2_R2 4700 + +//#define USE_GENERIC_THERMISTORTABLE_3 +#define GENERIC_THERM3_T0 170 +#define GENERIC_THERM3_R0 1042.7 +#define GENERIC_THERM3_BETA 4036 +#define GENERIC_THERM3_MIN_TEMP -20 +#define GENERIC_THERM3_MAX_TEMP 300 +#define GENERIC_THERM3_R1 0 +#define GENERIC_THERM3_R2 4700 + +/** Supply voltage to ADC, can be changed by setting ANALOG_REF below to different value. */ +#define GENERIC_THERM_VREF 5 +/** Number of entries in generated table. One entry takes 4 bytes. Higher number of entries increase computation time too. +Value is used for all generic tables created. */ +#define GENERIC_THERM_NUM_ENTRIES 33 + +// uncomment the following line for MAX6675 support. +//#define SUPPORT_MAX6675 +// uncomment the following line for MAX31855 support. +//#define SUPPORT_MAX31855 + +// ############# Heated bed configuration ######################## + +/** \brief Set true if you have a heated bed connected to your board, false if not */ +#define HAVE_HEATED_BED 1 + +#define HEATED_BED_MAX_TEMP 115 +/** Skip M190 wait, if heated bed is already within x degrees. Fixed numbers only, 0 = off. */ +#define SKIP_M190_IF_WITHIN 3 + +// Select type of your heated bed. It's the same as for EXT0_TEMPSENSOR_TYPE +// set to 0 if you don't have a heated bed +#define HEATED_BED_SENSOR_TYPE 1 +/** Analog pin of analog sensor to read temperature of heated bed. */ +#define HEATED_BED_SENSOR_PIN TEMP_1_PIN +/** \brief Pin to enable heater for bed. */ +#define HEATED_BED_HEATER_PIN HEATER_1_PIN +// How often the temperature of the heated bed is set (msec) +#define HEATED_BED_SET_INTERVAL 5000 + +/** +Heat manager for heated bed: +0 = Bang Bang, fast update +1 = PID controlled +2 = Bang Bang, limited check every HEATED_BED_SET_INTERVAL. Use this with relay-driven beds to save life time +3 = dead time control +*/ +#define HEATED_BED_HEAT_MANAGER 1 +/** \brief The maximum value, I-gain can contribute to the output. +The precise values may differ for different nozzle/resistor combination. + Overridden if EEPROM activated. +*/ +#define HEATED_BED_PID_INTEGRAL_DRIVE_MAX 255 +/** \brief lower value for integral part + +The I state should converge to the exact heater output needed for the target temperature. +To prevent a long deviation from the target zone, this value limits the lower value. +A good start is 30 lower then the optimal value. You need to leave room for cooling. + Overridden if EEPROM activated. +*/ +#define HEATED_BED_PID_INTEGRAL_DRIVE_MIN 80 +/** P-gain. Overridden if EEPROM activated. */ +#define HEATED_BED_PID_PGAIN_OR_DEAD_TIME 196 +/** I-gain Overridden if EEPROM activated.*/ +#define HEATED_BED_PID_IGAIN 33.02 +/** Dgain. Overridden if EEPROM activated.*/ +#define HEATED_BED_PID_DGAIN 290 +// maximum time the heater can be switched on. Max = 255. Overridden if EEPROM activated. +#define HEATED_BED_PID_MAX 255 +// Time to see a temp. change when fully heating. Consider that beds at higher temp. need longer to rise and cold +// beds need some time to get the temp. to the sensor. Time is in milliseconds! Set 0 to disable +#define HEATED_BED_DECOUPLE_TEST_PERIOD 300000 + +// 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! +#define MAXTEMP 260 + +#define HEATED_BED_PREHEAT_TEMP 55 + +/** Extreme values to detect defect thermistors. */ +#define MIN_DEFECT_TEMPERATURE -10 +#define MAX_DEFECT_TEMPERATURE 300 + +//How many milliseconds a hot end 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 should be set to the time it +//takes to reach the minimum temperature your thermistor can read. The lower +//the better/safer, and shouldn't need to be more than 30 seconds (30000) +#define MILLISECONDS_PREHEAT_TIME 30000 + +// ########################################################################################## +// ## Laser configuration ## +// ########################################################################################## + +/* +If the firmware is in laser mode, it can control a laser output to cut or engrave materials. +Please use this feature only if you know about safety and required protection. Lasers are +dangerous and can hurt or make you blind!!! + +The default laser driver only supports laser on and off. Here you control the intensity with +your feedrate. For exchangeable diode lasers this is normally enough. If you need more control +you can set the intensity in a range 0-255 with a custom extension to the driver. See driver.h +and comments on how to extend the functions non invasive with our event system. + +If you have a laser - powder system you will like your E override. If moves contain a +increasing extruder position it will laser that move. With this trick you can +use existing FDM slicers to laser the output. Laser width is extrusion width. + +Other tools may use M3 and M5 to enable/disable laser. Here G1/G2/G3 moves have laser enabled +and G0 moves have it disables. + +In any case, laser only enables while moving. At the end of a move it gets +automatically disabled. +*/ + +#define SUPPORT_LASER 0 // set 1 to enable laser support +#define LASER_PIN -1 // set to pin enabling laser +#define LASER_ON_HIGH 1 // Set 0 if low signal enables laser +#define LASER_WARMUP_TIME 0// wait x milliseconds to start material burning before move +#define LASER_PWM_MAX 255 //255 8-bit PWM 4095 for 12Bit PWM +#define LASER_WATT 1.6 // Laser diode power + +// ########################################################################################## +// ## CNC configuration ## +// ########################################################################################## + +/* +If the firmware is in CNC mode, it can control a mill with M3/M4/M5. It works +similar to laser mode, but mill keeps enabled during G0 moves and it allows +setting rpm (only with event extension that supports this) and milling direction. +It also can add a delay to wait for spindle to run on full speed. +*/ + +#define SUPPORT_CNC 0 // Set 1 for CNC support +#define CNC_WAIT_ON_ENABLE 300 // wait x milliseconds after enabling +#define CNC_WAIT_ON_DISABLE 0 // delay in milliseconds after disabling spindle. May be required for direction changes. +#define CNC_ENABLE_PIN -1 // Pin to enable mill +#define CNC_ENABLE_WITH 1 // Set 0 if low enables spindle +#define CNC_DIRECTION_PIN -1 // Set to pin if direction control is possible +#define CNC_DIRECTION_CW 1 // Set signal required for clockwise rotation +#define CNC_PWM_MAX 255 //255 8-bit PWM 4095 for 12Bit PWM +#define CNC_RPM_MAX 25000 //max spindle RPM +#define CNC_SAFE_Z 150 // Safe Z height so tool is outside object, used for pause + +/* Select the default mode when the printer gets enables. Possible values are +PRINTER_MODE_FFF 0 +PRINTER_MODE_LASER 1 +PRINTER_MODE_CNC 2 +*/ +#define DEFAULT_PRINTER_MODE PRINTER_MODE_FFF + +// ########################################################################################## +// ## Endstop configuration ## +// ########################################################################################## + +/* By default all endstops are pulled up to HIGH. You need a pull-up if you +use a mechanical endstop connected with GND. Set value to false for no pull-up +on this endstop. +*/ +#define ENDSTOP_PULLUP_X_MIN false +#define ENDSTOP_PULLUP_Y_MIN false +#define ENDSTOP_PULLUP_Z_MIN false +#define ENDSTOP_PULLUP_X_MAX true +#define ENDSTOP_PULLUP_Y_MAX true +#define ENDSTOP_PULLUP_Z_MAX false + +//set to true to invert the logic of the endstops +#define ENDSTOP_X_MIN_INVERTING true +#define ENDSTOP_Y_MIN_INVERTING true +#define ENDSTOP_Z_MIN_INVERTING true +#define ENDSTOP_X_MAX_INVERTING false +#define ENDSTOP_Y_MAX_INVERTING false +#define ENDSTOP_Z_MAX_INVERTING true + +// Set the values true where you have a hardware endstop. The Pin number is taken from pins.h. + +#define MIN_HARDWARE_ENDSTOP_X true +#define MIN_HARDWARE_ENDSTOP_Y true +#define MIN_HARDWARE_ENDSTOP_Z true +#define MAX_HARDWARE_ENDSTOP_X false +#define MAX_HARDWARE_ENDSTOP_Y false +#define MAX_HARDWARE_ENDSTOP_Z false + +// If you have a mirrored motor you can put a second endstop to that motor. +// On homing you would then need to trigge rboth endstops. Each endstop only +// stopps one motor, so they are aligned after homing. After homing only the +// first endstop gets used. + +#define ENDSTOP_PULLUP_X2_MIN false +#define ENDSTOP_PULLUP_Y2_MIN false +#define ENDSTOP_PULLUP_Z2_MINMAX false +#define ENDSTOP_PULLUP_X2_MAX true +#define ENDSTOP_PULLUP_Y2_MAX true + +#define ENDSTOP_X2_MIN_INVERTING true +#define ENDSTOP_Y2_MIN_INVERTING true +#define ENDSTOP_X2_MAX_INVERTING true +#define ENDSTOP_Y2_MAX_INVERTING true + +#define MIN_HARDWARE_ENDSTOP_X2 false +#define MIN_HARDWARE_ENDSTOP_Y2 false +#define MAX_HARDWARE_ENDSTOP_X2 false +#define MAX_HARDWARE_ENDSTOP_Y2 false +#define MINMAX_HARDWARE_ENDSTOP_Z2 false + +#define X2_MIN_PIN -1 +#define X2_MAX_PIN -1 +#define Y2_MIN_PIN -1 +#define Y2_MAX_PIN -1 +#define Z2_MINMAX_PIN -1 + +//If your axes are only moving in one direction, make sure the endstops are connected properly. +//If your axes move in one direction ONLY when the endstops are triggered, set ENDSTOPS_INVERTING to true here + +//// ADVANCED SETTINGS - to tweak parameters + +// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 +#define X_ENABLE_ON 0 +#define Y_ENABLE_ON 0 +#define Z_ENABLE_ON 0 + +// Disables axis when it's not being used. +#define DISABLE_X false +#define DISABLE_Y false +#define DISABLE_Z false +#define DISABLE_E false +/* If you want to keep z motor running on stepper timeout, remove comments below. + This may be useful if your z bed moves when motors are disabled. Will still + turn z off when heaters get also disabled. +*/ +//#define PREVENT_Z_DISABLE_ON_STEPPER_TIMEOUT + +// Inverting motor direction. Only in case of pure cartesian printers, this +// is also the axis you invert! +#define INVERT_X_DIR 0 +#define INVERT_X2_DIR 1 +#define INVERT_Y_DIR 1 +#define INVERT_Y2_DIR 1 +#define INVERT_Z_DIR 0 +#define INVERT_Z2_DIR 1 +#define INVERT_Z3_DIR 1 +#define INVERT_Z4_DIR 1 + +//// ENDSTOP SETTINGS: +// Sets direction of endstops when homing; 1=MAX, -1=MIN +#define X_HOME_DIR -1 +#define Y_HOME_DIR -1 +#define Z_HOME_DIR -1 + +// Delta robot radius endstop +#define max_software_endstop_r true + +//If true, axis won't move to coordinates less than zero. +#define min_software_endstop_x false +#define min_software_endstop_y false +#define min_software_endstop_z false + +//If true, axis won't move to coordinates greater than the defined lengths below. +#define max_software_endstop_x true +#define max_software_endstop_y true +#define max_software_endstop_z false + +// If during homing the endstop is reached, ho many mm should the printer move back for the second try +#define ENDSTOP_X_BACK_MOVE 5 +#define ENDSTOP_Y_BACK_MOVE 5 +#define ENDSTOP_Z_BACK_MOVE 2 + +// For higher precision you can reduce the speed for the second test on the endstop +// during homing operation. The homing speed is divided by the value. 1 = same speed, 2 = half speed +#define ENDSTOP_X_RETEST_REDUCTION_FACTOR 2 +#define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 2 +#define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 2 + +// When you have several endstops in one circuit you need to disable it after homing by moving a +// small amount back. This is also the case with H-belt systems. +#define ENDSTOP_X_BACK_ON_HOME 1 +#define ENDSTOP_Y_BACK_ON_HOME 1 +#define ENDSTOP_Z_BACK_ON_HOME 0 +// If you do z min homing, you might want to rise extruder a bit after homing so it does not heat +// touching your bed. +#define Z_UP_AFTER_HOME 0 +// You can disable endstop checking for print moves. This is needed, if you get sometimes +// false signals from your endstops. If your endstops don't give false signals, you +// can set it on for safety. +#define ALWAYS_CHECK_ENDSTOPS 1 + +// maximum positions in mm - only fixed numbers! +// For delta robot Z_MAX_LENGTH is the maximum travel of the towers and should be set to the distance between the hotend +// and the platform when the printer is at its home position. +// If EEPROM is enabled these values will be overridden with the values in the EEPROM +#define X_MAX_LENGTH 175 +#define Y_MAX_LENGTH 140 +#define Z_MAX_LENGTH 170 +// Coordinates for the minimum axis. Can also be negative if you want to have the bed start at 0 and the printer can go to the left side +// of the bed. Maximum coordinate is given by adding the above X_MAX_LENGTH values. +#define X_MIN_POS 0 +#define Y_MIN_POS 0 +#define Z_MIN_POS 0 + +// Park position used when pausing from firmware side +#if DRIVE_SYSTEM == DELTA +#define PARK_POSITION_X (0) +#define PARK_POSITION_Y (70) +#else +#define PARK_POSITION_X (X_MIN_POS) +#define PARK_POSITION_Y (Y_MIN_POS + Y_MAX_LENGTH) +#endif +#define PARK_POSITION_Z_RAISE 10 + +// ########################################################################################## +// ## Movement settings ## +// ########################################################################################## + +// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU. Currently only works for RAMBO boards +#define MICROSTEP_MODES {8,8,8,8,8} // [1,2,4,8,16] + +// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards) +// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards) +#if MOTHERBOARD==301 +//#define MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) +#define MOTOR_CURRENT_PERCENT {53,53,53,53,53} +#elif MOTHERBOARD==12 +//#define MOTOR_CURRENT {35713,35713,35713,35713,35713} // Values 0-65535 (3D Master 35713 = ~1A) +#define MOTOR_CURRENT_PERCENT {55,55,55,55,55} +#endif + +/** \brief Number of segments to generate for delta conversions per second of move +*/ +#define DELTA_SEGMENTS_PER_SECOND_PRINT 180 // Move accurate setting for print moves +#define DELTA_SEGMENTS_PER_SECOND_MOVE 70 // Less accurate setting for other moves + +// Delta settings +#if DRIVE_SYSTEM==DELTA +/** \brief Delta rod length (mm) +*/ +#define DELTA_DIAGONAL_ROD 345 // mm + + +/* =========== Parameter essential for delta calibration =================== + + C, Y-Axis + | |___| CARRIAGE_HORIZONTAL_OFFSET (recommend set it to 0) + | | \------------------------------------------ + |_________ X-axis | \ | + / \ | \ DELTA_DIAGONAL_ROD (length) Each move this Rod Height + / \ \ is calculated + / \ \ Carriage is at printer center! | + A B \_____/-------------------------------- + |--| END_EFFECTOR_HORIZONTAL_OFFSET (recommend set it to 0) + |----| ROD_RADIUS (Horizontal rod pivot to pivot measure) + |-----------| PRINTER_RADIUS (recommend set it to ROD_RADIUS) + + Column angles are measured from X-axis counterclockwise + "Standard" positions: alpha_A = 210, alpha_B = 330, alpha_C = 90 +*/ + +/** \brief column positions - change only to correct build imperfections! */ +#define DELTA_ALPHA_A 210 +#define DELTA_ALPHA_B 330 +#define DELTA_ALPHA_C 90 + +/** Correct radius by this value for each column. Perfect builds have 0 everywhere. */ +#define DELTA_RADIUS_CORRECTION_A 0 +#define DELTA_RADIUS_CORRECTION_B 0 +#define DELTA_RADIUS_CORRECTION_C 0 + +/** Correction of the default diagonal size. Value gets added.*/ +#define DELTA_DIAGONAL_CORRECTION_A 0 +#define DELTA_DIAGONAL_CORRECTION_B 0 +#define DELTA_DIAGONAL_CORRECTION_C 0 + +/** Max. radius (mm) the printer should be able to reach. */ +#define DELTA_MAX_RADIUS 200 + +// Margin (mm) to avoid above tower minimum (xMin xMinsteps) +// If your printer can put its carriage low enough the rod is horizontal without hitting the floor +// set this to zero. Otherwise, measure how high the carriage is from horizontal rod +// Also, movement speeds are 10x to 20x cartesian speeds at tower bottom. +// You may need to leave a few mm for safety. +// Hitting floor at high speed can damage your printer (motors, drives, etc) +// THIS MAY NEED UPDATING IF THE HOT END HEIGHT CHANGES! +#define DELTA_FLOOR_SAFETY_MARGIN_MM 15 + +/** \brief Horizontal offset of the universal joints on the end effector (moving platform). +*/ +#define END_EFFECTOR_HORIZONTAL_OFFSET 0 + +/** \brief Horizontal offset of the universal joints on the vertical carriages. +*/ +#define CARRIAGE_HORIZONTAL_OFFSET 0 + +/** \brief Printer radius in mm, + measured from the center of the print area to the vertical smooth tower. + Alternately set this to the pivot to pivot horizontal rod distance, when head is at (0,0) +*/ +#define PRINTER_RADIUS 124 + +/** 1 for more precise delta moves. 0 for faster computation. +Needs a bit more computation time. */ +#define EXACT_DELTA_MOVES 1 + +/* ========== END Delta calibration data ==============*/ + +/** When true the delta will home to z max when reset/powered over cord. That way you start with well defined coordinates. +If you don't do it, make sure to home first before your first move. +*/ +#define DELTA_HOME_ON_POWER 0 + +/** To allow software correction of misaligned endstops, you can set the correction in steps here. If you have EEPROM enabled +you can also change the values online and autoleveling will store the results here. */ +#define DELTA_X_ENDSTOP_OFFSET_STEPS 0 +#define DELTA_Y_ENDSTOP_OFFSET_STEPS 0 +#define DELTA_Z_ENDSTOP_OFFSET_STEPS 0 + +#endif +#if DRIVE_SYSTEM==TUGA +// ========== Tuga special settings ============= +/* Radius of the long arm in mm. */ +#define DELTA_DIAGONAL_ROD 240 +#endif + +/** \brief Number of delta moves in each line. Moves that exceed this figure will be split into multiple lines. +Increasing this figure can use a lot of memory since 7 bytes * size of line buffer * MAX_SELTA_SEGMENTS_PER_LINE +will be allocated for the delta buffer. +PrintLine PrintLine::lines[PRINTLINE_CACHE_SIZE (default 16?)]; +Printline is about 200 bytes + 7 * DELTASEGMENTS_PER_PRINTLINE +or 16 * (200 + (7*22=154) = 354) = 5664 bytes! !1 +min is 5 * (200 + (7*10=70) =270) = 1350 + This leaves ~1K free RAM on an Arduino which has only 8k +Mega. Used only for nonlinear systems like delta or tuga. */ +#define DELTASEGMENTS_PER_PRINTLINE 22 + +/** After x seconds of inactivity, the stepper motors are disabled. + Set to 0 to leave them enabled. + This helps cooling the Stepper motors between two print jobs. + Overridden if EEPROM activated. +*/ +#define STEPPER_INACTIVE_TIME 360 +/** After x seconds of inactivity, the system will go down as far it can. + It will at least disable all stepper motors and heaters. If the board has + a power pin, it will be disabled, too. + Set value to 0 for disabled. + Overridden if EEPROM activated. +*/ +#define MAX_INACTIVE_TIME 0L +/** Maximum feedrate, the system allows. Higher feedrates are reduced to these values. + The axis order in all axis related arrays is X, Y, Z + Overridden if EEPROM activated. + */ +#define MAX_FEEDRATE_X 200 +#define MAX_FEEDRATE_Y 200 +#define MAX_FEEDRATE_Z 3 + +/** Home position speed in mm/s. Overridden if EEPROM activated. */ +#define HOMING_FEEDRATE_X 80 +#define HOMING_FEEDRATE_Y 80 +#define HOMING_FEEDRATE_Z 3 + +/** Set order of axis homing. Use HOME_ORDER_XYZ and replace XYZ with your order. + * If you measure Z with your extruder tip you need a hot extruder to get right measurement. In this + * case set HOME_ORDER_ZXYTZ and also define ZHOME_HEAT_HEIGHT and ZHOME_MIN_TEMPERATURE. It will do + * first a z home to get some reference, then raise to ZHOME_HEAT_HEIGHT do xy homing and then after + * heating to minimum ZHOME_MIN_TEMPERATURE will z home again for correct height. + * */ +#define HOMING_ORDER HOME_ORDER_ZXY +/* + Raise Z before homing z axis + 0 = no + 1 = if z min is triggered + 2 = always + This is for printers with z probe used as z min. For homing the probe must be + at a minimum height for some endstop types, so raising it before will help + to make sure this is guaranteed. +*/ +#define ZHOME_PRE_RAISE 0 +// Distance in mm to raise if required +#define ZHOME_PRE_RAISE_DISTANCE 10 + +/* + Raises Z before swapping extruder (tool change) and lowers it afterwards + Unit is mm (INTEGER NUMBERS ONLY) + */ +#define RAISE_Z_ON_TOOLCHANGE 0 + +// Used for homing order HOME_ORDER_ZXYTZ +#define ZHOME_MIN_TEMPERATURE 0 +// needs to heat all extruders (1) or only current extruder (0) +#define ZHOME_HEAT_ALL 1 +// Z-height for heating extruder during homing +#define ZHOME_HEAT_HEIGHT 20 +// If your bed might bend while probing, because your sensor is the extruder tip +// you can define a predefined x,y position so bending is always the same and +// can be compensated. Set coordinate to 999999 to ignore positions and just +// use the position you are at. +#define ZHOME_X_POS IGNORE_COORDINATE +#define ZHOME_Y_POS IGNORE_COORDINATE + +/* If you have a backlash in both z-directions, you can use this. For most printer, the bed will be pushed down by it's +own weight, so this is nearly never needed. */ +#define ENABLE_BACKLASH_COMPENSATION 0 +#define Z_BACKLASH 0 +#define X_BACKLASH 0 +#define Y_BACKLASH 0 + +/** Comment this to disable ramp acceleration */ +#define RAMP_ACCELERATION 1 + +/** If your stepper needs a longer high signal then given, you can add a delay here. +The delay is realized as a simple loop wasting time, which is not available for other +computations. So make it as low as possible. For the most common drivers no delay is needed, as the +included delay is already enough. +*/ +#define STEPPER_HIGH_DELAY 0 + +/** If your driver needs some additional delay between setting direction and first step signal, + you can set this here. There are some commands between direction and signal, but some drivers + might be even slower or you are using a fast Arduino board with slow driver. Normally 0 works. + If you get skewed print, you might try 1 microsecond here. + */ +#define DIRECTION_DELAY 0 +/** The firmware can only handle 16000Hz interrupt frequency cleanly. If you need higher speeds +a faster solution is needed, and this is to double/quadruple the steps in one interrupt call. +This is like reducing your 1/16th microstepping to 1/8 or 1/4. It is much cheaper then 1 or 3 +additional stepper interrupts with all it's overhead. As a result you can go as high as +40000Hz. +*/ +#define STEP_DOUBLER_FREQUENCY 12000 +/** If you need frequencies off more then 30000 you definitely need to enable this. If you have only 1/8 stepping +enabling this may cause to stall your moves when 20000Hz is reached. +*/ +#define ALLOW_QUADSTEPPING 1 +/** If you reach STEP_DOUBLER_FREQUENCY the firmware will do 2 or 4 steps with nearly no delay. That can be too fast +for some printers causing an early stall. + +*/ +#define DOUBLE_STEP_DELAY 0 // time in microseconds + +/** If the firmware is busy, it will send a busy signal to host signaling that + everything is fine and it only takes a bit longer to finish. That way the + host can keep timeout short so in case of communication errors the resulting + blobs are much smaller. Set to 0 to disable it. */ +#define KEEP_ALIVE_INTERVAL 2000 +//// Acceleration settings + +/** \brief X, Y, Z max acceleration in mm/s^2 for printing moves or retracts. Make sure your printer can go that high! + Overridden if EEPROM activated. +*/ +#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X 1000 +#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y 1000 +#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100 + +/** \brief X, Y, Z max acceleration in mm/s^2 for travel moves. Overridden if EEPROM activated.*/ +#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X 2000 +#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y 2000 +#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100 +/** If you print on a moving bed, it can become more shaky the higher and bigger + your print gets. Therefore it might be helpfull to reduce acceleration with + increasing print height. You can define here how acceleration should change. + You set ACCELERATION_FACTOR_TOP to the factor in percent for the top position + of your printer. Acceleration will then be modified linear over height. + INTERPOLATE_ACCELERATION_WITH_Z sets, which accelerations get changed: + 0 = do not interpolate at all + 1 = interpolate x and y acceleration + 2 = interpolate z acceleration + 3 = interpolate x,y and z acceleration + */ +#define INTERPOLATE_ACCELERATION_WITH_Z 0 +#define ACCELERATION_FACTOR_TOP 100 + +/** \brief Maximum allowable jerk. + +Caution: This is no real jerk in a physical meaning. + +The jerk determines your start speed and the maximum speed at the join of two segments. +Its unit is mm/s. If the printer is standing still, the start speed is jerk/2. At the +join of two segments, the speed difference is limited to the jerk value. + +Examples: +For all examples jerk is assumed as 40. + +Segment 1: vx = 50, vy = 0 +Segment 2: vx = 0, vy = 50 +v_diff = sqrt((50-0)^2+(0-50)^2) = 70.71 +v_diff > jerk => vx_1 = vy_2 = jerk/v_diff*vx_1 = 40/70.71*50 = 28.3 mm/s at the join + +Segment 1: vx = 50, vy = 0 +Segment 2: vx = 35.36, vy = 35.36 +v_diff = sqrt((50-35.36)^2+(0-35.36)^2) = 38.27 < jerk +Corner can be printed with full speed of 50 mm/s + +Overridden if EEPROM activated. +*/ +#define MAX_JERK 20.0 +#define MAX_ZJERK 0.3 + +/** \brief Number of moves we can cache in advance. + +This number of moves can be cached in advance. If you want to cache more, increase this. Especially on +many very short moves the cache may go empty. The minimum value is 5. +*/ +#define PRINTLINE_CACHE_SIZE 16 + +/** \brief Low filled cache size. + +If the cache contains less then MOVE_CACHE_LOW segments, the time per segment is limited to LOW_TICKS_PER_MOVE clock cycles. +If a move would be shorter, the feedrate will be reduced. This should prevent buffer underflows. Set this to 0 if you +don't care about empty buffers during print. +*/ +#define MOVE_CACHE_LOW 10 +/** \brief Cycles per move, if move cache is low. + +This value must be high enough, that the buffer has time to fill up. The problem only occurs at the beginning of a print or +if you are printing many very short segments at high speed. Higher delays here allow higher values in PATH_PLANNER_CHECK_SEGMENTS. +*/ +#define LOW_TICKS_PER_MOVE 250000 + +// ########################################################################################## +// ## Extruder control ## +// ########################################################################################## + + +/* \brief Minimum temperature for extruder operation + +This is a safety value. If your extruder temperature is below this temperature, no +extruder steps are executed. This is to prevent your extruder to move unless the filament +is at least molten. After having some complains that the extruder does not work, I leave +it 0 as default. +*/ + +#define MIN_EXTRUDER_TEMP 160 + +/** \brief Enable advance algorithm. + +Without a correct adjusted advance algorithm, you get blobs at points, where acceleration changes. The +effect increases with speed and acceleration difference. Using the advance method decreases this effect. +For more informations, read the wiki. +*/ +#define USE_ADVANCE 1 + +/** \brief enables quadratic component. + +Set 1 to allow, 0 disallow a quadratic advance dependency. Linear is the dominant value, so no real need +to activate the quadratic term. Only adds lots of computations and storage usage. */ +#define ENABLE_QUADRATIC_ADVANCE 0 + + +// ########################################################################################## +// ## Communication configuration ## +// ########################################################################################## + +//// AD595 THERMOCOUPLE SUPPORT UNTESTED... USE WITH CAUTION!!!! + +/** \brief Communication speed. + +- 250000 : Fastest with error rate of 0% with 16 or 32 MHz - update wiring_serial.c in your board files. See boards/readme.txt +- 115200 : Fast, but may produce communication errors on quite regular basis, Error rate -3,5% +- 76800 : Best setting for Arduino with 16 MHz, Error rate 0,2% page 198 AVR1284 Manual. Result: Faster communication then 115200 +- 57600 : Should produce nearly no errors, on my gen 6 it's faster than 115200 because there are no errors slowing down the connection +- 38600 + + Overridden if EEPROM activated. +*/ +//#define BAUDRATE 76800 +#define BAUDRATE 115200 +//#define BAUDRATE 250000 + +/** +Some boards like Gen7 have a power on pin, to enable the ATX power supply. If this is defined, +the power will be turned on without the need to call M80 if initially started. +*/ +#define ENABLE_POWER_ON_STARTUP 1 + +/** +If you use an ATX power supply you need the power pin to work non inverting. For some special +boards you might need to make it inverting. +*/ +#define POWER_INVERTING 0 + +/** Automatically enable power when temperatures or moves/homing is used. Set only to 1 if + *you have a power unit controlled by PS_ON_PIN! */ +#define AUTOMATIC_POWERUP 0 + +/** What shall the printer do, when it receives an M112 emergency stop signal? + 0 = Disable heaters/motors, wait forever until someone presses reset. + 1 = restart by resetting the AVR controller. The USB connection will not reset if managed by a different chip! +*/ +#define KILL_METHOD 1 + +/** Appends the line number after every ok send, to acknowledge the received command. Uncomment for plain ok ACK if your host has problems with this */ +#define ACK_WITH_LINENUMBER 1 +/** Communication errors can swallow part of the ok, which tells the host software to send +the next command. Not receiving it will cause your printer to stop. Sending this string every +second, if our queue is empty should prevent this. Comment it, if you don't want this feature. */ +#define WAITING_IDENTIFIER "wait" + +/** \brief Sets time for echo debug + +You can set M111 1 which enables ECHO of commands sent. This define specifies the position, +when it will be executed. In the original FiveD software, echo is done after receiving the +command. With checksum you know, how it looks from the sending string. With this define +uncommented, you will see the last command executed. To be more specific: It is written after +execution. This helps tracking errors, because there may be 8 or more commands in the queue +and it is elsewise difficult to know, what your reprap is currently doing. +*/ +#define ECHO_ON_EXECUTE 1 + +/** \brief EEPROM storage mode + +Set the EEPROM_MODE to 0 if you always want to use the settings in this configuration file. If not, +set it to a value not stored in the first EEPROM-byte used. If you later want to overwrite your current +EEPROM settings with configuration defaults, just select an other value. On the first call to epr_init() +it will detect a mismatch of the first byte and copy default values into EEPROM. If the first byte +matches, the stored values are used to overwrite the settings. + +IMPORTANT: With mode <>0 some changes in Configuration.h are not set any more, as they are + taken from the EEPROM. +*/ +#define EEPROM_MODE 0 + + +/**************** duplicate motor driver *************** + +If you have unused extruder steppers free, you could use it to drive the second or third z motor +instead of driving them with a single stepper. The same works for the other axis if needed. +*/ + +#define FEATURE_TWO_XSTEPPER 0 +#define X2_STEP_PIN E1_STEP_PIN +#define X2_DIR_PIN E1_DIR_PIN +#define X2_ENABLE_PIN E1_ENABLE_PIN + +/* Dual x axis mean having a printer with x motors and each controls one +extruder position. In that case you can also have different resolutions for the +2