Skip to content

Commit 26e8ed1

Browse files
committed
🔧 Clarify MMU2/MMU3
1 parent 51bc531 commit 26e8ed1

File tree

376 files changed

+30080
-37976
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

376 files changed

+30080
-37976
lines changed

‎config/default/Configuration_adv.h

+80-101
Original file line numberDiff line numberDiff line change
@@ -4428,93 +4428,56 @@
44284428
//#define E_MUX0_PIN 40 // Always Required
44294429
//#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
44304430
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
4431+
44314432
#elif HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
44324433
// Common settings for MMU2/MMU2S/MMU3
44334434
// Serial port used for communication with MMU2/MMU2S/MMU3.
4434-
#define MMU2_SERIAL_PORT 2
4435+
#define MMU_SERIAL_PORT 2
44354436
#define MMU_BAUD 115200
44364437

4437-
// Use hardware reset for MMU if a pin is defined for it
4438-
//#define MMU2_RST_PIN 23
4438+
//#define MMU_RST_PIN 23 // Define this pin to use Hardware Reset for MMU2/MMU2S/MMU3
4439+
4440+
//#define MMU_MENUS // Add an LCD menu for MMU2/MMU2S/MMU3
4441+
4442+
//#define MMU_DEBUG // Write debug info to serial output
44394443

4444+
// Options pertaining to MMU2 and MMU2S
44404445
#if HAS_PRUSA_MMU2
44414446
// Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
44424447
//#define MMU2_MODE_12V
44434448

4449+
// Settings for filament load / unload from the LCD menu.
4450+
// This is for Průša MK3-style extruders. Customize for your hardware.
4451+
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
4452+
44444453
// G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
44454454
#define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
4446-
#endif
44474455

4448-
// Add an LCD menu for MMU2/MMU2S/MMU3
4449-
//#define MMU_MENUS
4450-
4451-
// Settings for filament load / unload from the LCD menu.
4452-
// This is for Průša MK3-style extruders. Customize for your hardware.
4453-
#define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
4456+
// MMU2 sequences use mm/min. Not compatible with MMU3, which use mm/sec.
4457+
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
4458+
{ 4.4, 871 }, \
4459+
{ 10.0, 1393 }, \
4460+
{ 4.4, 871 }, \
4461+
{ 10.0, 198 }
4462+
4463+
#define MMU2_RAMMING_SEQUENCE \
4464+
{ 1.0, 1000 }, \
4465+
{ 1.0, 1500 }, \
4466+
{ 2.0, 2000 }, \
4467+
{ 1.5, 3000 }, \
4468+
{ 2.5, 4000 }, \
4469+
{ -15.0, 5000 }, \
4470+
{ -14.0, 1200 }, \
4471+
{ -6.0, 600 }, \
4472+
{ 10.0, 700 }, \
4473+
{ -10.0, 400 }, \
4474+
{ -50.0, 2000 }
4475+
4476+
#endif // HAS_PRUSA_MMU2
44544477

