2012-06-02 20:44:17 +02:00
# ifndef CONFIGURATION_ADV_H
# define CONFIGURATION_ADV_H
2012-02-07 20:23:43 +01:00
2015-03-21 23:24:57 +01:00
# include "Conditionals.h"
2015-04-04 13:15:42 +02:00
// @section temperature
2012-02-07 20:23:43 +01:00
//===========================================================================
//=============================Thermal Settings ============================
//===========================================================================
2015-07-23 03:23:23 +02:00
# if ENABLED(BED_LIMIT_SWITCHING)
2012-02-07 20:23:43 +01:00
# define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
# endif
2012-09-17 21:17:24 +02:00
# define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control
2012-02-07 20:23:43 +01:00
2015-05-09 07:50:08 +02:00
/**
2015-05-11 07:52:01 +02:00
* Thermal Protection parameters
2015-05-09 07:50:08 +02:00
*/
2015-07-23 03:23:23 +02:00
# if ENABLED(THERMAL_PROTECTION_HOTENDS)
2015-05-11 07:52:01 +02:00
# define THERMAL_PROTECTION_PERIOD 40 // Seconds
# define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
/**
* Whenever an M104 or M109 increases the target temperature the firmware will wait for the
2015-05-18 21:48:10 +02:00
* WATCH_TEMP_PERIOD to expire , and if the temperature hasn ' t increased by WATCH_TEMP_INCREASE
2015-05-11 07:52:01 +02:00
* degrees , the machine is halted , requiring a hard reset . This test restarts with any M104 / M109 ,
2015-05-13 03:30:38 +02:00
* but only if the current temperature is far enough below the target for a reliable test .
2015-05-11 07:52:01 +02:00
*/
2015-05-11 08:27:00 +02:00
# define WATCH_TEMP_PERIOD 16 // Seconds
# define WATCH_TEMP_INCREASE 4 // Degrees Celsius
2015-05-11 07:52:01 +02:00
# endif
2015-07-23 03:23:23 +02:00
# if ENABLED(THERMAL_PROTECTION_BED)
2015-05-11 07:52:01 +02:00
# define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
# define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
# endif
2012-02-07 20:23:43 +01:00
2015-07-23 03:23:23 +02:00
# if ENABLED(PIDTEMP)
2014-02-14 12:48:24 +01:00
// this adds an experimental additional term to the heating power, proportional to the extrusion speed.
// if Kc is chosen well, the additional required power due to increased melting should be compensated.
2014-02-05 10:47:12 +01:00
# define PID_ADD_EXTRUSION_RATE
2015-07-23 03:23:23 +02:00
# if ENABLED(PID_ADD_EXTRUSION_RATE)
2014-02-14 12:48:24 +01:00
# define DEFAULT_Kc (1) //heating power=Kc*(e_speed)
2012-02-07 20:23:43 +01:00
# endif
# endif
2015-05-11 07:52:01 +02:00
/**
* Automatic Temperature :
* The hotend target temperature is calculated by all the buffered lines of gcode .
* The maximum buffered steps / sec of the extruder motor is called " se " .
* Start autotemp mode with M109 S < mintemp > B < maxtemp > F < factor >
* The target temperature is set to mintemp + factor * se [ steps / sec ] and is limited by
* mintemp and maxtemp . Turn this off by excuting M109 without F *
* Also , if the temperature is set to a value below mintemp , it will not be changed by autotemp .
* On an Ultimaker , some initial testing worked with M109 S215 B260 F1 in the start . gcode
*/
2012-04-15 19:17:33 +02:00
# define AUTOTEMP
2015-07-23 03:23:23 +02:00
# if ENABLED(AUTOTEMP)
2012-02-07 20:23:43 +01:00
# define AUTOTEMP_OLDWEIGHT 0.98
# endif
2013-10-12 15:41:23 +02:00
//Show Temperature ADC value
//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
//#define SHOW_TEMP_ADC_VALUES
2015-04-04 13:15:42 +02:00
// @section extruder
2014-02-05 10:47:12 +01:00
// extruder run-out prevention.
2012-02-07 20:23:43 +01:00
//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
2014-02-05 10:47:12 +01:00
//#define EXTRUDER_RUNOUT_PREVENT
# define EXTRUDER_RUNOUT_MINTEMP 190
2012-02-07 20:23:43 +01:00
# define EXTRUDER_RUNOUT_SECONDS 30.
# define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
# define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed
# define EXTRUDER_RUNOUT_EXTRUDE 100
2015-04-04 13:15:42 +02:00
// @section temperature
2012-02-26 16:23:47 +01:00
//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
# define TEMP_SENSOR_AD595_OFFSET 0.0
# define TEMP_SENSOR_AD595_GAIN 1.0
2012-03-11 10:44:10 +01:00
//This is for controlling a fan to cool down the stepper drivers
//it will turn on when any driver is enabled
//and turn off after the set amount of seconds from last driver being disabled again
2013-06-07 00:49:25 +02:00
# define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
# define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
# define CONTROLLERFAN_SPEED 255 // == full speed
2012-03-11 10:44:10 +01:00
2012-12-10 05:47:52 +01:00
// When first starting the main fan, run it at full speed for the
// given number of milliseconds. This gets the fan spinning reliably
2013-01-10 11:08:45 +01:00
// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
//#define FAN_KICKSTART_TIME 100
2012-12-10 05:47:52 +01:00
2015-05-18 22:31:51 +02:00
// This defines the minimal speed for the main fan, run in PWM mode
// to enable uncomment and set minimal PWM speed for reliable running (1-255)
// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
//#define FAN_MIN_PWM 50
2015-04-04 13:15:42 +02:00
// @section extruder
2013-06-07 00:49:25 +02:00
// Extruder cooling fans
// Configure fan pin outputs to automatically turn on/off when the associated
// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
2014-02-05 10:47:12 +01:00
// Multiple extruders can be assigned to the same pin in which case
2013-06-07 00:49:25 +02:00
// the fan will turn on when any selected extruder is above the threshold.
2015-01-23 23:13:06 +01:00
# define EXTRUDER_0_AUTO_FAN_PIN -1
# define EXTRUDER_1_AUTO_FAN_PIN -1
# define EXTRUDER_2_AUTO_FAN_PIN -1
# define EXTRUDER_3_AUTO_FAN_PIN -1
2013-06-07 00:49:25 +02:00
# define EXTRUDER_AUTO_FAN_TEMPERATURE 50
# define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
2012-02-07 20:23:43 +01:00
//===========================================================================
//=============================Mechanical Settings===========================
//===========================================================================
2015-04-04 13:15:42 +02:00
// @section homing
2012-02-07 20:23:43 +01:00
# define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
2015-04-04 13:15:42 +02:00
// @section extras
2012-02-07 20:23:43 +01:00
//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
2012-08-04 08:32:26 +02:00
// A single Z stepper driver is usually used to drive 2 stepper motors.
// Uncomment this define to utilize a separate stepper driver for each Z axis motor.
// Only a few motherboards support this, like RAMPS, which have dual extruder support (the 2nd, often unused, extruder driver is used
// to control the 2nd Z axis stepper motor). The pins are currently only defined for a RAMPS motherboards.
// On a RAMPS (or other 5 driver) motherboard, using this feature will limit you to using 1 extruder.
2015-03-25 13:46:29 +01:00
//#define Z_DUAL_STEPPER_DRIVERS
2015-03-24 18:06:44 +01:00
2015-07-23 03:23:23 +02:00
# if ENABLED(Z_DUAL_STEPPER_DRIVERS)
2015-03-24 18:06:44 +01:00
2015-03-31 08:24:33 +02:00
// Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
// That way the machine is capable to align the bed during home, since both Z steppers are homed.
// There is also an implementation of M666 (software endstops adjustment) to this feature.
// After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
// One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
// If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
// Play a little bit with small adjustments (0.5mm) and check the behaviour.
// The M119 (endstops report) will start reporting the Z2 Endstop as well.
2015-06-10 17:42:55 +02:00
# define Z2_STEP_PIN E2_STEP_PIN // Stepper to be used to Z2 axis.
# define Z2_DIR_PIN E2_DIR_PIN
# define Z2_ENABLE_PIN E2_ENABLE_PIN
// #define Z_DUAL_ENDSTOPS
2015-03-31 08:24:33 +02:00
2015-07-23 03:23:23 +02:00
# if ENABLED(Z_DUAL_ENDSTOPS)
2015-03-31 08:24:33 +02:00
# define Z2_MAX_PIN 36 //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
const bool Z2_MAX_ENDSTOP_INVERTING = false ;
# define DISABLE_XMAX_ENDSTOP //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
# endif
2015-03-24 18:06:44 +01:00
2015-03-31 08:24:33 +02:00
# endif // Z_DUAL_STEPPER_DRIVERS
2012-08-04 08:32:26 +02:00
2013-09-17 20:19:20 +02:00
// Same again but for Y Axis.
2013-09-17 22:49:44 +02:00
//#define Y_DUAL_STEPPER_DRIVERS
2013-09-17 20:19:20 +02:00
// Define if the two Y drives need to rotate in opposite directions
# define INVERT_Y2_VS_Y_DIR true
2014-02-05 10:47:12 +01:00
// Enable this for dual x-carriage printers.
2013-07-17 14:44:45 +02:00
// A dual x-carriage design has the advantage that the inactive extruder can be parked which
// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
// allowing faster printing speeds.
2013-07-20 15:50:30 +02:00
//#define DUAL_X_CARRIAGE
2015-07-23 03:23:23 +02:00
# if ENABLED(DUAL_X_CARRIAGE)
2015-03-20 10:50:28 +01:00
// Configuration for second X-carriage
// Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
// the second x-carriage always homes to the maximum endstop.
# define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
# define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
# define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
# define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
// However: In this mode the EXTRUDER_OFFSET_X value for the second extruder provides a software
// override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
// without modifying the firmware (through the "M218 T1 X???" command).
// Remember: you should set the second extruder x-offset to 0 in your slicer.
// Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
# define X2_ENABLE_PIN 29
# define X2_STEP_PIN 25
# define X2_DIR_PIN 23
// There are a few selectable movement modes for dual x-carriages using M605 S<mode>
// Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
// as long as it supports dual x-carriages. (M605 S0)
// Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
// that additional slicer support is not required. (M605 S1)
// Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
// actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
// once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
// This is the default power-up mode which can be later using M605.
# define DEFAULT_DUAL_X_CARRIAGE_MODE 0
// Default settings in "Auto-park Mode"
# define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
# define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
// Default x offset in duplication mode (typically set to half print bed width)
# define DEFAULT_DUPLICATION_X_OFFSET 100
2013-08-07 16:10:26 +02:00
# endif //DUAL_X_CARRIAGE
2014-02-05 10:47:12 +01:00
2015-04-04 13:15:42 +02:00
// @section homing
2012-02-07 20:23:43 +01:00
//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
2015-04-04 00:31:35 +02:00
# define X_HOME_BUMP_MM 5
# define Y_HOME_BUMP_MM 5
# define Z_HOME_BUMP_MM 2
2015-04-01 20:17:49 +02:00
# define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
2012-02-22 23:51:04 +01:00
//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
2012-02-07 20:23:43 +01:00
2015-04-22 22:34:55 +02:00
// When G28 is called, this option will make Y home before X
// #define HOME_Y_BEFORE_X
2015-04-04 13:15:42 +02:00
// @section machine
2012-02-07 20:23:43 +01:00
# define AXIS_RELATIVE_MODES {false, false, false, false}
2015-03-20 06:22:23 +01:00
2015-04-04 13:15:42 +02:00
// @section machine
2012-06-29 16:27:47 +02:00
//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
# define INVERT_X_STEP_PIN false
# define INVERT_Y_STEP_PIN false
# define INVERT_Z_STEP_PIN false
# define INVERT_E_STEP_PIN false
2015-03-20 10:50:28 +01:00
// Default stepper release if idle. Set to 0 to deactivate.
2012-02-07 20:23:43 +01:00
# define DEFAULT_STEPPER_DEACTIVE_TIME 60
# define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
# define DEFAULT_MINTRAVELFEEDRATE 0.0
2015-04-04 13:15:42 +02:00
// @section lcd
2015-07-23 03:23:23 +02:00
# if ENABLED(ULTIPANEL)
2015-03-20 10:50:28 +01:00
# define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
# define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
2014-03-12 23:13:50 +01:00
# endif
2015-04-04 13:15:42 +02:00
// @section extras
2012-04-15 19:17:33 +02:00
// minimum time in microseconds that a movement needs to take if the buffer is emptied.
# define DEFAULT_MINSEGMENTTIME 20000
2012-02-07 20:23:43 +01:00
// If defined the movements slow down when the look ahead buffer is only half full
# define SLOWDOWN
// Frequency limit
// See nophead's blog for more info
// Not working O
//#define XY_FREQUENCY_LIMIT 15
// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
// of the buffer and all stops. This should not be much greater than zero and should only be changed
// if unwanted behavior is observed on a user's machine when running at very slow speeds.
2012-04-01 16:23:40 +02:00
# define MINIMUM_PLANNER_SPEED 0.05 // (mm/sec)
2012-02-07 20:23:43 +01:00
2012-08-30 09:16:57 +02:00
// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
# define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
# define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
2014-02-05 10:47:12 +01:00
// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
2014-02-05 23:28:23 +01:00
//#define DIGIPOT_I2C
2014-02-05 10:47:12 +01:00
// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
# define DIGIPOT_I2C_NUM_CHANNELS 8
// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
# define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
2012-08-30 09:16:57 +02:00
2012-02-07 20:23:43 +01:00
//===========================================================================
//=============================Additional Features===========================
//===========================================================================
2014-02-05 23:39:45 +01:00
2015-02-22 03:17:37 +01:00
# define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
2015-03-07 10:07:40 +01:00
# define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
# define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
2015-02-20 03:42:57 +01:00
2014-03-10 21:52:33 +01:00
//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
# define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
2015-04-04 13:15:42 +02:00
// @section lcd
2015-07-23 03:23:23 +02:00
# if ENABLED(SDSUPPORT)
2015-03-31 08:24:33 +02:00
2015-08-01 01:40:50 +02:00
// Some RAMPS and other boards don't detect when an SD card is inserted. You can work
// around this by connecting a push button or single throw switch to the pin defined
// as SD_DETECT_PIN in your board's pins definitions.
// This setting should be disabled unless you are using a push button, pulling the pin to ground.
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
# define SD_DETECT_INVERTED
2015-03-31 08:24:33 +02:00
# define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
# define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
# define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
// if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
// using:
//#define MENU_ADDAUTOSTART
// Show a progress bar on HD44780 LCDs for SD printing
//#define LCD_PROGRESS_BAR
2015-07-23 03:23:23 +02:00
# if ENABLED(LCD_PROGRESS_BAR)
2015-03-31 08:24:33 +02:00
// Amount of time (ms) to show the bar
# define PROGRESS_BAR_BAR_TIME 2000
// Amount of time (ms) to show the status message
# define PROGRESS_BAR_MSG_TIME 3000
// Amount of time (ms) to retain the status message (0=forever)
# define PROGRESS_MSG_EXPIRE 0
// Enable this to show messages for MSG_TIME then hide them
//#define PROGRESS_MSG_ONCE
# endif
2015-05-18 02:36:32 +02:00
// This allows hosts to request long names for files and folders with M33
//#define LONG_FILENAME_HOST_SUPPORT
2015-07-27 00:58:33 +02:00
// This option allows you to abort SD printing when any endstop is triggered.
// This feature must be enabled with "M540 S1" or from the LCD menu.
// To have any effect, endstops must be enabled during SD printing.
// With ENDSTOPS_ONLY_FOR_HOMING you must send "M120" to enable endstops.
//#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
2015-03-31 08:24:33 +02:00
# endif // SDSUPPORT
2014-12-28 07:26:14 +01:00
2015-05-18 22:54:53 +02:00
// for dogm lcd displays you can choose some additional fonts:
2015-07-23 03:23:23 +02:00
# if ENABLED(DOGLCD)
2015-05-18 22:54:53 +02:00
// save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
// we don't have a big font for Cyrillic, Kana
//#define USE_BIG_EDIT_FONT
// If you have spare 2300Byte of progmem and want to use a
// smaller font on the Info-screen uncomment the next line.
//#define USE_SMALL_INFOFONT
# endif // DOGLCD
2015-04-04 13:15:42 +02:00
// @section more
2014-02-14 12:48:24 +01:00
// The hardware watchdog should reset the microcontroller disabling all outputs, in case the firmware gets stuck and doesn't do temperature regulation.
2012-11-06 13:20:08 +01:00
//#define USE_WATCHDOG
2012-11-06 12:06:41 +01:00
2015-07-23 03:23:23 +02:00
# if ENABLED(USE_WATCHDOG)
2012-12-06 10:36:07 +01:00
// If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
2012-11-06 13:33:00 +01:00
// The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
// However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
2012-11-06 15:33:49 +01:00
//#define WATCHDOG_RESET_MANUAL
2012-11-06 12:06:41 +01:00
# endif
2013-06-07 00:49:25 +02:00
2015-04-07 08:16:01 +02:00
// @section lcd
Add the socalled "Babystepping" feature.
It is a realtime control over the head position via the LCD menu system that works _while_ printing.
Using it, one can e.g. tune the z-position in realtime, while printing the first layer.
Also, lost steps can be manually added/removed, but thats not the prime feature.
Stuff is placed into the Tune->Babystep *
It is not possible to have realtime control via gcode sending due to the buffering, so I did not include a gcode yet. However, it could be added, but it movements will not be realtime then.
Historically, a very similar thing was implemented for the "Kaamermaker" project, while Joris was babysitting his offspring, hence the name.
say goodby to fuddling around with the z-axis.
2013-10-06 21:14:51 +02:00
// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
2014-02-14 12:48:24 +01:00
// it can e.g. be used to change z-positions in the print startup phase in real-time
Add the socalled "Babystepping" feature.
It is a realtime control over the head position via the LCD menu system that works _while_ printing.
Using it, one can e.g. tune the z-position in realtime, while printing the first layer.
Also, lost steps can be manually added/removed, but thats not the prime feature.
Stuff is placed into the Tune->Babystep *
It is not possible to have realtime control via gcode sending due to the buffering, so I did not include a gcode yet. However, it could be added, but it movements will not be realtime then.
Historically, a very similar thing was implemented for the "Kaamermaker" project, while Joris was babysitting his offspring, hence the name.
say goodby to fuddling around with the z-axis.
2013-10-06 21:14:51 +02:00
// does not respect endstops!
//#define BABYSTEPPING
2015-07-23 03:23:23 +02:00
# if ENABLED(BABYSTEPPING)
2013-10-07 09:14:04 +02:00
# define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
2015-08-05 00:39:56 +02:00
//not implemented for CoreXY and deltabots!
2013-10-07 09:14:04 +02:00
# define BABYSTEP_INVERT_Z false //true for inverse movements in Z
# define BABYSTEP_Z_MULTIPLICATOR 2 //faster z movements
Add the socalled "Babystepping" feature.
It is a realtime control over the head position via the LCD menu system that works _while_ printing.
Using it, one can e.g. tune the z-position in realtime, while printing the first layer.
Also, lost steps can be manually added/removed, but thats not the prime feature.
Stuff is placed into the Tune->Babystep *
It is not possible to have realtime control via gcode sending due to the buffering, so I did not include a gcode yet. However, it could be added, but it movements will not be realtime then.
Historically, a very similar thing was implemented for the "Kaamermaker" project, while Joris was babysitting his offspring, hence the name.
say goodby to fuddling around with the z-axis.
2013-10-06 21:14:51 +02:00
# endif
2015-04-07 08:16:01 +02:00
// @section extruder
2012-02-07 20:23:43 +01:00
// extruder advance constant (s2/mm3)
//
2014-12-28 07:26:14 +01:00
// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
2012-02-07 20:23:43 +01:00
//
2015-04-07 08:16:01 +02:00
// Hooke's law says: force = k * distance
// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
2012-02-07 20:23:43 +01:00
// so: v ^ 2 is proportional to number of steps we advance the extruder
//#define ADVANCE
2015-07-23 03:23:23 +02:00
# if ENABLED(ADVANCE)
2012-02-07 20:23:43 +01:00
# define EXTRUDER_ADVANCE_K .0
# define D_FILAMENT 2.85
# define STEPS_MM_E 836
2015-03-31 08:24:33 +02:00
# endif
2012-02-07 20:23:43 +01:00
2015-04-07 08:16:01 +02:00
// @section extras
2012-02-07 20:23:43 +01:00
// Arc interpretation settings:
# define MM_PER_ARC_SEGMENT 1
# define N_ARC_CORRECTION 25
2012-11-06 12:06:41 +01:00
const unsigned int dropsegments = 5 ; //everything with less than this number of steps will be ignored as move and joined with the next movement
2012-02-07 20:23:43 +01:00
2015-04-04 13:15:42 +02:00
// @section temperature
2013-11-17 13:29:02 +01:00
// Control heater 0 and heater 1 in parallel.
2013-11-17 17:41:30 +01:00
//#define HEATERS_PARALLEL
2013-11-17 13:29:02 +01:00
2012-02-07 20:23:43 +01:00
//===========================================================================
2015-04-27 03:44:01 +02:00
//================================= Buffers =================================
2012-02-07 20:23:43 +01:00
//===========================================================================
2015-04-04 13:15:42 +02:00
// @section hidden
2014-02-05 10:47:12 +01:00
// The number of linear motions that can be in the plan at any give time.
2014-02-14 12:48:24 +01:00
// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
2015-07-23 03:23:23 +02:00
# if ENABLED(SDSUPPORT)
2012-02-07 20:23:43 +01:00
# define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
# else
# define BLOCK_BUFFER_SIZE 16 // maximize block buffer
# endif
2013-06-07 00:49:25 +02:00
2015-04-04 13:15:42 +02:00
// @section more
2012-02-07 20:23:43 +01:00
2014-02-14 12:48:24 +01:00
//The ASCII buffer for receiving from the serial:
2012-02-07 20:23:43 +01:00
# define MAX_CMD_SIZE 96
# define BUFSIZE 4
2015-04-20 00:22:40 +02:00
// Bad Serial-connections can miss a received command by sending an 'ok'
2015-05-16 11:47:20 +02:00
// Therefore some clients abort after 30 seconds in a timeout.
// Some other clients start sending commands while receiving a 'wait'.
// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
//#define NO_TIMEOUTS 1000 // Milliseconds
2015-04-20 00:22:40 +02:00
2015-05-11 08:01:51 +02:00
// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
2015-05-16 11:47:20 +02:00
//#define ADVANCED_OK
2015-04-16 21:42:54 +02:00
2015-04-07 08:16:01 +02:00
// @section fwretract
2012-06-02 20:32:28 +02:00
2014-02-14 12:48:24 +01:00
// Firmware based and LCD controlled retract
2014-02-05 10:47:12 +01:00
// M207 and M208 can be used to define parameters for the retraction.
2012-06-02 20:32:28 +02:00
// The retraction can be called by the slicer using G10 and G11
2014-02-05 10:47:12 +01:00
// until then, intended retractions can be detected by moves that only extrude and the direction.
2012-06-02 20:32:28 +02:00
// the moves are than replaced by the firmware controlled ones.
// #define FWRETRACT //ONLY PARTIALLY TESTED
2015-07-23 03:23:23 +02:00
# if ENABLED(FWRETRACT)
2014-02-17 04:00:28 +01:00
# define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
# define RETRACT_LENGTH 3 //default retract length (positive mm)
2014-06-02 17:02:10 +02:00
# define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
2014-03-14 22:52:48 +01:00
# define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
2014-02-17 04:00:28 +01:00
# define RETRACT_ZLIFT 0 //default retract Z-lift
# define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
2014-06-02 17:02:10 +02:00
# define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
2014-03-14 22:52:48 +01:00
# define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
2014-02-17 04:00:28 +01:00
# endif
Added a feature to have filament change by gcode or display trigger.
[default off for now]
syntax: M600 X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
if enabled, after a M600, the printer will retract by E, lift by Z, move to XY, retract even more filament.
Oh, and it will display "remove filament" and beep like crazy.
You are then supposed to insert a new filament (other color, e.g.) and click the display to continue.
After having the nozzle cleaned manually, aided by the disabled e-steppers.
After clicking, the printer will then go back the whole shebang, and continue printing with a fancy new color.
2013-01-27 13:21:34 +01:00
2015-03-20 10:50:28 +01:00
// Add support for experimental filament exchange support M600; requires display
2015-07-23 03:23:23 +02:00
# if ENABLED(ULTIPANEL)
2015-03-20 10:50:28 +01:00
//#define FILAMENTCHANGEENABLE
2015-07-23 03:23:23 +02:00
# if ENABLED(FILAMENTCHANGEENABLE)
Added a feature to have filament change by gcode or display trigger.
[default off for now]
syntax: M600 X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
if enabled, after a M600, the printer will retract by E, lift by Z, move to XY, retract even more filament.
Oh, and it will display "remove filament" and beep like crazy.
You are then supposed to insert a new filament (other color, e.g.) and click the display to continue.
After having the nozzle cleaned manually, aided by the disabled e-steppers.
After clicking, the printer will then go back the whole shebang, and continue printing with a fancy new color.
2013-01-27 13:21:34 +01:00
# define FILAMENTCHANGE_XPOS 3
# define FILAMENTCHANGE_YPOS 3
# define FILAMENTCHANGE_ZADD 10
# define FILAMENTCHANGE_FIRSTRETRACT -2
# define FILAMENTCHANGE_FINALRETRACT -100
2015-04-09 14:23:34 +02:00
# define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD
# define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop
# define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop
Added a feature to have filament change by gcode or display trigger.
[default off for now]
syntax: M600 X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
if enabled, after a M600, the printer will retract by E, lift by Z, move to XY, retract even more filament.
Oh, and it will display "remove filament" and beep like crazy.
You are then supposed to insert a new filament (other color, e.g.) and click the display to continue.
After having the nozzle cleaned manually, aided by the disabled e-steppers.
After clicking, the printer will then go back the whole shebang, and continue printing with a fancy new color.
2013-01-27 13:21:34 +01:00
# endif
# endif
2013-10-12 13:24:55 +02:00
2015-02-23 17:45:29 +01:00
/******************************************************************************\
* enable this section if you have TMC26X motor drivers .
* you need to import the TMC26XStepper library into the arduino IDE for this
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2015-04-07 08:16:01 +02:00
// @section tmc
2015-02-27 12:43:23 +01:00
//#define HAVE_TMCDRIVER
2015-07-23 03:23:23 +02:00
# if ENABLED(HAVE_TMCDRIVER)
2015-02-23 17:45:29 +01:00
2015-04-07 08:16:01 +02:00
// #define X_IS_TMC
# define X_MAX_CURRENT 1000 //in mA
# define X_SENSE_RESISTOR 91 //in mOhms
# define X_MICROSTEPS 16 //number of microsteps
// #define X2_IS_TMC
# define X2_MAX_CURRENT 1000 //in mA
# define X2_SENSE_RESISTOR 91 //in mOhms
# define X2_MICROSTEPS 16 //number of microsteps
// #define Y_IS_TMC
# define Y_MAX_CURRENT 1000 //in mA
# define Y_SENSE_RESISTOR 91 //in mOhms
# define Y_MICROSTEPS 16 //number of microsteps
// #define Y2_IS_TMC
# define Y2_MAX_CURRENT 1000 //in mA
# define Y2_SENSE_RESISTOR 91 //in mOhms
# define Y2_MICROSTEPS 16 //number of microsteps
// #define Z_IS_TMC
# define Z_MAX_CURRENT 1000 //in mA
# define Z_SENSE_RESISTOR 91 //in mOhms
# define Z_MICROSTEPS 16 //number of microsteps
// #define Z2_IS_TMC
# define Z2_MAX_CURRENT 1000 //in mA
# define Z2_SENSE_RESISTOR 91 //in mOhms
# define Z2_MICROSTEPS 16 //number of microsteps
// #define E0_IS_TMC
# define E0_MAX_CURRENT 1000 //in mA
# define E0_SENSE_RESISTOR 91 //in mOhms
# define E0_MICROSTEPS 16 //number of microsteps
// #define E1_IS_TMC
# define E1_MAX_CURRENT 1000 //in mA
# define E1_SENSE_RESISTOR 91 //in mOhms
# define E1_MICROSTEPS 16 //number of microsteps
// #define E2_IS_TMC
# define E2_MAX_CURRENT 1000 //in mA
# define E2_SENSE_RESISTOR 91 //in mOhms
# define E2_MICROSTEPS 16 //number of microsteps
// #define E3_IS_TMC
# define E3_MAX_CURRENT 1000 //in mA
# define E3_SENSE_RESISTOR 91 //in mOhms
# define E3_MICROSTEPS 16 //number of microsteps
2015-02-23 17:45:29 +01:00
# endif
2015-02-27 12:43:23 +01:00
/******************************************************************************\
* enable this section if you have L6470 motor drivers .
* you need to import the L6470 library into the arduino IDE for this
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2015-04-07 08:16:01 +02:00
// @section l6470
2015-02-27 12:43:23 +01:00
//#define HAVE_L6470DRIVER
2015-07-23 03:23:23 +02:00
# if ENABLED(HAVE_L6470DRIVER)
2015-02-27 12:43:23 +01:00
2015-04-07 08:16:01 +02:00
// #define X_IS_L6470
# define X_MICROSTEPS 16 //number of microsteps
# define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define X2_IS_L6470
# define X2_MICROSTEPS 16 //number of microsteps
# define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define Y_IS_L6470
# define Y_MICROSTEPS 16 //number of microsteps
# define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define Y2_IS_L6470
# define Y2_MICROSTEPS 16 //number of microsteps
# define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define Z_IS_L6470
# define Z_MICROSTEPS 16 //number of microsteps
# define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define Z2_IS_L6470
# define Z2_MICROSTEPS 16 //number of microsteps
# define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define E0_IS_L6470
# define E0_MICROSTEPS 16 //number of microsteps
# define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define E1_IS_L6470
# define E1_MICROSTEPS 16 //number of microsteps
# define E1_MICROSTEPS 16 //number of microsteps
# define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define E2_IS_L6470
# define E2_MICROSTEPS 16 //number of microsteps
# define E2_MICROSTEPS 16 //number of microsteps
# define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
// #define E3_IS_L6470
# define E3_MICROSTEPS 16 //number of microsteps
# define E3_MICROSTEPS 16 //number of microsteps
# define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
# define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
# define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
2015-02-27 12:43:23 +01:00
# endif
2015-03-21 23:24:57 +01:00
# include "Conditionals.h"
# include "SanityCheck.h"
2015-03-20 06:22:23 +01:00
# endif //CONFIGURATION_ADV_H