🔧 Clarify MMU2/MMU3

MarlinFirmware/Marlin#27455
This commit is contained in:
Scott Lahteine 2024-10-03 18:16:04 -05:00
parent 51bc5311e6
commit 0c877040b9
376 changed files with 29328 additions and 37224 deletions

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4424,93 +4424,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4551,14 +4514,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4567,28 +4525,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4606,12 +4562,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4621,15 +4602,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4438,93 +4438,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4565,14 +4528,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4581,28 +4539,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4620,12 +4576,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4635,15 +4616,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4430,93 +4430,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4557,14 +4520,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4573,28 +4531,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4612,12 +4568,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4627,15 +4608,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4425,93 +4425,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4552,14 +4515,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4568,28 +4526,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4607,12 +4563,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4622,15 +4603,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4425,93 +4425,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4552,14 +4515,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4568,28 +4526,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4607,12 +4563,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4622,15 +4603,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4425,93 +4425,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4552,14 +4515,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4568,28 +4526,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4607,12 +4563,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4622,15 +4603,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4433,93 +4433,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4560,14 +4523,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4576,28 +4534,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4615,12 +4571,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4630,15 +4611,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4425,93 +4425,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4552,14 +4515,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4568,28 +4526,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4607,12 +4563,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4622,15 +4603,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4431,93 +4431,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4558,14 +4521,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4574,28 +4532,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4613,12 +4569,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4628,15 +4609,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4436,93 +4436,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4563,14 +4526,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4579,28 +4537,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4618,12 +4574,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4633,15 +4614,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4431,93 +4431,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4558,14 +4521,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4574,28 +4532,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4613,12 +4569,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4628,15 +4609,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4423,93 +4423,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4550,14 +4513,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4566,28 +4524,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4605,12 +4561,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4620,15 +4601,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4430,93 +4430,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4557,14 +4520,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4573,28 +4531,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4612,12 +4568,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4627,15 +4608,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4431,93 +4431,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4558,14 +4521,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4574,28 +4532,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4613,12 +4569,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4628,15 +4609,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4431,93 +4431,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4558,14 +4521,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4574,28 +4532,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4613,12 +4569,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4628,15 +4609,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4433,93 +4433,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4560,14 +4523,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4576,28 +4534,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4615,12 +4571,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4630,15 +4611,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4431,93 +4431,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4558,14 +4521,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4574,28 +4532,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4613,12 +4569,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4628,15 +4609,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4415,93 +4415,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4542,14 +4505,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4558,28 +4516,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4597,12 +4553,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4612,15 +4593,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4429,93 +4429,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4556,14 +4519,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4572,28 +4530,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4611,12 +4567,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4626,15 +4607,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

View file

