|
@ -409,7 +409,9 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Did the temperature overshoot very far?
|
|
|
// Did the temperature overshoot very far?
|
|
|
|
|
|
#ifndef MAX_OVERSHOOT_PID_AUTOTUNE |
|
|
#define MAX_OVERSHOOT_PID_AUTOTUNE 20 |
|
|
#define MAX_OVERSHOOT_PID_AUTOTUNE 20 |
|
|
|
|
|
#endif |
|
|
if (current > target + MAX_OVERSHOOT_PID_AUTOTUNE) { |
|
|
if (current > target + MAX_OVERSHOOT_PID_AUTOTUNE) { |
|
|
SERIAL_PROTOCOLLNPGM(MSG_PID_TEMP_TOO_HIGH); |
|
|
SERIAL_PROTOCOLLNPGM(MSG_PID_TEMP_TOO_HIGH); |
|
|
break; |
|
|
break; |
|
@ -425,6 +427,15 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], |
|
|
|
|
|
|
|
|
// Make sure heating is actually working
|
|
|
// Make sure heating is actually working
|
|
|
#if WATCH_THE_BED || WATCH_HOTENDS |
|
|
#if WATCH_THE_BED || WATCH_HOTENDS |
|
|
|
|
|
if ( |
|
|
|
|
|
#if WATCH_THE_BED && WATCH_HOTENDS |
|
|
|
|
|
true |
|
|
|
|
|
#elif WATCH_THE_BED |
|
|
|
|
|
hotend < 0 |
|
|
|
|
|
#else |
|
|
|
|
|
hotend >= 0 |
|
|
|
|
|
#endif |
|
|
|
|
|
) { |
|
|
if (!heated) { // If not yet reached target...
|
|
|
if (!heated) { // If not yet reached target...
|
|
|
if (current > next_watch_temp) { // Over the watch temp?
|
|
|
if (current > next_watch_temp) { // Over the watch temp?
|
|
|
next_watch_temp = current + watch_temp_increase; // - set the next temp to watch for
|
|
|
next_watch_temp = current + watch_temp_increase; // - set the next temp to watch for
|
|
@ -438,11 +449,15 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], |
|
|
_temp_error(hotend, PSTR(MSG_T_THERMAL_RUNAWAY), |
|
|
_temp_error(hotend, PSTR(MSG_T_THERMAL_RUNAWAY), |
|
|
hotend >= 0 ? PSTR(MSG_THERMAL_RUNAWAY) : PSTR(MSG_THERMAL_RUNAWAY_BED) |
|
|
hotend >= 0 ? PSTR(MSG_THERMAL_RUNAWAY) : PSTR(MSG_THERMAL_RUNAWAY_BED) |
|
|
); |
|
|
); |
|
|
|
|
|
} |
|
|
#endif |
|
|
#endif |
|
|
} // every 2 seconds
|
|
|
} // every 2 seconds
|
|
|
|
|
|
|
|
|
// Timeout after 20 minutes since the last undershoot/overshoot cycle
|
|
|
// Timeout after MAX_CYCLE_TIME_PID_AUTOTUNE minutes since the last undershoot/overshoot cycle
|
|
|
if (((ms - t1) + (ms - t2)) > (20L * 60L * 1000L)) { |
|
|
#ifndef MAX_CYCLE_TIME_PID_AUTOTUNE |
|
|
|
|
|
#define MAX_CYCLE_TIME_PID_AUTOTUNE 20L |
|
|
|
|
|
#endif |
|
|
|
|
|
if (((ms - t1) + (ms - t2)) > (MAX_CYCLE_TIME_PID_AUTOTUNE * 60L * 1000L)) { |
|
|
SERIAL_PROTOCOLLNPGM(MSG_PID_TIMEOUT); |
|
|
SERIAL_PROTOCOLLNPGM(MSG_PID_TIMEOUT); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|