ADAPTIVE_FAN_SLOWING extension to hotend thermal protection (#12853)
This commit is contained in:
committed by
Scott Lahteine
parent
459f4fef60
commit
082f6a27de
@ -866,11 +866,15 @@ void MarlinUI::draw_status_screen() {
|
||||
_draw_print_progress();
|
||||
#else
|
||||
char c;
|
||||
int per;
|
||||
uint16_t per;
|
||||
#if HAS_FAN0
|
||||
if (blink) {
|
||||
c = 'F';
|
||||
per = ((int(fan_speed[0]) + 1) * 100) / 256;
|
||||
if (blink || thermalManager.fan_speed_scaler[0] < 128) {
|
||||
uint16_t spd = thermalManager.fan_speed[0];
|
||||
if (blink) c = 'F';
|
||||
#if ENABLED(ADAPTIVE_FAN_SLOWING)
|
||||
else { c = '*'; spd = (spd * thermalManager.fan_speed_scaler[0]) >> 7; }
|
||||
#endif
|
||||
per = thermalManager.fanPercent(spd);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -1049,13 +1053,13 @@ void MarlinUI::draw_status_screen() {
|
||||
#if FAN_COUNT > 0
|
||||
if (0
|
||||
#if HAS_FAN0
|
||||
|| fan_speed[0]
|
||||
|| thermalManager.fan_speed[0]
|
||||
#endif
|
||||
#if HAS_FAN1
|
||||
|| fan_speed[1]
|
||||
|| thermalManager.fan_speed[1]
|
||||
#endif
|
||||
#if HAS_FAN2
|
||||
|| fan_speed[2]
|
||||
|| thermalManager.fan_speed[2]
|
||||
#endif
|
||||
) leds |= LED_C;
|
||||
#endif // FAN_COUNT > 0
|
||||
|
@ -291,7 +291,7 @@ void MarlinUI::draw_status_screen() {
|
||||
static uint8_t fan_frame;
|
||||
if (old_blink != blink) {
|
||||
old_blink = blink;
|
||||
if (!fan_speed[0] || ++fan_frame >= STATUS_FAN_FRAMES) fan_frame = 0;
|
||||
if (!thermalManager.fan_speed[0] || ++fan_frame >= STATUS_FAN_FRAMES) fan_frame = 0;
|
||||
}
|
||||
#endif
|
||||
if (PAGE_CONTAINS(STATUS_FAN_Y, STATUS_FAN_Y + STATUS_FAN_HEIGHT - 1))
|
||||
@ -305,7 +305,7 @@ void MarlinUI::draw_status_screen() {
|
||||
fan_frame == 3 ? status_fan3_bmp :
|
||||
#endif
|
||||
#elif STATUS_FAN_FRAMES > 1
|
||||
blink && fan_speed[0] ? status_fan1_bmp :
|
||||
blink && thermalManager.fan_speed[0] ? status_fan1_bmp :
|
||||
#endif
|
||||
status_fan0_bmp
|
||||
);
|
||||
@ -328,11 +328,18 @@ void MarlinUI::draw_status_screen() {
|
||||
// Fan, if a bitmap was provided
|
||||
#if DO_DRAW_FAN
|
||||
if (PAGE_CONTAINS(STATUS_FAN_TEXT_Y - INFO_FONT_ASCENT, STATUS_FAN_TEXT_Y - 1)) {
|
||||
const int per = ((int(fan_speed[0]) + 1) * 100) / 256;
|
||||
if (per) {
|
||||
char c = '%';
|
||||
uint16_t spd = thermalManager.fan_speed[0];
|
||||
if (spd) {
|
||||
#if ENABLED(ADAPTIVE_FAN_SLOWING)
|
||||
if (!blink && thermalManager.fan_speed_scaler[0] < 128) {
|
||||
spd = (spd * thermalManager.fan_speed_scaler[0]) >> 7;
|
||||
c = '*';
|
||||
}
|
||||
#endif
|
||||
lcd_moveto(STATUS_FAN_TEXT_X, STATUS_FAN_TEXT_Y);
|
||||
lcd_put_u8str(itostr3(per));
|
||||
lcd_put_wchar('%');
|
||||
lcd_put_u8str(itostr3(thermalManager.fanPercent(spd)));
|
||||
lcd_put_wchar(c);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -707,7 +707,7 @@ bool ST7920_Lite_Status_Screen::indicators_changed() {
|
||||
// them only during blinks we gain a bit of stability.
|
||||
const bool blink = ui.get_blink();
|
||||
const uint16_t feedrate_perc = feedrate_percentage;
|
||||
const uint8_t fs = (((uint16_t)fan_speed[0] + 1) * 100) / 256;
|
||||
const uint16_t fs = (thermalManager.fan_speed[0] * uint16_t(thermalManager.fan_speed_scaler[0])) >> 7;
|
||||
const int16_t extruder_1_target = thermalManager.degTargetHotend(0);
|
||||
#if HOTENDS > 1
|
||||
const int16_t extruder_2_target = thermalManager.degTargetHotend(1);
|
||||
@ -734,7 +734,6 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) {
|
||||
const bool blink = ui.get_blink();
|
||||
const duration_t elapsed = print_job_timer.duration();
|
||||
const uint16_t feedrate_perc = feedrate_percentage;
|
||||
const uint8_t fs = (((uint16_t)fan_speed[0] + 1) * 100) / 256;
|
||||
const int16_t extruder_1_temp = thermalManager.degHotend(0),
|
||||
extruder_1_target = thermalManager.degTargetHotend(0);
|
||||
#if HOTENDS > 1
|
||||
@ -753,12 +752,20 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) {
|
||||
#if HAS_HEATED_BED
|
||||
draw_bed_temp(bed_temp, bed_target, forceUpdate);
|
||||
#endif
|
||||
draw_fan_speed(fs);
|
||||
|
||||
uint16_t spd = thermalManager.fan_speed[0];
|
||||
|
||||
#if ENABLED(ADAPTIVE_FAN_SLOWING)
|
||||
if (!blink && thermalManager.fan_speed_scaler[0] < 128)
|
||||
spd = (spd * thermalManager.fan_speed_scaler[0]) >> 7;
|
||||
#endif
|
||||
|
||||
draw_fan_speed(thermalManager.fanPercent(spd));
|
||||
draw_print_time(elapsed);
|
||||
draw_feedrate_percentage(feedrate_perc);
|
||||
|
||||
// Update the fan and bed animations
|
||||
if (fs) draw_fan_icon(blink);
|
||||
if (spd) draw_fan_icon(blink);
|
||||
#if HAS_HEATED_BED
|
||||
draw_heat_icon(bed_target > 0 && blink, bed_target > 0);
|
||||
#endif
|
||||
|
@ -180,7 +180,13 @@ namespace ExtUI {
|
||||
return thermalManager.degTargetHotend(extruder - E0);
|
||||
}
|
||||
|
||||
float getFan_percent(const fan_t fan) { return ((float(fan_speed[fan - FAN0]) + 1) * 100) / 256; }
|
||||
float getTargetFan_percent(const fan_t fan) {
|
||||
return thermalManager.fanPercent(thermalManager.fan_speed[fan - FAN0]);
|
||||
}
|
||||
|
||||
float getActualFan_percent(const fan_t fan) {
|
||||
return thermalManager.fanPercent((thermalManager.fan_speed[fan - FAN0] * uint16_t(thermalManager.fan_speed_scaler[fan - FAN0])) >> 7);
|
||||
}
|
||||
|
||||
float getAxisPosition_mm(const axis_t axis) {
|
||||
return flags.manual_motion ? destination[axis] : current_position[axis];
|
||||
@ -560,9 +566,9 @@ namespace ExtUI {
|
||||
thermalManager.setTargetHotend(clamp(value, 0, heater_maxtemp[e] - 15), e);
|
||||
}
|
||||
|
||||
void setFan_percent(float value, const fan_t fan) {
|
||||
void setTargetFan_percent(const float value, const fan_t fan) {
|
||||
if (fan < FAN_COUNT)
|
||||
fan_speed[fan - FAN0] = clamp(round(value * 255 / 100), 0, 255);
|
||||
thermalManager.set_fan_speed(fan - FAN0, map(value, 0, 100, 0, 255));
|
||||
}
|
||||
|
||||
void setFeedrate_percent(const float value) {
|
||||
|
@ -72,7 +72,8 @@ namespace ExtUI {
|
||||
float getActualTemp_celsius(const extruder_t);
|
||||
float getTargetTemp_celsius(const heater_t);
|
||||
float getTargetTemp_celsius(const extruder_t);
|
||||
float getFan_percent(const fan_t);
|
||||
float getTargetFan_percent(const fan_t);
|
||||
float getActualFan_percent(const fan_t);
|
||||
float getAxisPosition_mm(const axis_t);
|
||||
float getAxisPosition_mm(const extruder_t);
|
||||
float getAxisSteps_per_mm(const axis_t);
|
||||
@ -100,7 +101,7 @@ namespace ExtUI {
|
||||
|
||||
void setTargetTemp_celsius(const float, const heater_t);
|
||||
void setTargetTemp_celsius(const float, const extruder_t);
|
||||
void setFan_percent(const float, const fan_t);
|
||||
void setTargetFan_percent(const float, const fan_t);
|
||||
void setAxisPosition_mm(const float, const axis_t);
|
||||
void setAxisPosition_mm(const float, const extruder_t);
|
||||
void setAxisSteps_per_mm(const float, const axis_t);
|
||||
|
@ -255,7 +255,7 @@ void process_lcd_p_command(const char* command) {
|
||||
quickstop_stepper();
|
||||
print_job_timer.stop();
|
||||
thermalManager.disable_all_heaters();
|
||||
zero_fan_speeds();
|
||||
thermalManager.zero_fan_speeds();
|
||||
wait_for_heatup = false;
|
||||
write_to_lcd_P(PSTR("{SYS:STARTED}"));
|
||||
#endif
|
||||
|
@ -54,7 +54,7 @@ void lcd_pause() {
|
||||
void lcd_resume() {
|
||||
#if ENABLED(SDSUPPORT)
|
||||
if (card.isPaused()) enqueue_and_echo_commands_P(PSTR("M24"));
|
||||
#elif ENABLED(ACTION_ON_RESUME)
|
||||
#elif defined(ACTION_ON_RESUME)
|
||||
SERIAL_ECHOLNPGM("//action:" ACTION_ON_RESUME);
|
||||
#endif
|
||||
}
|
||||
|
@ -52,9 +52,9 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
|
||||
#endif
|
||||
#if FAN_COUNT > 0
|
||||
#if FAN_COUNT > 1
|
||||
fan_speed[active_extruder < FAN_COUNT ? active_extruder : 0] = fan;
|
||||
thermalManager.set_fan_speed(active_extruder < FAN_COUNT ? active_extruder : 0, fan);
|
||||
#else
|
||||
fan_speed[0] = fan;
|
||||
thermalManager.set_fan_speed(0, fan);
|
||||
#endif
|
||||
#else
|
||||
UNUSED(fan);
|
||||
@ -292,7 +292,7 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
|
||||
}
|
||||
|
||||
void lcd_cooldown() {
|
||||
zero_fan_speeds();
|
||||
thermalManager.zero_fan_speeds();
|
||||
thermalManager.disable_all_heaters();
|
||||
ui.return_to_status();
|
||||
}
|
||||
@ -339,21 +339,21 @@ void menu_temperature() {
|
||||
//
|
||||
#if FAN_COUNT > 0
|
||||
#if HAS_FAN0
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &fan_speed[0], 0, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int8, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.lcd_tmpfan_speed[0], 0, 255, thermalManager.lcd_setFanSpeed0);
|
||||
#if ENABLED(EXTRA_FAN_SPEED)
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &new_fan_speed[0], 3, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_FAN1
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_FAN_SPEED " 2", &fan_speed[1], 0, 255);
|
||||
#if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int8, MSG_FAN_SPEED " 2", &thermalManager.lcd_tmpfan_speed[1], 0, 255, thermalManager.lcd_setFanSpeed1);
|
||||
#if ENABLED(EXTRA_FAN_SPEED)
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 2", &new_fan_speed[1], 3, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_FAN2
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_FAN_SPEED " 3", &fan_speed[2], 0, 255);
|
||||
#if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int8, MSG_FAN_SPEED " 3", &thermalManager.lcd_tmpfan_speed[2], 0, 255, thermalManager.lcd_setFanSpeed2);
|
||||
#if ENABLED(EXTRA_FAN_SPEED)
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 3", &new_fan_speed[2], 3, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
|
||||
#endif
|
||||
#endif
|
||||
#endif // FAN_COUNT > 0
|
||||
|
@ -141,21 +141,21 @@ void menu_tune() {
|
||||
//
|
||||
#if FAN_COUNT > 0
|
||||
#if HAS_FAN0
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &fan_speed[0], 0, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int8, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.lcd_tmpfan_speed[0], 0, 255, thermalManager.lcd_setFanSpeed0);
|
||||
#if ENABLED(EXTRA_FAN_SPEED)
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &new_fan_speed[0], 3, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_FAN1
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_FAN_SPEED " 2", &fan_speed[1], 0, 255);
|
||||
#if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int8, MSG_FAN_SPEED " 2", &thermalManager.lcd_tmpfan_speed[1], 0, 255, thermalManager.lcd_setFanSpeed1);
|
||||
#if ENABLED(EXTRA_FAN_SPEED)
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 2", &new_fan_speed[1], 3, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_FAN2
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_FAN_SPEED " 3", &fan_speed[2], 0, 255);
|
||||
#if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
|
||||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int8, MSG_FAN_SPEED " 3", &thermalManager.lcd_tmpfan_speed[2], 0, 255, thermalManager.lcd_setFanSpeed2);
|
||||
#if ENABLED(EXTRA_FAN_SPEED)
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 3", &new_fan_speed[2], 3, 255);
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int8, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
|
||||
#endif
|
||||
#endif
|
||||
#endif // FAN_COUNT > 0
|
||||
|
Reference in New Issue
Block a user