diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index f7bd0a85d7..7303944063 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 3039cd1139..72a7be2098 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -4424,93 +4424,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4551,14 +4514,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4606,12 +4562,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/3DMatik/XL/Configuration_adv.h b/config/examples/3DMatik/XL/Configuration_adv.h index 4b9c4f3066..8bc1d38e64 100644 --- a/config/examples/3DMatik/XL/Configuration_adv.h +++ b/config/examples/3DMatik/XL/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index 2bae4c53ee..ddc855aabe 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 5a5ff348ec..411dfade30 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index 38027b158d..08b5e1d2d8 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -4438,93 +4438,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4565,14 +4528,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4620,12 +4576,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index 41b108d8c8..866005cfa4 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AliExpress/CL-260/Configuration_adv.h b/config/examples/AliExpress/CL-260/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/AliExpress/CL-260/Configuration_adv.h +++ b/config/examples/AliExpress/CL-260/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index 5788879ddb..eaa064691e 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index 9832271759..d1b47cd2ec 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index 9832271759..d1b47cd2ec 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index a03b5e0bbe..e70ee7eed0 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index fb784f2508..1f46bc974d 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index bbf853eaf1..786c6cb5c4 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/A9/Configuration_adv.h b/config/examples/Anet/A9/Configuration_adv.h index d6d27b20b3..2f7effb403 100644 --- a/config/examples/Anet/A9/Configuration_adv.h +++ b/config/examples/Anet/A9/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/E10/Configuration_adv.h b/config/examples/Anet/E10/Configuration_adv.h index 3e1666daee..4af753a32b 100644 --- a/config/examples/Anet/E10/Configuration_adv.h +++ b/config/examples/Anet/E10/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h b/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h index f75d565289..bad8ba2dcb 100644 --- a/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h +++ b/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/E16/Stock/Configuration_adv.h b/config/examples/Anet/E16/Stock/Configuration_adv.h index fe44a91e74..a9d0a836c3 100644 --- a/config/examples/Anet/E16/Stock/Configuration_adv.h +++ b/config/examples/Anet/E16/Stock/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET4+/Configuration_adv.h b/config/examples/Anet/ET4+/Configuration_adv.h index 31eec17a2a..6dde837e7e 100644 --- a/config/examples/Anet/ET4+/Configuration_adv.h +++ b/config/examples/Anet/ET4+/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET4-Pro/Configuration_adv.h b/config/examples/Anet/ET4-Pro/Configuration_adv.h index 31eec17a2a..6dde837e7e 100644 --- a/config/examples/Anet/ET4-Pro/Configuration_adv.h +++ b/config/examples/Anet/ET4-Pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET4/Configuration_adv.h b/config/examples/Anet/ET4/Configuration_adv.h index 31eec17a2a..6dde837e7e 100644 --- a/config/examples/Anet/ET4/Configuration_adv.h +++ b/config/examples/Anet/ET4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET4X/Configuration_adv.h b/config/examples/Anet/ET4X/Configuration_adv.h index 31eec17a2a..6dde837e7e 100644 --- a/config/examples/Anet/ET4X/Configuration_adv.h +++ b/config/examples/Anet/ET4X/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET5-Pro/Configuration_adv.h b/config/examples/Anet/ET5-Pro/Configuration_adv.h index dd56f77031..365d829c5f 100644 --- a/config/examples/Anet/ET5-Pro/Configuration_adv.h +++ b/config/examples/Anet/ET5-Pro/Configuration_adv.h @@ -4425,93 +4425,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4552,14 +4515,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4607,12 +4563,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET5/Configuration_adv.h b/config/examples/Anet/ET5/Configuration_adv.h index dd56f77031..365d829c5f 100644 --- a/config/examples/Anet/ET5/Configuration_adv.h +++ b/config/examples/Anet/ET5/Configuration_adv.h @@ -4425,93 +4425,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4552,14 +4515,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4607,12 +4563,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Anet/ET5X/Configuration_adv.h b/config/examples/Anet/ET5X/Configuration_adv.h index dd56f77031..365d829c5f 100644 --- a/config/examples/Anet/ET5X/Configuration_adv.h +++ b/config/examples/Anet/ET5X/Configuration_adv.h @@ -4425,93 +4425,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4552,14 +4515,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4607,12 +4563,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/Chiron/Configuration_adv.h b/config/examples/AnyCubic/Chiron/Configuration_adv.h index 084d4d8c80..548e9774b0 100644 --- a/config/examples/AnyCubic/Chiron/Configuration_adv.h +++ b/config/examples/AnyCubic/Chiron/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h b/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h index c390432394..b090884280 100644 --- a/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h +++ b/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h b/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h index 903375b945..b7edc15b61 100644 --- a/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h +++ b/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h b/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h index bfaf71e671..55bd645849 100644 --- a/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h +++ b/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/Vyper/Configuration_adv.h b/config/examples/AnyCubic/Vyper/Configuration_adv.h index 88b1f19217..16ab712007 100644 --- a/config/examples/AnyCubic/Vyper/Configuration_adv.h +++ b/config/examples/AnyCubic/Vyper/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/i3 Mega/Trigorilla AVR/Configuration_adv.h b/config/examples/AnyCubic/i3 Mega/Trigorilla AVR/Configuration_adv.h index dfcee09a26..360a891e7b 100644 --- a/config/examples/AnyCubic/i3 Mega/Trigorilla AVR/Configuration_adv.h +++ b/config/examples/AnyCubic/i3 Mega/Trigorilla AVR/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/i3 Mega/Trigorilla Pro STM32/Configuration_adv.h b/config/examples/AnyCubic/i3 Mega/Trigorilla Pro STM32/Configuration_adv.h index a216731a2e..732343e59d 100644 --- a/config/examples/AnyCubic/i3 Mega/Trigorilla Pro STM32/Configuration_adv.h +++ b/config/examples/AnyCubic/i3 Mega/Trigorilla Pro STM32/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index a73f021599..8329206b18 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index 3003c43300..48608839ad 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -4433,93 +4433,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4560,14 +4523,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4615,12 +4571,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Genius Pro/Configuration_adv.h b/config/examples/Artillery/Genius Pro/Configuration_adv.h index 5c453cc4d7..56c6ae1d5e 100644 --- a/config/examples/Artillery/Genius Pro/Configuration_adv.h +++ b/config/examples/Artillery/Genius Pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h b/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h index d07fd6b9eb..abe3d8a800 100644 --- a/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h +++ b/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Genius/V1/Configuration_adv.h b/config/examples/Artillery/Genius/V1/Configuration_adv.h index 22881ec7ca..c82ac162fc 100644 --- a/config/examples/Artillery/Genius/V1/Configuration_adv.h +++ b/config/examples/Artillery/Genius/V1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Hornet/Configuration_adv.h b/config/examples/Artillery/Hornet/Configuration_adv.h index 834ded54a7..fc986a3350 100644 --- a/config/examples/Artillery/Hornet/Configuration_adv.h +++ b/config/examples/Artillery/Hornet/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h b/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h index 0dbfad2d5d..6418b2b4e1 100644 --- a/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h +++ b/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h b/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h index 22881ec7ca..c82ac162fc 100644 --- a/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h +++ b/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Artillery/Sidewinder X2/Configuration_adv.h b/config/examples/Artillery/Sidewinder X2/Configuration_adv.h index 33a35d9b76..b96a31edf0 100644 --- a/config/examples/Artillery/Sidewinder X2/Configuration_adv.h +++ b/config/examples/Artillery/Sidewinder X2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Azteeg/X5GT/Configuration_adv.h b/config/examples/Azteeg/X5GT/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/Azteeg/X5GT/Configuration_adv.h +++ b/config/examples/Azteeg/X5GT/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 1ac23cea7c..de7b065a1c 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIBO/TouchX/default - BLTouch/Configuration_adv.h b/config/examples/BIBO/TouchX/default - BLTouch/Configuration_adv.h index 0ac7cc18db..4e0a84df34 100644 --- a/config/examples/BIBO/TouchX/default - BLTouch/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default - BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 4f6ea6b4e4..91c08656a4 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -4425,93 +4425,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4552,14 +4515,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4607,12 +4563,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIQU/B1 SE Plus/Configuration_adv.h b/config/examples/BIQU/B1 SE Plus/Configuration_adv.h index 8edcbfbb92..7cd32e3968 100644 --- a/config/examples/BIQU/B1 SE Plus/Configuration_adv.h +++ b/config/examples/BIQU/B1 SE Plus/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIQU/B1 SE/Configuration_adv.h b/config/examples/BIQU/B1 SE/Configuration_adv.h index 4b699341c6..12f9a0b9c4 100644 --- a/config/examples/BIQU/B1 SE/Configuration_adv.h +++ b/config/examples/BIQU/B1 SE/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIQU/B1/Configuration_adv.h b/config/examples/BIQU/B1/Configuration_adv.h index d44cda7712..fdf9bc0303 100644 --- a/config/examples/BIQU/B1/Configuration_adv.h +++ b/config/examples/BIQU/B1/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIQU/BX/Configuration_adv.h b/config/examples/BIQU/BX/Configuration_adv.h index 14d62a9469..e529b0e255 100644 --- a/config/examples/BIQU/BX/Configuration_adv.h +++ b/config/examples/BIQU/BX/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIQU/Hurakan/Configuration_adv.h b/config/examples/BIQU/Hurakan/Configuration_adv.h index c0d7061049..c702f7e1d6 100644 --- a/config/examples/BIQU/Hurakan/Configuration_adv.h +++ b/config/examples/BIQU/Hurakan/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BIQU/Thunder Standard/Configuration_adv.h b/config/examples/BIQU/Thunder Standard/Configuration_adv.h index 37d5ca05da..191a443ca8 100644 --- a/config/examples/BIQU/Thunder Standard/Configuration_adv.h +++ b/config/examples/BIQU/Thunder Standard/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index d1d3e693e6..6611d8be87 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index b76c8da1d0..5dc90b20c4 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -4436,93 +4436,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4563,14 +4526,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4618,12 +4574,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index d1d3e693e6..6611d8be87 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/CNC/miniRambo/Configuration_adv.h b/config/examples/CNC/miniRambo/Configuration_adv.h index a8a234bec2..abfc273d5b 100644 --- a/config/examples/CNC/miniRambo/Configuration_adv.h +++ b/config/examples/CNC/miniRambo/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/CTC/A13/Configuration_adv.h b/config/examples/CTC/A13/Configuration_adv.h index 93b9471f22..2857cfdf7c 100644 --- a/config/examples/CTC/A13/Configuration_adv.h +++ b/config/examples/CTC/A13/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/CTC/Bizer/Configuration_adv.h b/config/examples/CTC/Bizer/Configuration_adv.h index 763895e6d6..cd683ed4cc 100644 --- a/config/examples/CTC/Bizer/Configuration_adv.h +++ b/config/examples/CTC/Bizer/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/CTC/i3 2560 Rev A/no probe/Configuration_adv.h b/config/examples/CTC/i3 2560 Rev A/no probe/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/CTC/i3 2560 Rev A/no probe/Configuration_adv.h +++ b/config/examples/CTC/i3 2560 Rev A/no probe/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index 48fb0a4bf9..4eeb4a42c1 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Copymaster3D/300/Configuration_adv.h b/config/examples/Copymaster3D/300/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/Copymaster3D/300/Configuration_adv.h +++ b/config/examples/Copymaster3D/300/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Copymaster3D/400/Configuration_adv.h b/config/examples/Copymaster3D/400/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/Copymaster3D/400/Configuration_adv.h +++ b/config/examples/Copymaster3D/400/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Copymaster3D/500/Configuration_adv.h b/config/examples/Copymaster3D/500/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/Copymaster3D/500/Configuration_adv.h +++ b/config/examples/Copymaster3D/500/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 Max/Configuration_adv.h b/config/examples/Creality/CR-10 Max/Configuration_adv.h index 7bb7d877b6..3692b1a71e 100644 --- a/config/examples/Creality/CR-10 Max/Configuration_adv.h +++ b/config/examples/Creality/CR-10 Max/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index e2ddd33037..6e0f8d1382 100644 --- a/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index a1cdd38b13..1e22c2bbec 100644 --- a/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h index c87c9d6c9e..9a05a94aa0 100644 --- a/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h index a7f48e6971..53195570f7 100644 --- a/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h +++ b/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h @@ -4423,93 +4423,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4550,14 +4513,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4605,12 +4561,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h index 7ab44685f2..ced197a6d7 100644 --- a/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h b/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h index d9dfece5f7..9fb95243a4 100644 --- a/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 v3/Configuration_adv.h b/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 v3/Configuration_adv.h index a0d99dac20..48e8a4bfbc 100644 --- a/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 v3/Configuration_adv.h +++ b/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 v3/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h index 7ab44685f2..ced197a6d7 100644 --- a/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 S5/CrealityV2.2 - BLTouch/Configuration_adv.h b/config/examples/Creality/CR-10 S5/CrealityV2.2 - BLTouch/Configuration_adv.h index 6e08394205..c1b61355c4 100644 --- a/config/examples/Creality/CR-10 S5/CrealityV2.2 - BLTouch/Configuration_adv.h +++ b/config/examples/Creality/CR-10 S5/CrealityV2.2 - BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 S5/CrealityV427 - BLTouch/Configuration_adv.h b/config/examples/Creality/CR-10 S5/CrealityV427 - BLTouch/Configuration_adv.h index 5988f1a9d0..26724b6ddd 100644 --- a/config/examples/Creality/CR-10 S5/CrealityV427 - BLTouch/Configuration_adv.h +++ b/config/examples/Creality/CR-10 S5/CrealityV427 - BLTouch/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 V2/Configuration_adv.h b/config/examples/Creality/CR-10 V2/Configuration_adv.h index 51e20aa91c..bb0fd1b083 100644 --- a/config/examples/Creality/CR-10 V2/Configuration_adv.h +++ b/config/examples/Creality/CR-10 V2/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10 V3/Configuration_adv.h b/config/examples/Creality/CR-10 V3/Configuration_adv.h index 314e92d488..9993335e01 100644 --- a/config/examples/Creality/CR-10 V3/Configuration_adv.h +++ b/config/examples/Creality/CR-10 V3/Configuration_adv.h @@ -4433,93 +4433,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4560,14 +4523,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4615,12 +4571,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index 1a2eed0c68..dd3e529d59 100644 --- a/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index 879351050b..a7c844f4d6 100644 --- a/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h index 073de7be21..dd8fd4d5c0 100644 --- a/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S Pro/Configuration_adv.h b/config/examples/Creality/CR-10S Pro/Configuration_adv.h index 4826d7eb02..d621e1a9c8 100644 --- a/config/examples/Creality/CR-10S Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-10S Pro/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h index e75671db57..f4164b656b 100644 --- a/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h index 04e4e26f5a..2ed74bc3e4 100644 --- a/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index 1a2eed0c68..dd3e529d59 100644 --- a/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index b0103f83f7..1483fadeaa 100644 --- a/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h index af3b608c92..15b4c35e73 100644 --- a/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/CrealityV1 - BLTouch/Configuration_adv.h b/config/examples/Creality/CR-10S/CrealityV1 - BLTouch/Configuration_adv.h index 5378a81349..f06c994920 100644 --- a/config/examples/Creality/CR-10S/CrealityV1 - BLTouch/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/CrealityV1 - BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h index d21631b7c9..c9387af20a 100644 --- a/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index b16296a217..0a47f26239 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-20/RepRapWorld Minitronics20/Configuration_adv.h b/config/examples/Creality/CR-20/RepRapWorld Minitronics20/Configuration_adv.h index 91a6153e0c..f1efa57930 100644 --- a/config/examples/Creality/CR-20/RepRapWorld Minitronics20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/RepRapWorld Minitronics20/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-20/Stock/Configuration_adv.h b/config/examples/Creality/CR-20/Stock/Configuration_adv.h index 91a6153e0c..f1efa57930 100644 --- a/config/examples/Creality/CR-20/Stock/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Stock/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h b/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h index 3bbd1ba9bb..7468b81777 100644 --- a/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h +++ b/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-6 SE/Configuration_adv.h b/config/examples/Creality/CR-6 SE/Configuration_adv.h index 9d83ae33ec..5a7a830cf0 100644 --- a/config/examples/Creality/CR-6 SE/Configuration_adv.h +++ b/config/examples/Creality/CR-6 SE/Configuration_adv.h @@ -4415,93 +4415,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4542,14 +4505,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4597,12 +4553,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 18eb63d955..8a199431d2 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-2 Pro/CrealityV24S4/Configuration_adv.h b/config/examples/Creality/Ender-2 Pro/CrealityV24S4/Configuration_adv.h index 8325b06e31..8351f19fcb 100644 --- a/config/examples/Creality/Ender-2 Pro/CrealityV24S4/Configuration_adv.h +++ b/config/examples/Creality/Ender-2 Pro/CrealityV24S4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h b/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h index f01e72a8c7..8404b7a133 100644 --- a/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h +++ b/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index 0a766c3706..c2f9aa3b08 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Max Neo/Configuration_adv.h b/config/examples/Creality/Ender-3 Max Neo/Configuration_adv.h index 6f842179a7..55bc6f39a0 100644 --- a/config/examples/Creality/Ender-3 Max Neo/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Max Neo/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Max/Configuration_adv.h b/config/examples/Creality/Ender-3 Max/Configuration_adv.h index eec8e7a500..7935613d98 100644 --- a/config/examples/Creality/Ender-3 Max/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Max/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Neo/Configuration_adv.h b/config/examples/Creality/Ender-3 Neo/Configuration_adv.h index 7d5dd5064d..bfb970c1fb 100644 --- a/config/examples/Creality/Ender-3 Neo/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Neo/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h index f81f608c16..d91ea6234f 100644 --- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h index 2cdaa429ee..244bca557a 100644 --- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h index 2cdaa429ee..244bca557a 100644 --- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index aa692226a9..8958024bbd 100644 --- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index 7498fa7118..2e36a68c0a 100644 --- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/Creality free-runs/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/Creality free-runs/Configuration_adv.h index c5f40ff0c5..76a54b04bd 100644 --- a/config/examples/Creality/Ender-3 Pro/Creality free-runs/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/Creality free-runs/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h index f888d354f6..9074ccd958 100644 --- a/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h index b6efba6f6b..51b541f492 100644 --- a/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV427 - BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV427 - BLTouch/Configuration_adv.h index c6b21a0e91..09a28b6f9a 100644 --- a/config/examples/Creality/Ender-3 Pro/CrealityV427 - BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/CrealityV427 - BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h index 5672981b86..285e76f3c5 100644 --- a/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 S1 Plus/Configuration_adv.h b/config/examples/Creality/Ender-3 S1 Plus/Configuration_adv.h index 5664b125f1..5db49dfbb7 100644 --- a/config/examples/Creality/Ender-3 S1 Plus/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 S1 Plus/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 S1 Pro/Configuration_adv.h b/config/examples/Creality/Ender-3 S1 Pro/Configuration_adv.h index 5664b125f1..5db49dfbb7 100644 --- a/config/examples/Creality/Ender-3 S1 Pro/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 S1 Pro/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 S1/STM32F1/Configuration_adv.h b/config/examples/Creality/Ender-3 S1/STM32F1/Configuration_adv.h index a4e09514ba..330f25b038 100644 --- a/config/examples/Creality/Ender-3 S1/STM32F1/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 S1/STM32F1/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 S1/STM32F4/Configuration_adv.h b/config/examples/Creality/Ender-3 S1/STM32F4/Configuration_adv.h index a3a0b9b694..20d1d40f1d 100644 --- a/config/examples/Creality/Ender-3 S1/STM32F4/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 S1/STM32F4/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2 Neo/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/Ender-3 V2 Neo/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index 2dea45f478..808363ed28 100644 --- a/config/examples/Creality/Ender-3 V2 Neo/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2 Neo/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2 Neo/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-3 V2 Neo/CrealityV422/Configuration_adv.h index e6b87fc28d..b6f736f948 100644 --- a/config/examples/Creality/Ender-3 V2 Neo/CrealityV422/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2 Neo/CrealityV422/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h index f3d7a7d6cf..cd77f54e85 100644 --- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h index 6bb546d1c7..a72eb9dfc5 100644 --- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/CrealityUI/Configuration_adv.h index 3918726fb6..798145b215 100644 --- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/CrealityUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/CrealityUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/MarlinUI/Configuration_adv.h index 4d4ac08e83..f2dea6fbb8 100644 --- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/MarlinUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 2.0/MarlinUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/CrealityUI/Configuration_adv.h index 63a1f403fa..88c29691cf 100644 --- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/CrealityUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/CrealityUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/MarlinUI/Configuration_adv.h index 1d7b5c379d..1dc9e2b6b2 100644 --- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/MarlinUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 3.0/MarlinUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h index 8ac5786d4f..d3fd4d7bdc 100644 --- a/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h index 1a717fe3b2..e7e13ae616 100644 --- a/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/CrealityV427/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/CrealityV427/CrealityUI/Configuration_adv.h index 1fc06bfc11..286ed9c919 100644 --- a/config/examples/Creality/Ender-3 V2/CrealityV427/CrealityUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/CrealityV427/CrealityUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3 V2/CrealityV427/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/CrealityV427/MarlinUI/Configuration_adv.h index 15c9853b7e..1e79586ab1 100644 --- a/config/examples/Creality/Ender-3 V2/CrealityV427/MarlinUI/Configuration_adv.h +++ b/config/examples/Creality/Ender-3 V2/CrealityV427/MarlinUI/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h index dffd2230c6..d4e5610525 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech Manta E3 EZ/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech Manta E3 EZ/Configuration_adv.h index 287bf7a5e6..e0e8ec9537 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech Manta E3 EZ/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech Manta E3 EZ/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h index f45ade8cc0..673b66f828 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h index c265d9e311..aa4ea33e5f 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h index 2fd985fa52..55cc578548 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h index c265d9e311..aa4ea33e5f 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h index 3528fba78a..c636e10fbe 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h index 28f0446857..3cf115984c 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h index 28f0446857..3cf115984c 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index 2d802f75dc..77d4c5e088 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index 66a5f96166..f9a86edb8b 100644 --- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/Creality free-runs/Configuration_adv.h b/config/examples/Creality/Ender-3/Creality free-runs/Configuration_adv.h index c5f40ff0c5..76a54b04bd 100644 --- a/config/examples/Creality/Ender-3/Creality free-runs/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Creality free-runs/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h index f888d354f6..9074ccd958 100644 --- a/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h index 627d0c53a8..ba3902a16e 100644 --- a/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h index 5672981b86..285e76f3c5 100644 --- a/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h index 15a5b4ddd4..ec70ac8dcd 100644 --- a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h index 15a5b4ddd4..ec70ac8dcd 100644 --- a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h index 34fb519166..852843ece0 100644 --- a/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h index 15a5b4ddd4..ec70ac8dcd 100644 --- a/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h index 15a5b4ddd4..ec70ac8dcd 100644 --- a/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h b/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h index f32c6df0a4..a869289355 100644 --- a/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h @@ -4423,93 +4423,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4550,14 +4513,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4605,12 +4561,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h b/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h index 93cef21348..728805865f 100644 --- a/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h b/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h index d8d9091df6..98653cc109 100644 --- a/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h b/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h index dd59c62242..05e80d7985 100644 --- a/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h b/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h index 3fa105ce1b..55def45a7a 100644 --- a/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 74736437b1..618dfd4893 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Plus/BigTreeTech SKR 3/Configuration_adv.h b/config/examples/Creality/Ender-5 Plus/BigTreeTech SKR 3/Configuration_adv.h index 023182cf21..40a076ed09 100644 --- a/config/examples/Creality/Ender-5 Plus/BigTreeTech SKR 3/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Plus/BigTreeTech SKR 3/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Plus/CrealityV1 (ORIGIN UI)/Configuration_adv.h b/config/examples/Creality/Ender-5 Plus/CrealityV1 (ORIGIN UI)/Configuration_adv.h index 81a57a0c15..712d4d4c5c 100644 --- a/config/examples/Creality/Ender-5 Plus/CrealityV1 (ORIGIN UI)/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Plus/CrealityV1 (ORIGIN UI)/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Plus/CrealityV1 (RELOADED UI)/Configuration_adv.h b/config/examples/Creality/Ender-5 Plus/CrealityV1 (RELOADED UI)/Configuration_adv.h index 0c82a9834a..df5f7b66cf 100644 --- a/config/examples/Creality/Ender-5 Plus/CrealityV1 (RELOADED UI)/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Plus/CrealityV1 (RELOADED UI)/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h index c73fd26a59..9ed365d41e 100644 --- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h index b2d09aff9e..3b974578ff 100644 --- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h index d4380ff5ea..f5ee59a316 100644 --- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 3.0 with BLTouch-HighTemp/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 3.0 with BLTouch-HighTemp/Configuration_adv.h index f814f11611..040c9ce0d7 100644 --- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 3.0 with BLTouch-HighTemp/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 3.0 with BLTouch-HighTemp/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h index 6a193e78d7..5f2b5541a9 100644 --- a/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h index 3a7b88785b..3233309a62 100644 --- a/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h index dbe08bc618..44ab519f2d 100644 --- a/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5 S1/Configuration_adv.h b/config/examples/Creality/Ender-5 S1/Configuration_adv.h index 3cf79a856d..f8f9fc8fb2 100644 --- a/config/examples/Creality/Ender-5 S1/Configuration_adv.h +++ b/config/examples/Creality/Ender-5 S1/Configuration_adv.h @@ -4432,93 +4432,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4559,14 +4522,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4575,28 +4533,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4614,12 +4570,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4629,15 +4610,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h index c73fd26a59..9ed365d41e 100644 --- a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h index 6c47662493..ed17f53dd4 100644 --- a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h index 02d0827b6b..4c81586a0c 100644 --- a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index 25101171b6..bfc9000776 100644 --- a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 3.0 with BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 3.0 with BLTouch/Configuration_adv.h index 73eed9a38f..e84fef556e 100644 --- a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 3.0 with BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 3.0 with BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/Creality free-runs/Configuration_adv.h b/config/examples/Creality/Ender-5/Creality free-runs/Configuration_adv.h index 7ae32606ff..794c68b06d 100644 --- a/config/examples/Creality/Ender-5/Creality free-runs/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Creality free-runs/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h index 6c4185cfee..f5f4d0ecaa 100644 --- a/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/CrealityV427 with BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-5/CrealityV427 with BLTouch/Configuration_adv.h index daab52e5ae..0de6c42680 100644 --- a/config/examples/Creality/Ender-5/CrealityV427 with BLTouch/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/CrealityV427 with BLTouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h index 77bbe9a890..2b1f91075f 100644 --- a/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Creality/Ender-6/Configuration_adv.h b/config/examples/Creality/Ender-6/Configuration_adv.h index 115b49773c..8e8c77999d 100644 --- a/config/examples/Creality/Ender-6/Configuration_adv.h +++ b/config/examples/Creality/Ender-6/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index 03a02c87c5..15a6d69768 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Daycom/3DP-100/Configuration_adv.h b/config/examples/Daycom/3DP-100/Configuration_adv.h index 543e660385..483b196c72 100644 --- a/config/examples/Daycom/3DP-100/Configuration_adv.h +++ b/config/examples/Daycom/3DP-100/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h b/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h index 99625e8966..7ce1b8bd22 100644 --- a/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h +++ b/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h @@ -4425,93 +4425,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4552,14 +4515,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4607,12 +4563,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h b/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h index e6679e998b..c51313ff14 100644 --- a/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h +++ b/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Eazao/Zero/Configuration_adv.h b/config/examples/Eazao/Zero/Configuration_adv.h index de6265833a..1ec1013e25 100644 --- a/config/examples/Eazao/Zero/Configuration_adv.h +++ b/config/examples/Eazao/Zero/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 66f5557f93..8bb9af13cf 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Elegoo/Neptune 2/Configuration_adv.h b/config/examples/Elegoo/Neptune 2/Configuration_adv.h index 1c1ce95e57..8cb67b27f7 100644 --- a/config/examples/Elegoo/Neptune 2/Configuration_adv.h +++ b/config/examples/Elegoo/Neptune 2/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Eryone/Thinker SE/Configuration_adv.h b/config/examples/Eryone/Thinker SE/Configuration_adv.h index e9c1690bb3..ff039cc22f 100644 --- a/config/examples/Eryone/Thinker SE/Configuration_adv.h +++ b/config/examples/Eryone/Thinker SE/Configuration_adv.h @@ -4434,93 +4434,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4561,14 +4524,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4577,28 +4535,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4616,12 +4572,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4631,15 +4612,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Eryone/Thinker V2/Configuration_adv.h b/config/examples/Eryone/Thinker V2/Configuration_adv.h index 83e97d11f1..6a649bf17b 100644 --- a/config/examples/Eryone/Thinker V2/Configuration_adv.h +++ b/config/examples/Eryone/Thinker V2/Configuration_adv.h @@ -4434,93 +4434,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4561,14 +4524,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4577,28 +4535,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4616,12 +4572,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4631,15 +4612,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 515501c22c..b906910924 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index ad0ca3e80d..40dbcdfc6c 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FYSETC/S6/Configuration_adv.h b/config/examples/FYSETC/S6/Configuration_adv.h index 6b00e6650b..4ce1ea7627 100644 --- a/config/examples/FYSETC/S6/Configuration_adv.h +++ b/config/examples/FYSETC/S6/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Felix/DUAL/Configuration_adv.h b/config/examples/Felix/DUAL/Configuration_adv.h index 000c1e5858..1f301eab97 100644 --- a/config/examples/Felix/DUAL/Configuration_adv.h +++ b/config/examples/Felix/DUAL/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Felix/Single/Configuration_adv.h b/config/examples/Felix/Single/Configuration_adv.h index 000c1e5858..1f301eab97 100644 --- a/config/examples/Felix/Single/Configuration_adv.h +++ b/config/examples/Felix/Single/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FlashForge/Creator 2X/Configuration_adv.h b/config/examples/FlashForge/Creator 2X/Configuration_adv.h index 2cd1d5793c..c96fe536e1 100644 --- a/config/examples/FlashForge/Creator 2X/Configuration_adv.h +++ b/config/examples/FlashForge/Creator 2X/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index 8c9b1f509f..936e78bcc8 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FlyingBear/P902/Configuration_adv.h b/config/examples/FlyingBear/P902/Configuration_adv.h index 646bf3b086..db05717a44 100644 --- a/config/examples/FlyingBear/P902/Configuration_adv.h +++ b/config/examples/FlyingBear/P902/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FlyingBear/P905H/Configuration_adv.h b/config/examples/FlyingBear/P905H/Configuration_adv.h index d1bdb201e6..2b0d48aafe 100644 --- a/config/examples/FlyingBear/P905H/Configuration_adv.h +++ b/config/examples/FlyingBear/P905H/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FoamCutter/generic/Configuration_adv.h b/config/examples/FoamCutter/generic/Configuration_adv.h index b9930211c8..d52a54c7f4 100644 --- a/config/examples/FoamCutter/generic/Configuration_adv.h +++ b/config/examples/FoamCutter/generic/Configuration_adv.h @@ -4436,93 +4436,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4563,14 +4526,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4618,12 +4574,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FoamCutter/rcKeith/Configuration_adv.h b/config/examples/FoamCutter/rcKeith/Configuration_adv.h index b9930211c8..d52a54c7f4 100644 --- a/config/examples/FoamCutter/rcKeith/Configuration_adv.h +++ b/config/examples/FoamCutter/rcKeith/Configuration_adv.h @@ -4436,93 +4436,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4563,14 +4526,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4618,12 +4574,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FolgerTech/FT-5 R2/Configuration_adv.h b/config/examples/FolgerTech/FT-5 R2/Configuration_adv.h index f244dfc152..cf7db0e162 100644 --- a/config/examples/FolgerTech/FT-5 R2/Configuration_adv.h +++ b/config/examples/FolgerTech/FT-5 R2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index 7d9cb04546..7e8db3374a 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -4436,93 +4436,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4563,14 +4526,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4618,12 +4574,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index ad17765aeb..b7322ef9b7 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -4433,93 +4433,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4560,14 +4523,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4615,12 +4571,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index b26696d7cc..ccaea631b0 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10D/Configuration_adv.h b/config/examples/Geeetech/A10D/Configuration_adv.h index 43826b112f..65ab7a7fd1 100644 --- a/config/examples/Geeetech/A10D/Configuration_adv.h +++ b/config/examples/Geeetech/A10D/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h b/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h index bbbdfca17d..f04fcd8ea5 100644 --- a/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h b/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h index bbbdfca17d..f04fcd8ea5 100644 --- a/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10PRO/Configuration_adv.h b/config/examples/Geeetech/A10PRO/Configuration_adv.h index b26696d7cc..ccaea631b0 100644 --- a/config/examples/Geeetech/A10PRO/Configuration_adv.h +++ b/config/examples/Geeetech/A10PRO/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h b/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h index bbbdfca17d..f04fcd8ea5 100644 --- a/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h +++ b/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h b/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h index bbbdfca17d..f04fcd8ea5 100644 --- a/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h +++ b/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A20/Configuration_adv.h b/config/examples/Geeetech/A20/Configuration_adv.h index d23a0b28a1..dbc6dcaeff 100644 --- a/config/examples/Geeetech/A20/Configuration_adv.h +++ b/config/examples/Geeetech/A20/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index d23a0b28a1..dbc6dcaeff 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A20T/Configuration_adv.h b/config/examples/Geeetech/A20T/Configuration_adv.h index d23a0b28a1..dbc6dcaeff 100644 --- a/config/examples/Geeetech/A20T/Configuration_adv.h +++ b/config/examples/Geeetech/A20T/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A30/Configuration_adv.h b/config/examples/Geeetech/A30/Configuration_adv.h index 3441663f8a..b8a5ba0a2c 100644 --- a/config/examples/Geeetech/A30/Configuration_adv.h +++ b/config/examples/Geeetech/A30/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A30M/Configuration_adv.h b/config/examples/Geeetech/A30M/Configuration_adv.h index 3441663f8a..b8a5ba0a2c 100644 --- a/config/examples/Geeetech/A30M/Configuration_adv.h +++ b/config/examples/Geeetech/A30M/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/A30T/Configuration_adv.h b/config/examples/Geeetech/A30T/Configuration_adv.h index 3441663f8a..b8a5ba0a2c 100644 --- a/config/examples/Geeetech/A30T/Configuration_adv.h +++ b/config/examples/Geeetech/A30T/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/D200/Configuration_adv.h b/config/examples/Geeetech/D200/Configuration_adv.h index 1f82f92940..8387a58ce3 100644 --- a/config/examples/Geeetech/D200/Configuration_adv.h +++ b/config/examples/Geeetech/D200/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Duplicator5/Configuration_adv.h b/config/examples/Geeetech/Duplicator5/Configuration_adv.h index 6b00e6650b..4ce1ea7627 100644 --- a/config/examples/Geeetech/Duplicator5/Configuration_adv.h +++ b/config/examples/Geeetech/Duplicator5/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/E180/Configuration_adv.h b/config/examples/Geeetech/E180/Configuration_adv.h index 3441663f8a..b8a5ba0a2c 100644 --- a/config/examples/Geeetech/E180/Configuration_adv.h +++ b/config/examples/Geeetech/E180/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/GT2560/Configuration_adv.h b/config/examples/Geeetech/GT2560/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Geeetech/GT2560/Configuration_adv.h +++ b/config/examples/Geeetech/GT2560/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration_adv.h b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration_adv.h +++ b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/M201/Configuration_adv.h b/config/examples/Geeetech/M201/Configuration_adv.h index 1f82f92940..8387a58ce3 100644 --- a/config/examples/Geeetech/M201/Configuration_adv.h +++ b/config/examples/Geeetech/M201/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index beac59f612..dd32d5b513 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Me_creator/Configuration_adv.h b/config/examples/Geeetech/Me_creator/Configuration_adv.h index 6b00e6650b..4ce1ea7627 100644 --- a/config/examples/Geeetech/Me_creator/Configuration_adv.h +++ b/config/examples/Geeetech/Me_creator/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Me_ducer/Configuration_adv.h b/config/examples/Geeetech/Me_ducer/Configuration_adv.h index 9464af7084..0f075c4eb5 100644 --- a/config/examples/Geeetech/Me_ducer/Configuration_adv.h +++ b/config/examples/Geeetech/Me_ducer/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/PI3A PRO/Configuration_adv.h b/config/examples/Geeetech/PI3A PRO/Configuration_adv.h index 0286081033..da2e66667c 100644 --- a/config/examples/Geeetech/PI3A PRO/Configuration_adv.h +++ b/config/examples/Geeetech/PI3A PRO/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index b26696d7cc..ccaea631b0 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index b26696d7cc..ccaea631b0 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index 0ff66e792c..654afcb7ca 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Hictop/3DP-17/Configuration_adv.h b/config/examples/Hictop/3DP-17/Configuration_adv.h index 5f350f3fb7..8e571c41a9 100644 --- a/config/examples/Hictop/3DP-17/Configuration_adv.h +++ b/config/examples/Hictop/3DP-17/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 3550c6e954..e5bfcca66b 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h b/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h index e392680c30..2193dc8058 100644 --- a/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h +++ b/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h @@ -4424,93 +4424,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4551,14 +4514,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4606,12 +4562,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index e038368e85..a904597226 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -4434,93 +4434,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4561,14 +4524,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4577,28 +4535,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4616,12 +4572,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4631,15 +4612,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/JGAurora/A3/Configuration_adv.h b/config/examples/JGAurora/A3/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/JGAurora/A3/Configuration_adv.h +++ b/config/examples/JGAurora/A3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index 42fcf0e391..310a7f8e0d 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index 8f5771d58e..1f32024d2a 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -4434,93 +4434,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4561,14 +4524,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4577,28 +4535,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4616,12 +4572,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4631,15 +4612,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/JGAurora/Magic/Configuration_adv.h b/config/examples/JGAurora/Magic/Configuration_adv.h index ff36d64527..016a22f052 100644 --- a/config/examples/JGAurora/Magic/Configuration_adv.h +++ b/config/examples/JGAurora/Magic/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Kingroon/KP3/Configuration_adv.h b/config/examples/Kingroon/KP3/Configuration_adv.h index 1716843fe5..c175961bd8 100644 --- a/config/examples/Kingroon/KP3/Configuration_adv.h +++ b/config/examples/Kingroon/KP3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Kingroon/KP3S/Configuration_adv.h b/config/examples/Kingroon/KP3S/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Kingroon/KP3S/Configuration_adv.h +++ b/config/examples/Kingroon/KP3S/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Kingroon/KP3S_Pro/Configuration_adv.h b/config/examples/Kingroon/KP3S_Pro/Configuration_adv.h index 4df99f9052..1c1ee5444f 100644 --- a/config/examples/Kingroon/KP3S_Pro/Configuration_adv.h +++ b/config/examples/Kingroon/KP3S_Pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Kingroon/KP5L-DIY/Configuration_adv.h b/config/examples/Kingroon/KP5L-DIY/Configuration_adv.h index 57eecf9e72..d9d0cd97df 100644 --- a/config/examples/Kingroon/KP5L-DIY/Configuration_adv.h +++ b/config/examples/Kingroon/KP5L-DIY/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Labists/ET4/Configuration_adv.h b/config/examples/Labists/ET4/Configuration_adv.h index d67ffedb10..1be2c791e8 100644 --- a/config/examples/Labists/ET4/Configuration_adv.h +++ b/config/examples/Labists/ET4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Longer/LK5/Configuration_adv.h b/config/examples/Longer/LK5/Configuration_adv.h index 25c99f3403..1b7c382b46 100644 --- a/config/examples/Longer/LK5/Configuration_adv.h +++ b/config/examples/Longer/LK5/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/LulzBot/TAZ4/Configuration_adv.h b/config/examples/LulzBot/TAZ4/Configuration_adv.h index 6b0124f0df..45981b71a6 100644 --- a/config/examples/LulzBot/TAZ4/Configuration_adv.h +++ b/config/examples/LulzBot/TAZ4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/MBot/Cube/Configuration_adv.h b/config/examples/MBot/Cube/Configuration_adv.h index dc33904921..c36708687a 100644 --- a/config/examples/MBot/Cube/Configuration_adv.h +++ b/config/examples/MBot/Cube/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h b/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h index 74e3e8097c..0d766ade72 100644 --- a/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h +++ b/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h @@ -4423,93 +4423,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4550,14 +4513,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4605,12 +4561,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index dda76c3537..202160c6db 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/MakerTech3D/Proforge2sDual/Configuration_adv.h b/config/examples/MakerTech3D/Proforge2sDual/Configuration_adv.h index 36cb442c2a..1a5b4794cb 100644 --- a/config/examples/MakerTech3D/Proforge2sDual/Configuration_adv.h +++ b/config/examples/MakerTech3D/Proforge2sDual/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index a367f8280c..6df786e2ba 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Malyan/M180/Configuration_adv.h b/config/examples/Malyan/M180/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Malyan/M180/Configuration_adv.h +++ b/config/examples/Malyan/M180/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index a60da693ab..da5d7c9f9c 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Micromake/C1/basic/Configuration_adv.h b/config/examples/Micromake/C1/basic/Configuration_adv.h index 6d7919078d..81172101b4 100644 --- a/config/examples/Micromake/C1/basic/Configuration_adv.h +++ b/config/examples/Micromake/C1/basic/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index 27fd805746..e351c786fe 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Mks/Robin_Lite3/Configuration_adv.h b/config/examples/Mks/Robin_Lite3/Configuration_adv.h index c7f0f2f8c7..cd5178f57f 100644 --- a/config/examples/Mks/Robin_Lite3/Configuration_adv.h +++ b/config/examples/Mks/Robin_Lite3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Mks/Robin_Pro/Configuration_adv.h b/config/examples/Mks/Robin_Pro/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Mks/Robin_Pro/Configuration_adv.h +++ b/config/examples/Mks/Robin_Pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 67d00e0e5b..d9390310f0 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Modix/Big60/Configuration_adv.h b/config/examples/Modix/Big60/Configuration_adv.h index b1b26df3f6..7987cff1a6 100644 --- a/config/examples/Modix/Big60/Configuration_adv.h +++ b/config/examples/Modix/Big60/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Nextion/Configuration_adv.h b/config/examples/Nextion/Configuration_adv.h index e7be1d6945..bc684f14d1 100644 --- a/config/examples/Nextion/Configuration_adv.h +++ b/config/examples/Nextion/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/ORD Bot/Hadron/Sanguinololu/Configuration_adv.h b/config/examples/ORD Bot/Hadron/Sanguinololu/Configuration_adv.h index 26fe3ea649..437114882a 100644 --- a/config/examples/ORD Bot/Hadron/Sanguinololu/Configuration_adv.h +++ b/config/examples/ORD Bot/Hadron/Sanguinololu/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Opulo/Lumen_REV3/Configuration_adv.h b/config/examples/Opulo/Lumen_REV3/Configuration_adv.h index 033ff1a0aa..14ad693063 100644 --- a/config/examples/Opulo/Lumen_REV3/Configuration_adv.h +++ b/config/examples/Opulo/Lumen_REV3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Opulo/Lumen_REV4/Configuration_adv.h b/config/examples/Opulo/Lumen_REV4/Configuration_adv.h index 5972047df5..e91f62ece4 100644 --- a/config/examples/Opulo/Lumen_REV4/Configuration_adv.h +++ b/config/examples/Opulo/Lumen_REV4/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Ortur 4/Configuration_adv.h b/config/examples/Ortur 4/Configuration_adv.h index 2ad309de81..db662ee77f 100644 --- a/config/examples/Ortur 4/Configuration_adv.h +++ b/config/examples/Ortur 4/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Polargraph/Configuration_adv.h b/config/examples/Polargraph/Configuration_adv.h index 21eb81a61e..3230eac9e7 100644 --- a/config/examples/Polargraph/Configuration_adv.h +++ b/config/examples/Polargraph/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration_adv.h b/config/examples/Printrbot/PrintrboardG2/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Printrbot/PrintrboardG2/Configuration_adv.h +++ b/config/examples/Printrbot/PrintrboardG2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Printrbot/Simple Metal RevD/Configuration_adv.h b/config/examples/Printrbot/Simple Metal RevD/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Printrbot/Simple Metal RevD/Configuration_adv.h +++ b/config/examples/Printrbot/Simple Metal RevD/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Printrbot/Simple_Metal_RevF6/Configuration_adv.h b/config/examples/Printrbot/Simple_Metal_RevF6/Configuration_adv.h index 56e15a2c2f..ce7bfad003 100644 --- a/config/examples/Printrbot/Simple_Metal_RevF6/Configuration_adv.h +++ b/config/examples/Printrbot/Simple_Metal_RevF6/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Prusa/MK3/Configuration_adv.h b/config/examples/Prusa/MK3/Configuration_adv.h index c789afe6f9..bd4da738b2 100644 --- a/config/examples/Prusa/MK3/Configuration_adv.h +++ b/config/examples/Prusa/MK3/Configuration_adv.h @@ -4434,93 +4434,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4561,14 +4524,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4577,28 +4535,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4616,12 +4572,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4631,15 +4612,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h b/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h index d793373790..827d394895 100644 --- a/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h +++ b/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h @@ -4433,93 +4433,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4560,14 +4523,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4615,12 +4571,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Qidi/Qidi 1/Configuration_adv.h b/config/examples/Qidi/Qidi 1/Configuration_adv.h index a7e443c764..d4c2070bd1 100644 --- a/config/examples/Qidi/Qidi 1/Configuration_adv.h +++ b/config/examples/Qidi/Qidi 1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Raiscube/A8r/Configuration_adv.h b/config/examples/Raiscube/A8r/Configuration_adv.h index b32b076d6f..81bcb98cec 100644 --- a/config/examples/Raiscube/A8r/Configuration_adv.h +++ b/config/examples/Raiscube/A8r/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index 6b00e6650b..4ce1ea7627 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Renkforce/RF100/Configuration_adv.h b/config/examples/Renkforce/RF100/Configuration_adv.h index 1c05f34bed..0e2c87dbda 100644 --- a/config/examples/Renkforce/RF100/Configuration_adv.h +++ b/config/examples/Renkforce/RF100/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Renkforce/RF100XL/Configuration_adv.h b/config/examples/Renkforce/RF100XL/Configuration_adv.h index 1c05f34bed..0e2c87dbda 100644 --- a/config/examples/Renkforce/RF100XL/Configuration_adv.h +++ b/config/examples/Renkforce/RF100XL/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Renkforce/RF100v2/Configuration_adv.h b/config/examples/Renkforce/RF100v2/Configuration_adv.h index 1c05f34bed..0e2c87dbda 100644 --- a/config/examples/Renkforce/RF100v2/Configuration_adv.h +++ b/config/examples/Renkforce/RF100v2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/RepRapPro/Huxley/Configuration_adv.h b/config/examples/RepRapPro/Huxley/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/RepRapPro/Huxley/Configuration_adv.h +++ b/config/examples/RepRapPro/Huxley/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/RepRapWorld/Megatronics/Configuration_adv.h b/config/examples/RepRapWorld/Megatronics/Configuration_adv.h index 9d0e1409a5..6a6c93d813 100644 --- a/config/examples/RepRapWorld/Megatronics/Configuration_adv.h +++ b/config/examples/RepRapWorld/Megatronics/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/RepRapWorld/Minitronics20/CNC/Configuration_adv.h b/config/examples/RepRapWorld/Minitronics20/CNC/Configuration_adv.h index bc7a37e6a8..180a08d2cd 100644 --- a/config/examples/RepRapWorld/Minitronics20/CNC/Configuration_adv.h +++ b/config/examples/RepRapWorld/Minitronics20/CNC/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index 3b6406e05a..c85365a0f6 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Robo3D/R1+/Configuration_adv.h b/config/examples/Robo3D/R1+/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Robo3D/R1+/Configuration_adv.h +++ b/config/examples/Robo3D/R1+/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Rolohaun/Rook MK1/Configuration_adv.h b/config/examples/Rolohaun/Rook MK1/Configuration_adv.h index 125c5c1e88..ab1f1ab2a6 100644 --- a/config/examples/Rolohaun/Rook MK1/Configuration_adv.h +++ b/config/examples/Rolohaun/Rook MK1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/SCARA/MP_SCARA/Configuration_adv.h b/config/examples/SCARA/MP_SCARA/Configuration_adv.h index 99c59a0596..ff25cb5a3e 100644 --- a/config/examples/SCARA/MP_SCARA/Configuration_adv.h +++ b/config/examples/SCARA/MP_SCARA/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/SCARA/Morgan/Configuration_adv.h b/config/examples/SCARA/Morgan/Configuration_adv.h index f7a35b3f31..7769406e7c 100644 --- a/config/examples/SCARA/Morgan/Configuration_adv.h +++ b/config/examples/SCARA/Morgan/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index 9411c39fb7..e1cf2d64c1 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/STM32/STM32F103RE/Configuration_adv.h b/config/examples/STM32/STM32F103RE/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/STM32/STM32F103RE/Configuration_adv.h +++ b/config/examples/STM32/STM32F103RE/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Simax/Mi-M200/Configuration_adv.h b/config/examples/Simax/Mi-M200/Configuration_adv.h index 7d08915fd8..5036afb3af 100644 --- a/config/examples/Simax/Mi-M200/Configuration_adv.h +++ b/config/examples/Simax/Mi-M200/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Simulator/Configuration_adv.h b/config/examples/Simulator/Configuration_adv.h index 6f099f6180..9df1047fa8 100644 --- a/config/examples/Simulator/Configuration_adv.h +++ b/config/examples/Simulator/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h b/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h index 22b97ebaf6..5ef64f5884 100644 --- a/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h +++ b/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index 86e4474120..6e396b0395 100644 --- a/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h index ec2172c806..cbf33424f8 100644 --- a/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h +++ b/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h b/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h index fa8aba3452..83c0654cf1 100644 --- a/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h +++ b/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h b/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h index 423f2c20b3..d3749d0550 100644 --- a/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h +++ b/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-02/Configuration_adv.h b/config/examples/Sovol/SV-02/Configuration_adv.h index 987f20ec9a..cbe01c0264 100644 --- a/config/examples/Sovol/SV-02/Configuration_adv.h +++ b/config/examples/Sovol/SV-02/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-03/Configuration_adv.h b/config/examples/Sovol/SV-03/Configuration_adv.h index b031dff9c4..eb2a86dd83 100644 --- a/config/examples/Sovol/SV-03/Configuration_adv.h +++ b/config/examples/Sovol/SV-03/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-05/Configuration_adv.h b/config/examples/Sovol/SV-05/Configuration_adv.h index 0348c2d385..ea2a9dd329 100644 --- a/config/examples/Sovol/SV-05/Configuration_adv.h +++ b/config/examples/Sovol/SV-05/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sovol/SV-06/Configuration_adv.h b/config/examples/Sovol/SV-06/Configuration_adv.h index a3268e671f..79ec02c549 100644 --- a/config/examples/Sovol/SV-06/Configuration_adv.h +++ b/config/examples/Sovol/SV-06/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sunlu/S8/Configuration_adv.h b/config/examples/Sunlu/S8/Configuration_adv.h index e75b5922c3..20689dfc04 100644 --- a/config/examples/Sunlu/S8/Configuration_adv.h +++ b/config/examples/Sunlu/S8/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Sunlu/T3/Configuration_adv.h b/config/examples/Sunlu/T3/Configuration_adv.h index ca1cf65a68..ebb89e5fbb 100644 --- a/config/examples/Sunlu/T3/Configuration_adv.h +++ b/config/examples/Sunlu/T3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h b/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h index 94b6a1aa43..735e0062b7 100644 --- a/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h +++ b/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index 66535373ad..74b6ae601f 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tevo/Nereus/Configuration_adv.h b/config/examples/Tevo/Nereus/Configuration_adv.h index 7ea2c3b32c..a6efdf31c2 100644 --- a/config/examples/Tevo/Nereus/Configuration_adv.h +++ b/config/examples/Tevo/Nereus/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tevo/Tarantula Pro/MKS Gen_L/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/MKS Gen_L/Configuration_adv.h index b071a22df2..79b174aa1a 100644 --- a/config/examples/Tevo/Tarantula Pro/MKS Gen_L/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/MKS Gen_L/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tevo/Tarantula Pro/MKS SGen_L/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/MKS SGen_L/Configuration_adv.h index 171348f28b..802f490d94 100644 --- a/config/examples/Tevo/Tarantula Pro/MKS SGen_L/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/MKS SGen_L/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 1624b0b2c2..d23e92630b 100644 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tevo/Tornado/V2 (MKS Gen_L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS Gen_L)/Configuration_adv.h index 1624b0b2c2..d23e92630b 100644 --- a/config/examples/Tevo/Tornado/V2 (MKS Gen_L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS Gen_L)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tinkerine/Ditto Pro/RAMPS 1.4/Configuration_adv.h b/config/examples/Tinkerine/Ditto Pro/RAMPS 1.4/Configuration_adv.h index c96019d2b5..1d65135ce4 100644 --- a/config/examples/Tinkerine/Ditto Pro/RAMPS 1.4/Configuration_adv.h +++ b/config/examples/Tinkerine/Ditto Pro/RAMPS 1.4/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index f121c4e665..b65f1f6576 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/D01/CXY-v6-191017 board/Configuration_adv.h b/config/examples/Tronxy/D01/CXY-v6-191017 board/Configuration_adv.h index 4cff0703ee..10b71ca19e 100644 --- a/config/examples/Tronxy/D01/CXY-v6-191017 board/Configuration_adv.h +++ b/config/examples/Tronxy/D01/CXY-v6-191017 board/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X1/Configuration_adv.h b/config/examples/Tronxy/X1/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Tronxy/X1/Configuration_adv.h +++ b/config/examples/Tronxy/X1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index 3826538019..58b31cb82f 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X5S-2E/Green Board (Chitu V5)/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Green Board (Chitu V5)/Configuration_adv.h index a0deefa385..5187535cec 100644 --- a/config/examples/Tronxy/X5S-2E/Green Board (Chitu V5)/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Green Board (Chitu V5)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X5S-2E/Red Board (Tronxy 3.1.0)/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Red Board (Tronxy 3.1.0)/Configuration_adv.h index 7301e33cee..05babe6502 100644 --- a/config/examples/Tronxy/X5S-2E/Red Board (Tronxy 3.1.0)/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Red Board (Tronxy 3.1.0)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X5S/Configuration_adv.h b/config/examples/Tronxy/X5S/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Tronxy/X5S/Configuration_adv.h +++ b/config/examples/Tronxy/X5S/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X5SA-2E/Configuration_adv.h b/config/examples/Tronxy/X5SA-2E/Configuration_adv.h index e41683e491..098b5f3057 100644 --- a/config/examples/Tronxy/X5SA-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5SA-2E/Configuration_adv.h @@ -4432,93 +4432,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4559,14 +4522,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4575,28 +4533,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4614,12 +4570,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4629,15 +4610,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/X5SA/Configuration_adv.h b/config/examples/Tronxy/X5SA/Configuration_adv.h index ddae586d23..5d13fc970c 100644 --- a/config/examples/Tronxy/X5SA/Configuration_adv.h +++ b/config/examples/Tronxy/X5SA/Configuration_adv.h @@ -4432,93 +4432,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4559,14 +4522,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4575,28 +4533,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4614,12 +4570,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4629,15 +4610,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/XY100/Configuration_adv.h b/config/examples/Tronxy/XY100/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/Tronxy/XY100/Configuration_adv.h +++ b/config/examples/Tronxy/XY100/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Tronxy/XY2-Pro/Configuration_adv.h b/config/examples/Tronxy/XY2-Pro/Configuration_adv.h index 992b5d85a7..b8d6cdaa6d 100644 --- a/config/examples/Tronxy/XY2-Pro/Configuration_adv.h +++ b/config/examples/Tronxy/XY2-Pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Turnigy/Fabrikator/Configuration_adv.h b/config/examples/Turnigy/Fabrikator/Configuration_adv.h index 5f2bb264e3..9b6ff1b310 100644 --- a/config/examples/Turnigy/Fabrikator/Configuration_adv.h +++ b/config/examples/Turnigy/Fabrikator/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/BlueR Plus/Configuration_adv.h b/config/examples/Two Trees/BlueR Plus/Configuration_adv.h index 1990031a45..1348664e48 100644 --- a/config/examples/Two Trees/BlueR Plus/Configuration_adv.h +++ b/config/examples/Two Trees/BlueR Plus/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h b/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h index 5cd15a6aa8..aaceed5933 100644 --- a/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h +++ b/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h b/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h index 5cd15a6aa8..aaceed5933 100644 --- a/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h +++ b/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h b/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h index 5cd15a6aa8..aaceed5933 100644 --- a/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h +++ b/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/SP-5_V3/Configuration_adv.h b/config/examples/Two Trees/SP-5_V3/Configuration_adv.h index 3ebf4d8843..6986fbbfd3 100644 --- a/config/examples/Two Trees/SP-5_V3/Configuration_adv.h +++ b/config/examples/Two Trees/SP-5_V3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2.1/Configuration_adv.h b/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2.1/Configuration_adv.h index 0e97d3129b..3f03095195 100644 --- a/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2.1/Configuration_adv.h +++ b/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2.1/Configuration_adv.h @@ -4435,93 +4435,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4562,14 +4525,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4578,28 +4536,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4617,12 +4573,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4632,15 +4613,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h b/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h index 63f6717f0d..07b113afd1 100644 --- a/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h +++ b/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h @@ -4435,93 +4435,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4562,14 +4525,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4578,28 +4536,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4617,12 +4573,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4632,15 +4613,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h b/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h index 829bd309ed..9e195bcc3d 100644 --- a/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h +++ b/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index 81d917206d..78a4046364 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index 252a51220e..02daaf179d 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Ultimaker/Ultimaker 2+/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker 2+/Configuration_adv.h index e32636f426..a9e4139d56 100644 --- a/config/examples/Ultimaker/Ultimaker 2+/Configuration_adv.h +++ b/config/examples/Ultimaker/Ultimaker 2+/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h index e1fac0e2be..01dc106350 100644 --- a/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h +++ b/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h index 9a02990f8f..cae1d29e45 100644 --- a/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h +++ b/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h index f32d46828a..000e87e103 100644 --- a/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h +++ b/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Ultimaker/Ultimaker Original Plus DXU/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker Original Plus DXU/Configuration_adv.h index ef3bb7a6f3..5d3802c40a 100644 --- a/config/examples/Ultimaker/Ultimaker Original Plus DXU/Configuration_adv.h +++ b/config/examples/Ultimaker/Ultimaker Original Plus DXU/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index d7fa389dc0..97c71adc32 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h b/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h index 123646747a..56d6904bef 100644 --- a/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h +++ b/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h @@ -4441,93 +4441,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4568,14 +4531,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4584,28 +4542,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4623,12 +4579,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4638,15 +4619,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index c9c646a4ed..602e3c1683 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -4441,93 +4441,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4568,14 +4531,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4584,28 +4542,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4623,12 +4579,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4638,15 +4619,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h index 194f36758b..3e523ab33a 100644 --- a/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Velleman/K8400/Single-head/Configuration_adv.h b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h index 194f36758b..3e523ab33a 100644 --- a/config/examples/Velleman/K8400/Single-head/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Voxelab/Aquila/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Voxelab/Aquila/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h index 519337119b..c9c22b84e8 100644 --- a/config/examples/Voxelab/Aquila/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h +++ b/config/examples/Voxelab/Aquila/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index 7afe7e6568..3d5ebb4902 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h b/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h index d81f2426a8..708e513f4d 100644 --- a/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index fc59f4847b..362ada09a6 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h index be77a52416..0126be7c43 100644 --- a/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index 1b7c7056f6..39b88e1def 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Wanhao/Duplicator i3 Plus/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Plus/Configuration_adv.h index 8739a2c890..34b94ea47a 100644 --- a/config/examples/Wanhao/Duplicator i3 Plus/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Plus/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Weedo/Tina2/V2/Configuration_adv.h b/config/examples/Weedo/Tina2/V2/Configuration_adv.h index d50a58dd66..871b913949 100644 --- a/config/examples/Weedo/Tina2/V2/Configuration_adv.h +++ b/config/examples/Weedo/Tina2/V2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Weedo/Tina2/V3/Configuration_adv.h b/config/examples/Weedo/Tina2/V3/Configuration_adv.h index d50a58dd66..871b913949 100644 --- a/config/examples/Weedo/Tina2/V3/Configuration_adv.h +++ b/config/examples/Weedo/Tina2/V3/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Weistek/wt150/Configuration_adv.h b/config/examples/Weistek/wt150/Configuration_adv.h index afae1e1a1c..843f392d0d 100644 --- a/config/examples/Weistek/wt150/Configuration_adv.h +++ b/config/examples/Weistek/wt150/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Zonestar/P802M/Configuration_adv.h b/config/examples/Zonestar/P802M/Configuration_adv.h index 6b8467df84..a73f03bad8 100644 --- a/config/examples/Zonestar/P802M/Configuration_adv.h +++ b/config/examples/Zonestar/P802M/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h index bb0159c9dd..35c33217fa 100644 --- a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h +++ b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h index 7935490992..3bafa367af 100644 --- a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h +++ b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h index 96db545e45..183917b8b8 100644 --- a/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 4e74b7e1e3..a9b09a7ad8 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Anycubic/Predator/Configuration_adv.h b/config/examples/delta/Anycubic/Predator/Configuration_adv.h index b262099a5f..4f325265a4 100644 --- a/config/examples/delta/Anycubic/Predator/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Predator/Configuration_adv.h @@ -4431,93 +4431,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4558,14 +4521,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4613,12 +4569,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index ae662d2dc5..96b72cb639 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index ae662d2dc5..96b72cb639 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h b/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h index 8544510c03..cbd95ab680 100644 --- a/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h +++ b/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h @@ -4427,93 +4427,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4554,14 +4517,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4570,28 +4528,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4609,12 +4565,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4624,15 +4605,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/Q5-nano_v2/Configuration_adv.h b/config/examples/delta/FLSUN/Q5-nano_v2/Configuration_adv.h index ff21b734f5..2cc81cd562 100644 --- a/config/examples/delta/FLSUN/Q5-nano_v2/Configuration_adv.h +++ b/config/examples/delta/FLSUN/Q5-nano_v2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h b/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h index 3ea7501473..f6d38fe361 100644 --- a/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h +++ b/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h b/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h index 2d3447a6e4..ac7bee38af 100644 --- a/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h +++ b/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index a6f1fa963e..6b0f28d28c 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index a6f1fa963e..6b0f28d28c 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 4fa865308d..12e7286efc 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Geeetech/G2/Configuration_adv.h b/config/examples/delta/Geeetech/G2/Configuration_adv.h index 298e39e29b..62d5d0a86e 100644 --- a/config/examples/delta/Geeetech/G2/Configuration_adv.h +++ b/config/examples/delta/Geeetech/G2/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h b/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h index 298e39e29b..62d5d0a86e 100644 --- a/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h +++ b/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Geeetech/G2S/Configuration_adv.h b/config/examples/delta/Geeetech/G2S/Configuration_adv.h index 298e39e29b..62d5d0a86e 100644 --- a/config/examples/delta/Geeetech/G2S/Configuration_adv.h +++ b/config/examples/delta/Geeetech/G2S/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h b/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h index 298e39e29b..62d5d0a86e 100644 --- a/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h +++ b/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h @@ -4426,93 +4426,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4553,14 +4516,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - ToolChange shall not try to push filament into the very tip of the nozzle @@ -4569,28 +4527,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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4608,12 +4564,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * and make loading more reliable. Suitable for an extruder equipped with a filament @@ -4623,15 +4604,13 @@ * 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. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index 12f4effae4..42389940f0 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h b/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h index 680a53f66d..0c5eff3417 100644 --- a/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h +++ b/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 10284cda7e..a1339cd5d4 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Malyan M300/Configuration_adv.h b/config/examples/delta/Malyan M300/Configuration_adv.h index aa3fe6e1aa..6ae6a0858d 100644 --- a/config/examples/delta/Malyan M300/Configuration_adv.h +++ b/config/examples/delta/Malyan M300/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 3cbabebee8..5c20831786 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/Velleman/K8800/Configuration_adv.h b/config/examples/delta/Velleman/K8800/Configuration_adv.h index f4b316ea6d..f754a4da42 100644 --- a/config/examples/delta/Velleman/K8800/Configuration_adv.h +++ b/config/examples/delta/Velleman/K8800/Configuration_adv.h @@ -4433,93 +4433,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4560,14 +4523,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4615,12 +4571,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index 4fa865308d..12e7286efc 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/kossel_clear/Configuration_adv.h b/config/examples/delta/kossel_clear/Configuration_adv.h index fa655b6fd5..f6fe4f4e19 100644 --- a/config/examples/delta/kossel_clear/Configuration_adv.h +++ b/config/examples/delta/kossel_clear/Configuration_adv.h @@ -4430,93 +4430,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4557,14 +4520,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4612,12 +4568,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/kossel_pro/Configuration_adv.h b/config/examples/delta/kossel_pro/Configuration_adv.h index 9ca8a1c4e7..a83e474232 100644 --- a/config/examples/delta/kossel_pro/Configuration_adv.h +++ b/config/examples/delta/kossel_pro/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index dfa57a34a0..4f0c36be04 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -4429,93 +4429,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4556,14 +4519,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4611,12 +4567,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index a2002f7eec..bb0542f8cf 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/linear_axes/Octopus 8 LINEAR_AXES/Configuration_adv.h b/config/examples/linear_axes/Octopus 8 LINEAR_AXES/Configuration_adv.h index 050af9b50f..d473341070 100644 --- a/config/examples/linear_axes/Octopus 8 LINEAR_AXES/Configuration_adv.h +++ b/config/examples/linear_axes/Octopus 8 LINEAR_AXES/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h b/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h index bdb10e9755..130e82756e 100644 --- a/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h +++ b/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 4a7ee78ab3..10f4c3a744 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /** diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index a44cd8ea68..ef01d7e0e9 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -4428,93 +4428,56 @@ //#define E_MUX0_PIN 40 // Always Required //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs + #elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 // Common settings for 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 - // Use hardware reset for MMU if a pin is defined for it - //#define MMU2_RST_PIN 23 + //#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3 + //#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 // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) //#define MMU2_MODE_12V + // Settings for filament load / unload from the LCD menu. + // This is for Průša MK3-style extruders. Customize for your hardware. + #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" - #endif - // Add an LCD menu for MMU2/MMU2S/MMU3 - //#define MMU_MENUS + // MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec. + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 4.4, 871 }, \ + { 10.0, 1393 }, \ + { 4.4, 871 }, \ + { 10.0, 198 } - // Settings for filament load / unload from the LCD menu. - // This is for Průša MK3-style extruders. Customize for your hardware. - #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #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 } + + #endif // HAS_PRUSA_MMU2 /** - * ------------ - * 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) - - #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ - { MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \ - { MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak - - #define MMU2_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) } - - /** - * Using a sensor like the MMU2S - * This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S. + * Options pertaining to MMU2S devices + * 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 */ #if HAS_PRUSA_MMU2S @@ -4555,14 +4518,9 @@ // 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 - // 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 + #define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries) // As discussed with our PrusaSlicer profile specialist // - 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) // 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. - #define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm) - #define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm) - #define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm) + #define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm) + #define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (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 MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s) + #define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s) - #define MMU2_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_FEED_RATE 50.0 // (mm/s) + #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. // Meanwhile the E-motor will unload 20mm of filament in about 1 second. - #define MMU2_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_LENGTH 80.0 // (mm) + #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 // then retract to the original position. This is used to check if the filament sensor // 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_HAS_CUTTER // Enable cutter related functionalities - //#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item + #define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm) + #define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm) + #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) /** * SpoolJoin Consumes All Filament -- EXPERIMENTAL @@ -4610,12 +4566,37 @@ * sensor is triggered through the gears) and the end of the PTFE tube and * 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 * 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. * If all attempts fail, a filament runout will be triggered. */ - //#define MMU_EXTRUDER_SENSOR - #if ENABLED(MMU_EXTRUDER_SENSOR) - #define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail + //#define MMU2_EXTRUDER_SENSOR + #if ENABLED(MMU2_EXTRUDER_SENSOR) + #define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure #endif #endif - //#define MMU2_DEBUG // Write debug info to serial output - #endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3 /**