Skip to content

Commit

Permalink
Merge pull request MarlinFirmware#4111 from gudnimg/E-cool-gudni
Browse files Browse the repository at this point in the history
Fix clicking noise during Toolchange when E-cool mode is enabled
  • Loading branch information
3d-gussner authored Apr 4, 2023
2 parents eb3421f + 138654e commit 3b049a1
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
13 changes: 12 additions & 1 deletion Firmware/mmu2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -922,10 +922,12 @@ void MMU2::ReportError(ErrorCode ec, ErrorSource res) {
switch (logic.Progress()) {
case ProgressCode::UnloadingToFinda:
unloadFilamentStarted = false;
planner_abort_queued_moves(); // Abort excess E-moves to be safe
break;
case ProgressCode::FeedingToFSensor:
// FSENSOR error during load. Make sure E-motor stops moving.
loadFilamentStarted = false;
planner_abort_queued_moves(); // Abort excess E-moves to be safe
break;
default:
break;
Expand Down Expand Up @@ -1040,6 +1042,10 @@ void MMU2::OnMMUProgressMsgSame(ProgressCode pc) {
case FilamentState::AT_FSENSOR:
// fsensor triggered, finish FeedingToExtruder state
loadFilamentStarted = false;

// Abort any excess E-move from the planner queue
planner_abort_queued_moves();

// After the MMU knows the FSENSOR is triggered it will:
// 1. Push the filament by additional 30mm (see fsensorToNozzle)
// 2. Disengage the idler and push another 2mm.
Expand All @@ -1048,7 +1054,12 @@ void MMU2::OnMMUProgressMsgSame(ProgressCode pc) {
case FilamentState::NOT_PRESENT:
// fsensor not triggered, continue moving extruder
if (!planner_any_moves()) { // Only plan a move if there is no move ongoing
MoveE(2.0f, MMU2_LOAD_TO_NOZZLE_FEED_RATE);
// Plan a very long move, where 'very long' is hundreds
// of millimeters. Keep in mind though the move can't be much longer
// than 450mm because the firmware will ignore too long extrusions
// for safety reasons. See PREVENT_LENGTHY_EXTRUDE.
// Use 350mm to be safely away from the prevention threshold
MoveE(350.0f, MMU2_LOAD_TO_NOZZLE_FEED_RATE);
}
break;
default:
Expand Down
1 change: 1 addition & 0 deletions Firmware/mmu2_marlin.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ void MoveE(float delta, float feedRate);

float MoveRaiseZ(float delta);

void planner_abort_queued_moves();
void planner_synchronize();
bool planner_any_moves();
float planner_get_machine_position_E_mm();
Expand Down
11 changes: 11 additions & 0 deletions Firmware/mmu2_marlin1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@ float MoveRaiseZ(float delta) {
return raise_z(delta);
}

void planner_abort_queued_moves() {
planner_abort_hard();

// Unblock the planner. This should be safe in the
// toolchange context. Currently we are mainly aborting
// excess E-moves after detecting filament during toolchange.
// If a MMU error is reported, the planner must be unblocked
// as well so the extruder can be parked safely.
planner_aborted = false;
}

void planner_synchronize() {
st_synchronize();
}
Expand Down

0 comments on commit 3b049a1

Please sign in to comment.