Merge pull request #3787 from gudnimg/PFW-1439
PFW-1448 Fix underextrusion + compensate load to nozzle extruder sequence for Extra Loading Distance
This commit is contained in:
commit
8414c272bf
|
|
@ -23,8 +23,6 @@ static_assert(EXTRUDERS==1);
|
||||||
|
|
||||||
namespace MMU2 {
|
namespace MMU2 {
|
||||||
|
|
||||||
void execute_extruder_sequence(const E_Step *sequence, int steps);
|
|
||||||
|
|
||||||
template<typename F>
|
template<typename F>
|
||||||
void waitForHotendTargetTemp(uint16_t delay, F f){
|
void waitForHotendTargetTemp(uint16_t delay, F f){
|
||||||
while (((degTargetHotend(active_extruder) - degHotend(active_extruder)) > 5)) {
|
while (((degTargetHotend(active_extruder) - degHotend(active_extruder)) > 5)) {
|
||||||
|
|
@ -251,9 +249,9 @@ bool MMU2::VerifyFilamentEnteredPTFE()
|
||||||
uint8_t fsensorState = 0;
|
uint8_t fsensorState = 0;
|
||||||
// MMU has finished its load, push the filament further by some defined constant length
|
// MMU has finished its load, push the filament further by some defined constant length
|
||||||
// If the filament sensor reads 0 at any moment, then report FAILURE
|
// If the filament sensor reads 0 at any moment, then report FAILURE
|
||||||
current_position[E_AXIS] += MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH - logic.ExtraLoadDistance();
|
current_position[E_AXIS] += MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH - (logic.ExtraLoadDistance() - MMU2_FILAMENT_SENSOR_POSITION);
|
||||||
plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
|
plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
|
||||||
current_position[E_AXIS] -= (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH - logic.ExtraLoadDistance());
|
current_position[E_AXIS] -= (MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH - (logic.ExtraLoadDistance() - MMU2_FILAMENT_SENSOR_POSITION));
|
||||||
plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
|
plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
|
||||||
|
|
||||||
while(blocks_queued())
|
while(blocks_queued())
|
||||||
|
|
@ -357,7 +355,7 @@ bool MMU2::tool_change(char code, uint8_t slot) {
|
||||||
|
|
||||||
case 'c': {
|
case 'c': {
|
||||||
waitForHotendTargetTemp(100, []{});
|
waitForHotendTargetTemp(100, []{});
|
||||||
execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, sizeof(load_to_nozzle_sequence) / sizeof (load_to_nozzle_sequence[0]));
|
execute_load_to_nozzle_sequence();
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -508,7 +506,7 @@ bool MMU2::load_filament_to_nozzle(uint8_t slot) {
|
||||||
ToolChangeCommon(slot);
|
ToolChangeCommon(slot);
|
||||||
|
|
||||||
// Finish loading to the nozzle with finely tuned steps.
|
// Finish loading to the nozzle with finely tuned steps.
|
||||||
execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, sizeof(load_to_nozzle_sequence) / sizeof (load_to_nozzle_sequence[0]));
|
execute_load_to_nozzle_sequence();
|
||||||
Sound_MakeSound(e_SOUND_TYPE_StandardConfirm);
|
Sound_MakeSound(e_SOUND_TYPE_StandardConfirm);
|
||||||
}
|
}
|
||||||
lcd_update_enable(true);
|
lcd_update_enable(true);
|
||||||
|
|
@ -839,6 +837,13 @@ void MMU2::execute_extruder_sequence(const E_Step *sequence, uint8_t steps) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MMU2::execute_load_to_nozzle_sequence() {
|
||||||
|
st_synchronize();
|
||||||
|
// Compensate for configurable Extra Loading Distance
|
||||||
|
current_position[E_AXIS] -= (logic.ExtraLoadDistance() - MMU2_FILAMENT_SENSOR_POSITION);
|
||||||
|
execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, sizeof(load_to_nozzle_sequence) / sizeof (load_to_nozzle_sequence[0]));
|
||||||
|
}
|
||||||
|
|
||||||
void MMU2::ReportError(ErrorCode ec, ErrorSource res) {
|
void MMU2::ReportError(ErrorCode ec, ErrorSource res) {
|
||||||
// Due to a potential lossy error reporting layers linked to this hook
|
// Due to a potential lossy error reporting layers linked to this hook
|
||||||
// we'd better report everything to make sure especially the error states
|
// we'd better report everything to make sure especially the error states
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,7 @@ private:
|
||||||
|
|
||||||
void filament_ramming();
|
void filament_ramming();
|
||||||
void execute_extruder_sequence(const E_Step *sequence, uint8_t steps);
|
void execute_extruder_sequence(const E_Step *sequence, uint8_t steps);
|
||||||
|
void execute_load_to_nozzle_sequence();
|
||||||
|
|
||||||
/// Reports an error into attached ExtUIs
|
/// Reports an error into attached ExtUIs
|
||||||
/// @param ec error code, see ErrorCode
|
/// @param ec error code, see ErrorCode
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,9 @@ static constexpr float MMU2_LOAD_TO_NOZZLE_LENGTH = 87.0F + 5.0F;
|
||||||
// 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)
|
// 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)
|
||||||
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
|
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
|
||||||
// The printer intercepts such a call and sets its extra load distance to match the new value as well.
|
// The printer intercepts such a call and sets its extra load distance to match the new value as well.
|
||||||
static constexpr uint8_t MMU2_TOOL_CHANGE_LOAD_LENGTH = 5 + 16; // mm
|
static constexpr float MMU2_FILAMENT_SENSOR_POSITION = 16; // mm
|
||||||
|
static constexpr float MMU2_LOAD_DISTANCE_PAST_GEARS = 5; // mm
|
||||||
|
static constexpr uint8_t MMU2_TOOL_CHANGE_LOAD_LENGTH = static_cast<uint8_t>(MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS); // mm
|
||||||
|
|
||||||
static constexpr float MMU2_EXTRUDER_PTFE_LENGTH = 50.f; // mm
|
static constexpr float MMU2_EXTRUDER_PTFE_LENGTH = 50.f; // mm
|
||||||
static constexpr float MMU2_EXTRUDER_HEATBREAK_LENGTH = 17.7f; // mm
|
static constexpr float MMU2_EXTRUDER_HEATBREAK_LENGTH = 17.7f; // mm
|
||||||
|
|
@ -64,7 +66,7 @@ static constexpr E_Step ramming_sequence[] PROGMEM = {
|
||||||
{ -35.0F, 2000.0F / 60.F},
|
{ -35.0F, 2000.0F / 60.F},
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr E_Step load_to_nozzle_sequence[] PROGMEM = {
|
static constexpr E_Step load_to_nozzle_sequence[] PROGMEM = {
|
||||||
{ 10.0F, 810.0F / 60.F}, // feed rate = 13.5mm/s - Load fast until filament reach end of nozzle
|
{ MMU2_EXTRUDER_PTFE_LENGTH, 810.0F / 60.F}, // feed rate = 13.5mm/s - Load fast while not at heatbreak
|
||||||
{ 25.0F, 198.0F / 60.F}, // feed rate = 3.3mm/s - Load slower once filament is out of the nozzle
|
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, 198.0F / 60.F}, // feed rate = 3.3mm/s - Load slower once filament reaches heatbreak
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,9 @@ static constexpr float MMU2_LOAD_TO_NOZZLE_LENGTH = 87.0F + 5.0F;
|
||||||
// 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)
|
// 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)
|
||||||
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
|
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
|
||||||
// The printer intercepts such a call and sets its extra load distance to match the new value as well.
|
// The printer intercepts such a call and sets its extra load distance to match the new value as well.
|
||||||
static constexpr uint8_t MMU2_TOOL_CHANGE_LOAD_LENGTH = 5; // mm
|
static constexpr float MMU2_FILAMENT_SENSOR_POSITION = 0; // mm
|
||||||
|
static constexpr float MMU2_LOAD_DISTANCE_PAST_GEARS = 5; // mm
|
||||||
|
static constexpr uint8_t MMU2_TOOL_CHANGE_LOAD_LENGTH = static_cast<uint8_t>(MMU2_FILAMENT_SENSOR_POSITION + MMU2_LOAD_DISTANCE_PAST_GEARS); // mm
|
||||||
|
|
||||||
static constexpr float MMU2_EXTRUDER_PTFE_LENGTH = 42.3f; // mm
|
static constexpr float MMU2_EXTRUDER_PTFE_LENGTH = 42.3f; // mm
|
||||||
static constexpr float MMU2_EXTRUDER_HEATBREAK_LENGTH = 17.7f; // mm
|
static constexpr float MMU2_EXTRUDER_HEATBREAK_LENGTH = 17.7f; // mm
|
||||||
|
|
@ -64,7 +66,7 @@ static constexpr E_Step ramming_sequence[] PROGMEM = {
|
||||||
{ -35.0F, 2000.0F / 60.F},
|
{ -35.0F, 2000.0F / 60.F},
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr E_Step load_to_nozzle_sequence[] PROGMEM = {
|
static constexpr E_Step load_to_nozzle_sequence[] PROGMEM = {
|
||||||
{ 10.0F, 810.0F / 60.F}, // feed rate = 13.5mm/s - Load fast until filament reach end of nozzle
|
{ MMU2_EXTRUDER_PTFE_LENGTH, 810.0F / 60.F}, // feed rate = 13.5mm/s - Load fast while not at heatbreak
|
||||||
{ 25.0F, 198.0F / 60.F}, // feed rate = 3.3mm/s - Load slower once filament is out of the nozzle
|
{ MMU2_EXTRUDER_HEATBREAK_LENGTH, 198.0F / 60.F}, // feed rate = 3.3mm/s - Load slower once filament reaches heatbreak
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue