PFW-1530 Initial prototype
Add a 'Tune' option to HOMING_IDLER_FAILED error This will open a menu which allows the user to change the stallguard threshold from the MMU error screen Change in memory: Flash: +334 bytes SRAM: +1 byte
This commit is contained in:
parent
c708456184
commit
5f60eaff85
|
|
@ -78,6 +78,19 @@ void MMU2::StopKeepPowered() {
|
||||||
mmu2Serial.close();
|
mmu2Serial.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MMU2::Tune() {
|
||||||
|
switch (lastErrorCode) {
|
||||||
|
case ErrorCode::HOMING_IDLER_FAILED:
|
||||||
|
{
|
||||||
|
// Prompt a menu for different values
|
||||||
|
tuneIdlerStallguardThreshold();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MMU2::Reset(ResetForm level) {
|
void MMU2::Reset(ResetForm level) {
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case Software:
|
case Software:
|
||||||
|
|
@ -742,6 +755,9 @@ void MMU2::CheckUserInput() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TuneMMU:
|
||||||
|
Tune();
|
||||||
|
break;
|
||||||
case ResetMMU:
|
case ResetMMU:
|
||||||
Reset(ResetPin); // we cannot do power cycle on the MK3
|
Reset(ResetPin); // we cannot do power cycle on the MK3
|
||||||
// ... but mmu2_power.cpp knows this and triggers a soft-reset instead.
|
// ... but mmu2_power.cpp knows this and triggers a soft-reset instead.
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,10 @@ public:
|
||||||
ErrorSourceNone = 0xFF,
|
ErrorSourceNone = 0xFF,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Tune value in MMU registers as a way to recover from errors
|
||||||
|
/// e.g. Idler Stallguard threshold
|
||||||
|
void Tune();
|
||||||
|
|
||||||
/// Perform a reset of the MMU
|
/// Perform a reset of the MMU
|
||||||
/// @param level physical form of the reset
|
/// @param level physical form of the reset
|
||||||
void Reset(ResetForm level);
|
void Reset(ResetForm level);
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ enum class ButtonOperations : uint8_t {
|
||||||
Unload = 4,
|
Unload = 4,
|
||||||
StopPrint = 5,
|
StopPrint = 5,
|
||||||
DisableMMU = 6,
|
DisableMMU = 6,
|
||||||
|
Tune = 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Button codes + extended actions performed on the printer's side
|
/// Button codes + extended actions performed on the printer's side
|
||||||
|
|
@ -29,6 +30,7 @@ enum Buttons : uint8_t {
|
||||||
ResetMMU,
|
ResetMMU,
|
||||||
StopPrint,
|
StopPrint,
|
||||||
DisableMMU,
|
DisableMMU,
|
||||||
|
TuneMMU, // Printer changes MMU register value
|
||||||
|
|
||||||
NoButton = 0xff // shall be kept last
|
NoButton = 0xff // shall be kept last
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -349,6 +349,7 @@ static const char MSG_BTN_RESET_MMU[] PROGMEM_I1 = ISTR("ResetMMU"); ////MSG_BTN
|
||||||
static const char MSG_BTN_UNLOAD[] PROGMEM_I1 = ISTR("Unload"); ////MSG_BTN_UNLOAD c=8
|
static const char MSG_BTN_UNLOAD[] PROGMEM_I1 = ISTR("Unload"); ////MSG_BTN_UNLOAD c=8
|
||||||
static const char MSG_BTN_STOP[] PROGMEM_I1 = ISTR("Stop"); ////MSG_BTN_STOP c=8
|
static const char MSG_BTN_STOP[] PROGMEM_I1 = ISTR("Stop"); ////MSG_BTN_STOP c=8
|
||||||
static const char MSG_BTN_DISABLE_MMU[] PROGMEM_I1 = ISTR("Disable"); ////MSG_BTN_DISABLE_MMU c=8
|
static const char MSG_BTN_DISABLE_MMU[] PROGMEM_I1 = ISTR("Disable"); ////MSG_BTN_DISABLE_MMU c=8
|
||||||
|
static const char MSG_BTN_TUNE_MMU[] PROGMEM_I1 = ISTR("Tune"); ////MSG_BTN_DISABLE_MMU c=8
|
||||||
static const char MSG_BTN_MORE[] PROGMEM_N1 = "\x06";
|
static const char MSG_BTN_MORE[] PROGMEM_N1 = "\x06";
|
||||||
|
|
||||||
// Used to parse the buttons from Btns().
|
// Used to parse the buttons from Btns().
|
||||||
|
|
@ -359,6 +360,7 @@ static const char * const btnOperation[] PROGMEM = {
|
||||||
_R(MSG_BTN_UNLOAD),
|
_R(MSG_BTN_UNLOAD),
|
||||||
_R(MSG_BTN_STOP),
|
_R(MSG_BTN_STOP),
|
||||||
_R(MSG_BTN_DISABLE_MMU),
|
_R(MSG_BTN_DISABLE_MMU),
|
||||||
|
_R(MSG_BTN_TUNE_MMU),
|
||||||
};
|
};
|
||||||
|
|
||||||
// We have 8 different operations/buttons at this time, so we need at least 4 bits to encode each.
|
// We have 8 different operations/buttons at this time, so we need at least 4 bits to encode each.
|
||||||
|
|
@ -380,7 +382,7 @@ static const uint8_t errorButtons[] PROGMEM = {
|
||||||
Btns(ButtonOperations::Continue, ButtonOperations::NoOperation),//LOAD_TO_EXTRUDER_FAILED
|
Btns(ButtonOperations::Continue, ButtonOperations::NoOperation),//LOAD_TO_EXTRUDER_FAILED
|
||||||
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//SELECTOR_CANNOT_HOME
|
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//SELECTOR_CANNOT_HOME
|
||||||
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//SELECTOR_CANNOT_MOVE
|
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//SELECTOR_CANNOT_MOVE
|
||||||
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//IDLER_CANNOT_HOME
|
Btns(ButtonOperations::Retry, ButtonOperations::Tune),//IDLER_CANNOT_HOME
|
||||||
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//IDLER_CANNOT_MOVE
|
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//IDLER_CANNOT_MOVE
|
||||||
|
|
||||||
Btns(ButtonOperations::Continue, ButtonOperations::ResetMMU),//WARNING_TMC_PULLEY_TOO_HOT
|
Btns(ButtonOperations::Continue, ButtonOperations::ResetMMU),//WARNING_TMC_PULLEY_TOO_HOT
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,6 @@ Buttons ButtonAvailable(uint16_t ec) {
|
||||||
case ERR_MECHANICAL_INSPECT_FINDA:
|
case ERR_MECHANICAL_INSPECT_FINDA:
|
||||||
case ERR_MECHANICAL_SELECTOR_CANNOT_HOME:
|
case ERR_MECHANICAL_SELECTOR_CANNOT_HOME:
|
||||||
case ERR_MECHANICAL_SELECTOR_CANNOT_MOVE:
|
case ERR_MECHANICAL_SELECTOR_CANNOT_MOVE:
|
||||||
case ERR_MECHANICAL_IDLER_CANNOT_HOME:
|
|
||||||
case ERR_MECHANICAL_IDLER_CANNOT_MOVE:
|
case ERR_MECHANICAL_IDLER_CANNOT_MOVE:
|
||||||
case ERR_MECHANICAL_PULLEY_CANNOT_MOVE:
|
case ERR_MECHANICAL_PULLEY_CANNOT_MOVE:
|
||||||
case ERR_SYSTEM_UNLOAD_MANUALLY:
|
case ERR_SYSTEM_UNLOAD_MANUALLY:
|
||||||
|
|
@ -219,6 +218,17 @@ Buttons ButtonAvailable(uint16_t ec) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ERR_MECHANICAL_IDLER_CANNOT_HOME:
|
||||||
|
switch (buttonSelectedOperation) {
|
||||||
|
// may be allow move selector right and left in the future
|
||||||
|
case ButtonOperations::Tune: // Tune Stallguard threshold
|
||||||
|
return TuneMMU;
|
||||||
|
case ButtonOperations::Retry: // "Repeat action"
|
||||||
|
return Middle;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ERR_MECHANICAL_LOAD_TO_EXTRUDER_FAILED:
|
case ERR_MECHANICAL_LOAD_TO_EXTRUDER_FAILED:
|
||||||
case ERR_SYSTEM_FILAMENT_EJECTED:
|
case ERR_SYSTEM_FILAMENT_EJECTED:
|
||||||
switch (buttonSelectedOperation) {
|
switch (buttonSelectedOperation) {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include "mmu2_error_converter.h"
|
#include "mmu2_error_converter.h"
|
||||||
#include "mmu2/error_codes.h"
|
#include "mmu2/error_codes.h"
|
||||||
#include "mmu2/buttons.h"
|
#include "mmu2/buttons.h"
|
||||||
|
#include "menu.h"
|
||||||
#include "ultralcd.h"
|
#include "ultralcd.h"
|
||||||
#include "Filament_sensor.h"
|
#include "Filament_sensor.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
|
|
@ -359,4 +360,38 @@ void ScreenClear(){
|
||||||
lcd_clear();
|
lcd_clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These are global while testing this concept
|
||||||
|
uint8_t stallGuardValue = 6; // default
|
||||||
|
bool tuningDone = false;
|
||||||
|
|
||||||
|
void tuneIdlerStallguardThresholdMenu() {
|
||||||
|
constexpr uint8_t maxStallguardThreshold = 7;
|
||||||
|
constexpr uint8_t minStallguardThreshold = 4;
|
||||||
|
MENU_BEGIN();
|
||||||
|
ON_MENU_LEAVE(
|
||||||
|
tuningDone = true;
|
||||||
|
mmu2.WriteRegister(0x19, (uint16_t)stallGuardValue);
|
||||||
|
);
|
||||||
|
MENU_ITEM_BACK_P(_i("Done"));
|
||||||
|
MENU_ITEM_EDIT_int3_P(
|
||||||
|
_i("Idler"),
|
||||||
|
&stallGuardValue,
|
||||||
|
minStallguardThreshold,
|
||||||
|
maxStallguardThreshold
|
||||||
|
);
|
||||||
|
MENU_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
void tuneIdlerStallguardThreshold() {
|
||||||
|
tuningDone = false;
|
||||||
|
menu_goto(tuneIdlerStallguardThresholdMenu, 0, 0, 0);
|
||||||
|
while(!tuningDone) {
|
||||||
|
manage_heater();
|
||||||
|
// Manage inactivity, but don't disable steppers on timeout.
|
||||||
|
manage_inactivity(true);
|
||||||
|
lcd_update(0);
|
||||||
|
}
|
||||||
|
lcd_return_to_status();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace MMU2
|
} // namespace MMU2
|
||||||
|
|
|
||||||
|
|
@ -86,4 +86,6 @@ void FullScreenMsgRestoringTemperature();
|
||||||
void ScreenUpdateEnable();
|
void ScreenUpdateEnable();
|
||||||
void ScreenClear();
|
void ScreenClear();
|
||||||
|
|
||||||
|
void tuneIdlerStallguardThreshold();
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue