Isolate temp runaway checks from PID management

This commit is contained in:
Yuri D'Elia 2022-05-25 19:46:00 +02:00
parent 026733e75f
commit 61575995e0

View file

@ -1857,10 +1857,6 @@ static void pid_heater(uint8_t e, const float current, const int target)
float pid_input;
float pid_output;
#ifdef TEMP_RUNAWAY_EXTRUDER_HYSTERESIS
temp_runaway_check(e+1, target, current, (int)soft_pwm[e], false);
#endif
#ifdef PIDTEMP
pid_input = current;
@ -1940,10 +1936,6 @@ static void pid_bed(const float current, const int target)
float pid_input;
float pid_output;
#ifdef TEMP_RUNAWAY_BED_HYSTERESIS
temp_runaway_check(0, target, current, (int)soft_pwm_bed, true);
#endif
#ifndef PIDTEMPBED
if(_millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL)
return;
@ -2138,6 +2130,17 @@ static void temp_mgr_pid()
pid_bed(current_temperature_bed_isr, target_temperature_bed_isr);
}
static void check_temp_runaway()
{
#ifdef TEMP_RUNAWAY_EXTRUDER_HYSTERESIS
for(uint8_t e = 0; e < EXTRUDERS; e++)
temp_runaway_check(e+1, target_temperature_isr[e], current_temperature_isr[e], soft_pwm[e], false);
#endif
#ifdef TEMP_RUNAWAY_BED_HYSTERESIS
temp_runaway_check(0, target_temperature_bed_isr, current_temperature_bed_isr, soft_pwm_bed, true);
#endif
}
void check_temp_raw();
static void temp_mgr_isr()
@ -2147,9 +2150,8 @@ static void temp_mgr_isr()
// clear the error assertion flag before checking again
temp_error_state.assert = false;
// check min/max temp using raw values
check_temp_raw();
check_temp_raw(); // check min/max temp using raw values
check_temp_runaway(); // classic temperature hysteresis check
// PID regulation
temp_mgr_pid();