Introduce temp watch protection for the bed
When setting the bed temp via M140/M190 if the thermistor does not read an increase of WATCH_BED_TEMP_INCREASE degrees by WATCH_BED_TEMP_PERIOD seconds then it will throw "Error:Heating failed, system stopped! Heater_ID: bed" and call the kill() function. Conflicts: Marlin/Configuration_adv.h
This commit is contained in:
parent
98f30283fa
commit
908229dbb3
19 changed files with 259 additions and 9 deletions
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -93,6 +93,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 120 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 120 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 4 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 4 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -92,6 +92,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||||
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
|
||||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever an M140 or M190 increases the target temperature the firmware will wait for the
|
||||||
|
* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
|
||||||
|
* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
|
||||||
|
* but only if the current temperature is far enough below the target for a reliable test.
|
||||||
|
*
|
||||||
|
* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
|
||||||
|
* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
|
||||||
|
*/
|
||||||
|
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
|
||||||
|
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
|
|
|
@ -200,11 +200,16 @@ static float analog2temp(int raw, uint8_t e);
|
||||||
static float analog2tempBed(int raw);
|
static float analog2tempBed(int raw);
|
||||||
static void updateTemperaturesFromRawValues();
|
static void updateTemperaturesFromRawValues();
|
||||||
|
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
|
||||||
int watch_target_temp[EXTRUDERS] = { 0 };
|
int watch_target_temp[EXTRUDERS] = { 0 };
|
||||||
millis_t watch_heater_next_ms[EXTRUDERS] = { 0 };
|
millis_t watch_heater_next_ms[EXTRUDERS] = { 0 };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
|
||||||
|
int watch_target_bed_temp = 0;
|
||||||
|
millis_t watch_bed_next_ms = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef SOFT_PWM_SCALE
|
#ifndef SOFT_PWM_SCALE
|
||||||
#define SOFT_PWM_SCALE 0
|
#define SOFT_PWM_SCALE 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -717,7 +722,7 @@ void manage_heater() {
|
||||||
if (ct < max(HEATER_0_MINTEMP, 0.01)) min_temp_error(0);
|
if (ct < max(HEATER_0_MINTEMP, 0.01)) min_temp_error(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS) || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN
|
#if (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0) || (ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0) || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN
|
||||||
millis_t ms = millis();
|
millis_t ms = millis();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -734,7 +739,7 @@ void manage_heater() {
|
||||||
soft_pwm[e] = current_temperature[e] > minttemp[e] && current_temperature[e] < maxttemp[e] ? (int)pid_output >> 1 : 0;
|
soft_pwm[e] = current_temperature[e] > minttemp[e] && current_temperature[e] < maxttemp[e] ? (int)pid_output >> 1 : 0;
|
||||||
|
|
||||||
// Check if the temperature is failing to increase
|
// Check if the temperature is failing to increase
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
|
||||||
|
|
||||||
// Is it time to check this extruder's heater?
|
// Is it time to check this extruder's heater?
|
||||||
if (watch_heater_next_ms[e] && ELAPSED(ms, watch_heater_next_ms[e])) {
|
if (watch_heater_next_ms[e] && ELAPSED(ms, watch_heater_next_ms[e])) {
|
||||||
|
@ -751,6 +756,24 @@ void manage_heater() {
|
||||||
|
|
||||||
#endif // THERMAL_PROTECTION_HOTENDS
|
#endif // THERMAL_PROTECTION_HOTENDS
|
||||||
|
|
||||||
|
// Check if the temperature is failing to increase
|
||||||
|
#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
|
||||||
|
|
||||||
|
// Is it time to check the bed?
|
||||||
|
if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) {
|
||||||
|
// Has it failed to increase enough?
|
||||||
|
if (degBed() < watch_target_bed_temp) {
|
||||||
|
// Stop!
|
||||||
|
_temp_error(-1, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Start again if the target is still far off
|
||||||
|
start_watching_bed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // THERMAL_PROTECTION_HOTENDS
|
||||||
|
|
||||||
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
||||||
if (fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) {
|
if (fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) {
|
||||||
_temp_error(0, PSTR(MSG_REDUNDANCY), PSTR(MSG_ERR_REDUNDANT_TEMP));
|
_temp_error(0, PSTR(MSG_REDUNDANCY), PSTR(MSG_ERR_REDUNDANT_TEMP));
|
||||||
|
@ -1160,7 +1183,7 @@ void tp_init() {
|
||||||
#endif //BED_MAXTEMP
|
#endif //BED_MAXTEMP
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
|
||||||
/**
|
/**
|
||||||
* Start Heating Sanity Check for hotends that are below
|
* Start Heating Sanity Check for hotends that are below
|
||||||
* their target temperature by a configurable margin.
|
* their target temperature by a configurable margin.
|
||||||
|
@ -1176,6 +1199,22 @@ void tp_init() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
|
||||||
|
/**
|
||||||
|
* Start Heating Sanity Check for hotends that are below
|
||||||
|
* their target temperature by a configurable margin.
|
||||||
|
* This is called when the temperature is set. (M140, M190)
|
||||||
|
*/
|
||||||
|
void start_watching_bed() {
|
||||||
|
if (degBed() < degTargetBed() - (WATCH_BED_TEMP_INCREASE + TEMP_BED_HYSTERESIS + 1)) {
|
||||||
|
watch_target_bed_temp = degBed() + WATCH_BED_TEMP_INCREASE;
|
||||||
|
watch_bed_next_ms = millis() + (WATCH_BED_TEMP_PERIOD) * 1000UL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
watch_bed_next_ms = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS) || ENABLED(THERMAL_PROTECTION_BED)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) || ENABLED(THERMAL_PROTECTION_BED)
|
||||||
|
|
||||||
void thermal_runaway_protection(TRState* state, millis_t* timer, float temperature, float target_temperature, int heater_id, int period_seconds, int hysteresis_degc) {
|
void thermal_runaway_protection(TRState* state, millis_t* timer, float temperature, float target_temperature, int heater_id, int period_seconds, int hysteresis_degc) {
|
||||||
|
|
|
@ -124,17 +124,26 @@ FORCE_INLINE float rawBedTemp() { return current_temperature_bed_raw; }
|
||||||
FORCE_INLINE float degTargetHotend(uint8_t extruder) { return target_temperature[extruder]; }
|
FORCE_INLINE float degTargetHotend(uint8_t extruder) { return target_temperature[extruder]; }
|
||||||
FORCE_INLINE float degTargetBed() { return target_temperature_bed; }
|
FORCE_INLINE float degTargetBed() { return target_temperature_bed; }
|
||||||
|
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
|
||||||
void start_watching_heater(int e = 0);
|
void start_watching_heater(int e = 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
|
||||||
|
void start_watching_bed();
|
||||||
|
#endif
|
||||||
|
|
||||||
FORCE_INLINE void setTargetHotend(const float& celsius, uint8_t extruder) {
|
FORCE_INLINE void setTargetHotend(const float& celsius, uint8_t extruder) {
|
||||||
target_temperature[extruder] = celsius;
|
target_temperature[extruder] = celsius;
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
|
||||||
start_watching_heater(extruder);
|
start_watching_heater(extruder);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
FORCE_INLINE void setTargetBed(const float& celsius) { target_temperature_bed = celsius; }
|
FORCE_INLINE void setTargetBed(const float& celsius) {
|
||||||
|
target_temperature_bed = celsius;
|
||||||
|
#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
|
||||||
|
start_watching_bed();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
FORCE_INLINE bool isHeatingHotend(uint8_t extruder) { return target_temperature[extruder] > current_temperature[extruder]; }
|
FORCE_INLINE bool isHeatingHotend(uint8_t extruder) { return target_temperature[extruder] > current_temperature[extruder]; }
|
||||||
FORCE_INLINE bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; }
|
FORCE_INLINE bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; }
|
||||||
|
|
|
@ -603,7 +603,7 @@ void lcd_set_home_offsets() {
|
||||||
/**
|
/**
|
||||||
* Watch temperature callbacks
|
* Watch temperature callbacks
|
||||||
*/
|
*/
|
||||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
#if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
|
||||||
#if TEMP_SENSOR_0 != 0
|
#if TEMP_SENSOR_0 != 0
|
||||||
void watch_temp_callback_E0() { start_watching_heater(0); }
|
void watch_temp_callback_E0() { start_watching_heater(0); }
|
||||||
#endif
|
#endif
|
||||||
|
@ -631,6 +631,16 @@ void lcd_set_home_offsets() {
|
||||||
#endif // EXTRUDERS > 3
|
#endif // EXTRUDERS > 3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
|
||||||
|
#if TEMP_SENSOR_BED != 0
|
||||||
|
void watch_temp_callback_bed() { start_watching_bed(); }
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if TEMP_SENSOR_BED != 0
|
||||||
|
void watch_temp_callback_bed() {}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* "Tune" submenu
|
* "Tune" submenu
|
||||||
|
@ -685,7 +695,7 @@ static void lcd_tune_menu() {
|
||||||
// Bed:
|
// Bed:
|
||||||
//
|
//
|
||||||
#if TEMP_SENSOR_BED != 0
|
#if TEMP_SENSOR_BED != 0
|
||||||
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 15);
|
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 15, watch_temp_callback_bed);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Reference in a new issue