44554478
/**
4456-
* ------------
4457-
* MMU2 / MMU2S
4458-
* ------------
4459-
* MMU2 sequences use mm/min. Not compatible with MMU3 (see below).
4460-
* #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
4461-
* { 4.4, 871 }, \
4462-
* { 10.0, 1393 }, \
4463-
* { 4.4, 871 }, \
4464-
* { 10.0, 198 }
4465-
*/
4466-
4467-
/* #define MMU2_RAMMING_SEQUENCE \
4468-
* { 1.0, 1000 }, \
4469-
* { 1.0, 1500 }, \
4470-
* { 2.0, 2000 }, \
4471-
* { 1.5, 3000 }, \
4472-
* { 2.5, 4000 }, \
4473-
* { -15.0, 5000 }, \
4474-
* { -14.0, 1200 }, \
4475-
* { -6.0, 600 }, \
4476-
* { 10.0, 700 }, \
4477-
* { -10.0, 400 }, \
4478-
* { -50.0, 2000 }
4479-
*/
4480-
4481-
/**
4482-
* ----
4483-
* MMU3
4484-
* ----
4485-
* These values are compatible with MMU3 as they are defined in mm/s
4486-
*/
4487-
4488-
#define MMU2_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
4489-
#define MMU2_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
4490-
4491-
#define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
4492-
{ MMU2_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
4493-
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } // ( 3.3 mm/s) Slow load after heatbreak
4494-
4495-
#define MMU2_RAMMING_SEQUENCE \
4496-
{ 0.2816, MMM_TO_MMS(1339.0) }, \
4497-
{ 0.3051, MMM_TO_MMS(1451.0) }, \
4498-
{ 0.3453, MMM_TO_MMS(1642.0) }, \
4499-
{ 0.3990, MMM_TO_MMS(1897.0) }, \
4500-
{ 0.4761, MMM_TO_MMS(2264.0) }, \
4501-
{ 0.5767, MMM_TO_MMS(2742.0) }, \
4502-
{ 0.5691, MMM_TO_MMS(3220.0) }, \
4503-
{ 0.1081, MMM_TO_MMS(3220.0) }, \
4504-
{ 0.7644, MMM_TO_MMS(3635.0) }, \
4505-
{ 0.8248, MMM_TO_MMS(3921.0) }, \
4506-
{ 0.8483, MMM_TO_MMS(4033.0) }, \
4507-
{ -15.0, MMM_TO_MMS(6000.0) }, \
4508-
{ -24.5, MMM_TO_MMS(1200.0) }, \
4509-
{ -7.0, MMM_TO_MMS( 600.0) }, \
4510-
{ -3.5, MMM_TO_MMS( 360.0) }, \
4511-
{ 20.0, MMM_TO_MMS( 454.0) }, \
4512-
{ -20.0, MMM_TO_MMS( 303.0) }, \
4513-
{ -35.0, MMM_TO_MMS(2000.0) }
4514-
4515-
/**
4516-
* Using a sensor like the MMU2S
4517-
* This mode requires a MK3S extruder with a sensor at the extruder idler, like the MMU2S.
4479+
* Options pertaining to MMU2S devices
4480+
* Requires the MK3S extruder with a sensor at the extruder idler, like the MMU2S.
45184481
* See https://help.prusa3d.com/guide/3b-mk3s-mk2-5s-extruder-upgrade_41560#42048, step 11
45194482
*/
45204483
#if HAS_PRUSA_MMU2S
@@ -4555,14 +4518,9 @@
45554518

45564519
// MMU3 settings
45574520

4558-
#define MMU2_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
4521+
#define MMU3_HAS_CUTTER // Enable cutter related functionality
45594522

4560-
// Nominal distance from the extruder gear to the nozzle tip is 87mm
4561-
// However, some slipping may occur and we need separate distances for
4562-
// LoadToNozzle and ToolChange.
4563-
// - +5mm seemed good for LoadToNozzle,
4564-
// - but too much (made blobs) for a ToolChange
4565-
#define MMU2_LOAD_TO_NOZZLE_LENGTH 87.0 + 5.0
4523+
#define MMU3_MAX_RETRIES 3 // Number of retries (total time = timeout*retries)
45664524

45674525
// As discussed with our PrusaSlicer profile specialist
45684526
// - ToolChange shall not try to push filament into the very tip of the nozzle
@@ -4571,28 +4529,26 @@
45714529
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
45724530
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
45734531
// The printer intercepts such a call and sets its extra load distance to match the new value as well.
4574-
#define MMU2_FILAMENT_SENSOR_POSITION 0 // (mm)
4575-
#define MMU2_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
4576-
#define MMU2_TOOL_CHANGE_LOAD_LENGTH MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS // (mm)
4532+
#define MMU3_FILAMENT_SENSOR_E_POSITION 0 // (mm)
4533+
#define _MMU3_LOAD_DISTANCE_PAST_GEARS 5 // (mm)
4534+
#define MMU3_TOOL_CHANGE_LOAD_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU3_LOAD_DISTANCE_PAST_GEARS) // (mm)
45774535

4578-
#define MMU2_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
4579-
#define MMU2_UNLOAD_TO_FINDA_FEED_RATE 120.0 // (mm/s)
4536+
#define MMU3_LOAD_TO_NOZZLE_FEED_RATE 20.0 // (mm/s)
45804537

4581-
#define MMU2_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
4582-
#define MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
4538+
#define MMU3_VERIFY_LOAD_TO_NOZZLE_FEED_RATE 50.0 // (mm/s)
4539+
#define _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK -5.0 // (mm) Amount to adjust the length for verifying load-to-nozzle
45834540

45844541
// The first thing the MMU does is initialize its axis.
45854542
// Meanwhile the E-motor will unload 20mm of filament in about 1 second.
4586-
#define MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
4587-
#define MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
4543+
#define MMU3_RETRY_UNLOAD_TO_FINDA_LENGTH 80.0 // (mm)
4544+
#define MMU3_RETRY_UNLOAD_TO_FINDA_FEED_RATE 80.0 // (mm/s)
45884545