@ -4428,93 +4428,56 @@
//#define E_MUX0_PIN 40 // Always Required //#define E_MUX0_PIN 40 // Always Required
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
// Common settings for MMU2/MMU2S/MMU3 // Common settings for MMU2/MMU2S/MMU3
// Serial port used for communication with MMU2/MMU2S/MMU3. // Serial port used for communication with MMU2/MMU2S/MMU3.
#define MMU2_SERIAL_PORT 2 #define MMU_SERIAL_PORT 2
#define MMU_BAUD 115200 #define MMU_BAUD 115200
// Use hardware reset for MMU if a pin is defined for it //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
//#define MMU2_RST_PIN 23
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_DEBUG // Write debug info to serial output
// Options pertaining to MMU2 and MMU2S
#if HAS_PRUSA_MMU2 #if HAS_PRUSA_MMU2
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
//#define MMU2_MODE_12V //#define MMU2_MODE_12V
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
#endif
// Add an LCD menu for MMU2/MMU2S/MMU3
//#define MMU_MENUS
// Settings for filament load / unload from the LCD menu. // Settings for filament load / unload from the LCD menu.
// This is for Průša MK3-style extruders. Customize for your hardware. // This is for Průša MK3-style extruders. Customize for your hardware.
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
/** // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
* ------------ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
* MMU2 / MMU2S
* ------------
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
* { 4.4, 871 }, \
* { 10.0, 1393 }, \
* { 4.4, 871 }, \
* { 10.0, 198 }
*/
/* #define MMU2_RAMMING_SEQUENCE \
* { 1.0, 1000 }, \
* { 1.0, 1500 }, \
* { 2.0, 2000 }, \
* { 1.5, 3000 }, \
* { 2.5, 4000 }, \
* { -15.0, 5000 }, \
* { -14.0, 1200 }, \
* { -6.0, 600 }, \
* { 10.0, 700 }, \
* { -10.0, 400 }, \
* { -50.0, 2000 }
*/
/**
* ----
* MMU3
* ----
* These values are compatible with MMU3 as they are defined in mm/s
*/
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ { 4.4, 871 }, \
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak { 10.0, 1393 }, \
{ 4.4, 871 }, \
{ 10.0, 198 }
#define MMU2_RAMMING_SEQUENCE \ #define MMU2_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \ { 1.0, 1000 }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \ { 1.0, 1500 }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \ { 2.0, 2000 }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \ { 1.5, 3000 }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \ { 2.5, 4000 }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \ { -15.0, 5000 }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \ { -14.0, 1200 }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \ { -6.0, 600 }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \ { 10.0, 700 }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \ { -10.0, 400 }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \ { -50.0, 2000 }
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \ #endif // HAS_PRUSA_MMU2
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
/** /**
* Using a sensor like the MMU2S * Options pertaining to MMU2S devices
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. * Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11 * See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
*/ */
#if HAS_PRUSA_MMU2S #if HAS_PRUSA_MMU2S
@ -4555,14 +4518,9 @@
// MMU3 settings // MMU3 settings
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) #define MMU3_HAS_CUTTER // Enable cutter related functionality
// Nominal distance from the extruder gear to the nozzle tip is 87mm #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
// However, some slipping may occur and we need separate distances for
// LoadToNozzle and ToolChange.
// - +5mm seemed good for LoadToNozzle,
// - but too much (made blobs) for a ToolChange
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
// As discussed with our PrusaSlicer profile specialist // As discussed with our PrusaSlicer profile specialist
// - ToolChange shall not try to push filament into the very tip of the nozzle // - ToolChange shall not try to push filament into the very tip of the nozzle
@ -4571,28 +4529,26 @@
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b) // Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething). // However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
// The printer intercepts such a call and sets its extra load distance to match the new value as well. // The printer intercepts such a call and sets its extra load distance to match the new value as well.
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) #define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s) #define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle #define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
// The first thing the MMU does is initialize its axis. // The first thing the MMU does is initialize its axis.
// Meanwhile the E-motor will unload 20mm of filament in about 1 second. // Meanwhile the E-motor will unload 20mm of filament in about 1 second.
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm) #define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s) #define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
// After loading a new filament, the printer will extrude this length of filament // After loading a new filament, the printer will extrude this length of filament
// then retract to the original position. This is used to check if the filament sensor // then retract to the original position. This is used to check if the filament sensor
// reading flickers or filament is jammed. // reading flickers or filament is jammed.
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm) #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
#define MMU_HAS_CUTTER // Enable cutter related functionalities #define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
/** /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL * SpoolJoin Consumes All Filament -- EXPERIMENTAL
@ -4610,12 +4566,37 @@
* sensor is triggered through the gears) and the end of the PTFE tube and * sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues. * can cause filament load issues.
*/ */
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT //#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
#else // MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
#define MMU3_RAMMING_SEQUENCE \
{ 0.2816, MMM_TO_MMS(1339.0) }, \
{ 0.3051, MMM_TO_MMS(1451.0) }, \
{ 0.3453, MMM_TO_MMS(1642.0) }, \
{ 0.3990, MMM_TO_MMS(1897.0) }, \
{ 0.4761, MMM_TO_MMS(2264.0) }, \
{ 0.5767, MMM_TO_MMS(2742.0) }, \
{ 0.5691, MMM_TO_MMS(3220.0) }, \
{ 0.1081, MMM_TO_MMS(3220.0) }, \
{ 0.7644, MMM_TO_MMS(3635.0) }, \
{ 0.8248, MMM_TO_MMS(3921.0) }, \
{ 0.8483, MMM_TO_MMS(4033.0) }, \
{ -15.0, MMM_TO_MMS(6000.0) }, \
{ -24.5, MMM_TO_MMS(1200.0) }, \
{ -7.0, MMM_TO_MMS( 600.0) }, \
{ -3.5, MMM_TO_MMS( 360.0) }, \
{ 20.0, MMM_TO_MMS( 454.0) }, \
{ -20.0, MMM_TO_MMS( 303.0) }, \
{ -35.0, MMM_TO_MMS(2000.0) }
#else // MMU2 (not MMU2S)
/** /**
* MMU1 Extruder Sensor * MMU2 Extruder Sensor
* *
* Support for a Průša (or other) IR Sensor to detect filament near the extruder * Support for a Průša (or other) IR Sensor to detect filament near the extruder
* and make loading more reliable. Suitable for an extruder equipped with a filament * and make loading more reliable. Suitable for an extruder equipped with a filament
@ -4625,15 +4606,13 @@
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts. * move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
* If all attempts fail, a filament runout will be triggered. * If all attempts fail, a filament runout will be triggered.
*/ */
//#define MMU_EXTRUDER_SENSOR //#define MMU2_EXTRUDER_SENSOR
#if ENABLED(MMU_EXTRUDER_SENSOR) #if ENABLED(MMU2_EXTRUDER_SENSOR)
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
#endif #endif
#endif #endif
//#define MMU2_DEBUG // Write debug info to serial output
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
/** /**

Some files were not shown because too many files have changed in this diff Show more