diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 5231ce097170..6ad7bc67eed7 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -75,7 +75,7 @@ // coordinated. Optional additional axes I(, J(, K)) are uncoordinated // (asynchronous). Disable for coordinated movement of all axes. // -//#define ASYNC_SECONDARY_AXES +#define ASYNC_SECONDARY_AXES //=========================================================================== //=========================== FOAMCUTTER_XYUV ============================== @@ -88,7 +88,7 @@ // @section info // Author info of this build printed to the host during boot and M115 -#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes. +#define STRING_CONFIG_H_AUTHOR "(DerAndere)" // Who made the changes. //#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) /** @@ -103,7 +103,7 @@ */ // Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** -#define SHOW_BOOTSCREEN +//#define SHOW_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup. //#define SHOW_CUSTOM_BOOTSCREEN @@ -138,14 +138,14 @@ * * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] */ -#define BAUDRATE 250000 +#define BAUDRATE 115200 // Enable the Bluetooth serial interface on AT90USB devices //#define BLUETOOTH // Choose the name from boards.h that matches your setup #ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_RAMPS_14_EFB + #define MOTHERBOARD BOARD_DERANDERE_PB_1 #endif // Name displayed in the LCD "Ready" message and Info menu @@ -163,11 +163,11 @@ * respective values of DEFAULT_AXIS_STEPS_PER_UNIT, DEFAULT_MAX_FEEDRATE, * DEFAULT_MAX_ACCELERATION, AXIS_RELATIVE_MODES, MICROSTEP_MODES and * MANUAL_FEEDRATE. - * + * * See https://github.com/DerAndere1/Marlin/wiki * :[3, 4, 5, 6] */ -#define NON_E_AXES 3 +#define NON_E_AXES 4 /** * Axis codes for additional axes: @@ -202,7 +202,7 @@ #define EXTRUDERS 1 // Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc. -#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75 +#define DEFAULT_NOMINAL_FILAMENT_DIA 1.00 // For Cyclops or any "multi-extruder" that shares a single nozzle. //#define SINGLENOZZLE @@ -292,8 +292,8 @@ #elif ENABLED(MAGNETIC_PARKING_EXTRUDER) - #define MPE_FAST_SPEED 9000 // (mm/min) Speed for travel before last distance point - #define MPE_SLOW_SPEED 4500 // (mm/min) Speed for last distance travel to park and couple + #define MPE_FAST_SPEED 9000 // (mm/m) Speed for travel before last distance point + #define MPE_SLOW_SPEED 4500 // (mm/m) Speed for last distance travel to park and couple #define MPE_TRAVEL_DISTANCE 10 // (mm) Last distance point #define MPE_COMPENSATION 0 // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling @@ -341,8 +341,8 @@ #if ENABLED(PRIME_BEFORE_REMOVE) #define SWITCHING_TOOLHEAD_PRIME_MM 20 // (mm) Extruder prime length #define SWITCHING_TOOLHEAD_RETRACT_MM 10 // (mm) Retract after priming length - #define SWITCHING_TOOLHEAD_PRIME_FEEDRATE 300 // (mm/min) Extruder prime feedrate - #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400 // (mm/min) Extruder retract feedrate + #define SWITCHING_TOOLHEAD_PRIME_FEEDRATE 300 // (mm/m) Extruder prime feedrate + #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400 // (mm/m) Extruder retract feedrate #endif #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD) #define SWITCHING_TOOLHEAD_Z_HOP 2 // (mm) Z raise for switching @@ -387,10 +387,10 @@ //#define PSU_NAME "Power Supply" #if ENABLED(PSU_CONTROL) - #define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box + #define PSU_ACTIVE_HIGH false // Set 'false' for ATX, 'true' for X-Box //#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80 - //#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power + //#define PSU_POWERUP_DELAY 100 // (ms) Delay for the PSU to warm up to full power //#define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin #if ENABLED(AUTO_POWER_CONTROL) @@ -437,7 +437,7 @@ * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) - * 10 : 100k RS thermistor 198-961 (4.7k pullup) AC silicone mats and most Wanhao i3 machines) (4.7k pullup + * 10 : 100k RS thermistor 198-961 (4.7k pullup) AC silicone mats and most Wanhao i3 machines) (4.7k pullup) * 11 : 100k beta 3950 1% thermistor (Used in Keenovo) * 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) * 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" @@ -473,7 +473,7 @@ * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below. */ -#define TEMP_SENSOR_0 1 +#define TEMP_SENSOR_0 999 #define TEMP_SENSOR_1 0 #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_3 0 @@ -494,11 +494,11 @@ //#define TEMP_SENSOR_1_AS_REDUNDANT #define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10 -#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109 +#define TEMP_RESIDENCY_TIME 6 // (seconds) Time to wait for hotend to "settle" in M109 #define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer #define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target -#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190 +#define TEMP_BED_RESIDENCY_TIME 6 // (seconds) Time to wait for bed to "settle" in M190 #define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer #define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target @@ -517,7 +517,7 @@ // Above this temperature the heater will be switched off. // This can protect components from overheating, but NOT from shorts and failures. // (Use MINTEMP for thermistor short/failure protection.) -#define HEATER_0_MAXTEMP 275 +#define HEATER_0_MAXTEMP 110 #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define HEATER_3_MAXTEMP 275 @@ -525,7 +525,7 @@ #define HEATER_5_MAXTEMP 275 #define HEATER_6_MAXTEMP 275 #define HEATER_7_MAXTEMP 275 -#define BED_MAXTEMP 150 +#define BED_MAXTEMP 110 //=========================================================================== //============================= PID Settings ================================ @@ -533,7 +533,7 @@ // PID Tuning Guide here: https://reprap.org/wiki/PID_Tuning // Comment the following line to disable PID and enable bang-bang. -#define PIDTEMP +//#define PIDTEMP #define BANG_MAX 255 // Limits current to nozzle while in bang-bang mode; 255=full current #define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current #define PID_K1 0.95 // Smoothing factor within any PID loop @@ -547,9 +547,9 @@ // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it // Ultimaker - #define DEFAULT_Kp 22.2 - #define DEFAULT_Ki 1.08 - #define DEFAULT_Kd 114 + #define DEFAULT_Kp 21.0 + #define DEFAULT_Ki 1.25 + #define DEFAULT_Kd 86.0 // MakerGear //#define DEFAULT_Kp 7.0 @@ -598,9 +598,9 @@ //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) - #define DEFAULT_bedKp 10.00 - #define DEFAULT_bedKi .023 - #define DEFAULT_bedKd 305.4 + #define DEFAULT_bedKp 295.00 + #define DEFAULT_bedKi 35.65 + #define DEFAULT_bedKd 610.21 //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) //from pidautotune @@ -628,15 +628,15 @@ * * *** IT IS HIGHLY RECOMMENDED TO LEAVE THIS OPTION ENABLED! *** */ -#define PREVENT_COLD_EXTRUSION -#define EXTRUDE_MINTEMP 170 +//#define PREVENT_COLD_EXTRUSION +#define EXTRUDE_MINTEMP 5 /** * Prevent a single extrusion longer than EXTRUDE_MAXLENGTH. * Note: For Bowden Extruders make this large enough to allow load/unload. */ -#define PREVENT_LENGTHY_EXTRUDE -#define EXTRUDE_MAXLENGTH 200 +//#define PREVENT_LENGTHY_EXTRUDE +//#define EXTRUDE_MAXLENGTH 200 //=========================================================================== //======================== Thermal Runaway Protection ======================= @@ -655,9 +655,9 @@ * details can be tuned in Configuration_adv.h */ -#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders -#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed -#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber +//#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders +//#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +//#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= @@ -735,11 +735,11 @@ #endif // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup). -#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define I_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define J_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. +#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. +#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. +#define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. +#define I_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. +#define J_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define K_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. #define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. #define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. @@ -832,13 +832,13 @@ * X, Y, Z, [I ,[J ,[K ,]]] E0 [, E1[, E2...]] */ #if NON_E_AXES == 6 - #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 4000, 4000, 4000, 500} + #define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 400, 400, 400, 400, 500} #elif NON_E_AXES == 5 - #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 4000, 4000, 500} + #define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 400, 400, 400, 500} #elif NON_E_AXES == 4 - #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 4000, 500} + #define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 400, 400, 500} #else - #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500} + #define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 400, 500} #endif /** * Default Max Feed Rate (mm/s) @@ -846,13 +846,13 @@ * X, Y, Z, [I ,[J ,[K ,]]] E0 [, E1[, E2...]] */ #if NON_E_AXES == 6 - #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 5, 5, 5, 25 } + #define DEFAULT_MAX_FEEDRATE { 400, 400, 8, 8, 8, 8, 25 } #elif NON_E_AXES == 5 - #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 5, 5, 25 } + #define DEFAULT_MAX_FEEDRATE { 400, 400, 8, 8, 8, 25 } #elif NON_E_AXES == 4 - #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 5, 25 } + #define DEFAULT_MAX_FEEDRATE { 400, 400, 8, 8, 25 } #else - #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } + #define DEFAULT_MAX_FEEDRATE { 400, 400, 8, 25 } #endif //#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 @@ -875,13 +875,13 @@ * X, Y, Z, [I ,[J ,[K ,]]] E0 [, E1[, E2...]] */ #if NON_E_AXES == 6 - #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 100, 100, 100, 10000 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 100, 100, 100, 10000 } #elif NON_E_AXES == 5 - #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 100, 100, 10000 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 100, 100, 10000 } #elif NON_E_AXES == 4 - #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 100, 10000 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 100, 10000 } #else - #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } #endif //#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 @@ -905,9 +905,9 @@ * M204 R Retract Acceleration * M204 T Travel Acceleration */ -#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves -#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts -#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves +#define DEFAULT_ACCELERATION 400 // X, Y, Z and E acceleration for printing moves +#define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts +#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves /** * Default Jerk limits (mm/s) @@ -924,12 +924,12 @@ #define DEFAULT_ZJERK 0.3 #if NON_E_AXES >= 4 #define DEFAULT_IJERK 0.3 - #endif - #if NON_E_AXES >= 5 - #define DEFAULT_JJERK 0.3 - #endif - #if NON_E_AXES >= 6 - #define DEFAULT_KJERK 0.3 + #if NON_E_AXES >= 5 + #define DEFAULT_JJERK 0.3 + #if NON_E_AXES >= 6 + #define DEFAULT_KJERK 0.3 + #endif + #endif #endif //#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves @@ -958,7 +958,7 @@ * https://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html */ #if DISABLED(CLASSIC_JERK) - #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge + #define JUNCTION_DEVIATION_MM 0.010 // (mm) Distance from real junction edge #define JD_HANDLE_SMALL_SEGMENTS // Use curvature estimation instead of just the junction angle // for small segments (< 1mm) with large junction angles (> 135°). #endif @@ -1133,19 +1133,19 @@ * | [-] | * O-- FRONT --+ */ -#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } // Most probes should stay away from the edges of the bed, but // with NOZZLE_AS_PROBE this can be negative for a wider probing area. #define PROBING_MARGIN 10 -// X and Y axis travel speed (mm/min) between probes -#define XY_PROBE_SPEED (133*60) +// X and Y axis travel speed (mm/m) between probes +#define XY_PROBE_SPEED 6000 -// Feedrate (mm/min) for the first approach when double-probing (MULTIPLE_PROBING == 2) +// Feedrate (mm/m) for the first approach when double-probing (MULTIPLE_PROBING == 2) #define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z -// Feedrate (mm/min) for the "accurate" probe of each point +// Feedrate (mm/m) for the "accurate" probe of each point #define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2) /** @@ -1216,12 +1216,12 @@ #define Z_ENABLE_ON 0 #if NON_E_AXES >= 4 #define I_ENABLE_ON 0 -#endif -#if NON_E_AXES >= 5 - #define J_ENABLE_ON 0 -#endif -#if NON_E_AXES >= 6 - #define K_ENABLE_ON 0 + #if NON_E_AXES >= 5 + #define J_ENABLE_ON 0 + #if NON_E_AXES >= 6 + #define K_ENABLE_ON 0 + #endif + #endif #endif #define E_ENABLE_ON 0 // For all extruders @@ -1232,12 +1232,12 @@ #define DISABLE_Z false #if NON_E_AXES >= 4 #define DISABLE_I false -#endif -#if NON_E_AXES >= 5 - #define DISABLE_J false -#endif -#if NON_E_AXES >= 6 - #define DISABLE_K false + #if NON_E_AXES >= 5 + #define DISABLE_J false + #if NON_E_AXES >= 6 + #define DISABLE_K false + #endif + #endif #endif // Turn off the display blinking that warns about possible accuracy reduction @@ -1252,18 +1252,17 @@ // Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way. #define INVERT_X_DIR false -#define INVERT_Y_DIR true -#define INVERT_Z_DIR false +#define INVERT_Y_DIR false +#define INVERT_Z_DIR true #if NON_E_AXES >= 4 #define INVERT_I_DIR false + #if NON_E_AXES >= 5 + #define INVERT_J_DIR false + #if NON_E_AXES >= 6 + #define INVERT_K_DIR false + #endif + #endif #endif -#if NON_E_AXES >= 5 - #define INVERT_J_DIR false -#endif -#if NON_E_AXES >= 6 - #define INVERT_K_DIR false -#endif - // @section extruder // For direct drive extruder v9 set to true, for geared extruder set to false. @@ -1294,38 +1293,38 @@ #define Z_HOME_DIR -1 #if NON_E_AXES >= 4 #define I_HOME_DIR -1 -#endif -#if NON_E_AXES >= 5 - #define J_HOME_DIR -1 -#endif -#if NON_E_AXES >= 6 - #define K_HOME_DIR -1 + #if NON_E_AXES >= 5 + #define J_HOME_DIR -1 + #if NON_E_AXES >= 6 + #define K_HOME_DIR -1 + #endif + #endif #endif // @section machine // The size of the print bed -#define X_BED_SIZE 200 -#define Y_BED_SIZE 200 +#define X_BED_SIZE 220 +#define Y_BED_SIZE 220 // Travel limits (mm) after homing, corresponding to endstop positions. -#define X_MIN_POS 0 -#define Y_MIN_POS 0 +#define X_MIN_POS -33 +#define Y_MIN_POS -10 #define Z_MIN_POS 0 #define X_MAX_POS X_BED_SIZE #define Y_MAX_POS Y_BED_SIZE -#define Z_MAX_POS 200 +#define Z_MAX_POS 240 #if NON_E_AXES >= 4 #define I_MIN_POS 0 - #define I_MAX_POS 50 -#endif -#if NON_E_AXES >= 5 - #define J_MIN_POS 0 - #define J_MAX_POS 50 -#endif -#if NON_E_AXES >= 6 - #define K_MIN_POS 0 - #define K_MAX_POS 50 + #define I_MAX_POS 70 + #if NON_E_AXES >= 5 + #define J_MIN_POS 0 + #define J_MAX_POS 70 + #if NON_E_AXES >= 6 + #define K_MIN_POS 0 + #define K_MAX_POS 70 + #endif + #endif #endif /** @@ -1372,11 +1371,10 @@ */ //#define FILAMENT_RUNOUT_SENSOR #if ENABLED(FILAMENT_RUNOUT_SENSOR) - #define FIL_RUNOUT_ENABLED_DEFAULT true // Enable the sensor on startup. Override with M412 followed by M500. - #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. - #define FIL_RUNOUT_STATE LOW // Pin state indicating that filament is NOT present. - #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins. - //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins. + #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. + #define FIL_RUNOUT_STATE LOW // Pin state indicating that filament is NOT present. + #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins. + //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins. // Set one or more commands to execute on filament runout. // (After 'M412 H' Marlin will ask the host to handle the process.) @@ -1596,17 +1594,17 @@ #define Z_SAFE_HOMING_Y_POINT Y_CENTER // Y point for Z homing #endif -// Homing speeds (mm/min) -#define HOMING_FEEDRATE_XY (50*60) +// Homing speeds (mm/m) +#define HOMING_FEEDRATE_XY (100*60) #define HOMING_FEEDRATE_Z (4*60) #if NON_E_AXES >= 4 #define HOMING_FEEDRATE_I (4*60) -#endif -#if NON_E_AXES >= 5 + #if NON_E_AXES >= 5 #define HOMING_FEEDRATE_J (4*60) -#endif -#if NON_E_AXES >= 6 - #define HOMING_FEEDRATE_K (4*60) + #if NON_E_AXES >= 6 + #define HOMING_FEEDRATE_K (4*60) + #endif + #endif #endif // Validate that endstops are triggered on homing moves @@ -1684,9 +1682,9 @@ * M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes) * M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.) */ -#define EEPROM_SETTINGS // Persistent storage with M500 and M501 +//#define EEPROM_SETTINGS // Persistent storage with M500 and M501 //#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release! -#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM. +//#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM. #define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load #if ENABLED(EEPROM_SETTINGS) //#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors. @@ -1698,9 +1696,9 @@ // When enabled Marlin will send a busy status message to the host // every couple of seconds when it can't accept commands. // -#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages -#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113. -#define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating +//#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages +//#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113. +//#define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating // // G20/G21 Inch mode support @@ -1716,13 +1714,13 @@ // Preheat Constants #define PREHEAT_1_LABEL "PLA" -#define PREHEAT_1_TEMP_HOTEND 180 -#define PREHEAT_1_TEMP_BED 70 +#define PREHEAT_1_TEMP_HOTEND 100 +#define PREHEAT_1_TEMP_BED 100 #define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255 #define PREHEAT_2_LABEL "ABS" -#define PREHEAT_2_TEMP_HOTEND 240 -#define PREHEAT_2_TEMP_BED 110 +#define PREHEAT_2_TEMP_HOTEND 100 +#define PREHEAT_2_TEMP_BED 100 #define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255 /** @@ -1873,7 +1871,7 @@ #define PASSWORD_LENGTH 4 // (#) Number of digits (1-9). 3 or 4 is recommended #define PASSWORD_ON_STARTUP #define PASSWORD_UNLOCK_GCODE // Unlock with the M511 P command. Disable to prevent brute-force attack. - #define PASSWORD_CHANGE_GCODE // Change the password with M512 P S. + #define PASSWORD_CHANGE_GCODE // Change the password with M512 P N. //#define PASSWORD_ON_SD_PRINT_MENU // This does not prevent gcodes from running //#define PASSWORD_AFTER_SD_PRINT_END //#define PASSWORD_AFTER_SD_PRINT_ABORT @@ -1936,7 +1934,7 @@ * you must uncomment the following option or it won't work. * */ -#define SDSUPPORT +//#define SDSUPPORT /** * SD CARD: SPI SPEED @@ -1993,7 +1991,7 @@ // // Set this option if CLOCKWISE causes values to DECREASE // -#define REVERSE_ENCODER_DIRECTION +//#define REVERSE_ENCODER_DIRECTION // // This option reverses the encoder direction for navigating LCD menus. @@ -2481,10 +2479,6 @@ // @section extras -// Set number of user-controlled fans. Disable to use all board-defined fans. -// :[1,2,3,4,5,6,7,8] -//#define NUM_M106_FANS 1 - // Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino //#define FAST_PWM_FAN @@ -2565,7 +2559,7 @@ #define NEOPIXEL_PIN 4 // LED driving pin //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE //#define NEOPIXEL2_PIN 5 - //#define NEOPIXEL2_INSERIES // Default behavior is NeoPixel 2 in parallel + #define NEOPIXEL2_INSERIES false // The default behaviour is 'false' with neopixel2 in parallel #define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used #define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once. #define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 86dad5d5944c..b5d77aa26fbb 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -50,7 +50,7 @@ * * Set this value to 0 to fail on the first error to occur. */ -#define THERMOCOUPLE_MAX_ERRORS 15 +//#define THERMOCOUPLE_MAX_ERRORS 15 // // Custom Thermistor 1000 parameters @@ -287,7 +287,7 @@ * Enable Autotemp Mode with M104/M109 F S B. * Disable by sending M104/M109 with no F parameter (or F0 with AUTOTEMP_PROPORTIONAL). */ -#define AUTOTEMP +//#define AUTOTEMP #if ENABLED(AUTOTEMP) #define AUTOTEMP_OLDWEIGHT 0.98 // Turn on AUTOTEMP on M104/M109 by default using proportions set here @@ -339,7 +339,7 @@ #if ENABLED(EXTRUDER_RUNOUT_PREVENT) #define EXTRUDER_RUNOUT_MINTEMP 190 #define EXTRUDER_RUNOUT_SECONDS 30 - #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/min) + #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m) #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm) #endif @@ -832,12 +832,12 @@ #define INVERT_Z_STEP_PIN false #if NON_E_AXES >= 4 #define INVERT_I_STEP_PIN false -#endif #if NON_E_AXES >= 5 - #define INVERT_J_STEP_PIN false -#endif -#if NON_E_AXES >= 6 - #define INVERT_K_STEP_PIN false + #define INVERT_J_STEP_PIN false + #if NON_E_AXES >= 6 + #define INVERT_K_STEP_PIN false + #endif + #endif #endif #define INVERT_E_STEP_PIN false @@ -852,12 +852,12 @@ #define DISABLE_INACTIVE_Z true // Set 'false' if the nozzle could fall onto your printed part! #if NON_E_AXES >= 4 #define DISABLE_INACTIVE_I true -#endif -#if NON_E_AXES >= 5 - #define DISABLE_INACTIVE_J true -#endif -#if NON_E_AXES >= 6 - #define DISABLE_INACTIVE_K true + #if NON_E_AXES >= 5 + #define DISABLE_INACTIVE_J true + #if NON_E_AXES >= 6 + #define DISABLE_INACTIVE_K true + #endif + #endif #endif #define DISABLE_INACTIVE_E true @@ -866,13 +866,13 @@ //#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated +// Minimum time that a segment needs to take as the buffer gets emptied +#define DEFAULT_MINSEGMENTTIME 20000 // (µs) Set with M205 B. + // Default Minimum Feedrates for printing and travel moves #define DEFAULT_MINIMUMFEEDRATE 0.0 // (mm/s) Minimum feedrate. Set with M205 S. #define DEFAULT_MINTRAVELFEEDRATE 0.0 // (mm/s) Minimum travel feedrate. Set with M205 T. -// Minimum time that a segment needs to take as the buffer gets emptied -#define DEFAULT_MINSEGMENTTIME 20000 // (µs) Set with M205 B. - // Slow down the machine if the lookahead buffer is (by default) half full. // Increase the slowdown divisor for larger buffer sizes. #define SLOWDOWN @@ -932,7 +932,7 @@ // increments while checking for the contact to be broken. #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm) #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm) - #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/min) + #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m) #endif #endif #endif @@ -982,14 +982,14 @@ #if NON_E_AXES >= 4 #define CALIBRATION_MEASURE_IMIN #define CALIBRATION_MEASURE_IMAX - #endif - #if NON_E_AXES >= 5 - #define CALIBRATION_MEASURE_JMIN - #define CALIBRATION_MEASURE_JMAX - #endif - #if NON_E_AXES >= 6 - #define CALIBRATION_MEASURE_KMIN - #define CALIBRATION_MEASURE_KMAX + #if NON_E_AXES >= 5 + #define CALIBRATION_MEASURE_JMIN + #define CALIBRATION_MEASURE_JMAX + #if NON_E_AXES >= 6 + #define CALIBRATION_MEASURE_KMIN + #define CALIBRATION_MEASURE_KMAX + #endif + #endif #endif // Probing at the exact top center only works if the center is flat. If @@ -1109,13 +1109,13 @@ #if EITHER(ULTIPANEL, EXTENSIBLE_UI) #if NON_E_AXES == 6 - #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 4*60, 4*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, I, J, K, E from panel + #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 4*60, 4*60, 4*60, 2*60 } // (mm/m) Feedrates for manual moves along X, Y, Z, I, J, K, E from panel #elif NON_E_AXES == 5 - #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 4*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, I, J, E from panel + #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 4*60, 4*60, 2*60 } // (mm/m) Feedrates for manual moves along X, Y, Z, I, J, E from panel #elif NON_E_AXES == 4 - #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, I, E from panel + #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 4*60, 2*60 } // (mm/m) Feedrates for manual moves along X, Y, Z, I, E from panel #else - #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, E from panel + #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 } // (mm/m) Feedrates for manual moves along X, Y, Z, E from panel #endif #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (< 0.1mm) #if ENABLED(ULTIPANEL) @@ -1218,7 +1218,15 @@ #define SD_PROCEDURE_DEPTH 1 // Increase if you need more nested M32 calls #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished - #define SD_FINISHED_RELEASECOMMAND "M84" // Use "M84XYE" to keep Z enabled so your bed stays in place + #if NON_E_AXES == 6 + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z I J K E" // Use "M84XYIJKE" to keep Z enabled so your bed stays in place + #elif NON_E_AXES == 5 + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z I J E" // Use "M84XYIJE" to keep Z enabled so your bed stays in place + #elif NON_E_AXES == 4 + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z I E" // Use "M84XYIE" to keep Z enabled so your bed stays in place + #else + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // Use "M84XYE" to keep Z enabled so your bed stays in place + #endif // Reverse SD sort to show "more recent" files first, according to the card's FAT. // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended. @@ -1855,6 +1863,7 @@ // Support for G81 (drilling), G82 (spot drilling) G83 (peck drilling) //#define DRILLING_CANNED_CYCLES + /** * Direct Stepping * @@ -2079,13 +2088,13 @@ // Load / Unload #define TOOLCHANGE_FS_LENGTH 12 // (mm) Load / Unload length #define TOOLCHANGE_FS_EXTRA_RESUME_LENGTH 0 // (mm) Extra length for better restart, fine tune by LCD/Gcode) - #define TOOLCHANGE_FS_RETRACT_SPEED (50*60) // (mm/min) (Unloading) - #define TOOLCHANGE_FS_UNRETRACT_SPEED (25*60) // (mm/min) (On SINGLENOZZLE or Bowden loading must be slowed down) + #define TOOLCHANGE_FS_RETRACT_SPEED (50*60) // (mm/m) (Unloading) + #define TOOLCHANGE_FS_UNRETRACT_SPEED (25*60) // (mm/m) (On SINGLENOZZLE or Bowden loading must be slowed down) // Longer prime to clean out a SINGLENOZZLE #define TOOLCHANGE_FS_EXTRA_PRIME 0 // (mm) Extra priming length - #define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/min) Extra priming feedrate - #define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm/min) Retract before cooling for less stringing, better wipe, etc. + #define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/m) Extra priming feedrate + #define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm/m) Retract before cooling for less stringing, better wipe, etc. // Cool after prime to reduce stringing #define TOOLCHANGE_FS_FAN -1 // Fan index or -1 to skip @@ -2121,7 +2130,7 @@ //#define TOOLCHANGE_PARK #if ENABLED(TOOLCHANGE_PARK) #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 } - #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/min) + #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m) //#define TOOLCHANGE_PARK_X_ONLY // X axis only move //#define TOOLCHANGE_PARK_Y_ONLY // Y axis only move #endif @@ -2246,23 +2255,23 @@ #define I_SENSE_RESISTOR 91 #define I_MICROSTEPS 16 #endif -#endif -#if NON_E_AXES >= 5 - #if AXIS_DRIVER_TYPE_J(TMC26X) - #define J_MAX_CURRENT 1000 - #define J_SENSE_RESISTOR 91 - #define J_MICROSTEPS 16 - #endif -#endif + #if NON_E_AXES >= 5 + #if AXIS_DRIVER_TYPE_J(TMC26X) + #define J_MAX_CURRENT 1000 + #define J_SENSE_RESISTOR 91 + #define J_MICROSTEPS 16 + #endif -#if NON_E_AXES >= 6 - #if AXIS_DRIVER_TYPE_K(TMC26X) - #define K_MAX_CURRENT 1000 - #define K_SENSE_RESISTOR 91 - #define K_MICROSTEPS 16 - #endif -#endif + #if NON_E_AXES >= 6 + #if AXIS_DRIVER_TYPE_K(TMC26X) + #define K_MAX_CURRENT 1000 + #define K_SENSE_RESISTOR 91 + #define K_MICROSTEPS 16 + #endif + #endif // NON_E_AXES >= 6 + #endif // NON_E_AXES >= 5 +#endif // NON_E_AXES >= 4 #if AXIS_DRIVER_TYPE_E0(TMC26X) #define E0_MAX_CURRENT 1000 @@ -2409,27 +2418,27 @@ #define I_RSENSE 0.11 #define I_CHAIN_POS -1 #endif - #endif - #if NON_E_AXES >= 5 - #if AXIS_IS_TMC(J) - #define J_CURRENT 800 - #define J_CURRENT_HOME J_CURRENT - #define J_MICROSTEPS 16 - #define J_RSENSE 0.11 - #define J_CHAIN_POS -1 - #endif - #endif + #if NON_E_AXES >= 5 + #if AXIS_IS_TMC(J) + #define J_CURRENT 800 + #define J_CURRENT_HOME J_CURRENT + #define J_MICROSTEPS 16 + #define J_RSENSE 0.11 + #define J_CHAIN_POS -1 + #endif - #if NON_E_AXES >= 6 - #if AXIS_IS_TMC(K) - #define K_CURRENT 800 - #define K_CURRENT_HOME K_CURRENT - #define K_MICROSTEPS 16 - #define K_RSENSE 0.11 - #define K_CHAIN_POS -1 - #endif - #endif + #if NON_E_AXES >= 6 + #if AXIS_IS_TMC(K) + #define K_CURRENT 800 + #define K_CURRENT_HOME K_CURRENT + #define K_MICROSTEPS 16 + #define K_RSENSE 0.11 + #define K_CHAIN_POS -1 + #endif + #endif // NON_E_AXES >= 6 + #endif // NON_E_AXES >= 5 + #endif // NON_E_AXES >= 4 #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 @@ -2542,12 +2551,12 @@ #define Z4_SLAVE_ADDRESS 0 #if NON_E_AXES >= 4 #define I_SLAVE_ADDRESS 0 - #endif - #if NON_E_AXES >= 5 - #define J_SLAVE_ADDRESS 0 - #endif - #if NON_E_AXES >= 6 - #define K_SLAVE_ADDRESS 0 + #if NON_E_AXES >= 5 + #define J_SLAVE_ADDRESS 0 + #if NON_E_AXES >= 6 + #define K_SLAVE_ADDRESS 0 + #endif + #endif #endif #define E0_SLAVE_ADDRESS 0 #define E1_SLAVE_ADDRESS 0 @@ -2575,12 +2584,12 @@ #define STEALTHCHOP_Z #if NON_E_AXES >= 4 #define STEALTHCHOP_I - #endif - #if NON_E_AXES >= 5 - #define STEALTHCHOP_J - #endif - #if NON_E_AXES >= 6 - #define STEALTHCHOP_K + #if NON_E_AXES >= 5 + #define STEALTHCHOP_J + #if NON_E_AXES >= 6 + #define STEALTHCHOP_K + #endif + #endif #endif #define STEALTHCHOP_E @@ -2639,12 +2648,12 @@ #define Z4_HYBRID_THRESHOLD 3 #if NON_E_AXES >= 4 #define I_HYBRID_THRESHOLD 3 - #endif - #if NON_E_AXES >= 5 - #define J_HYBRID_THRESHOLD 3 - #endif - #if NON_E_AXES >= 6 - #define K_HYBRID_THRESHOLD 3 + #if NON_E_AXES >= 5 + #define J_HYBRID_THRESHOLD 3 + #if NON_E_AXES >= 6 + #define K_HYBRID_THRESHOLD 3 + #endif + #endif #endif #define E0_HYBRID_THRESHOLD 30 #define E1_HYBRID_THRESHOLD 30 @@ -3059,9 +3068,9 @@ //#define SPINDLE_FEATURE //#define LASER_FEATURE #if EITHER(SPINDLE_FEATURE, LASER_FEATURE) - #define SPINDLE_LASER_ACTIVE_STATE LOW // Set to "HIGH" if the on/off function is active HIGH + #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power - #define SPINDLE_LASER_PWM_INVERT false // Set to "true" if the speed/power goes up when you want it to go slower + #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower #define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC) @@ -3081,7 +3090,7 @@ * instead of normal range (0 to SPEED_POWER_MAX). * Best used with (e.g.) SuperPID router controller: S0 = 5,000 RPM and S255 = 30,000 RPM */ - //#define CUTTER_POWER_RELATIVE // Set speed proportional to [SPEED_POWER_MIN...SPEED_POWER_MAX] + //#define CUTTER_POWER_RELATIVE // Set speed proportional to [SPEED_POWER_MIN...SPEED_POWER_MAX] instead of directly #if ENABLED(SPINDLE_FEATURE) //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction @@ -3359,7 +3368,7 @@ //#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc. // Enable and set a (default) feedrate for all G0 moves -//#define G0_FEEDRATE 3000 // (mm/min) +//#define G0_FEEDRATE 3000 // (mm/m) #ifdef G0_FEEDRATE //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode #endif @@ -3676,7 +3685,7 @@ #if ENABLED(PRUSA_MMU2_S_MODE) #define MMU2_C0_RETRY 5 // Number of retries (total time = timeout*retries) - #define MMU2_CAN_LOAD_FEEDRATE 800 // (mm/min) + #define MMU2_CAN_LOAD_FEEDRATE 800 // (mm/m) #define MMU2_CAN_LOAD_SEQUENCE \ { 0.1, MMU2_CAN_LOAD_FEEDRATE }, \ { 60.0, MMU2_CAN_LOAD_FEEDRATE }, \ diff --git a/README.md b/README.md index 042cf3303b8a..e889274dab65 100644 --- a/README.md +++ b/README.md @@ -1,124 +1,180 @@ -# Marlin 3D Printer Firmware +# Marlin2ForPipetBot 3D Printer and Lab Robot CNC Firmware + +Additional documentation can be found in the +repository [DerAndere1/Marlin at https://github.com](https://github.com/DerAndere1/Marlin/tree/Marlin2ForPipetBot), the [Wiki](https://github.com/DerAndere1/Marlin/wiki) +or on the [PipetBot-A8 project homepage](https://derandere.gitlab.io/pipetbot-a8) +that is part of the [authors homepage](https://derandere.gitlab.io). +For CNC machines with additional axes I, (J, (K)) that drive pumps or other tools, +e.g. lab robots (liquid handling robots, "pipetting robots"). +Please test this firmware and let us know if it misbehaves in any way. +Volunteers are standing by! + +## Marlin2ForPipetBot Branch -![GitHub](https://img.shields.io/github/license/marlinfirmware/marlin.svg) -![GitHub contributors](https://img.shields.io/github/contributors/marlinfirmware/marlin.svg) -![GitHub Release Date](https://img.shields.io/github/release-date/marlinfirmware/marlin.svg) -[![Build Status](https://github.com/MarlinFirmware/Marlin/workflows/CI/badge.svg?branch=bugfix-2.0.x)](https://github.com/MarlinFirmware/Marlin/actions) +__Not for production use. Use with caution!__ - +Marlin2forPipetBot is a branch of the Marlin fork by DerAndere (based on +https://github.com/DerAndere1/Marlin/commit/638f6f0f0607399bce82123663f5463380f83ce4 ). -Additional documentation can be found at the [Marlin Home Page](https://marlinfw.org/). -Please test this firmware and let us know if it misbehaves in any way. Volunteers are standing by! +This branch is for patches to the latest Marlin2ForPipetBot release version. -## Marlin 2.0 Bugfix Branch +Marlin2ForPipetBot supports up to six non-extruder axes (NON_E_AXES) plus +extruders (e.g. XYZIJK+E or XYZUVW+E). +Currently, only a subset of the Marlin G-code dialect is supported: -__Not for production use. Use with caution!__ +- G1, G28, G81 (untested), G82 (untested), G83 (untested), G90, G91, G92 (partially) +- M17, M18, M43, M85, M92, M111, M114 (partially), M201, M202, M203, M206 (partially), M500, M502, M503, M504 -Marlin 2.0 takes this popular RepRap firmware to the next level by adding support for much faster 32-bit and ARM-based boards while improving support for 8-bit AVR boards. Read about Marlin's decision to use a "Hardware Abstraction Layer" below. +Default axis names are: -This branch is for patches to the latest 2.0.x release version. Periodically this branch will form the basis for the next minor 2.0.x release. +| NON_E_AXES | Axis codes | +|------------|-------------------| +| 3|X, Y, Z, E | +| 4|X, Y, Z, I, E | +| 5|X, Y, Z, I, J, E | +| 6|X, Y, Z, I, J, K, E| -Download earlier versions of Marlin on the [Releases page](https://github.com/MarlinFirmware/Marlin/releases). +Example syntax for movement (G-code G1) with NON_E_AXES 6: +``` +G1 [Xx.xxxx] [Yy.yyyy] [Zz.zzzz] [Ii.iiii] [Jj.jjjj] [Kk.kkkk] [Ee.eeee] [Ff.ffff] +``` -## Building Marlin 2.0 +## Configuration -To build Marlin 2.0 you'll need [Arduino IDE 1.8.8 or newer](https://www.arduino.cc/en/main/software) or [PlatformIO](https://docs.platformio.org/en/latest/ide.html#platformio-ide). We've posted detailed instructions on [Building Marlin with Arduino](https://marlinfw.org/docs/basics/install_arduino.html) and [Building Marlin with PlatformIO for ReArm](https://marlinfw.org/docs/basics/install_rearm.html) (which applies well to other 32-bit boards). +Configuration is done by editing the file Marlin/Configuration.h. E.g. change -## Hardware Abstraction Layer (HAL) +`define NON_E_AXES 3` -Marlin 2.0 introduces a layer of abstraction so that all the existing high-level code can be built for 32-bit platforms while still retaining full 8-bit AVR compatibility. Retaining AVR compatibility and a single code-base is important to us, because we want to make sure that features and patches get as much testing and attention as possible, and that all platforms always benefit from the latest improvements. +to: -### Current HALs +`define NON_E_AXES 4` - #### AVR (8-bit) +Important options are: - board|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Arduino AVR](https://www.arduino.cc/)|ATmega, ATTiny, etc.|16-20MHz|64-256k|2-16k|5V|no +### `ASYNC_SECONDARY_AXES` - #### DUE +Define `ASYNC_SECONDARY_AXES` for a CNC machine with NON_E_AXES > 3 where primary axes XYZ are +coordinated. Optional additional axes I(, J(, K)) are uncoordinated +(asynchronous). Leave disabled (commented out) for coordinated movement of all axes. - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Arduino Due](https://www.arduino.cc/en/Guide/ArduinoDue), [RAMPS-FD](https://www.reprap.org/wiki/RAMPS-FD), etc.|[SAM3X8E ARM-Cortex M3](https://www.microchip.com/wwwproducts/en/ATsam3x8e)|84MHz|512k|64+32k|3.3V|no +### `FOAMCUTTER_XYUV` - #### ESP32 +Define `FOAMCUTTER_XYUV` kinematics for a hot wire cutter with parallel horizontal axes X, U where the hights +of the two wire ends are controlled by parallel axes Y, V. - board|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)|Tensilica Xtensa LX6|240MHz|---|---|3.3V|--- +### `NON_E_AXES` - #### LPC1768 / LPC1769 +`NON_E_AXES`: +The number of axes that are not used for extruders (axes that +benefit from endstops and homing). `NON_E_AXES` > `3` requires definition of +`[[I, [J, [K]]]_STEP_PIN`, `[I, [J, [K]]]_ENABLE_PIN`, `[I, [J, [K]]]_DIR_PIN`, +`[I, [J, [K]]]_STOP_PIN`, `USE_[I, [J, [K]]][MIN || MAX]_PLUG` and definition of the +respective values of `DEFAULT_AXIS_STEPS_PER_UNIT`, `DEFAULT_MAX_FEEDRATE`, +`DEFAULT_MAX_ACCELERATION`, `AXIS_RELATIVE_MODES`, `MICROSTEP_MODES` and +`MANUAL_FEEDRATE`. - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Re-ARM](https://www.kickstarter.com/projects/1245051645/re-arm-for-ramps-simple-32-bit-upgrade)|[LPC1768 ARM-Cortex M3](https://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1700-cortex-m3/512kb-flash-64kb-sram-ethernet-usb-lqfp100-package:LPC1768FBD100)|100MHz|512k|32+16+16k|3.3-5V|no - [MKS SBASE](https://reprap.org/forum/read.php?13,499322)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no - [Selena Compact](https://github.com/Ales2-k/Selena)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no - [Azteeg X5 GT](https://www.panucatt.com/azteeg_X5_GT_reprap_3d_printer_controller_p/ax5gt.htm)|LPC1769 ARM-Cortex M3|120MHz|512k|32+16+16k|3.3-5V|no - [Smoothieboard](https://reprap.org/wiki/Smoothieboard)|LPC1769 ARM-Cortex M3|120MHz|512k|64k|3.3-5V|no +Allowed values: [3, 4, 5, 6] - #### SAMD51 - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Adafruit Grand Central M4](https://www.adafruit.com/product/4064)|[SAMD51P20A ARM-Cortex M4](https://www.microchip.com/wwwproducts/en/ATSAMD51P20A)|120MHz|1M|256k|3.3V|yes +### `AXIS4_NAME` - #### STM32F1 +`AXIS4_NAME`, `AXIS5_NAME`, `AXIS6_NAME`: +Axis codes for additional axes: +This defines the axis code that is used in G-code commands to +reference a specific axis. - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Arduino STM32](https://github.com/rogerclarkmelbourne/Arduino_STM32)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no - [Geeetech3D GTM32](https://github.com/Geeetech3D/Diagram/blob/master/Rostock301/Hardware_GTM32_PRO_VB.pdf)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no + * 'I' for generic 4th axis + * 'J' for generic 5th axis + * 'K' for generic 6th axis + * 'A' for rotational axis parallel to X + * 'B' for rotational axis parallel to Y + * 'C' for rotational axis parallel to Z + * 'U' for secondary linear axis parallel to X + * 'V' for secondary linear axis parallel to Y + * 'W' for secondary linear axis parallel to Z - #### STM32F4 +Regardless of the settings, firmware-internal axis names are +I (AXIS4), J (AXIS5), K (AXIS6). - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [STEVAL-3DP001V1](https://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](https://www.st.com/en/microcontrollers-microprocessors/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes +Allowed values: ['I', 'J', 'K', 'A', 'B', 'C', 'U', 'V', 'W'] - #### Teensy++ 2.0 +## Building Marlin2ForPipetBot - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Teensy++ 2.0](https://www.microchip.com/wwwproducts/en/AT90USB1286)|[AT90USB1286](https://www.microchip.com/wwwproducts/en/AT90USB1286)|16MHz|128k|8k|5V|no +To build Marlin2ForPipetBot you'll need [PlatformIO](http://docs.platformio.org/en/latest/ide.html#platformio-ide). The MarlinFirmware team has posted detailed instructions on [Building Marlin with PlatformIO](https://marlinfw.org/docs/basics/install_platformio.html). + +The different branches in the git repository https://github.com/DerAndere1/Marlin reflect different stages of development: + +- [6axis_dev](https://github.com/DerAndere1/Marlin/tree/6axis_dev) branch is the current feature branch used for testing of Multi-axis Marlin. It features the best 6axis support available and is intended to be frequently rebased on the latest [MarlinFirmware/Marlin bugfix-2.0.x. Currently it is based on bugfix-2.0.x from 2020-08-22, [https://github.com/MarlinFirmware/Marlin/commit/434e43cc42f782d5fbe89db21f97571c71ad62f3](https://github.com/MarlinFirmware/Marlin/commit/434e43cc42f782d5fbe89db21f97571c71ad62f3) or later. If you want to participate in the development, (re)base your contributions on this branch. Pull requests targeted at the 6axis_dev branch are very welcome. - #### Teensy 3.1 / 3.2 +- [6axis_PR1](https://github.com/DerAndere1/Marlin/tree/6axis_PR1) branch is like 6axis_dev but without config files. A long-time goal is to bring multi-axis support into upstream MarlinFirmware/Marlin (pull request https://github.com/MarlinFirmware/Marlin/pull/19112) - boards|processor|speed|flash|sram|logic|fpu +- [bf2_6axis_dev14](https://github.com/DerAndere1/Marlin/tree/bf2_6axis_dev14) branch and similar: Untested internal development branches have consecutivly numbered branch names. Do not expect that anything works. + +- [Marlin2ForPipetBot](https://github.com/DerAndere1/Marlin/tree/Marlin2ForPipetBot) branch is more stable but outdated. This branch is the release branch for [tagged releases of Marlin2ForPipetBot firmware](https://github.com/DerAndere1/Marlin/tags). It is based on Marlin bugfix-2.0.x from August 2020 (commit https://github.com/DerAndere1/Marlin/commit/638f6f0f0607399bce82123663f5463380f83ce4) + +- [Marlin2ForPipetBot_dev](https://github.com/DerAndere1/Marlin/tree/Marlin2ForPipetBot_dev) is used to develop and test bugfixes for Marlin2ForPipetBot. After successful testing, it will be merged into Marlin2ForPipetBot. + +- Other branches: Deprecated legacy code. + +## Hardware Abstraction Layer (HAL) + +Marlin 2.0 introduces a layer of abstraction so that all the existing high-level code can be built for 32-bit platforms while still retaining full 8-bit AVR compatibility. Retaining AVR compatibility and a single code-base is important to us, because we want to make sure that features and patches get as much testing and attention as possible, and that all platforms always benefit from the latest improvements. + +### Current HALs + + name|processor|speed|flash|sram|logic|fpu ----|---------|-----|-----|----|-----|--- - [Teensy 3.2](https://www.pjrc.com/store/teensy32.html)|[MK20DX256VLH7](https://www.mouser.com/ProductDetail/NXP-Freescale/MK20DX256VLH7) ARM-Cortex M4|72MHz|256k|32k|3.3V-5V|yes + [Arduino AVR](https://www.arduino.cc/)|ATmega, ATTiny, etc.|16-20MHz|64-256k|2-16k|5V|no + [Teensy++ 2.0](http://www.microchip.com/wwwproducts/en/AT90USB1286)|[AT90USB1286](http://www.microchip.com/wwwproducts/en/AT90USB1286)|16MHz|128k|8k|5V|no + [Arduino STM32](https://github.com/rogerclarkmelbourne/Arduino_STM32)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no + [Due](https://www.arduino.cc/en/Guide/ArduinoDue), [RAMPS-FD](http://www.reprap.org/wiki/RAMPS-FD), etc.|[SAM3X8E ARM-Cortex M3](http://www.microchip.com/wwwproducts/en/ATsam3x8e)|84MHz|512k|64+32k|3.3V|no + [Re-ARM](https://www.kickstarter.com/projects/1245051645/re-arm-for-ramps-simple-32-bit-upgrade)|[LPC1768 ARM-Cortex M3](http://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1700-cortex-m3/512kb-flash-64kb-sram-ethernet-usb-lqfp100-package:LPC1768FBD100)|100MHz|512k|32+16+16k|3.3-5V|no + [MKS SBASE](http://forums.reprap.org/read.php?13,499322)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no + [Azteeg X5 GT](https://www.panucatt.com/azteeg_X5_GT_reprap_3d_printer_controller_p/ax5gt.htm)|LPC1769 ARM-Cortex M3|120MHz|512k|32+16+16k|3.3-5V|no + [Selena Compact](https://github.com/Ales2-k/Selena)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no + [Teensy 3.5](https://www.pjrc.com/store/teensy35.html)|ARM-Cortex M4|120MHz|512k|192k|3.3-5V|yes + [Teensy 3.6](https://www.pjrc.com/store/teensy36.html)|ARM-Cortex M4|180MHz|1M|256k|3.3V|yes - #### Teensy 3.5 / 3.6 +### HALs in Development - boards|processor|speed|flash|sram|logic|fpu + name|processor|speed|flash|sram|logic|fpu ----|---------|-----|-----|----|-----|--- - [Teensy 3.5](https://www.pjrc.com/store/teensy35.html)|[MK64FX512VMD12](https://www.mouser.com/ProductDetail/NXP-Freescale/MK64FX512VMD12) ARM-Cortex M4|120MHz|512k|192k|3.3-5V|yes - [Teensy 3.6](https://www.pjrc.com/store/teensy36.html)|[MK66FX1M0VMD18](https://www.mouser.com/ProductDetail/NXP-Freescale/MK66FX1M0VMD18) ARM-Cortex M4|180MHz|1M|256k|3.3V|yes + [STEVAL-3DP001V1](http://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](http://www.st.com/en/microcontrollers/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes + [Smoothieboard](http://reprap.org/wiki/Smoothieboard)|LPC1769 ARM-Cortex M3|120MHz|512k|64k|3.3-5V|no + [Adafruit Grand Central M4](https://www.adafruit.com/product/4064)|ARM-Cortex M4|120MHz|1M|256k|3.3V|yes ## Submitting Patches -Proposed patches should be submitted as a Pull Request against the ([bugfix-2.0.x](https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x)) branch. +Proposed patches should be submitted as a Pull Request against the [Marlin2ForPipetBot](https://github.com/MarlinFirmware/Marlin/tree/Marlin2ForPipetBot) branch. - This branch is for fixing bugs and integrating any new features for the duration of the Marlin 2.0.x life-cycle. -- Follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) to gain points with the maintainers. -- Please submit your questions and concerns to the [Issue Queue](https://github.com/MarlinFirmware/Marlin/issues). +- Follow the [Coding Standards](http://marlinfw.org/docs/development/coding_standards.html) to gain points with the maintainers. +- Please submit your questions and concerns to the [Issue Queue](https://github.com/DerAndere1/Marlin/issues). -### [RepRap.org Wiki Page](https://reprap.org/wiki/Marlin) +### [RepRap.org Wiki Page](http://reprap.org/wiki/Marlin) ## Credits The current Marlin dev team consists of: - - Scott Lahteine [[@thinkyhead](https://github.com/thinkyhead)] - USA   [Donate](https://www.thinkyhead.com/donate-to-marlin) / Flattr: [![Flattr Scott](https://api.flattr.com/button/flattr-badge-small.png)](https://flattr.com/submit/auto?user_id=thinkyhead&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) + - Scott Lahteine [[@thinkyhead](https://github.com/thinkyhead)] - USA   [![Flattr Scott](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=thinkyhead&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) - Roxanne Neufeld [[@Roxy-3D](https://github.com/Roxy-3D)] - USA - - Chris Pepper [[@p3p](https://github.com/p3p)] - UK - Bob Kuhn [[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)] - USA + - Chris Pepper [[@p3p](https://github.com/p3p)] - UK - João Brazio [[@jbrazio](https://github.com/jbrazio)] - Portugal - - Erik van der Zalm [[@ErikZalm](https://github.com/ErikZalm)] - Netherlands   [![Flattr Erik](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) + - Erik van der Zalm [[@ErikZalm](https://github.com/ErikZalm)] - Netherlands   [![Flattr Erik](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) + +Marlin2ForPipetBot is modified by: + + - DerAndere [[@DerAndere1](https://github.com/DerAndere1)] - Germany + - Garbriel Beraldo [@GabrielBeraldo](https://github.com/GabrielBeraldo)] - Brasil + - Olivier Briand [@hobiseven](https://github.com/hobiseven)] - France + - Wolverine [@MohammadSDGHN](https://github.com/MohammadSDGHN) - Undisclosed + - bilsef [@bilsef](https://github.com/bilsef) - Undisclosed + - FNeo31 [@FNeo31](https://github.com/FNeo31) - Undisclosed ## License -Marlin is published under the [GPL license](/LICENSE) because we believe in open development. The GPL comes with both rights and obligations. Whether you use Marlin firmware as the driver for your open or closed-source product, you must keep Marlin open, and you must provide your compatible Marlin source code to end users upon request. The most straightforward way to comply with the Marlin license is to make a fork of Marlin on Github, perform your modifications, and direct users to your modified fork. +Marlin2ForPipetBot is published under the [GPL license](https://github.com/DerAndere1/Marlin/blob/Marlin2ForPipetBot/LICENSE) because we believe in open development. The GPL comes with both rights and obligations. Whether you use Marlin firmware as the driver for your open or closed-source product, you must keep Marlin open, and you must provide your compatible Marlin source code to end users upon request. The most straightforward way to comply with the Marlin license is to make a fork of Marlin on Github, perform your modifications, and direct users to your modified fork. While we can't prevent the use of this code in products (3D printers, CNC, etc.) that are closed source or crippled by a patent, we would prefer that you choose another firmware or, better yet, make your own.