Unload first before retrying
Should free the filament if accidentally held by the fsensor.
This commit is contained in:
parent
5639620041
commit
fe6e3ca2b1
|
|
@ -51,8 +51,8 @@ static constexpr float MMU2_LOAD_TO_NOZZLE_FEED_RATE = 20.0F; // mm/s
|
||||||
static constexpr float MMU2_UNLOAD_TO_FINDA_FEED_RATE = 120.0F; // mm/s
|
static constexpr float MMU2_UNLOAD_TO_FINDA_FEED_RATE = 120.0F; // mm/s
|
||||||
|
|
||||||
// The first the MMU does is initialise its axis. Meanwhile the E-motor will unload 20mm of filament in approx. 1 second.
|
// The first the MMU does is initialise its axis. Meanwhile the E-motor will unload 20mm of filament in approx. 1 second.
|
||||||
static constexpr float MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH = 20.0f; // mm
|
static constexpr float MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH = 80.0f; // mm
|
||||||
static constexpr float MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE = 20.0f; // mm/s
|
static constexpr float MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE = 80.0f; // mm/s
|
||||||
|
|
||||||
static constexpr uint8_t MMU2_NO_TOOL = 99;
|
static constexpr uint8_t MMU2_NO_TOOL = 99;
|
||||||
static constexpr uint32_t MMU_BAUD = 115200;
|
static constexpr uint32_t MMU_BAUD = 115200;
|
||||||
|
|
@ -735,6 +735,18 @@ void MMU2::CheckUserInput(){
|
||||||
SERIAL_ECHOLN(btn);
|
SERIAL_ECHOLN(btn);
|
||||||
ResumeHotendTemp(); // Recover the hotend temp before we attempt to do anything else...
|
ResumeHotendTemp(); // Recover the hotend temp before we attempt to do anything else...
|
||||||
Button(btn);
|
Button(btn);
|
||||||
|
|
||||||
|
// A quick hack: for specific error codes move the E-motor every time.
|
||||||
|
// Not sure if we can rely on the fsensor.
|
||||||
|
// Just plan the move, let the MMU take over when it is ready
|
||||||
|
switch(lastErrorCode){
|
||||||
|
case ErrorCode::FSENSOR_DIDNT_SWITCH_OFF:
|
||||||
|
case ErrorCode::FSENSOR_TOO_EARLY:
|
||||||
|
HelpUnloadToFinda();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case RestartMMU:
|
case RestartMMU:
|
||||||
Reset(ResetPin); // we cannot do power cycle on the MK3
|
Reset(ResetPin); // we cannot do power cycle on the MK3
|
||||||
|
|
@ -990,8 +1002,7 @@ void MMU2::OnMMUProgressMsgChanged(ProgressCode pc){
|
||||||
// We're likely recovering from an MMU error
|
// We're likely recovering from an MMU error
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
unloadFilamentStarted = true;
|
unloadFilamentStarted = true;
|
||||||
current_position[E_AXIS] -= MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH;
|
HelpUnloadToFinda();
|
||||||
plan_buffer_line_curposXYZE(MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ProgressCode::FeedingToFSensor:
|
case ProgressCode::FeedingToFSensor:
|
||||||
|
|
@ -1005,13 +1016,17 @@ void MMU2::OnMMUProgressMsgChanged(ProgressCode pc){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __attribute__((noiniline)) MMU2::HelpUnloadToFinda(){
|
||||||
|
current_position[E_AXIS] -= MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH;
|
||||||
|
plan_buffer_line_curposXYZE(MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE);
|
||||||
|
}
|
||||||
|
|
||||||
void MMU2::OnMMUProgressMsgSame(ProgressCode pc){
|
void MMU2::OnMMUProgressMsgSame(ProgressCode pc){
|
||||||
switch (pc) {
|
switch (pc) {
|
||||||
case ProgressCode::UnloadingToFinda:
|
case ProgressCode::UnloadingToFinda:
|
||||||
if (unloadFilamentStarted && !blocks_queued()) { // Only plan a move if there is no move ongoing
|
if (unloadFilamentStarted && !blocks_queued()) { // Only plan a move if there is no move ongoing
|
||||||
if (fsensor.getFilamentPresent()) {
|
if (fsensor.getFilamentPresent()) {
|
||||||
current_position[E_AXIS] -= MMU2_RETRY_UNLOAD_TO_FINDA_LENGTH;
|
HelpUnloadToFinda();
|
||||||
plan_buffer_line_curposXYZE(MMU2_RETRY_UNLOAD_TO_FINDA_FEED_RATE);
|
|
||||||
} else {
|
} else {
|
||||||
unloadFilamentStarted = false;
|
unloadFilamentStarted = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -290,6 +290,8 @@ private:
|
||||||
/// Common processing of pushing filament into the extruder - shared by tool_change, load_to_nozzle and probably others
|
/// Common processing of pushing filament into the extruder - shared by tool_change, load_to_nozzle and probably others
|
||||||
void ToolChangeCommon(uint8_t slot);
|
void ToolChangeCommon(uint8_t slot);
|
||||||
|
|
||||||
|
void HelpUnloadToFinda();
|
||||||
|
|
||||||
ProtocolLogic logic; ///< implementation of the protocol logic layer
|
ProtocolLogic logic; ///< implementation of the protocol logic layer
|
||||||
uint8_t extruder; ///< currently active slot in the MMU ... somewhat... not sure where to get it from yet
|
uint8_t extruder; ///< currently active slot in the MMU ... somewhat... not sure where to get it from yet
|
||||||
uint8_t tool_change_extruder; ///< only used for UI purposes
|
uint8_t tool_change_extruder; ///< only used for UI purposes
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue