|
|
|
@ -1444,7 +1444,7 @@ void Temperature::manage_heater() {
|
|
|
|
|
|
|
|
|
|
TERN_(HEATER_IDLE_HANDLER, heater_idle[IDLE_INDEX_BED].update(ms));
|
|
|
|
|
|
|
|
|
|
#if HAS_THERMALLY_PROTECTED_BED
|
|
|
|
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
|
|
|
|
tr_state_machine[RUNAWAY_IND_BED].run(temp_bed.celsius, temp_bed.target, H_BED, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
@ -2570,20 +2570,14 @@ void Temperature::init() {
|
|
|
|
|
);
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#if HEATER_IDLE_HANDLER
|
|
|
|
|
// If the heater idle timeout expires, restart
|
|
|
|
|
if (heater_idle[idle_index].timed_out) {
|
|
|
|
|
state = TRInactive;
|
|
|
|
|
running_temp = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
#endif
|
|
|
|
|
{
|
|
|
|
|
// If the target temperature changes, restart
|
|
|
|
|
if (running_temp != target) {
|
|
|
|
|
running_temp = target;
|
|
|
|
|
state = target > 0 ? TRFirstHeating : TRInactive;
|
|
|
|
|
}
|
|
|
|
|
// If the heater idle timeout expires, restart
|
|
|
|
|
if (TERN0(HEATER_IDLE_HANDLER, heater_idle[idle_index].timed_out)) {
|
|
|
|
|
state = TRInactive;
|
|
|
|
|
running_temp = 0;
|
|
|
|
|
}
|
|
|
|
|
else if (running_temp != target) { // If the target temperature changes, restart
|
|
|
|
|
running_temp = target;
|
|
|
|
|
state = target > 0 ? TRFirstHeating : TRInactive;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (state) {
|
|
|
|
@ -2596,7 +2590,7 @@ void Temperature::init() {
|
|
|
|
|
state = TRStable;
|
|
|
|
|
|
|
|
|
|
// While the temperature is stable watch for a bad temperature
|
|
|
|
|
case TRStable:
|
|
|
|
|
case TRStable: {
|
|
|
|
|
|
|
|
|
|
#if ENABLED(ADAPTIVE_FAN_SLOWING)
|
|
|
|
|
if (adaptive_fan_slowing && heater_id >= 0) {
|
|
|
|
@ -2614,13 +2608,17 @@ void Temperature::init() {
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
const millis_t now = millis();
|
|
|
|
|
|
|
|
|
|
if (current >= running_temp - hysteresis_degc) {
|
|
|
|
|
timer = millis() + SEC_TO_MS(period_seconds);
|
|
|
|
|
timer = now + SEC_TO_MS(period_seconds);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (PENDING(millis(), timer)) break;
|
|
|
|
|
else if (PENDING(now, timer)) break;
|
|
|
|
|
state = TRRunaway;
|
|
|
|
|
|
|
|
|
|
} // fall through
|
|
|
|
|
|
|
|
|
|
case TRRunaway:
|
|
|
|
|
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
|
|
|
|
|
_temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY));
|
|
|
|
|