diff --git a/Firmware/mmu2.cpp b/Firmware/mmu2.cpp index 2681c43a4..79f8518ae 100644 --- a/Firmware/mmu2.cpp +++ b/Firmware/mmu2.cpp @@ -278,6 +278,7 @@ bool MMU2::ToolChangeCommonOnce(uint8_t slot){ static_assert(MAX_RETRIES > 1); // need >1 retries to do the cut in the last attempt for(uint8_t retries = MAX_RETRIES; retries; --retries){ for(;;) { + disable_e0(); // it may seem counterintuitive to disable the E-motor, but it gets enabled in the planner whenever the E-motor is to move tool_change_extruder = slot; logic.ToolChange(slot); // let the MMU pull the filament out and push a new one in if( manage_response(true, true) ) @@ -429,6 +430,7 @@ bool MMU2::unload() { // we assume the printer managed to relieve filament tip from the gears, // so repeating that part in case of an MMU restart is not necessary for(;;) { + disable_e0(); logic.UnloadFilament(); if( manage_response(false, true) ) break; @@ -466,6 +468,7 @@ bool MMU2::cut_filament(uint8_t slot, bool enableFullScreenMsg /* = true */){ ReportingRAII rep(CommandInProgress::CutFilament); for(;;){ + disable_e0(); logic.CutFilament(slot); if( manage_response(false, true) ) break; @@ -495,6 +498,7 @@ bool MMU2::load_filament(uint8_t slot) { ReportingRAII rep(CommandInProgress::LoadFilament); for(;;) { + disable_e0(); logic.LoadFilament(slot); if( manage_response(false, false) ) break; @@ -560,6 +564,7 @@ bool MMU2::eject_filament(uint8_t slot, bool enableFullScreenMsg /* = true */) { ReportingRAII rep(CommandInProgress::EjectFilament); for(;;) { + disable_e0(); logic.EjectFilament(slot); if( manage_response(false, true) ) break; @@ -569,7 +574,6 @@ bool MMU2::eject_filament(uint8_t slot, bool enableFullScreenMsg /* = true */) { extruder = MMU2_NO_TOOL; tool_change_extruder = MMU2_NO_TOOL; Sound_MakeSound(e_SOUND_TYPE_StandardConfirm); -// disable_E0(); return true; } @@ -586,6 +590,7 @@ void MMU2::SaveHotendTemp(bool turn_off_nozzle) { if (mmu_print_saved & SavedState::Cooldown) return; if (turn_off_nozzle && !(mmu_print_saved & SavedState::CooldownPending)){ + disable_e0(); resume_hotend_temp = degTargetHotend(active_extruder); mmu_print_saved |= SavedState::CooldownPending; LogEchoEvent_P(PSTR("Heater cooldown pending")); @@ -595,6 +600,7 @@ void MMU2::SaveHotendTemp(bool turn_off_nozzle) { void MMU2::SaveAndPark(bool move_axes) { if (mmu_print_saved == SavedState::None) { // First occurrence. Save current position, park print head, disable nozzle heater. LogEchoEvent_P(PSTR("Saving and parking")); + disable_e0(); st_synchronize(); if (move_axes){