45894546
// After loading a new filament, the printer will extrude this length of filament
45904547
// then retract to the original position. This is used to check if the filament sensor
45914548
// reading flickers or filament is jammed.
4592-
#define MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH + MMU2_VERIFY_LOAD_TO_NOZZLE_TWEAK + MMU2_FILAMENT_SENSOR_POSITION) // (mm)
4593-
4594-
#define MMU_HAS_CUTTER // Enable cutter related functionalities
4595-
//#define MMU_FORCE_STEALTH_MODE // Force stealth mode and disable menu item
4549+
#define _MMU_EXTRUDER_PTFE_LENGTH 42.3 // (mm)
4550+
#define _MMU_EXTRUDER_HEATBREAK_LENGTH 17.7 // (mm)
4551+
#define MMU3_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH (MMU3_FILAMENT_SENSOR_E_POSITION + _MMU_EXTRUDER_PTFE_LENGTH + _MMU_EXTRUDER_HEATBREAK_LENGTH + _MMU3_VERIFY_LOAD_TO_NOZZLE_TWEAK) // (mm)
45964552

45974553
/**
45984554
* SpoolJoin Consumes All Filament -- EXPERIMENTAL
@@ -4610,12 +4566,37 @@
46104566
* sensor is triggered through the gears) and the end of the PTFE tube and
46114567
* can cause filament load issues.
46124568
*/
4613-
//#define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
4614-
4615-
#else
4569+
//#define MMU3_SPOOL_JOIN_CONSUMES_ALL_FILAMENT
4570+
4571+
// MMU3 sequences use mm/sec. Not compatible with MMU2 which use mm/min.
4572+
#define MMU3_LOAD_TO_NOZZLE_SEQUENCE \
4573+
{ _MMU_EXTRUDER_PTFE_LENGTH, MMM_TO_MMS(810) }, /* (13.5 mm/s) Fast load ahead of heatbreak */ \
4574+
{ _MMU_EXTRUDER_HEATBREAK_LENGTH, MMM_TO_MMS(198) } /* ( 3.3 mm/s) Slow load after heatbreak */
4575+
4576+
#define MMU3_RAMMING_SEQUENCE \
4577+
{ 0.2816, MMM_TO_MMS(1339.0) }, \
4578+
{ 0.3051, MMM_TO_MMS(1451.0) }, \
4579+
{ 0.3453, MMM_TO_MMS(1642.0) }, \
4580+
{ 0.3990, MMM_TO_MMS(1897.0) }, \
4581+
{ 0.4761, MMM_TO_MMS(2264.0) }, \
4582+
{ 0.5767, MMM_TO_MMS(2742.0) }, \
4583+
{ 0.5691, MMM_TO_MMS(3220.0) }, \
4584+
{ 0.1081, MMM_TO_MMS(3220.0) }, \
4585+
{ 0.7644, MMM_TO_MMS(3635.0) }, \
4586+
{ 0.8248, MMM_TO_MMS(3921.0) }, \
4587+
{ 0.8483, MMM_TO_MMS(4033.0) }, \
4588+
{ -15.0, MMM_TO_MMS(6000.0) }, \
4589+
{ -24.5, MMM_TO_MMS(1200.0) }, \
4590+
{ -7.0, MMM_TO_MMS( 600.0) }, \
4591+
{ -3.5, MMM_TO_MMS( 360.0) }, \
4592+
{ 20.0, MMM_TO_MMS( 454.0) }, \
4593+
{ -20.0, MMM_TO_MMS( 303.0) }, \
4594+
{ -35.0, MMM_TO_MMS(2000.0) }
4595+
4596+
#else // MMU2 (not MMU2S)
46164597

46174598
/**
4618-
* MMU1 Extruder Sensor
4599+
* MMU2 Extruder Sensor
46194600
*
46204601
* Support for a Průša (or other) IR Sensor to detect filament near the extruder
46214602
* and make loading more reliable. Suitable for an extruder equipped with a filament
@@ -4625,15 +4606,13 @@
46254606
* move up to the gears. If no filament is detected, the MMU2 can make some more attempts.
46264607
* If all attempts fail, a filament runout will be triggered.
46274608
*/
4628-
//#define MMU_EXTRUDER_SENSOR
4629-
#if ENABLED(MMU_EXTRUDER_SENSOR)
4630-
#define MMU_LOADING_ATTEMPTS_NR 5 // max. number of attempts to load filament if first load fail
4609+
//#define MMU2_EXTRUDER_SENSOR
4610+
#if ENABLED(MMU2_EXTRUDER_SENSOR)
4611+
#define MMU2_LOADING_ATTEMPTS_NR 5 // Number of times to try loading filament before failure
46314612
#endif
46324613

46334614
#endif
46344615

4635-
//#define MMU2_DEBUG // Write debug info to serial output
4636-
46374616
#endif // HAS_PRUSA_MMU2 || HAS_PRUSA_MMU3
46384617

46394618
/**

0 commit comments

Comments
 (0)