From 645ca7af7ac27af9d6690659dc71ff9867b34b6c Mon Sep 17 00:00:00 2001 From: 3dlabsio Date: Thu, 7 Mar 2019 00:09:39 -0800 Subject: [PATCH] M141 Heated Chamber, Temperature rework (#12201) --- Marlin/Configuration.h | 2 + Marlin/Configuration_adv.h | 14 + Marlin/src/core/language.h | 2 + Marlin/src/feature/controllerfan.cpp | 2 +- Marlin/src/feature/pause.cpp | 10 +- Marlin/src/feature/power.cpp | 2 +- Marlin/src/feature/power_loss_recovery.cpp | 6 +- Marlin/src/gcode/config/M304.cpp | 12 +- Marlin/src/gcode/gcode.cpp | 5 + Marlin/src/gcode/gcode.h | 5 + Marlin/src/gcode/temperature/M141_M191.cpp | 77 ++ Marlin/src/inc/Conditionals_post.h | 17 +- Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp | 4 +- Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 2 +- Marlin/src/lcd/dogm/ultralcd_DOGM.cpp | 2 +- Marlin/src/lcd/language/language_en.h | 9 + Marlin/src/lcd/menu/menu.cpp | 35 +- Marlin/src/lcd/menu/menu.h | 8 - Marlin/src/lcd/menu/menu_filament.cpp | 4 +- Marlin/src/lcd/menu/menu_temperature.cpp | 17 +- Marlin/src/lcd/menu/menu_tune.cpp | 6 +- Marlin/src/module/configuration_store.cpp | 16 +- Marlin/src/module/temperature.cpp | 947 ++++++++++-------- Marlin/src/module/temperature.h | 419 +++++--- Marlin/src/module/thermistor/thermistor_20.h | 4 + Marlin/src/module/thermistor/thermistors.h | 11 +- Marlin/src/module/tool_change.cpp | 2 +- buildroot/share/tests/LPC1768-tests | 2 +- buildroot/share/tests/megaatmega2560-tests | 7 +- config/default/Configuration.h | 2 + config/default/Configuration_adv.h | 14 + .../examples/3DFabXYZ/Migbot/Configuration.h | 2 + .../3DFabXYZ/Migbot/Configuration_adv.h | 14 + .../AlephObjects/TAZ4/Configuration.h | 2 + .../AlephObjects/TAZ4/Configuration_adv.h | 14 + .../AliExpress/CL-260/Configuration.h | 2 + .../AliExpress/UM2pExt/Configuration.h | 2 + .../AliExpress/UM2pExt/Configuration_adv.h | 14 + config/examples/Anet/A2/Configuration.h | 2 + config/examples/Anet/A2/Configuration_adv.h | 14 + config/examples/Anet/A2plus/Configuration.h | 2 + .../examples/Anet/A2plus/Configuration_adv.h | 14 + config/examples/Anet/A6/Configuration.h | 2 + config/examples/Anet/A6/Configuration_adv.h | 14 + config/examples/Anet/A8/Configuration.h | 2 + config/examples/Anet/A8/Configuration_adv.h | 14 + config/examples/AnyCubic/i3/Configuration.h | 2 + .../examples/AnyCubic/i3/Configuration_adv.h | 14 + config/examples/ArmEd/Configuration.h | 2 + config/examples/ArmEd/Configuration_adv.h | 14 + config/examples/Azteeg/X5GT/Configuration.h | 2 + .../BIBO/TouchX/cyclops/Configuration.h | 2 + .../BIBO/TouchX/cyclops/Configuration_adv.h | 14 + .../BIBO/TouchX/default/Configuration.h | 2 + .../BIBO/TouchX/default/Configuration_adv.h | 14 + config/examples/BQ/Hephestos/Configuration.h | 2 + .../examples/BQ/Hephestos/Configuration_adv.h | 14 + .../examples/BQ/Hephestos_2/Configuration.h | 2 + .../BQ/Hephestos_2/Configuration_adv.h | 14 + config/examples/BQ/WITBOX/Configuration.h | 2 + config/examples/BQ/WITBOX/Configuration_adv.h | 14 + config/examples/Cartesio/Configuration.h | 2 + config/examples/Cartesio/Configuration_adv.h | 14 + .../examples/Creality/CR-10/Configuration.h | 2 + .../Creality/CR-10/Configuration_adv.h | 14 + .../examples/Creality/CR-10S/Configuration.h | 2 + .../Creality/CR-10S/Configuration_adv.h | 14 + .../Creality/CR-10_5S/Configuration.h | 2 + .../Creality/CR-10_5S/Configuration_adv.h | 14 + .../Creality/CR-10mini/Configuration.h | 2 + .../Creality/CR-10mini/Configuration_adv.h | 14 + config/examples/Creality/CR-8/Configuration.h | 2 + .../Creality/CR-8/Configuration_adv.h | 14 + .../examples/Creality/Ender-2/Configuration.h | 2 + .../Creality/Ender-2/Configuration_adv.h | 14 + .../examples/Creality/Ender-3/Configuration.h | 2 + .../Creality/Ender-3/Configuration_adv.h | 14 + .../examples/Creality/Ender-4/Configuration.h | 2 + .../Creality/Ender-4/Configuration_adv.h | 14 + config/examples/Einstart-S/Configuration.h | 2 + .../examples/Einstart-S/Configuration_adv.h | 14 + config/examples/Felix/Configuration.h | 2 + config/examples/Felix/Configuration_adv.h | 14 + config/examples/Felix/DUAL/Configuration.h | 2 + .../FlashForge/CreatorPro/Configuration.h | 2 + .../FlashForge/CreatorPro/Configuration_adv.h | 14 + .../FolgerTech/i3-2020/Configuration.h | 2 + .../FolgerTech/i3-2020/Configuration_adv.h | 14 + .../examples/Formbot/Raptor/Configuration.h | 2 + .../Formbot/Raptor/Configuration_adv.h | 14 + .../examples/Formbot/T_Rex_2+/Configuration.h | 2 + .../Formbot/T_Rex_2+/Configuration_adv.h | 14 + .../examples/Formbot/T_Rex_3/Configuration.h | 2 + .../Formbot/T_Rex_3/Configuration_adv.h | 14 + config/examples/Geeetech/A10M/Configuration.h | 2 + .../Geeetech/A10M/Configuration_adv.h | 14 + config/examples/Geeetech/A20M/Configuration.h | 2 + .../Geeetech/A20M/Configuration_adv.h | 14 + .../examples/Geeetech/GT2560/Configuration.h | 2 + .../Geeetech/I3_Pro_X-GT2560/Configuration.h | 2 + .../Geeetech/MeCreator2/Configuration.h | 2 + .../Geeetech/MeCreator2/Configuration_adv.h | 14 + .../Prusa i3 Pro B/bltouch/Configuration.h | 2 + .../Prusa i3 Pro B/noprobe/Configuration.h | 2 + .../Geeetech/Prusa i3 Pro C/Configuration.h | 2 + .../Prusa i3 Pro C/Configuration_adv.h | 14 + .../Geeetech/Prusa i3 Pro W/Configuration.h | 2 + .../Prusa i3 Pro W/Configuration_adv.h | 14 + .../examples/Infitary/i3-M508/Configuration.h | 2 + .../Infitary/i3-M508/Configuration_adv.h | 14 + config/examples/JGAurora/A5/Configuration.h | 2 + .../examples/JGAurora/A5/Configuration_adv.h | 14 + config/examples/MakerParts/Configuration.h | 2 + .../examples/MakerParts/Configuration_adv.h | 14 + config/examples/Malyan/M150/Configuration.h | 2 + .../examples/Malyan/M150/Configuration_adv.h | 14 + config/examples/Malyan/M200/Configuration.h | 2 + .../examples/Malyan/M200/Configuration_adv.h | 14 + .../Micromake/C1/basic/Configuration.h | 2 + .../Micromake/C1/enhanced/Configuration.h | 2 + .../Micromake/C1/enhanced/Configuration_adv.h | 14 + config/examples/Mks/Robin/Configuration.h | 2 + config/examples/Mks/Robin/Configuration_adv.h | 14 + config/examples/Mks/Sbase/Configuration.h | 2 + config/examples/Mks/Sbase/Configuration_adv.h | 14 + .../Printrbot/PrintrboardG2/Configuration.h | 2 + .../examples/RapideLite/RL200/Configuration.h | 2 + .../RapideLite/RL200/Configuration_adv.h | 14 + .../examples/RepRapPro/Huxley/Configuration.h | 2 + .../RepRapWorld/Megatronics/Configuration.h | 2 + config/examples/RigidBot/Configuration.h | 2 + config/examples/RigidBot/Configuration_adv.h | 14 + config/examples/SCARA/Configuration.h | 2 + config/examples/SCARA/Configuration_adv.h | 14 + config/examples/STM32F10/Configuration.h | 2 + config/examples/STM32F4/Configuration.h | 2 + config/examples/Sanguinololu/Configuration.h | 2 + .../examples/Sanguinololu/Configuration_adv.h | 14 + config/examples/TheBorg/Configuration.h | 2 + config/examples/TheBorg/Configuration_adv.h | 14 + config/examples/TinyBoy2/Configuration.h | 2 + config/examples/TinyBoy2/Configuration_adv.h | 14 + config/examples/Tronxy/X1/Configuration.h | 2 + config/examples/Tronxy/X3A/Configuration.h | 2 + .../examples/Tronxy/X3A/Configuration_adv.h | 14 + config/examples/Tronxy/X5S-2E/Configuration.h | 2 + .../Tronxy/X5S-2E/Configuration_adv.h | 14 + config/examples/Tronxy/X5S/Configuration.h | 2 + config/examples/Tronxy/XY100/Configuration.h | 2 + .../UltiMachine/Archim1/Configuration.h | 2 + .../UltiMachine/Archim1/Configuration_adv.h | 14 + .../UltiMachine/Archim2/Configuration.h | 2 + .../UltiMachine/Archim2/Configuration_adv.h | 14 + config/examples/VORONDesign/Configuration.h | 2 + .../examples/VORONDesign/Configuration_adv.h | 14 + .../examples/Velleman/K8200/Configuration.h | 2 + .../Velleman/K8200/Configuration_adv.h | 14 + .../examples/Velleman/K8400/Configuration.h | 2 + .../Velleman/K8400/Configuration_adv.h | 14 + .../Velleman/K8400/Dual-head/Configuration.h | 2 + .../examples/WASP/PowerWASP/Configuration.h | 2 + .../WASP/PowerWASP/Configuration_adv.h | 14 + .../Wanhao/Duplicator 6/Configuration.h | 2 + .../Wanhao/Duplicator 6/Configuration_adv.h | 14 + .../examples/adafruit/ST7565/Configuration.h | 2 + .../delta/Anycubic/Kossel/Configuration.h | 2 + .../delta/Anycubic/Kossel/Configuration_adv.h | 14 + .../FLSUN/auto_calibrate/Configuration.h | 2 + .../FLSUN/auto_calibrate/Configuration_adv.h | 14 + .../delta/FLSUN/kossel/Configuration.h | 2 + .../delta/FLSUN/kossel/Configuration_adv.h | 14 + .../delta/FLSUN/kossel_mini/Configuration.h | 2 + .../FLSUN/kossel_mini/Configuration_adv.h | 14 + .../Geeetech/Rostock 301/Configuration.h | 2 + .../Geeetech/Rostock 301/Configuration_adv.h | 14 + .../delta/Hatchbox_Alpha/Configuration.h | 2 + .../examples/delta/MKS/SBASE/Configuration.h | 2 + .../delta/MKS/SBASE/Configuration_adv.h | 14 + .../delta/Tevo Little Monster/Configuration.h | 2 + .../Tevo Little Monster/Configuration_adv.h | 14 + config/examples/delta/generic/Configuration.h | 2 + .../delta/generic/Configuration_adv.h | 14 + .../delta/kossel_mini/Configuration.h | 2 + .../delta/kossel_mini/Configuration_adv.h | 14 + .../examples/delta/kossel_pro/Configuration.h | 2 + .../examples/delta/kossel_xl/Configuration.h | 2 + .../delta/kossel_xl/Configuration_adv.h | 14 + .../examples/gCreate/gMax1.5+/Configuration.h | 2 + .../gCreate/gMax1.5+/Configuration_adv.h | 14 + config/examples/makibox/Configuration.h | 2 + config/examples/makibox/Configuration_adv.h | 14 + config/examples/stm32f103ret6/Configuration.h | 2 + config/examples/tvrrug/Round2/Configuration.h | 2 + .../tvrrug/Round2/Configuration_adv.h | 14 + config/examples/wt150/Configuration.h | 2 + config/examples/wt150/Configuration_adv.h | 14 + 196 files changed, 2183 insertions(+), 676 deletions(-) create mode 100644 Marlin/src/gcode/temperature/M141_M191.cpp diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 34b3512363..a03fc8ce4b 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 70720edef0..aacec5e520 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 149a7d3a0b..0dfd54b3af 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -285,6 +285,8 @@ #define MSG_INVALID_EXTRUDER_NUM " - Invalid extruder number !" #define MSG_HEATER_BED "bed" +#define MSG_HEATER_CHAMBER "chamber" + #define MSG_STOPPED_HEATER ", system stopped! Heater_ID: " #define MSG_REDUNDANCY "Heater switched off. Temperature difference between temp sensors is too high !" #define MSG_T_HEATING_FAILED "Heating failed" diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 52b17ff953..81af957873 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -39,7 +39,7 @@ void controllerfan_update() { // If any of the drivers or the bed are enabled... if (X_ENABLE_READ == X_ENABLE_ON || Y_ENABLE_READ == Y_ENABLE_ON || Z_ENABLE_READ == Z_ENABLE_ON #if HAS_HEATED_BED - || thermalManager.soft_pwm_amount_bed > 0 + || thermalManager.temp_bed.soft_pwm_amount > 0 #endif #if HAS_X2_ENABLE || X2_ENABLE_READ == X_ENABLE_ON diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index bffac7acd6..e67370c78b 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -482,8 +482,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep // Start the heater idle timers const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL; - HOTEND_LOOP() - thermalManager.start_heater_idle_timer(e, nozzle_timeout); + HOTEND_LOOP() thermalManager.hotend_idle[e].start(nozzle_timeout); #if ENABLED(DUAL_X_CARRIAGE) const int8_t saved_ext = active_extruder; @@ -505,7 +504,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep // If the nozzle has timed out... if (!nozzle_timed_out) - HOTEND_LOOP() nozzle_timed_out |= thermalManager.is_heater_idle(e); + HOTEND_LOOP() nozzle_timed_out |= thermalManager.hotend_idle[e].timed_out; // Wait for the user to press the button to re-heat the nozzle, then // re-heat the nozzle, re-show the continue prompt, restart idle timers, start over @@ -538,8 +537,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep // Start the heater idle timers const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL; - HOTEND_LOOP() - thermalManager.start_heater_idle_timer(e, nozzle_timeout); + HOTEND_LOOP() thermalManager.hotend_idle[e].start(nozzle_timeout); #if ENABLED(HOST_PROMPT_SUPPORT) host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheat Done"), PSTR("Continue")); #endif @@ -594,7 +592,7 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le // Re-enable the heaters if they timed out bool nozzle_timed_out = false; HOTEND_LOOP() { - nozzle_timed_out |= thermalManager.is_heater_idle(e); + nozzle_timed_out |= thermalManager.hotend_idle[e].timed_out; thermalManager.reset_heater_idle_timer(e); } diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp index a4c32fa473..f1cef49944 100644 --- a/Marlin/src/feature/power.cpp +++ b/Marlin/src/feature/power.cpp @@ -53,7 +53,7 @@ bool Power::is_power_needed() { // If any of the drivers or the bed are enabled... if (X_ENABLE_READ == X_ENABLE_ON || Y_ENABLE_READ == Y_ENABLE_ON || Z_ENABLE_READ == Z_ENABLE_ON #if HAS_HEATED_BED - || thermalManager.soft_pwm_amount_bed > 0 + || thermalManager.temp_bed.soft_pwm_amount > 0 #endif #if HAS_X2_ENABLE || X2_ENABLE_READ == X_ENABLE_ON diff --git a/Marlin/src/feature/power_loss_recovery.cpp b/Marlin/src/feature/power_loss_recovery.cpp index 913d3bc68c..ba434116d2 100644 --- a/Marlin/src/feature/power_loss_recovery.cpp +++ b/Marlin/src/feature/power_loss_recovery.cpp @@ -155,10 +155,10 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*= info.active_hotend = active_extruder; #endif - COPY(info.target_temperature, thermalManager.target_temperature); + HOTEND_LOOP() info.target_temperature[e] = thermalManager.temp_hotend[e].target; #if HAS_HEATED_BED - info.target_temperature_bed = thermalManager.target_temperature_bed; + info.target_temperature_bed = thermalManager.temp_bed.target; #endif #if FAN_COUNT @@ -385,7 +385,7 @@ void PrintJobRecovery::resume() { #if FAN_COUNT SERIAL_ECHOPGM("fan_speed: "); - for (int8_t i = 0; i < FAN_COUNT; i++) { + FANS_LOOP(i) { SERIAL_ECHO(int(info.fan_speed[i])); if (i < FAN_COUNT - 1) SERIAL_CHAR(','); } diff --git a/Marlin/src/gcode/config/M304.cpp b/Marlin/src/gcode/config/M304.cpp index e23efd771b..d3305a2ebc 100644 --- a/Marlin/src/gcode/config/M304.cpp +++ b/Marlin/src/gcode/config/M304.cpp @@ -28,14 +28,14 @@ #include "../../module/temperature.h" void GcodeSuite::M304() { - if (parser.seen('P')) thermalManager.bed_pid.Kp = parser.value_float(); - if (parser.seen('I')) thermalManager.bed_pid.Ki = scalePID_i(parser.value_float()); - if (parser.seen('D')) thermalManager.bed_pid.Kd = scalePID_d(parser.value_float()); + if (parser.seen('P')) thermalManager.temp_bed.pid.Kp = parser.value_float(); + if (parser.seen('I')) thermalManager.temp_bed.pid.Ki = scalePID_i(parser.value_float()); + if (parser.seen('D')) thermalManager.temp_bed.pid.Kd = scalePID_d(parser.value_float()); SERIAL_ECHO_START(); - SERIAL_ECHOPAIR(" p:", thermalManager.bed_pid.Kp); - SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.bed_pid.Ki)); - SERIAL_ECHOLNPAIR(" d:", unscalePID_d(thermalManager.bed_pid.Kd)); + SERIAL_ECHOPAIR(" p:", thermalManager.temp_bed.pid.Kp); + SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.temp_bed.pid.Ki)); + SERIAL_ECHOLNPAIR(" d:", unscalePID_d(thermalManager.temp_bed.pid.Kd)); } #endif // PIDTEMPBED diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 91d91df927..2c9232f1ba 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -392,6 +392,11 @@ void GcodeSuite::process_parsed_command( case 190: M190(); break; // M190: Wait for bed temperature to reach target #endif + #if HAS_HEATED_CHAMBER + case 141: M141(); break; // M141: Set chamber temperature + //case 191: M191(); break; // M191: Wait for chamber temperature to reach target + #endif + case 105: M105(); KEEPALIVE_STATE(NOT_BUSY); return; // M105: Report Temperatures (and say "ok") #if ENABLED(AUTO_REPORT_TEMPERATURES) && HAS_TEMP_SENSOR diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 63ca8ac1ad..61786cecee 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -576,6 +576,11 @@ private: static void M190(); #endif + #if HAS_HEATED_CHAMBER + static void M141(); + //static void M191(); + #endif + #if HAS_LCD_MENU static void M145(); #endif diff --git a/Marlin/src/gcode/temperature/M141_M191.cpp b/Marlin/src/gcode/temperature/M141_M191.cpp new file mode 100644 index 0000000000..3aeba2bb0a --- /dev/null +++ b/Marlin/src/gcode/temperature/M141_M191.cpp @@ -0,0 +1,77 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../inc/MarlinConfig.h" + +#if HAS_HEATED_CHAMBER + +#include "../gcode.h" +#include "../../module/temperature.h" + +/* +#include "../../module/motion.h" +#include "../../lcd/ultralcd.h" + +#if ENABLED(PRINTJOB_TIMER_AUTOSTART) + #include "../../module/printcounter.h" +#endif + +#if ENABLED(PRINTER_EVENT_LEDS) + #include "../../feature/leds/leds.h" +#endif + +#include "../../Marlin.h" // for wait_for_heatup and idle() +*/ + +/** + * M141: Set chamber temperature + */ +void GcodeSuite::M141() { + if (DEBUGGING(DRYRUN)) return; + if (parser.seenval('S')) thermalManager.setTargetChamber(parser.value_celsius()); +} + +/** + * M191: Sxxx Wait for chamber current temp to reach target temp. Waits only when heating + * Rxxx Wait for chamber current temp to reach target temp. Waits when heating and cooling + */ +/* +void GcodeSuite::M191() { + if (DEBUGGING(DRYRUN)) return; + + const bool no_wait_for_cooling = parser.seenval('S'); + if (no_wait_for_cooling || parser.seenval('R')) { + thermalManager.setTargetBed(parser.value_celsius()); + #if ENABLED(PRINTJOB_TIMER_AUTOSTART) + if (parser.value_celsius() > BED_MINTEMP) + print_job_timer.start(); + #endif + } + else return; + + lcd_setstatusPGM(thermalManager.isHeatingBed() ? PSTR(MSG_BED_HEATING) : PSTR(MSG_BED_COOLING)); + + thermalManager.wait_for_bed(no_wait_for_cooling); +} +*/ + +#endif // HAS_HEATED_CHAMBER diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 1b383e23f3..47a3f20ea5 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -921,6 +921,7 @@ #define HAS_TEMP_HOTEND (HAS_TEMP_ADC_0 || ENABLED(HEATER_0_USES_MAX6675)) #define HAS_TEMP_BED HAS_TEMP_ADC_BED #define HAS_TEMP_CHAMBER HAS_TEMP_ADC_CHAMBER +#define HAS_HEATED_CHAMBER (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_HEATER)) // Heaters #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0)) @@ -945,7 +946,8 @@ // Thermal protection #define HAS_THERMALLY_PROTECTED_BED (HAS_HEATED_BED && ENABLED(THERMAL_PROTECTION_BED)) #define WATCH_HOTENDS (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0) -#define WATCH_THE_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0) +#define WATCH_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0) +#define WATCH_CHAMBER (HAS_HEATED_CHAMBER && ENABLED(THERMAL_PROTECTION_CHAMBER) && WATCH_CHAMBER_TEMP_PERIOD > 0) // Auto fans #define HAS_AUTO_FAN_0 (PIN_EXISTS(E0_AUTO_FAN)) @@ -1151,6 +1153,19 @@ #define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, (v) ^ HEATER_BED_INVERTING) #endif +/** + * Heated chamber requires settings + */ +#if HAS_HEATED_CHAMBER + #ifndef MAX_CHAMBER_POWER + #define MAX_CHAMBER_POWER 255 + #endif + #ifndef HEATER_CHAMBER_INVERTING + #define HEATER_CHAMBER_INVERTING false + #endif + #define WRITE_HEATER_CHAMBER(v) WRITE(HEATER_CHAMBER_PIN, (v) ^ HEATER_CHAMBER_INVERTING) +#endif + /** * Up to 3 PWM fans */ diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp index dc7858589a..217d99e090 100644 --- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp @@ -544,9 +544,9 @@ FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, co #else const bool is_idle = ( #if HAS_HEATED_BED - isBed ? thermalManager.is_bed_idle() : + isBed ? thermalManager.bed_idle.timed_out : #endif - thermalManager.is_heater_idle(heater) + thermalManager.hotend_idle[heater].timed_out ); if (!blink && is_idle) { diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index 1994910d74..aabc1c8435 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -208,7 +208,7 @@ FORCE_INLINE void _draw_heater_status(const int8_t heater, const bool blink) { if (PAGE_UNDER(7)) { #if HEATER_IDLE_HANDLER - const bool is_idle = IFBED(thermalManager.is_bed_idle(), thermalManager.is_heater_idle(heater)), + const bool is_idle = IFBED(thermalManager.bed_idle.timed_out, thermalManager.hotend_idle[heater].timed_out), dodraw = (blink || !is_idle); #else constexpr bool dodraw = true; diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp index df83625f0a..d8d2029442 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp @@ -261,7 +261,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop lcd_put_u8str(i16tostr3(thermalManager.degHotend(extruder))); lcd_put_wchar('/'); - if (get_blink() || !thermalManager.is_heater_idle(extruder)) + if (get_blink() || !thermalManager.hotend_idle[extruder].timed_out) lcd_put_u8str(i16tostr3(thermalManager.degTargetHotend(extruder))); } diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 97f04028d9..233f3dd78b 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -537,6 +537,9 @@ #ifndef MSG_BED #define MSG_BED _UxGT("Bed") #endif +#ifndef MSG_CHAMBER + #define MSG_CHAMBER _UxGT("Enclosure") +#endif #ifndef MSG_FAN_SPEED #define MSG_FAN_SPEED _UxGT("Fan speed") #endif @@ -921,6 +924,12 @@ #ifndef MSG_ERR_MINTEMP_BED #define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED") #endif +#ifndef MSG_ERR_MAXTEMP_CHAMBER + #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: MAXTEMP CHAMBER") +#endif +#ifndef MSG_ERR_MINTEMP_CHAMBER + #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP CHAMBER") +#endif #ifndef MSG_ERR_Z_HOMING #define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST #endif diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index f6a5e2c317..b1083bd548 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -37,7 +37,7 @@ #include "../../module/configuration_store.h" #endif -#if WATCH_HOTENDS || WATCH_THE_BED || ENABLED(BABYSTEP_ZPROBE_OFFSET) +#if WATCH_HOTENDS || WATCH_BED || ENABLED(BABYSTEP_ZPROBE_OFFSET) #include "../../module/temperature.h" #endif @@ -405,39 +405,6 @@ void MarlinUI::completion_feedback(const bool good/*=true*/) { #endif // BABYSTEP_ZPROBE_OFFSET -/** - * Watch temperature callbacks - */ -#if HAS_TEMP_HOTEND - #if WATCH_HOTENDS - #define _WATCH_FUNC(N) thermalManager.start_watching_heater(N) - #else - #define _WATCH_FUNC(N) NOOP - #endif - void watch_temp_callback_E0() { _WATCH_FUNC(0); } - #if HOTENDS > 1 - void watch_temp_callback_E1() { _WATCH_FUNC(1); } - #if HOTENDS > 2 - void watch_temp_callback_E2() { _WATCH_FUNC(2); } - #if HOTENDS > 3 - void watch_temp_callback_E3() { _WATCH_FUNC(3); } - #if HOTENDS > 4 - void watch_temp_callback_E4() { _WATCH_FUNC(4); } - #if HOTENDS > 5 - void watch_temp_callback_E5() { _WATCH_FUNC(5); } - #endif // HOTENDS > 5 - #endif // HOTENDS > 4 - #endif // HOTENDS > 3 - #endif // HOTENDS > 2 - #endif // HOTENDS > 1 -#endif // HAS_TEMP_HOTEND - -void watch_temp_callback_bed() { - #if WATCH_THE_BED - thermalManager.start_watching_bed(); - #endif -} - #if ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(PID_AUTOTUNE_MENU) || ENABLED(ADVANCED_PAUSE_FEATURE) void lcd_enqueue_command(const char * const cmd) { diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 9da44c5d04..63ab83038f 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -340,14 +340,6 @@ void menu_move(); void lcd_move_z(); void _lcd_draw_homing(); -void watch_temp_callback_E0(); -void watch_temp_callback_E1(); -void watch_temp_callback_E2(); -void watch_temp_callback_E3(); -void watch_temp_callback_E4(); -void watch_temp_callback_E5(); -void watch_temp_callback_bed(); - #define HAS_LINE_TO_Z (ENABLED(DELTA) || ENABLED(PROBE_MANUALLY) || ENABLED(MESH_BED_LEVELING) || ENABLED(LEVEL_BED_CORNERS)) #if HAS_LINE_TO_Z diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp index 80395cda63..b321763221 100644 --- a/Marlin/src/lcd/menu/menu_filament.cpp +++ b/Marlin/src/lcd/menu/menu_filament.cpp @@ -61,7 +61,7 @@ static void _change_filament_temp(const uint16_t temperature) { } inline void _lcd_change_filament_temp_1_func() { _change_filament_temp(ui.preheat_hotend_temp[0]); } inline void _lcd_change_filament_temp_2_func() { _change_filament_temp(ui.preheat_hotend_temp[1]); } -inline void _lcd_change_filament_temp_custom_cb() { _change_filament_temp(thermalManager.target_temperature[_change_filament_temp_extruder]); } +inline void _lcd_change_filament_temp_custom_cb() { _change_filament_temp(thermalManager.temp_hotend[_change_filament_temp_extruder].target); } static PGM_P change_filament_header(const AdvancedPauseMode mode) { switch (mode) { @@ -101,7 +101,7 @@ void _menu_temp_filament_op(const AdvancedPauseMode mode, const int8_t extruder) #endif #endif } - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_PREHEAT_CUSTOM, &thermalManager.target_temperature[_change_filament_temp_extruder], EXTRUDE_MINTEMP, max_temp - 15, _lcd_change_filament_temp_custom_cb); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_PREHEAT_CUSTOM, &thermalManager.temp_hotend[_change_filament_temp_extruder].target, EXTRUDE_MINTEMP, max_temp - 15, _lcd_change_filament_temp_custom_cb); END_MENU(); } #if E_STEPPERS diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 40e16405eb..c00b1c1a41 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -353,9 +353,9 @@ void menu_temperature() { // Nozzle [1-5]: // #if HOTENDS == 1 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE, &thermalManager.target_temperature[0], 0, HEATER_0_MAXTEMP - 15, watch_temp_callback_E0); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, thermalManager.start_watching_E0); #else // HOTENDS > 1 - #define EDIT_TARGET(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_LCD_N##N, &thermalManager.target_temperature[N], 0, HEATER_##N##_MAXTEMP - 15, watch_temp_callback_E##N) + #define EDIT_TARGET(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_LCD_N##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, thermalManager.start_watching_E##N) EDIT_TARGET(0); EDIT_TARGET(1); #if HOTENDS > 2 @@ -380,7 +380,14 @@ void menu_temperature() { // Bed: // #if HAS_HEATED_BED - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.target_temperature_bed, 0, BED_MAXTEMP - 15, watch_temp_callback_bed); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAXTEMP - 5, thermalManager.start_watching_bed); + #endif + + // + // Chamber: + // + #if HAS_HEATED_CHAMBER + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_CHAMBER, &thermalManager.temp_chamber.target, 0, CHAMBER_MAXTEMP - 5, thermalManager.start_watching_chamber); #endif // @@ -413,9 +420,9 @@ void menu_temperature() { // Cooldown // bool has_heat = false; - HOTEND_LOOP() if (thermalManager.target_temperature[HOTEND_INDEX]) { has_heat = true; break; } + HOTEND_LOOP() if (thermalManager.temp_hotend[HOTEND_INDEX].target) { has_heat = true; break; } #if HAS_TEMP_BED - if (thermalManager.target_temperature_bed) has_heat = true; + if (thermalManager.temp_bed.target) has_heat = true; #endif if (has_heat) MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown); diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp index e24d239c49..409321779d 100644 --- a/Marlin/src/lcd/menu/menu_tune.cpp +++ b/Marlin/src/lcd/menu/menu_tune.cpp @@ -116,9 +116,9 @@ void menu_tune() { // Nozzle [1-4]: // #if HOTENDS == 1 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE, &thermalManager.target_temperature[0], 0, HEATER_0_MAXTEMP - 15, watch_temp_callback_E0); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, thermalManager.start_watching_E0); #else // HOTENDS > 1 - #define EDIT_NOZZLE(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_LCD_N##N, &thermalManager.target_temperature[N], 0, HEATER_##N##_MAXTEMP - 15, watch_temp_callback_E##N) + #define EDIT_NOZZLE(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_LCD_N##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, thermalManager.start_watching_E##N) EDIT_NOZZLE(0); EDIT_NOZZLE(1); #if HOTENDS > 2 @@ -143,7 +143,7 @@ void menu_tune() { // Bed: // #if HAS_HEATED_BED - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.target_temperature_bed, 0, BED_MAXTEMP - 15, watch_temp_callback_bed); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAXTEMP - 15, thermalManager.start_watching_bed); #endif // diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 1074dd914c..e69df2f0df 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -728,7 +728,7 @@ void MarlinSettings::postprocess() { const PID_t bed_pid = { DUMMY_PID_VALUE, DUMMY_PID_VALUE, DUMMY_PID_VALUE }; EEPROM_WRITE(bed_pid); #else - EEPROM_WRITE(thermalManager.bed_pid); + EEPROM_WRITE(thermalManager.temp_bed.pid); #endif } @@ -1448,7 +1448,7 @@ void MarlinSettings::postprocess() { EEPROM_READ(pid); #if ENABLED(PIDTEMPBED) if (!validating && pid.Kp != DUMMY_PID_VALUE) - memcpy(&thermalManager.bed_pid, &pid, sizeof(pid)); + memcpy(&thermalManager.temp_bed.pid, &pid, sizeof(pid)); #endif } @@ -2181,9 +2181,9 @@ void MarlinSettings::reset() { // #if ENABLED(PIDTEMPBED) - thermalManager.bed_pid.Kp = DEFAULT_bedKp; - thermalManager.bed_pid.Ki = scalePID_i(DEFAULT_bedKi); - thermalManager.bed_pid.Kd = scalePID_d(DEFAULT_bedKd); + thermalManager.temp_bed.pid.Kp = DEFAULT_bedKp; + thermalManager.temp_bed.pid.Ki = scalePID_i(DEFAULT_bedKi); + thermalManager.temp_bed.pid.Kd = scalePID_d(DEFAULT_bedKd); #endif // @@ -2726,9 +2726,9 @@ void MarlinSettings::reset() { #if ENABLED(PIDTEMPBED) CONFIG_ECHO_START(); SERIAL_ECHOLNPAIR( - " M304 P", thermalManager.bed_pid.Kp - , " I", unscalePID_i(thermalManager.bed_pid.Ki) - , " D", unscalePID_d(thermalManager.bed_pid.Kd) + " M304 P", thermalManager.temp_bed.pid.Kp + , " I", unscalePID_i(thermalManager.temp_bed.pid.Ki) + , " D", unscalePID_d(thermalManager.temp_bed.pid.Kd) ); #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index d697939ff3..b01ed04623 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -73,8 +73,8 @@ static void* heater_ttbl_map[2] = { (void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE }; static constexpr uint8_t heater_ttbllen_map[2] = { HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN }; #else - static void* heater_ttbl_map[HOTENDS] = ARRAY_BY_HOTENDS((void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE, (void*)HEATER_2_TEMPTABLE, (void*)HEATER_3_TEMPTABLE, (void*)HEATER_4_TEMPTABLE); - static constexpr uint8_t heater_ttbllen_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN, HEATER_3_TEMPTABLE_LEN, HEATER_4_TEMPTABLE_LEN); + static void* heater_ttbl_map[HOTENDS] = ARRAY_BY_HOTENDS((void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE, (void*)HEATER_2_TEMPTABLE, (void*)HEATER_3_TEMPTABLE, (void*)HEATER_4_TEMPTABLE, (void*)HEATER_5_TEMPTABLE); + static constexpr uint8_t heater_ttbllen_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN, HEATER_3_TEMPTABLE_LEN, HEATER_4_TEMPTABLE_LEN, HEATER_5_TEMPTABLE_LEN); #endif #endif @@ -84,24 +84,19 @@ Temperature thermalManager; * Macros to include the heater id in temp errors. The compiler's dead-code * elimination should (hopefully) optimize out the unused strings. */ + #if HAS_HEATED_BED - #define TEMP_ERR_PSTR(MSG, E) \ - (E) == -1 ? PSTR(MSG ## _BED) : \ - (HOTENDS > 1 && (E) == 1) ? PSTR(MSG_E2 " " MSG) : \ - (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \ - (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \ - (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \ - (HOTENDS > 5 && (E) == 5) ? PSTR(MSG_E6 " " MSG) : \ - PSTR(MSG_E1 " " MSG) + #define _BED_PSTR(E) (E) == -1 ? PSTR(MSG ## _BED) : #else - #define TEMP_ERR_PSTR(MSG, E) \ - (HOTENDS > 1 && (E) == 1) ? PSTR(MSG_E2 " " MSG) : \ - (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \ - (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \ - (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \ - (HOTENDS > 5 && (E) == 5) ? PSTR(MSG_E6 " " MSG) : \ - PSTR(MSG_E1 " " MSG) + #define _BED_PSTR(E) #endif +#if HAS_HEATED_CHAMBER + #define _CHAMBER_PSTR(E) (E) == -2 ? PSTR(MSG ## _CHAMBER) : +#else + #define _CHAMBER_PSTR(E) +#endif +#define _E_PSTR(M,E,N) (HOTENDS >= (N) && (E) == (N)-1) ? PSTR(MSG_E##N " " M) : +#define TEMP_ERR_PSTR(M,E) _BED_PSTR(E) _CHAMBER_PSTR(E) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) _E_PSTR(M,E,6) PSTR(MSG_E1 " " M) // public: @@ -109,9 +104,7 @@ Temperature thermalManager; bool Temperature::adaptive_fan_slowing = true; #endif -float Temperature::current_temperature[HOTENDS]; // = { 0.0 }; -int16_t Temperature::current_temperature_raw[HOTENDS], // = { 0 } - Temperature::target_temperature[HOTENDS]; // = { 0 } +hotend_info_t Temperature::temp_hotend[HOTENDS]; // = { 0 } #if ENABLED(AUTO_POWER_E_FANS) uint8_t Temperature::autofan_speed[HOTENDS]; // = { 0 } @@ -188,13 +181,9 @@ int16_t Temperature::current_temperature_raw[HOTENDS], // = { 0 } if (p != fans_paused) { fans_paused = p; if (p) - for (uint8_t x = 0; x < FAN_COUNT; x++) { - paused_fan_speed[x] = fan_speed[x]; - fan_speed[x] = 0; - } + FANS_LOOP(x) { paused_fan_speed[x] = fan_speed[x]; fan_speed[x] = 0; } else - for (uint8_t x = 0; x < FAN_COUNT; x++) - fan_speed[x] = paused_fan_speed[x]; + FANS_LOOP(x) fan_speed[x] = paused_fan_speed[x]; } } @@ -202,53 +191,58 @@ int16_t Temperature::current_temperature_raw[HOTENDS], // = { 0 } #endif // FAN_COUNT > 0 +#if WATCH_HOTENDS + heater_watch_t Temperature::watch_hotend[HOTENDS]; // = { { 0 } } +#endif +#if HEATER_IDLE_HANDLER + heater_idle_t Temperature::hotend_idle[HOTENDS]; // = { { 0 } } +#endif + #if HAS_HEATED_BED - float Temperature::current_temperature_bed = 0.0; - int16_t Temperature::current_temperature_bed_raw = 0, - Temperature::target_temperature_bed = 0; - uint8_t Temperature::soft_pwm_amount_bed; + bed_info_t Temperature::temp_bed; // = { 0 } + // Init min and max temp with extreme values to prevent false errors during startup #ifdef BED_MINTEMP - int16_t Temperature::bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; + int16_t Temperature::mintemp_raw_BED = HEATER_BED_RAW_LO_TEMP; #endif #ifdef BED_MAXTEMP - int16_t Temperature::bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP; + int16_t Temperature::maxtemp_raw_BED = HEATER_BED_RAW_HI_TEMP; #endif - #if WATCH_THE_BED - uint16_t Temperature::watch_target_bed_temp = 0; - millis_t Temperature::watch_bed_next_ms = 0; + #if WATCH_BED + heater_watch_t Temperature::watch_bed; // = { 0 } #endif - #if ENABLED(PIDTEMPBED) - PID_t Temperature::bed_pid; // Initialized by settings.load() - #else + #if DISABLED(PIDTEMPBED) millis_t Temperature::next_bed_check_ms; #endif - uint16_t Temperature::raw_temp_bed_value = 0; #if HEATER_IDLE_HANDLER - millis_t Temperature::bed_idle_timeout_ms = 0; - bool Temperature::bed_idle_timeout_exceeded = false; + heater_idle_t Temperature::bed_idle; // = { 0 } #endif #endif // HAS_HEATED_BED #if HAS_TEMP_CHAMBER - float Temperature::current_temperature_chamber = 0.0; - int16_t Temperature::current_temperature_chamber_raw = 0; - uint16_t Temperature::raw_temp_chamber_value = 0; -#endif + #if HAS_HEATED_CHAMBER + #ifdef CHAMBER_MINTEMP + int16_t Temperature::mintemp_raw_CHAMBER = HEATER_CHAMBER_RAW_LO_TEMP; + #endif + #ifdef CHAMBER_MAXTEMP + int16_t Temperature::maxtemp_raw_CHAMBER = HEATER_CHAMBER_RAW_HI_TEMP; + #endif + chamber_info_t temp_chamber; // = { 0 } + #if WATCH_CHAMBER + heater_watch_t Temperature::watch_chamber = { 0 }; + millis_t Temperature::next_chamber_check_ms; + #endif + #endif // HAS_HEATED_CHAMBER +#endif // HAS_TEMP_CHAMBER // Initialized by settings.load() #if ENABLED(PIDTEMP) - hotend_pid_t Temperature::pid[HOTENDS]; + //hotend_pid_t Temperature::pid[HOTENDS]; #endif #if ENABLED(BABYSTEPPING) volatile int16_t Temperature::babystepsTodo[XYZ] = { 0 }; #endif -#if WATCH_HOTENDS - uint16_t Temperature::watch_target_temp[HOTENDS] = { 0 }; - millis_t Temperature::watch_heater_next_ms[HOTENDS] = { 0 }; -#endif - #if ENABLED(PREVENT_COLD_EXTRUSION) bool Temperature::allow_cold_extrude = false; int16_t Temperature::extrude_min_temp = EXTRUDE_MINTEMP; @@ -268,18 +262,21 @@ int16_t Temperature::current_temperature_raw[HOTENDS], // = { 0 } volatile bool Temperature::temp_meas_ready = false; #if ENABLED(PID_EXTRUSION_SCALING) - long Temperature::last_e_position; - long Temperature::lpq[LPQ_MAX_LEN]; - int Temperature::lpq_ptr = 0; + int32_t Temperature::last_e_position, Temperature::lpq[LPQ_MAX_LEN]; + lpq_ptr_t Temperature::lpq_ptr = 0; #endif -uint16_t Temperature::raw_temp_value[MAX_EXTRUDERS] = { 0 }; +#define TEMPDIR(N) ((HEATER_##N##_RAW_LO_TEMP) < (HEATER_##N##_RAW_HI_TEMP) ? 1 : -1) -// Init min and max temp with extreme values to prevent false errors during startup -int16_t Temperature::minttemp_raw[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP, HEATER_3_RAW_LO_TEMP, HEATER_4_RAW_LO_TEMP), - Temperature::maxttemp_raw[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_RAW_HI_TEMP , HEATER_1_RAW_HI_TEMP , HEATER_2_RAW_HI_TEMP, HEATER_3_RAW_HI_TEMP, HEATER_4_RAW_HI_TEMP), - Temperature::minttemp[HOTENDS] = { 0 }, - Temperature::maxttemp[HOTENDS] = ARRAY_BY_HOTENDS1(16383); +// Init mintemp and maxtemp with extreme values to prevent false errors during startup +constexpr temp_range_t sensor_heater_0 { HEATER_0_RAW_LO_TEMP, HEATER_0_RAW_HI_TEMP, 0, 16383 }, + sensor_heater_1 { HEATER_1_RAW_LO_TEMP, HEATER_1_RAW_HI_TEMP, 0, 16383 }, + sensor_heater_2 { HEATER_2_RAW_LO_TEMP, HEATER_2_RAW_HI_TEMP, 0, 16383 }, + sensor_heater_3 { HEATER_3_RAW_LO_TEMP, HEATER_3_RAW_HI_TEMP, 0, 16383 }, + sensor_heater_4 { HEATER_4_RAW_LO_TEMP, HEATER_4_RAW_HI_TEMP, 0, 16383 }, + sensor_heater_5 { HEATER_5_RAW_LO_TEMP, HEATER_5_RAW_HI_TEMP, 0, 16383 }; + +temp_range_t Temperature::temp_range[HOTENDS] = ARRAY_BY_HOTENDS(sensor_heater_0, sensor_heater_1, sensor_heater_2, sensor_heater_3, sensor_heater_4, sensor_heater_5); #ifdef MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED uint8_t Temperature::consecutive_low_temperature_error[HOTENDS] = { 0 }; @@ -297,8 +294,6 @@ int16_t Temperature::minttemp_raw[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_RAW_LO_TE millis_t Temperature::next_auto_fan_check_ms = 0; #endif -uint8_t Temperature::soft_pwm_amount[HOTENDS]; - #if ENABLED(FAN_SOFT_PWM) uint8_t Temperature::soft_pwm_amount_fan[FAN_COUNT], Temperature::soft_pwm_count_fan[FAN_COUNT]; @@ -312,11 +307,6 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; bool Temperature::paused; #endif -#if HEATER_IDLE_HANDLER - millis_t Temperature::heater_idle_timeout_ms[HOTENDS] = { 0 }; - bool Temperature::heater_idle_timeout_exceeded[HOTENDS] = { false }; -#endif - // public: #if HAS_ADC_BUTTONS @@ -354,22 +344,22 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; #if HAS_PID_FOR_BOTH #define GHV(B,H) (heater < 0 ? (B) : (H)) - #define SHV(S,B,H) do{ if (heater < 0) S##_bed = B; else S [heater] = H; }while(0) + #define SHV(B,H) do{ if (heater < 0) temp_bed.soft_pwm_amount = B; else temp_hotend[heater].soft_pwm_amount = H; }while(0) #define ONHEATINGSTART() (heater < 0 ? printerEventLEDs.onBedHeatingStart() : printerEventLEDs.onHotendHeatingStart()) #define ONHEATING(S,C,T) do{ if (heater < 0) printerEventLEDs.onBedHeating(S,C,T); else printerEventLEDs.onHotendHeating(S,C,T); }while(0) #elif ENABLED(PIDTEMPBED) #define GHV(B,H) B - #define SHV(S,B,H) (S##_bed = B) + #define SHV(B,H) (temp_bed.soft_pwm_amount = B) #define ONHEATINGSTART() printerEventLEDs.onBedHeatingStart() #define ONHEATING(S,C,T) printerEventLEDs.onBedHeating(S,C,T) #else #define GHV(B,H) H - #define SHV(S,B,H) (S [heater] = H) + #define SHV(B,H) (temp_hotend[heater].soft_pwm_amount = H) #define ONHEATINGSTART() printerEventLEDs.onHotendHeatingStart() #define ONHEATING(S,C,T) printerEventLEDs.onHotendHeating(S,C,T) #endif - #if WATCH_THE_BED || WATCH_HOTENDS + #if WATCH_BED || WATCH_HOTENDS #define HAS_TP_BED (ENABLED(THERMAL_PROTECTION_BED) && ENABLED(PIDTEMPBED)) #if HAS_TP_BED && ENABLED(THERMAL_PROTECTION_HOTENDS) && ENABLED(PIDTEMP) #define GTV(B,H) (heater < 0 ? (B) : (H)) @@ -390,7 +380,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; next_auto_fan_check_ms = next_temp_ms + 2500UL; #endif - if (target > GHV(BED_MAXTEMP, maxttemp[heater]) - 15) { + if (target > GHV(BED_MAXTEMP, temp_range[heater].maxtemp) - 15) { SERIAL_ECHOLNPGM(MSG_PID_TEMP_TOO_HIGH); return; } @@ -399,11 +389,11 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; disable_all_heaters(); - SHV(soft_pwm_amount, bias = d = (MAX_BED_POWER) >> 1, bias = d = (PID_MAX) >> 1); + SHV(bias = d = (MAX_BED_POWER) >> 1, bias = d = (PID_MAX) >> 1); wait_for_heatup = true; // Can be interrupted with M108 #if ENABLED(PRINTER_EVENT_LEDS) - const float start_temp = GHV(current_temperature_bed, current_temperature[heater]); + const float start_temp = GHV(temp_bed.current, temp_hotend[heater].current); LEDColor color = ONHEATINGSTART(); #endif @@ -420,7 +410,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; updateTemperaturesFromRawValues(); // Get the current temperature and constrain it - current = GHV(current_temperature_bed, current_temperature[heater]); + current = GHV(temp_bed.current, temp_hotend[heater].current); NOLESS(max, current); NOMORE(min, current); @@ -438,7 +428,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; if (heating && current > target) { if (ELAPSED(ms, t2 + 5000UL)) { heating = false; - SHV(soft_pwm_amount, (bias - d) >> 1, (bias - d) >> 1); + SHV((bias - d) >> 1, (bias - d) >> 1); t1 = ms; t_high = t1 - t2; max = target; @@ -479,7 +469,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; */ } } - SHV(soft_pwm_amount, (bias + d) >> 1, (bias + d) >> 1); + SHV((bias + d) >> 1, (bias + d) >> 1); cycles++; min = target; } @@ -504,9 +494,9 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; next_temp_ms = ms + 2000UL; // Make sure heating is actually working - #if WATCH_THE_BED || WATCH_HOTENDS + #if WATCH_BED || WATCH_HOTENDS if ( - #if WATCH_THE_BED && WATCH_HOTENDS + #if WATCH_BED && WATCH_HOTENDS true #elif WATCH_HOTENDS heater >= 0 @@ -557,9 +547,9 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; #endif #define _SET_BED_PID() do { \ - bed_pid.Kp = tune_pid.Kp; \ - bed_pid.Ki = scalePID_i(tune_pid.Ki); \ - bed_pid.Kd = scalePID_d(tune_pid.Kd); \ + temp_bed.pid.Kp = tune_pid.Kp; \ + temp_bed.pid.Ki = scalePID_i(tune_pid.Ki); \ + temp_bed.pid.Kd = scalePID_d(tune_pid.Kd); \ }while(0) #define _SET_EXTRUDER_PID() do { \ @@ -612,9 +602,9 @@ Temperature::Temperature() { } int Temperature::getHeaterPower(const int heater) { return ( #if HAS_HEATED_BED - heater < 0 ? soft_pwm_amount_bed : + heater < 0 ? temp_bed.soft_pwm_amount : #endif - soft_pwm_amount[heater] + temp_hotend[heater].soft_pwm_amount ); } @@ -635,11 +625,11 @@ int Temperature::getHeaterPower(const int heater) { uint8_t fanState = 0; HOTEND_LOOP() - if (current_temperature[e] > EXTRUDER_AUTO_FAN_TEMPERATURE) + if (temp_hotend[e].current > EXTRUDER_AUTO_FAN_TEMPERATURE) SBI(fanState, pgm_read_byte(&fanBit[e])); #if HAS_TEMP_CHAMBER - if (current_temperature_chamber > EXTRUDER_AUTO_FAN_TEMPERATURE) + if (temp_chambercurrent > EXTRUDER_AUTO_FAN_TEMPERATURE) SBI(fanState, pgm_read_byte(&fanBit[6])); #endif @@ -698,7 +688,12 @@ void Temperature::_temp_error(const int8_t heater, PGM_P const serial_msg, PGM_P SERIAL_ERROR_START(); serialprintPGM(serial_msg); SERIAL_ECHOPGM(MSG_STOPPED_HEATER); - if (heater >= 0) SERIAL_ECHOLN((int)heater); else SERIAL_ECHOLNPGM(MSG_HEATER_BED); + if (heater >= 0) SERIAL_ECHO((int)heater); + #if HAS_HEATED_CHAMBER + else if (heater == -2) SERIAL_ECHOPGM(MSG_HEATER_CHAMBER); + #endif + else SERIAL_ECHOPGM(MSG_HEATER_BED); + SERIAL_EOL(); } #if DISABLED(BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE) if (!killed) { @@ -721,11 +716,11 @@ void Temperature::min_temp_error(const int8_t heater) { float Temperature::get_pid_output(const int8_t e) { #if HOTENDS == 1 - UNUSED(e); #define _HOTEND_TEST true #else #define _HOTEND_TEST (e == active_extruder) #endif + E_UNUSED(); float pid_output; #if ENABLED(PIDTEMP) #if DISABLED(PID_OPENLOOP) @@ -733,14 +728,14 @@ float Temperature::get_pid_output(const int8_t e) { static float temp_iState[HOTENDS] = { 0 }, temp_dState[HOTENDS] = { 0 }; static bool pid_reset[HOTENDS] = { false }; - float pid_error = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX]; - work_pid[HOTEND_INDEX].Kd = PID_K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + float(PID_K1) * work_pid[HOTEND_INDEX].Kd; - temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX]; + float pid_error = temp_hotend[HOTEND_INDEX].target - temp_hotend[HOTEND_INDEX].current; + work_pid[HOTEND_INDEX].Kd = PID_K2 * PID_PARAM(Kd, HOTEND_INDEX) * (temp_hotend[HOTEND_INDEX].current - temp_dState[HOTEND_INDEX]) + float(PID_K1) * work_pid[HOTEND_INDEX].Kd; + temp_dState[HOTEND_INDEX] = temp_hotend[HOTEND_INDEX].current; - if (target_temperature[HOTEND_INDEX] == 0 + if (temp_hotend[HOTEND_INDEX].target == 0 || pid_error < -(PID_FUNCTIONAL_RANGE) #if HEATER_IDLE_HANDLER - || heater_idle_timeout_exceeded[HOTEND_INDEX] + || hotend_idle[HOTEND_INDEX].timed_out #endif ) { pid_output = 0; @@ -790,7 +785,7 @@ float Temperature::get_pid_output(const int8_t e) { #else // PID_OPENLOOP - const float pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX); + const float pid_output = constrain(temp_hotend[HOTEND_INDEX].target, 0, PID_MAX); #endif // PID_OPENLOOP @@ -798,7 +793,7 @@ float Temperature::get_pid_output(const int8_t e) { SERIAL_ECHO_START(); SERIAL_ECHOPAIR( MSG_PID_DEBUG, HOTEND_INDEX, - MSG_PID_DEBUG_INPUT, current_temperature[HOTEND_INDEX], + MSG_PID_DEBUG_INPUT, temp_hotend[HOTEND_INDEX].current, MSG_PID_DEBUG_OUTPUT, pid_output ); #if DISABLED(PID_OPENLOOP) @@ -816,11 +811,11 @@ float Temperature::get_pid_output(const int8_t e) { #else /* PID off */ #if HEATER_IDLE_HANDLER - #define _TIMED_OUT_TEST heater_idle_timeout_exceeded[HOTEND_INDEX] + #define _TIMED_OUT_TEST hotend_idle[HOTEND_INDEX].timed_out #else #define _TIMED_OUT_TEST false #endif - pid_output = (!_TIMED_OUT_TEST && current_temperature[HOTEND_INDEX] < target_temperature[HOTEND_INDEX]) ? BANG_MAX : 0; + pid_output = (!_TIMED_OUT_TEST && temp_hotend[HOTEND_INDEX].current < temp_hotend[HOTEND_INDEX].target) ? BANG_MAX : 0; #undef _TIMED_OUT_TEST #endif @@ -836,13 +831,13 @@ float Temperature::get_pid_output(const int8_t e) { static PID_t work_pid = { 0 }; static float temp_iState = 0, temp_dState = 0; - float pid_error = target_temperature_bed - current_temperature_bed; + float pid_error = temp_bed.target - temp_bed.current; temp_iState += pid_error; - work_pid.Kp = bed_pid.Kp * pid_error; - work_pid.Ki = bed_pid.Ki * temp_iState; - work_pid.Kd = PID_K2 * bed_pid.Kd * (current_temperature_bed - temp_dState) + PID_K1 * work_pid.Kd; + work_pid.Kp = temp_bed.pid.Kp * pid_error; + work_pid.Ki = temp_bed.pid.Ki * temp_iState; + work_pid.Kd = PID_K2 * temp_bed.pid.Kd * (temp_bed.current - temp_dState) + PID_K1 * work_pid.Kd; - temp_dState = current_temperature_bed; + temp_dState = temp_bed.current; float pid_output = work_pid.Kp + work_pid.Ki - work_pid.Kd; if (pid_output > MAX_BED_POWER) { @@ -856,14 +851,14 @@ float Temperature::get_pid_output(const int8_t e) { #else // PID_OPENLOOP - const float pid_output = constrain(target_temperature_bed, 0, MAX_BED_POWER); + const float pid_output = constrain(temp_bed.target, 0, MAX_BED_POWER); #endif // PID_OPENLOOP #if ENABLED(PID_BED_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR( - " PID_BED_DEBUG : Input ", current_temperature_bed, " Output ", pid_output, + " PID_BED_DEBUG : Input ", temp_bed.current, " Output ", pid_output, #if DISABLED(PID_OPENLOOP) MSG_PID_DEBUG_PTERM, work_pid.Kp, MSG_PID_DEBUG_ITERM, work_pid.Ki, @@ -909,37 +904,36 @@ void Temperature::manage_heater() { updateTemperaturesFromRawValues(); // also resets the watchdog #if ENABLED(HEATER_0_USES_MAX6675) - if (current_temperature[0] > MIN(HEATER_0_MAXTEMP, HEATER_0_MAX6675_TMAX - 1.0)) max_temp_error(0); - if (current_temperature[0] < MAX(HEATER_0_MINTEMP, HEATER_0_MAX6675_TMIN + .01)) min_temp_error(0); + if (temp_hotend[0].current > MIN(HEATER_0_MAXTEMP, HEATER_0_MAX6675_TMAX - 1.0)) max_temp_error(0); + if (temp_hotend[0].current < MAX(HEATER_0_MINTEMP, HEATER_0_MAX6675_TMIN + .01)) min_temp_error(0); #endif #if ENABLED(HEATER_1_USES_MAX6675) - if (current_temperature[1] > MIN(HEATER_1_MAXTEMP, HEATER_1_MAX6675_TMAX - 1.0)) max_temp_error(1); - if (current_temperature[1] < MAX(HEATER_1_MINTEMP, HEATER_1_MAX6675_TMIN + .01)) min_temp_error(1); + if (temp_hotend[1].current > MIN(HEATER_1_MAXTEMP, HEATER_1_MAX6675_TMAX - 1.0)) max_temp_error(1); + if (temp_hotend[1].current < MAX(HEATER_1_MINTEMP, HEATER_1_MAX6675_TMIN + .01)) min_temp_error(1); #endif - #if WATCH_HOTENDS || WATCH_THE_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN || HEATER_IDLE_HANDLER + #if WATCH_HOTENDS || WATCH_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN || HEATER_IDLE_HANDLER || WATCH_CHAMBER millis_t ms = millis(); #endif HOTEND_LOOP() { #if HEATER_IDLE_HANDLER - if (!heater_idle_timeout_exceeded[e] && heater_idle_timeout_ms[e] && ELAPSED(ms, heater_idle_timeout_ms[e])) - heater_idle_timeout_exceeded[e] = true; + hotend_idle[e].update(ms); #endif #if ENABLED(THERMAL_PROTECTION_HOTENDS) // Check for thermal runaway - thermal_runaway_protection(&thermal_runaway_state_machine[e], &thermal_runaway_timer[e], current_temperature[e], target_temperature[e], e, THERMAL_PROTECTION_PERIOD, THERMAL_PROTECTION_HYSTERESIS); + thermal_runaway_protection(tr_state_machine[e], temp_hotend[e].current, temp_hotend[e].target, e, THERMAL_PROTECTION_PERIOD, THERMAL_PROTECTION_HYSTERESIS); #endif - soft_pwm_amount[e] = (current_temperature[e] > minttemp[e] || is_preheating(e)) && current_temperature[e] < maxttemp[e] ? (int)get_pid_output(e) >> 1 : 0; + temp_hotend[e].soft_pwm_amount = (temp_hotend[e].current > temp_range[e].mintemp || is_preheating(e)) && temp_hotend[e].current < temp_range[e].maxtemp ? (int)get_pid_output(e) >> 1 : 0; #if WATCH_HOTENDS // Make sure temperature is increasing - if (watch_heater_next_ms[e] && ELAPSED(ms, watch_heater_next_ms[e])) { // Time to check this extruder? - if (degHotend(e) < watch_target_temp[e]) // Failed to increase enough? + if (watch_hotend[e].next_ms && ELAPSED(ms, watch_hotend[e].next_ms)) { // Time to check this extruder? + if (degHotend(e) < watch_hotend[e].target) // Failed to increase enough? _temp_error(e, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, e)); else // Start again if the target is still far off start_watching_heater(e); @@ -948,7 +942,7 @@ void Temperature::manage_heater() { #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) // Make sure measured temperatures are close together - if (ABS(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) + if (ABS(temp_hotend[0].current - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) _temp_error(0, PSTR(MSG_REDUNDANCY), PSTR(MSG_ERR_REDUNDANT_TEMP)); #endif @@ -976,15 +970,15 @@ void Temperature::manage_heater() { #if HAS_HEATED_BED - #if WATCH_THE_BED + #if WATCH_BED // Make sure temperature is increasing - if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) { // Time to check the bed? - if (degBed() < watch_target_bed_temp) // Failed to increase enough? + if (watch_bed.elapsed(ms)) { // Time to check the bed? + if (degBed() < watch_bed.target) // Failed to increase enough? _temp_error(-1, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, -1)); else // Start again if the target is still far off start_watching_bed(); } - #endif // WATCH_THE_BED + #endif // WATCH_BED #if DISABLED(PIDTEMPBED) if (PENDING(ms, next_bed_check_ms) @@ -999,17 +993,16 @@ void Temperature::manage_heater() { #endif #if HEATER_IDLE_HANDLER - if (!bed_idle_timeout_exceeded && bed_idle_timeout_ms && ELAPSED(ms, bed_idle_timeout_ms)) - bed_idle_timeout_exceeded = true; + bed_idle.update(ms); #endif #if HAS_THERMALLY_PROTECTED_BED - thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, -1, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS); + thermal_runaway_protection(tr_state_machine_bed, temp_bed.current, temp_bed.target, -1, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS); #endif #if HEATER_IDLE_HANDLER - if (bed_idle_timeout_exceeded) { - soft_pwm_amount_bed = 0; + if (bed_idle.timed_out) { + temp_bed.soft_pwm_amount = 0; #if DISABLED(PIDTEMPBED) WRITE_HEATER_BED(LOW); #endif @@ -1018,26 +1011,73 @@ void Temperature::manage_heater() { #endif { #if ENABLED(PIDTEMPBED) - soft_pwm_amount_bed = WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP) ? (int)get_pid_output_bed() >> 1 : 0; + temp_bed.soft_pwm_amount = WITHIN(temp_bed.current, BED_MINTEMP, BED_MAXTEMP) ? (int)get_pid_output_bed() >> 1 : 0; #else // Check if temperature is within the correct band - if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) { + if (WITHIN(temp_bed.current, BED_MINTEMP, BED_MAXTEMP)) { #if ENABLED(BED_LIMIT_SWITCHING) - if (current_temperature_bed >= target_temperature_bed + BED_HYSTERESIS) - soft_pwm_amount_bed = 0; - else if (current_temperature_bed <= target_temperature_bed - (BED_HYSTERESIS)) - soft_pwm_amount_bed = MAX_BED_POWER >> 1; + if (temp_bed.current >= temp_bed.target + BED_HYSTERESIS) + temp_bed.soft_pwm_amount = 0; + else if (temp_bed.current <= temp_bed.target - (BED_HYSTERESIS)) + temp_bed.soft_pwm_amount = MAX_BED_POWER >> 1; #else // !PIDTEMPBED && !BED_LIMIT_SWITCHING - soft_pwm_amount_bed = current_temperature_bed < target_temperature_bed ? MAX_BED_POWER >> 1 : 0; + temp_bed.soft_pwm_amount = temp_bed.current < temp_bed.target ? MAX_BED_POWER >> 1 : 0; #endif } else { - soft_pwm_amount_bed = 0; + temp_bed.soft_pwm_amount = 0; WRITE_HEATER_BED(LOW); } #endif } #endif // HAS_HEATED_BED + + #if HAS_TEMP_CHAMBER + + #ifndef CHAMBER_CHECK_INTERVAL + #define CHAMBER_CHECK_INTERVAL 1000UL + #endif + + #if HAS_HEATED_CHAMBER + + #if WATCH_CHAMBER + // Make sure temperature is increasing + if (watch_chamber.elapsed(ms)) { // Time to check the chamber? + if (degChamber() < watch_chamber.target) // Failed to increase enough? + _temp_error(-2, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, -2)); + else + start_watching_chamber(); // Start again if the target is still far off + } + #endif // WATCH_CHAMBER + + if (PENDING(ms, next_chamber_check_ms)) return; + next_chamber_check_ms = ms + CHAMBER_CHECK_INTERVAL; + + if (WITHIN(temp_chambercurrent, CHAMBER_MINTEMP, CHAMBER_MAXTEMP)) { + #if ENABLED(CHAMBER_LIMIT_SWITCHING) + if (temp_chambercurrent >= temp_chamber.target + CHAMBER_HYSTERESIS) + temp_chamber.soft_pwm_amount = 0; + else if (temp_chambercurrent <= temp_chamber.target - (CHAMBER_HYSTERESIS)) + temp_chamber.soft_pwm_amount = MAX_CHAMBER_POWER >> 1; + #else // !PIDTEMPCHAMBER && !CHAMBER_LIMIT_SWITCHING + temp_chamber.soft_pwm_amount = temp_chambercurrent < temp_chamber.target ? MAX_CHAMBER_POWER >> 1 : 0; + #endif + } + else { + temp_chamber.soft_pwm_amount = 0; + WRITE_HEATER_CHAMBER(LOW); + } + + #if ENABLED(THERMAL_PROTECTION_CHAMBER) + thermal_runaway_protection(tr_state_machine_chamber, temp_chambercurrent, temp_chamber.target, -2, THERMAL_PROTECTION_CHAMBER_PERIOD, THERMAL_PROTECTION_CHAMBER_HYSTERESIS); + #endif + + // TODO: Implement true PID pwm + //temp_bed.soft_pwm_amount = WITHIN(temp_chambercurrent, CHAMBER_MINTEMP, CHAMBER_MAXTEMP) ? (int)get_pid_output_chamber() >> 1 : 0; + + #endif // HAS_HEATED_CHAMBER + + #endif // HAS_TEMP_CHAMBER } #define TEMP_AD595(RAW) ((RAW) * 5.0 * 100.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET) @@ -1125,6 +1165,14 @@ float Temperature::analog_to_celsius_hotend(const int raw, const uint8_t e) { #else break; #endif + case 5: + #if ENABLED(HEATER_5_USES_AD595) + return TEMP_AD595(raw); + #elif ENABLED(HEATER_5_USES_AD8495) + return TEMP_AD8495(raw); + #else + break; + #endif default: break; } @@ -1156,7 +1204,7 @@ float Temperature::analog_to_celsius_hotend(const int raw, const uint8_t e) { #if HAS_TEMP_CHAMBER // Derived from RepRap FiveD extruder::getTemperature() // For chamber temperature measurement. - float Temperature::analog_to_celsiusChamber(const int raw) { + float Temperature::analog_to_celsius_chamber(const int raw) { #if ENABLED(HEATER_CHAMBER_USES_THERMISTOR) SCAN_THERMISTOR_TABLE(CHAMBERTEMPTABLE, CHAMBERTEMPTABLE_LEN); #elif ENABLED(HEATER_CHAMBER_USES_AD595) @@ -1177,17 +1225,17 @@ float Temperature::analog_to_celsius_hotend(const int raw, const uint8_t e) { */ void Temperature::updateTemperaturesFromRawValues() { #if ENABLED(HEATER_0_USES_MAX6675) - current_temperature_raw[0] = READ_MAX6675(0); + temp_hotend[0].raw = READ_MAX6675(0); #endif #if ENABLED(HEATER_1_USES_MAX6675) - current_temperature_raw[1] = READ_MAX6675(1); + temp_hotend[1].raw = READ_MAX6675(1); #endif - HOTEND_LOOP() current_temperature[e] = analog_to_celsius_hotend(current_temperature_raw[e], e); + HOTEND_LOOP() temp_hotend[e].current = analog_to_celsius_hotend(temp_hotend[e].raw, e); #if HAS_HEATED_BED - current_temperature_bed = analog_to_celsius_bed(current_temperature_bed_raw); + temp_bed.current = analog_to_celsius_bed(temp_bed.raw); #endif #if HAS_TEMP_CHAMBER - current_temperature_chamber = analog_to_celsiusChamber(current_temperature_chamber_raw); + temp_chambercurrent = analog_to_celsius_chamber(temp_chamber.raw); #endif #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) redundant_temperature = analog_to_celsius_hotend(redundant_temperature_raw, 1); @@ -1244,17 +1292,15 @@ void Temperature::init() { inited = true; #endif - #if MB(RUMBA) && ( \ - ENABLED(HEATER_0_USES_AD595) || ENABLED(HEATER_1_USES_AD595) || ENABLED(HEATER_2_USES_AD595) || ENABLED(HEATER_3_USES_AD595) || ENABLED(HEATER_4_USES_AD595) || ENABLED(HEATER_BED_USES_AD595) || ENABLED(HEATER_CHAMBER_USES_AD595) \ - || ENABLED(HEATER_0_USES_AD8495) || ENABLED(HEATER_1_USES_AD8495) || ENABLED(HEATER_2_USES_AD8495) || ENABLED(HEATER_3_USES_AD8495) || ENABLED(HEATER_4_USES_AD8495) || ENABLED(HEATER_BED_USES_AD8495) || ENABLED(HEATER_CHAMBER_USES_AD8495)) - // Disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector - MCUCR = _BV(JTD); - MCUCR = _BV(JTD); + #if MB(RUMBA) + #define _AD(N) (ENABLED(HEATER_##N##_USES_AD595) || ENABLED(HEATER_##N##_USES_AD8495)) + #if _AD(0) || _AD(1) || _AD(2) || _AD(3) || _AD(4) || _AD(5) || _AD(BED) || _AD(CHAMBER) + // Disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector + MCUCR = _BV(JTD); + MCUCR = _BV(JTD); + #endif #endif - // Finish init of mult hotend arrays - HOTEND_LOOP() maxttemp[e] = maxttemp[0]; - #if ENABLED(PIDTEMP) && ENABLED(PID_EXTRUSION_SCALING) last_e_position = 0; #endif @@ -1274,10 +1320,15 @@ void Temperature::init() { #if HAS_HEATER_4 OUT_WRITE(HEATER_4_PIN, HEATER_4_INVERTING); #endif + #if HAS_HEATER_5 + OUT_WRITE(HEATER_5_PIN, HEATER_5_INVERTING); + #endif #if HAS_HEATED_BED OUT_WRITE(HEATER_BED_PIN, HEATER_BED_INVERTING); #endif - + #if HAS_HEATED_CHAMBER + OUT_WRITE(HEATER_CHAMBER_PIN, HEATER_CHAMBER_INVERTING); + #endif #if HAS_FAN0 SET_OUTPUT(FAN_PIN); #if ENABLED(FAST_PWM_FAN) @@ -1430,91 +1481,86 @@ void Temperature::init() { // Wait for temperature measurement to settle delay(250); - #define TEMP_MIN_ROUTINE(NR) \ - minttemp[NR] = HEATER_ ##NR## _MINTEMP; \ - while (analog_to_celsius_hotend(minttemp_raw[NR], NR) < HEATER_ ##NR## _MINTEMP) { \ - if (HEATER_ ##NR## _RAW_LO_TEMP < HEATER_ ##NR## _RAW_HI_TEMP) \ - minttemp_raw[NR] += OVERSAMPLENR; \ - else \ - minttemp_raw[NR] -= OVERSAMPLENR; \ - } - #define TEMP_MAX_ROUTINE(NR) \ - maxttemp[NR] = HEATER_ ##NR## _MAXTEMP; \ - while (analog_to_celsius_hotend(maxttemp_raw[NR], NR) > HEATER_ ##NR## _MAXTEMP) { \ - if (HEATER_ ##NR## _RAW_LO_TEMP < HEATER_ ##NR## _RAW_HI_TEMP) \ - maxttemp_raw[NR] -= OVERSAMPLENR; \ - else \ - maxttemp_raw[NR] += OVERSAMPLENR; \ - } + #if HOTENDS - #ifdef HEATER_0_MINTEMP - TEMP_MIN_ROUTINE(0); - #endif - #ifdef HEATER_0_MAXTEMP - TEMP_MAX_ROUTINE(0); - #endif - #if HOTENDS > 1 - #ifdef HEATER_1_MINTEMP - TEMP_MIN_ROUTINE(1); + #define _TEMP_MIN_E(NR) do{ \ + temp_range[NR].mintemp = HEATER_ ##NR## _MINTEMP; \ + while (analog_to_celsius_hotend(temp_range[NR].raw_min, NR) < HEATER_ ##NR## _MINTEMP) \ + temp_range[NR].raw_min += TEMPDIR(NR) * (OVERSAMPLENR); \ + }while(0) + #define _TEMP_MAX_E(NR) do{ \ + temp_range[NR].maxtemp = HEATER_ ##NR## _MAXTEMP; \ + while (analog_to_celsius_hotend(temp_range[NR].raw_min, NR) > HEATER_ ##NR## _MAXTEMP) \ + temp_range[NR].raw_max -= TEMPDIR(NR) * (OVERSAMPLENR); \ + }while(0) + + #ifdef HEATER_0_MINTEMP + _TEMP_MIN_E(0); #endif - #ifdef HEATER_1_MAXTEMP - TEMP_MAX_ROUTINE(1); + #ifdef HEATER_0_MAXTEMP + _TEMP_MAX_E(0); #endif - #if HOTENDS > 2 - #ifdef HEATER_2_MINTEMP - TEMP_MIN_ROUTINE(2); + #if HOTENDS > 1 + #ifdef HEATER_1_MINTEMP + _TEMP_MIN_E(1); #endif - #ifdef HEATER_2_MAXTEMP - TEMP_MAX_ROUTINE(2); + #ifdef HEATER_1_MAXTEMP + _TEMP_MAX_E(1); #endif - #if HOTENDS > 3 - #ifdef HEATER_3_MINTEMP - TEMP_MIN_ROUTINE(3); + #if HOTENDS > 2 + #ifdef HEATER_2_MINTEMP + _TEMP_MIN_E(2); #endif - #ifdef HEATER_3_MAXTEMP - TEMP_MAX_ROUTINE(3); + #ifdef HEATER_2_MAXTEMP + _TEMP_MAX_E(2); #endif - #if HOTENDS > 4 - #ifdef HEATER_4_MINTEMP - TEMP_MIN_ROUTINE(4); + #if HOTENDS > 3 + #ifdef HEATER_3_MINTEMP + _TEMP_MIN_E(3); #endif - #ifdef HEATER_4_MAXTEMP - TEMP_MAX_ROUTINE(4); + #ifdef HEATER_3_MAXTEMP + _TEMP_MAX_E(3); #endif - #if HOTENDS > 5 - #ifdef HEATER_5_MINTEMP - TEMP_MIN_ROUTINE(5); + #if HOTENDS > 4 + #ifdef HEATER_4_MINTEMP + _TEMP_MIN_E(4); #endif - #ifdef HEATER_5_MAXTEMP - TEMP_MAX_ROUTINE(5); + #ifdef HEATER_4_MAXTEMP + _TEMP_MAX_E(4); #endif - #endif // HOTENDS > 5 - #endif // HOTENDS > 4 - #endif // HOTENDS > 3 - #endif // HOTENDS > 2 + #if HOTENDS > 5 + #ifdef HEATER_5_MINTEMP + _TEMP_MIN_E(5); + #endif + #ifdef HEATER_5_MAXTEMP + _TEMP_MAX_E(5); + #endif + #endif // HOTENDS > 5 + #endif // HOTENDS > 4 + #endif // HOTENDS > 3 + #endif // HOTENDS > 2 + #endif // HOTENDS > 1 + #endif // HOTENDS > 1 #if HAS_HEATED_BED #ifdef BED_MINTEMP - while (analog_to_celsius_bed(bed_minttemp_raw) < BED_MINTEMP) { - #if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP - bed_minttemp_raw += OVERSAMPLENR; - #else - bed_minttemp_raw -= OVERSAMPLENR; - #endif - } - #endif // BED_MINTEMP + while (analog_to_celsius_bed(mintemp_raw_BED) < BED_MINTEMP) mintemp_raw_BED += TEMPDIR(BED) * (OVERSAMPLENR); + #endif #ifdef BED_MAXTEMP - while (analog_to_celsius_bed(bed_maxttemp_raw) > BED_MAXTEMP) { - #if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP - bed_maxttemp_raw -= OVERSAMPLENR; - #else - bed_maxttemp_raw += OVERSAMPLENR; - #endif - } - #endif // BED_MAXTEMP + while (analog_to_celsius_bed(maxtemp_raw_BED) > BED_MAXTEMP) mintemp_raw_BED -= TEMPDIR(BED) * (OVERSAMPLENR); + #endif #endif // HAS_HEATED_BED + #if HAS_HEATED_CHAMBER + #ifdef CHAMBER_MINTEMP + while (analog_to_celsius_chamber(mintemp_raw_CHAMBER) < CHAMBER_MINTEMP) mintemp_raw_CHAMBER += TEMPDIR(CHAMBER) * (OVERSAMPLENR); + #endif + #ifdef CHAMBER_MAXTEMP + while (analog_to_celsius_chamber(maxtemp_raw_CHAMBER) > CHAMBER_MAXTEMP) mintemp_raw_CHAMBER -= TEMPDIR(CHAMBER) * (OVERSAMPLENR); + #endif + #endif + #if ENABLED(PROBING_HEATERS_OFF) paused = false; #endif @@ -1568,19 +1614,17 @@ void Temperature::init() { * This is called when the temperature is set. (M104, M109) */ void Temperature::start_watching_heater(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); if (degTargetHotend(HOTEND_INDEX) && degHotend(HOTEND_INDEX) < degTargetHotend(HOTEND_INDEX) - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1)) { - watch_target_temp[HOTEND_INDEX] = degHotend(HOTEND_INDEX) + WATCH_TEMP_INCREASE; - watch_heater_next_ms[HOTEND_INDEX] = millis() + (WATCH_TEMP_PERIOD) * 1000UL; + watch_hotend[HOTEND_INDEX].target = degHotend(HOTEND_INDEX) + WATCH_TEMP_INCREASE; + watch_hotend[HOTEND_INDEX].next_ms = millis() + (WATCH_TEMP_PERIOD) * 1000UL; } else - watch_heater_next_ms[HOTEND_INDEX] = 0; + watch_hotend[HOTEND_INDEX].next_ms = 0; } #endif -#if WATCH_THE_BED +#if WATCH_BED /** * Start Heating Sanity Check for hotends that are below * their target temperature by a configurable margin. @@ -1588,39 +1632,56 @@ void Temperature::init() { */ void Temperature::start_watching_bed() { if (degTargetBed() && 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; + watch_bed.target = degBed() + WATCH_BED_TEMP_INCREASE; + watch_bed.next_ms = millis() + (WATCH_BED_TEMP_PERIOD) * 1000UL; } else - watch_bed_next_ms = 0; + watch_bed.next_ms = 0; } #endif -#if ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED +#if WATCH_CHAMBER + /** + * Start Heating Sanity Check for hotends that are below + * their target temperature by a configurable margin. + * This is called when the temperature is set. (M141, M191) + */ + void Temperature::start_watching_chamber() { + if (degChamber() < degTargetChamber() - (WATCH_CHAMBER_TEMP_INCREASE + TEMP_CHAMBER_HYSTERESIS + 1)) { + watch_chamber.target = degChamber() + WATCH_CHAMBER_TEMP_INCREASE; + watch_chamber.next_ms = millis() + (WATCH_CHAMBER_TEMP_PERIOD) * 1000UL; + } + else + watch_chamber.next_ms = 0; + } +#endif + +#if ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED || ENABLED(THERMAL_PROTECTION_CHAMBER) #if ENABLED(THERMAL_PROTECTION_HOTENDS) - Temperature::TRState Temperature::thermal_runaway_state_machine[HOTENDS] = { TRInactive }; - millis_t Temperature::thermal_runaway_timer[HOTENDS] = { 0 }; + Temperature::tr_state_machine_t Temperature::tr_state_machine[HOTENDS]; // = { { TRInactive, 0 } }; #endif - #if HAS_THERMALLY_PROTECTED_BED - Temperature::TRState Temperature::thermal_runaway_bed_state_machine = TRInactive; - millis_t Temperature::thermal_runaway_bed_timer; + Temperature::tr_state_machine_t Temperature::tr_state_machine_bed; // = { TRInactive, 0 }; + #endif + #if ENABLED(THERMAL_PROTECTION_CHAMBER) + Temperature::tr_state_machine_t Temperature::tr_state_machine_chamber; // = { TRInactive, 0 }; #endif - void Temperature::thermal_runaway_protection(Temperature::TRState * const state, millis_t * const timer, const float ¤t, const float &target, const int8_t heater_id, const uint16_t period_seconds, const uint16_t hysteresis_degc) { + void Temperature::thermal_runaway_protection(Temperature::tr_state_machine_t &sm, const float ¤t, const float &target, const int8_t heater_id, const uint16_t period_seconds, const uint16_t hysteresis_degc) { static float tr_target_temperature[HOTENDS + 1] = { 0.0 }; /** SERIAL_ECHO_START(); SERIAL_ECHOPGM("Thermal Thermal Runaway Running. Heater ID: "); + if (heater_id == -2) SERIAL_ECHOPGM("chamber"); if (heater_id < 0) SERIAL_ECHOPGM("bed"); else SERIAL_ECHO(heater_id); - SERIAL_ECHOPAIR(" ; State:", *state, " ; Timer:", *timer, " ; Temperature:", current, " ; Target Temp:", target); + SERIAL_ECHOPAIR(" ; State:", sm.state, " ; Timer:", sm.timer, " ; Temperature:", current, " ; Target Temp:", target); if (heater_id >= 0) - SERIAL_ECHOPAIR(" ; Idle Timeout:", heater_idle_timeout_exceeded[heater_id]); + SERIAL_ECHOPAIR(" ; Idle Timeout:", hotend_idle[heater_id].timed_out); else - SERIAL_ECHOPAIR(" ; Idle Timeout:", bed_idle_timeout_exceeded); + SERIAL_ECHOPAIR(" ; Idle Timeout:", bed_idle.timed_out); SERIAL_EOL(); */ @@ -1628,12 +1689,12 @@ void Temperature::init() { #if HEATER_IDLE_HANDLER // If the heater idle timeout expires, restart - if ((heater_id >= 0 && heater_idle_timeout_exceeded[heater_id]) + if ((heater_id >= 0 && hotend_idle[heater_id].timed_out) #if HAS_HEATED_BED - || (heater_id < 0 && bed_idle_timeout_exceeded) + || (heater_id < 0 && bed_idle.timed_out) #endif ) { - *state = TRInactive; + sm.state = TRInactive; tr_target_temperature[heater_index] = 0; } else @@ -1642,18 +1703,18 @@ void Temperature::init() { // If the target temperature changes, restart if (tr_target_temperature[heater_index] != target) { tr_target_temperature[heater_index] = target; - *state = target > 0 ? TRFirstHeating : TRInactive; + sm.state = target > 0 ? TRFirstHeating : TRInactive; } } - switch (*state) { + switch (sm.state) { // Inactive state waits for a target temperature to be set case TRInactive: break; // When first heating, wait for the temperature to be reached then go to Stable state case TRFirstHeating: if (current < tr_target_temperature[heater_index]) break; - *state = TRStable; + sm.state = TRStable; // While the temperature is stable watch for a bad temperature case TRStable: @@ -1675,18 +1736,18 @@ void Temperature::init() { #endif if (current >= tr_target_temperature[heater_index] - hysteresis_degc) { - *timer = millis() + period_seconds * 1000UL; + sm.timer = millis() + period_seconds * 1000UL; break; } - else if (PENDING(millis(), *timer)) break; - *state = TRRunaway; + else if (PENDING(millis(), sm.timer)) break; + sm.state = TRRunaway; case TRRunaway: _temp_error(heater_id, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, heater_id)); } } -#endif // THERMAL_PROTECTION_HOTENDS || THERMAL_PROTECTION_BED +#endif // THERMAL_PROTECTION_HOTENDS || THERMAL_PROTECTION_BED || ENABLED(THERMAL_PROTECTION_CHAMBER) void Temperature::disable_all_heaters() { @@ -1700,6 +1761,10 @@ void Temperature::disable_all_heaters() { setTargetBed(0); #endif + #if HAS_HEATED_CHAMBER + setTargetChamber(0); + #endif + // Unpause and reset everything #if ENABLED(PROBING_HEATERS_OFF) pause(false); @@ -1707,7 +1772,7 @@ void Temperature::disable_all_heaters() { #define DISABLE_HEATER(NR) { \ setTargetHotend(0, NR); \ - soft_pwm_amount[NR] = 0; \ + temp_hotend[NR].soft_pwm_amount = 0; \ WRITE_HEATER_ ##NR (LOW); \ } @@ -1731,12 +1796,20 @@ void Temperature::disable_all_heaters() { #endif #if HAS_HEATED_BED - target_temperature_bed = 0; - soft_pwm_amount_bed = 0; + temp_bed.target = 0; + temp_bed.soft_pwm_amount = 0; #if HAS_HEATED_BED WRITE_HEATER_BED(LOW); #endif #endif + + #if HAS_TEMP_CHAMBER + temp_chamber.target = 0; + temp_chamber.soft_pwm_amount = 0; + #if HAS_HEATED_CHAMBER + WRITE_HEATER_CHAMBER(LOW); + #endif + #endif } #if ENABLED(PROBING_HEATERS_OFF) @@ -1745,9 +1818,9 @@ void Temperature::disable_all_heaters() { if (p != paused) { paused = p; if (p) { - HOTEND_LOOP() start_heater_idle_timer(e, 0); // timeout immediately + HOTEND_LOOP() hotend_idle[e].expire(); // timeout immediately #if HAS_HEATED_BED - start_bed_idle_timer(0); // timeout immediately + bed_idle.expire(); // timeout immediately #endif } else { @@ -1886,38 +1959,37 @@ void Temperature::disable_all_heaters() { void Temperature::set_current_temp_raw() { #if HAS_TEMP_ADC_0 && DISABLED(HEATER_0_USES_MAX6675) - current_temperature_raw[0] = raw_temp_value[0]; + temp_hotend[0].raw = temp_hotend[0].acc; #endif #if HAS_TEMP_ADC_1 - #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) - redundant_temperature_raw = raw_temp_value[1]; + redundant_temperature_raw = temp_hotend[1].acc; #elif DISABLED(HEATER_1_USES_MAX6675) - current_temperature_raw[1] = raw_temp_value[1]; + temp_hotend[1].raw = temp_hotend[1].acc; #endif - #if HAS_TEMP_ADC_2 - current_temperature_raw[2] = raw_temp_value[2]; + temp_hotend[2].raw = temp_hotend[2].acc; #if HAS_TEMP_ADC_3 - current_temperature_raw[3] = raw_temp_value[3]; + temp_hotend[3].raw = temp_hotend[3].acc; #if HAS_TEMP_ADC_4 - current_temperature_raw[4] = raw_temp_value[4]; + temp_hotend[4].raw = temp_hotend[4].acc; #if HAS_TEMP_ADC_5 - current_temperature_raw[5] = raw_temp_value[5]; + temp_hotend[5].raw = temp_hotend[5].acc; #endif // HAS_TEMP_ADC_5 #endif // HAS_TEMP_ADC_4 #endif // HAS_TEMP_ADC_3 #endif // HAS_TEMP_ADC_2 - #endif // HAS_TEMP_ADC_1 #if HAS_HEATED_BED - current_temperature_bed_raw = raw_temp_bed_value; + temp_bed.raw = temp_bed.acc; #endif + #if HAS_TEMP_CHAMBER - current_temperature_chamber_raw = raw_temp_chamber_value; + temp_chamber.raw = temp_chamber.acc; #endif + temp_meas_ready = true; } @@ -1934,18 +2006,16 @@ void Temperature::readings_ready() { current_raw_filwidth = raw_filwidth_value >> 10; // Divide to get to 0-16384 range since we used 1/128 IIR filter approach #endif - ZERO(raw_temp_value); + HOTEND_LOOP() temp_hotend[e].acc = 0; #if HAS_HEATED_BED - raw_temp_bed_value = 0; + temp_bed.acc = 0; #endif #if HAS_TEMP_CHAMBER - raw_temp_chamber_value = 0; + temp_chamber.acc = 0; #endif - #define TEMPDIR(N) ((HEATER_##N##_RAW_LO_TEMP) > (HEATER_##N##_RAW_HI_TEMP) ? -1 : 1) - int constexpr temp_dir[] = { #if ENABLED(HEATER_0_USES_MAX6675) 0 @@ -1970,14 +2040,14 @@ void Temperature::readings_ready() { }; for (uint8_t e = 0; e < COUNT(temp_dir); e++) { - const int16_t tdir = temp_dir[e], rawtemp = current_temperature_raw[e] * tdir; - const bool heater_on = (target_temperature[e] > 0) + const int16_t tdir = temp_dir[e], rawtemp = temp_hotend[e].raw * tdir; + const bool heater_on = (temp_hotend[e].target > 0) #if ENABLED(PIDTEMP) - || (soft_pwm_amount[e] > 0) + || (temp_hotend[e].soft_pwm_amount > 0) #endif ; - if (rawtemp > maxttemp_raw[e] * tdir) max_temp_error(e); - if (rawtemp < minttemp_raw[e] * tdir && !is_preheating(e) && heater_on) { + if (rawtemp > temp_range[e].raw_max * tdir) max_temp_error(e); + if (heater_on && rawtemp < temp_range[e].raw_min * tdir && !is_preheating(e)) { #ifdef MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED if (++consecutive_low_temperature_error[e] >= MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED) #endif @@ -1990,18 +2060,29 @@ void Temperature::readings_ready() { } #if HAS_HEATED_BED - #if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP + #if TEMPDIR(BED) < 0 #define BEDCMP(A,B) ((A)<=(B)) #else #define BEDCMP(A,B) ((A)>=(B)) #endif - const bool bed_on = (target_temperature_bed > 0) + const bool bed_on = (temp_bed.target > 0) #if ENABLED(PIDTEMPBED) - || (soft_pwm_amount_bed > 0) + || (temp_bed.soft_pwm_amount > 0) #endif ; - if (BEDCMP(current_temperature_bed_raw, bed_maxttemp_raw)) max_temp_error(-1); - if (BEDCMP(bed_minttemp_raw, current_temperature_bed_raw) && bed_on) min_temp_error(-1); + if (BEDCMP(temp_bed.raw, maxtemp_raw_BED)) max_temp_error(-1); + if (bed_on && BEDCMP(mintemp_raw_BED, temp_bed.raw)) min_temp_error(-1); + #endif + + #if HAS_TEMP_CHAMBER + #if TEMPDIR(BED) < 0 + #define CHAMBERCMP(A,B) ((A)<=(B)) + #else + #define CHAMBERCMP(A,B) ((A)>=(B)) + #endif + const bool chamber_on = (temp_chamber.target > 0) || (temp_chamber.soft_pwm_amount > 0); + if (CHAMBERCMP(temp_chamber.raw, maxtemp_raw_CHAMBER)) max_temp_error(-2); + if (chamber_on && CHAMBERCMP(mintemp_raw_CHAMBER, temp_chamber.raw)) min_temp_error(-2); #endif } @@ -2028,6 +2109,31 @@ HAL_TEMP_TIMER_ISR { HAL_timer_isr_epilogue(TEMP_TIMER_NUM); } +#if ENABLED(SLOW_PWM_HEATERS) && !defined(MIN_STATE_TIME) + #define MIN_STATE_TIME 16 // MIN_STATE_TIME * 65.5 = time in milliseconds +#endif + +class SoftPWM { +public: + uint8_t count; + inline bool add(const uint8_t mask, const uint8_t amount) { + count = (count & mask) + amount; return (count > mask); + } + #if ENABLED(SLOW_PWM_HEATERS) + bool state_heater; + uint8_t state_timer_heater; + inline void dec() { if (state_timer_heater > 0) state_timer_heater--; } + inline bool ready(const bool v) { + const bool rdy = !state_timer_heater; + if (rdy && state_heater != v) { + state_heater = v; + state_timer_heater = MIN_STATE_TIME; + } + return rdy; + } + #endif +}; + void Temperature::isr() { static int8_t temp_count = -1; @@ -2040,36 +2146,18 @@ void Temperature::isr() { static unsigned int raw_ADCKey_value = 0; #endif - // Static members for each heater #if ENABLED(SLOW_PWM_HEATERS) static uint8_t slow_pwm_count = 0; - #define ISR_STATICS(n) \ - static uint8_t soft_pwm_count_ ## n, \ - state_heater_ ## n = 0, \ - state_timer_heater_ ## n = 0 - #else - #define ISR_STATICS(n) static uint8_t soft_pwm_count_ ## n = 0 #endif - // Statics per heater - ISR_STATICS(0); - #if HOTENDS > 1 - ISR_STATICS(1); - #if HOTENDS > 2 - ISR_STATICS(2); - #if HOTENDS > 3 - ISR_STATICS(3); - #if HOTENDS > 4 - ISR_STATICS(4); - #if HOTENDS > 5 - ISR_STATICS(5); - #endif // HOTENDS > 5 - #endif // HOTENDS > 4 - #endif // HOTENDS > 3 - #endif // HOTENDS > 2 - #endif // HOTENDS > 1 + static SoftPWM soft_pwm_hotend[HOTENDS]; + #if HAS_HEATED_BED - ISR_STATICS(BED); + static SoftPWM soft_pwm_bed; + #endif + + #if HAS_HEATED_CHAMBER + static SoftPWM soft_pwm_chamber; #endif #if DISABLED(SLOW_PWM_HEATERS) @@ -2086,23 +2174,22 @@ void Temperature::isr() { */ if (pwm_count_tmp >= 127) { pwm_count_tmp -= 127; - soft_pwm_count_0 = (soft_pwm_count_0 & pwm_mask) + soft_pwm_amount[0]; - WRITE_HEATER_0(soft_pwm_count_0 > pwm_mask ? HIGH : LOW); + #define _PWM_MOD(N,S,T) do{ \ + const bool on = S.add(pwm_mask, T.soft_pwm_amount); \ + WRITE_HEATER_##N(on); \ + }while(0) + #define _PWM_MOD_E(N) _PWM_MOD(N,soft_pwm_hotend[N],temp_hotend[N]) + _PWM_MOD_E(0); #if HOTENDS > 1 - soft_pwm_count_1 = (soft_pwm_count_1 & pwm_mask) + soft_pwm_amount[1]; - WRITE_HEATER_1(soft_pwm_count_1 > pwm_mask ? HIGH : LOW); + _PWM_MOD_E(1); #if HOTENDS > 2 - soft_pwm_count_2 = (soft_pwm_count_2 & pwm_mask) + soft_pwm_amount[2]; - WRITE_HEATER_2(soft_pwm_count_2 > pwm_mask ? HIGH : LOW); + _PWM_MOD_E(2); #if HOTENDS > 3 - soft_pwm_count_3 = (soft_pwm_count_3 & pwm_mask) + soft_pwm_amount[3]; - WRITE_HEATER_3(soft_pwm_count_3 > pwm_mask ? HIGH : LOW); + _PWM_MOD_E(3); #if HOTENDS > 4 - soft_pwm_count_4 = (soft_pwm_count_4 & pwm_mask) + soft_pwm_amount[4]; - WRITE_HEATER_4(soft_pwm_count_4 > pwm_mask ? HIGH : LOW); + _PWM_MOD_E(4); #if HOTENDS > 5 - soft_pwm_count_5 = (soft_pwm_count_5 & pwm_mask) + soft_pwm_amount[5]; - WRITE_HEATER_5(soft_pwm_count_5 > pwm_mask ? HIGH : LOW); + _PWM_MOD_E(5); #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 @@ -2110,45 +2197,57 @@ void Temperature::isr() { #endif // HOTENDS > 1 #if HAS_HEATED_BED - soft_pwm_count_BED = (soft_pwm_count_BED & pwm_mask) + soft_pwm_amount_bed; - WRITE_HEATER_BED(soft_pwm_count_BED > pwm_mask ? HIGH : LOW); + _PWM_MOD(BED,soft_pwm_bed,temp_bed); + #endif + + #if HAS_HEATED_CHAMBER + _PWM_MOD(CHAMBER,soft_pwm_chamber,temp_chamber); #endif #if ENABLED(FAN_SOFT_PWM) + #define _FAN_PWM(N) do{ \ + soft_pwm_count_fan[N] = (soft_pwm_count_fan[N] & pwm_mask) + (soft_pwm_amount_fan[N] >> 1); \ + WRITE_FAN(soft_pwm_count_fan[N] > pwm_mask ? HIGH : LOW); \ + }while(0) #if HAS_FAN0 - soft_pwm_count_fan[0] = (soft_pwm_count_fan[0] & pwm_mask) + (soft_pwm_amount_fan[0] >> 1); - WRITE_FAN(soft_pwm_count_fan[0] > pwm_mask ? HIGH : LOW); + _FAN_PWM(0); #endif #if HAS_FAN1 - soft_pwm_count_fan[1] = (soft_pwm_count_fan[1] & pwm_mask) + (soft_pwm_amount_fan[1] >> 1); - WRITE_FAN1(soft_pwm_count_fan[1] > pwm_mask ? HIGH : LOW); + _FAN_PWM(1); #endif #if HAS_FAN2 - soft_pwm_count_fan[2] = (soft_pwm_count_fan[2] & pwm_mask) + (soft_pwm_amount_fan[2] >> 1); - WRITE_FAN2(soft_pwm_count_fan[2] > pwm_mask ? HIGH : LOW); + _FAN_PWM(2); #endif #endif } else { - if (soft_pwm_count_0 <= pwm_count_tmp) WRITE_HEATER_0(LOW); - #if HOTENDS > 1 - if (soft_pwm_count_1 <= pwm_count_tmp) WRITE_HEATER_1(LOW); - #if HOTENDS > 2 - if (soft_pwm_count_2 <= pwm_count_tmp) WRITE_HEATER_2(LOW); - #if HOTENDS > 3 - if (soft_pwm_count_3 <= pwm_count_tmp) WRITE_HEATER_3(LOW); - #if HOTENDS > 4 - if (soft_pwm_count_4 <= pwm_count_tmp) WRITE_HEATER_4(LOW); - #if HOTENDS > 5 - if (soft_pwm_count_5 <= pwm_count_tmp) WRITE_HEATER_5(LOW); - #endif // HOTENDS > 5 - #endif // HOTENDS > 4 - #endif // HOTENDS > 3 - #endif // HOTENDS > 2 - #endif // HOTENDS > 1 + #define _PWM_LOW(N,S) do{ if (S.count <= pwm_count_tmp) WRITE_HEATER_##N(LOW); }while(0) + #if HOTENDS + #define _PWM_LOW_E(N) _PWM_LOW(N, soft_pwm_hotend[N]) + _PWM_LOW_E(0); + #if HOTENDS > 1 + _PWM_LOW_E(1); + #if HOTENDS > 2 + _PWM_LOW_E(2); + #if HOTENDS > 3 + _PWM_LOW_E(3); + #if HOTENDS > 4 + _PWM_LOW_E(4); + #if HOTENDS > 5 + _PWM_LOW_E(5); + #endif // HOTENDS > 5 + #endif // HOTENDS > 4 + #endif // HOTENDS > 3 + #endif // HOTENDS > 2 + #endif // HOTENDS > 1 + #endif // HOTENDS #if HAS_HEATED_BED - if (soft_pwm_count_BED <= pwm_count_tmp) WRITE_HEATER_BED(LOW); + _PWM_LOW(BED, soft_pwm_bed); + #endif + + #if HAS_HEATED_CHAMBER + _PWM_LOW(CHAMBER, soft_pwm_chamber); #endif #if ENABLED(FAN_SOFT_PWM) @@ -2181,96 +2280,77 @@ void Temperature::isr() { * * For relay-driven heaters */ - #ifndef MIN_STATE_TIME - #define MIN_STATE_TIME 16 // MIN_STATE_TIME * 65.5 = time in milliseconds - #endif - - // Macros for Slow PWM timer logic - #define _SLOW_PWM_ROUTINE(NR, src) \ - soft_pwm_count_ ##NR = src; \ - if (soft_pwm_count_ ##NR > 0) { \ - if (state_timer_heater_ ##NR == 0) { \ - if (state_heater_ ##NR == 0) state_timer_heater_ ##NR = MIN_STATE_TIME; \ - state_heater_ ##NR = 1; \ - WRITE_HEATER_ ##NR(1); \ - } \ - } \ - else { \ - if (state_timer_heater_ ##NR == 0) { \ - if (state_heater_ ##NR == 1) state_timer_heater_ ##NR = MIN_STATE_TIME; \ - state_heater_ ##NR = 0; \ - WRITE_HEATER_ ##NR(0); \ - } \ - } - #define SLOW_PWM_ROUTINE(n) _SLOW_PWM_ROUTINE(n, soft_pwm_amount[n]) - - #define PWM_OFF_ROUTINE(NR) \ - if (soft_pwm_count_ ##NR < slow_pwm_count) { \ - if (state_timer_heater_ ##NR == 0) { \ - if (state_heater_ ##NR == 1) state_timer_heater_ ##NR = MIN_STATE_TIME; \ - state_heater_ ##NR = 0; \ - WRITE_HEATER_ ##NR (0); \ - } \ - } + #define _SLOW_SET(NR,PWM,V) do{ if (PWM.ready(V)) WRITE_HEATER_##NR(V); }while(0) + #define _SLOW_PWM(NR,PWM,SRC) do{ PWM.count = SRC.soft_pwm_amount; _SLOW_SET(NR,PWM,(PWM.count > 0)); }while(0) + #define _PWM_OFF(NR,PWM) do{ if (PWM.count < slow_pwm_count) _SLOW_SET(NR,PWM,0); }while(0) if (slow_pwm_count == 0) { - SLOW_PWM_ROUTINE(0); + #if HOTENDS + #define _SLOW_PWM_E(N) _SLOW_PWM(N, soft_pwm_hotend[N], temp_hotend[N]) + _SLOW_PWM_E(0); + #if HOTENDS > 1 + _SLOW_PWM_E(1); + #if HOTENDS > 2 + _SLOW_PWM_E(2); + #if HOTENDS > 3 + _SLOW_PWM_E(3); + #if HOTENDS > 4 + _SLOW_PWM_E(4); + #if HOTENDS > 5 + _SLOW_PWM_E(5); + #endif // HOTENDS > 5 + #endif // HOTENDS > 4 + #endif // HOTENDS > 3 + #endif // HOTENDS > 2 + #endif // HOTENDS > 1 + #endif // HOTENDS + + #if HAS_HEATED_BED + _SLOW_PWM(BED, soft_pwm_bed, temp_bed); + #endif + + } // slow_pwm_count == 0 + + #if HOTENDS + #define _PWM_OFF_E(N) _PWM_OFF(N, soft_pwm_hotend[N]); + _PWM_OFF_E(0); #if HOTENDS > 1 - SLOW_PWM_ROUTINE(1); + _PWM_OFF_E(1); #if HOTENDS > 2 - SLOW_PWM_ROUTINE(2); + _PWM_OFF_E(2); #if HOTENDS > 3 - SLOW_PWM_ROUTINE(3); + _PWM_OFF_E(3); #if HOTENDS > 4 - SLOW_PWM_ROUTINE(4); + _PWM_OFF_E(4); #if HOTENDS > 5 - SLOW_PWM_ROUTINE(5); + _PWM_OFF_E(5); #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 #endif // HOTENDS > 1 - #if HAS_HEATED_BED - _SLOW_PWM_ROUTINE(BED, soft_pwm_amount_bed); // BED - #endif + #endif // HOTENDS - } // slow_pwm_count == 0 - - PWM_OFF_ROUTINE(0); - #if HOTENDS > 1 - PWM_OFF_ROUTINE(1); - #if HOTENDS > 2 - PWM_OFF_ROUTINE(2); - #if HOTENDS > 3 - PWM_OFF_ROUTINE(3); - #if HOTENDS > 4 - PWM_OFF_ROUTINE(4); - #if HOTENDS > 5 - PWM_OFF_ROUTINE(5); - #endif // HOTENDS > 5 - #endif // HOTENDS > 4 - #endif // HOTENDS > 3 - #endif // HOTENDS > 2 - #endif // HOTENDS > 1 #if HAS_HEATED_BED - PWM_OFF_ROUTINE(BED); // BED + _PWM_OFF(BED, soft_pwm_bed); #endif #if ENABLED(FAN_SOFT_PWM) if (pwm_count_tmp >= 127) { pwm_count_tmp = 0; + #define _PWM_FAN(N,I) do{ \ + soft_pwm_count_fan[I] = soft_pwm_amount_fan[I] >> 1; \ + WRITE_FAN##N(soft_pwm_count_fan[I] > 0 ? HIGH : LOW); \ + }while(0) #if HAS_FAN0 - soft_pwm_count_fan[0] = soft_pwm_amount_fan[0] >> 1; - WRITE_FAN(soft_pwm_count_fan[0] > 0 ? HIGH : LOW); + _PWM_FAN(,0); #endif #if HAS_FAN1 - soft_pwm_count_fan[1] = soft_pwm_amount_fan[1] >> 1; - WRITE_FAN1(soft_pwm_count_fan[1] > 0 ? HIGH : LOW); + _PWM_FAN(1,1); #endif #if HAS_FAN2 - soft_pwm_count_fan[2] = soft_pwm_amount_fan[2] >> 1; - WRITE_FAN2(soft_pwm_count_fan[2] > 0 ? HIGH : LOW); + _PWM_FAN(2,2); #endif } #if HAS_FAN0 @@ -2300,24 +2380,24 @@ void Temperature::isr() { slow_pwm_count++; slow_pwm_count &= 0x7F; - if (state_timer_heater_0 > 0) state_timer_heater_0--; + soft_pwm_hotend[0].dec(); #if HOTENDS > 1 - if (state_timer_heater_1 > 0) state_timer_heater_1--; + soft_pwm_hotend[1].dec(); #if HOTENDS > 2 - if (state_timer_heater_2 > 0) state_timer_heater_2--; + soft_pwm_hotend[2].dec(); #if HOTENDS > 3 - if (state_timer_heater_3 > 0) state_timer_heater_3--; + soft_pwm_hotend[3].dec(); #if HOTENDS > 4 - if (state_timer_heater_4 > 0) state_timer_heater_4--; + soft_pwm_hotend[4].dec(); #if HOTENDS > 5 - if (state_timer_heater_5 > 0) state_timer_heater_5--; + soft_pwm_hotend[5].dec(); #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 #endif // HOTENDS > 1 #if HAS_HEATED_BED - if (state_timer_heater_BED > 0) state_timer_heater_BED--; + soft_pwm_bed.dec(); #endif } // ((pwm_count >> SOFT_PWM_SCALE) & 0x3F) == 0 @@ -2338,9 +2418,9 @@ void Temperature::isr() { * * This gives each ADC 0.9765ms to charge up. */ - #define ACCUMULATE_ADC(var) do{ \ + #define ACCUMULATE_ADC(obj) do{ \ if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; \ - else var += HAL_READ_ADC(); \ + else obj.acc += HAL_READ_ADC(); \ }while(0) ADCSensorState next_sensor_state = adc_sensor_state < SensorsReady ? (ADCSensorState)(int(adc_sensor_state) + 1) : StartSampling; @@ -2376,7 +2456,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_0_PIN); break; case MeasureTemp_0: - ACCUMULATE_ADC(raw_temp_value[0]); + ACCUMULATE_ADC(temp_hotend[0]); break; #endif @@ -2385,7 +2465,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_BED_PIN); break; case MeasureTemp_BED: - ACCUMULATE_ADC(raw_temp_bed_value); + ACCUMULATE_ADC(temp_bed); break; #endif @@ -2394,7 +2474,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_CHAMBER_PIN); break; case MeasureTemp_CHAMBER: - ACCUMULATE_ADC(raw_temp_chamber_value); + ACCUMULATE_ADC(temp_chamber); break; #endif @@ -2403,7 +2483,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_1_PIN); break; case MeasureTemp_1: - ACCUMULATE_ADC(raw_temp_value[1]); + ACCUMULATE_ADC(temp_hotend[1]); break; #endif @@ -2412,7 +2492,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_2_PIN); break; case MeasureTemp_2: - ACCUMULATE_ADC(raw_temp_value[2]); + ACCUMULATE_ADC(temp_hotend[2]); break; #endif @@ -2421,7 +2501,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_3_PIN); break; case MeasureTemp_3: - ACCUMULATE_ADC(raw_temp_value[3]); + ACCUMULATE_ADC(temp_hotend[3]); break; #endif @@ -2430,7 +2510,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_4_PIN); break; case MeasureTemp_4: - ACCUMULATE_ADC(raw_temp_value[4]); + ACCUMULATE_ADC(temp_hotend[4]); break; #endif @@ -2439,7 +2519,7 @@ void Temperature::isr() { HAL_START_ADC(TEMP_5_PIN); break; case MeasureTemp_5: - ACCUMULATE_ADC(raw_temp_value[5]); + ACCUMULATE_ADC(temp_hotend[5]); break; #endif @@ -2635,12 +2715,27 @@ void Temperature::isr() { ); #endif #if HAS_TEMP_CHAMBER - print_heater_state(degChamber(), 0 - #if ENABLED(SHOW_TEMP_ADC_VALUES) - , rawChamberTemp() - #endif + #if HAS_HEATED_CHAMBER + print_heater_state(degChamber(), degTargetChamber() + #if ENABLED(SHOW_TEMP_ADC_VALUES) + , rawChamberTemp() + #endif + #if NUM_SERIAL > 1 + , port + #endif , -2 // CHAMBER ); + #else + print_heater_state(degChamber(), 0 + #if ENABLED(SHOW_TEMP_ADC_VALUES) + , rawChamberTemp() + #endif + #if NUM_SERIAL > 1 + , port + #endif + , -2 // CHAMBER + ); + #endif // HAS_HEATED_CHAMBER #endif #if HOTENDS > 1 HOTEND_LOOP() print_heater_state(degHotend(e), degTargetHotend(e) diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index fd0706e20e..c900e434df 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -36,10 +36,12 @@ #define SOFT_PWM_SCALE 0 #endif -#if HOTENDS == 1 +#if HOTENDS <= 1 #define HOTEND_INDEX 0 + #define E_UNUSED() UNUSED(e) #else #define HOTEND_INDEX e + #define E_UNUSED() #endif // PID storage @@ -47,6 +49,11 @@ typedef struct { float Kp, Ki, Kd; } PID_t; typedef struct { float Kp, Ki, Kd, Kc; } PIDC_t; #if ENABLED(PID_EXTRUSION_SCALING) typedef PIDC_t hotend_pid_t; + #if LPQ_MAX_LEN > 255 + typedef uint16_t lpq_ptr_t; + #else + typedef uint8_t lpq_ptr_t; + #endif #else typedef PID_t hotend_pid_t; #endif @@ -54,11 +61,11 @@ typedef struct { float Kp, Ki, Kd, Kc; } PIDC_t; #define DUMMY_PID_VALUE 3000.0f #if ENABLED(PIDTEMP) - #define _PID_Kp(H) Temperature::pid[H].Kp - #define _PID_Ki(H) Temperature::pid[H].Ki - #define _PID_Kd(H) Temperature::pid[H].Kd + #define _PID_Kp(H) Temperature::temp_hotend[H].pid.Kp + #define _PID_Ki(H) Temperature::temp_hotend[H].pid.Ki + #define _PID_Kd(H) Temperature::temp_hotend[H].pid.Kd #if ENABLED(PID_EXTRUSION_SCALING) - #define _PID_Kc(H) Temperature::pid[H].Kc + #define _PID_Kc(H) Temperature::temp_hotend[H].pid.Kc #else #define _PID_Kc(H) 1 #endif @@ -80,6 +87,14 @@ enum ADCSensorState : char { PrepareTemp_0, MeasureTemp_0, #endif + #if HAS_HEATED_BED + PrepareTemp_BED, + MeasureTemp_BED, + #endif + #if HAS_TEMP_CHAMBER + PrepareTemp_CHAMBER, + MeasureTemp_CHAMBER, + #endif #if HAS_TEMP_ADC_1 PrepareTemp_1, MeasureTemp_1, @@ -96,13 +111,9 @@ enum ADCSensorState : char { PrepareTemp_4, MeasureTemp_4, #endif - #if HAS_HEATED_BED - PrepareTemp_BED, - MeasureTemp_BED, - #endif - #if HAS_TEMP_CHAMBER - PrepareTemp_CHAMBER, - MeasureTemp_CHAMBER, + #if HAS_TEMP_ADC_5 + PrepareTemp_5, + MeasureTemp_5, #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) Prepare_FILWIDTH, @@ -136,16 +147,115 @@ enum ADCSensorState : char { #define G26_CLICK_CAN_CANCEL (HAS_LCD_MENU && ENABLED(G26_MESH_VALIDATION)) +enum TempIndex : uint8_t { + #if HOTENDS > 0 + TEMP_E0, + #if HOTENDS > 1 + TEMP_E1, + #if HOTENDS > 2 + TEMP_E2, + #if HOTENDS > 3 + TEMP_E3, + #if HOTENDS > 4 + TEMP_E4, + #if HOTENDS > 5 + TEMP_E5, + #endif + #endif + #endif + #endif + #endif + #endif + #if HAS_HEATED_BED + TEMP_BED, + #endif + #if HAS_HEATED_CHAMBER + TEMP_CHAMBER, + #endif + tempCOUNT +}; + +// A temperature sensor +typedef struct TempInfo { + uint16_t acc; + int16_t raw; + float current; +} temp_info_t; + +// A PWM heater with temperature sensor +typedef struct HeaterInfo : public TempInfo { + int16_t target; + uint8_t soft_pwm_amount; +} heater_info_t; + +// A heater with PID stabilization +template +struct PIDHeaterInfo : public HeaterInfo { + T pid; // Initialized by settings.load() +}; + +#if ENABLED(PIDTEMP) + typedef struct PIDHeaterInfo hotend_info_t; +#else + typedef heater_info_t hotend_info_t; +#endif +#if HAS_HEATED_BED + #if ENABLED(PIDTEMPBED) + typedef struct PIDHeaterInfo bed_info_t; + #else + typedef heater_info_t bed_info_t; + #endif +#endif +#if HAS_TEMP_CHAMBER + #if HAS_HEATED_CHAMBER + #if ENABLED(PIDTEMPCHAMBER) + typedef struct PIDHeaterInfo chamber_info_t; + #else + typedef heater_info_t chamber_info_t; + #endif + #else + typedef temp_info_t chamber_info_t; + #endif +#endif + +// Heater idle handling +typedef struct { + millis_t timeout_ms; + bool timed_out; + inline void update(const millis_t &ms) { if (!timed_out && timeout_ms && ELAPSED(ms, timeout_ms)) timed_out = true; } + inline void start(const millis_t &ms) { timeout_ms = millis() + ms; timed_out = false; } + inline void reset() { timeout_ms = 0; timed_out = false; } + inline void expire() { start(0); } +} heater_idle_t; + +// Heater watch handling +typedef struct { + uint16_t target; + millis_t next_ms; + inline bool elapsed(const millis_t &ms) { return next_ms && ELAPSED(ms, next_ms); } + inline bool elapsed() { return elapsed(millis()); } +} heater_watch_t; + +// Temperature sensor read value ranges +typedef struct { int16_t raw_min, raw_max; } raw_range_t; +typedef struct { int16_t mintemp, maxtemp; } celsius_range_t; +typedef struct { int16_t raw_min, raw_max, mintemp, maxtemp; } temp_range_t; + class Temperature { public: static volatile bool in_temp_isr; - static float current_temperature[HOTENDS]; - static int16_t current_temperature_raw[HOTENDS], - target_temperature[HOTENDS]; - static uint8_t soft_pwm_amount[HOTENDS]; + static hotend_info_t temp_hotend[HOTENDS]; + + #if HAS_HEATED_BED + static bed_info_t temp_bed; + #endif + + #if HAS_TEMP_CHAMBER + static chamber_info_t temp_chamber; + #endif #if ENABLED(AUTO_POWER_E_FANS) static uint8_t autofan_speed[HOTENDS]; @@ -156,19 +266,6 @@ class Temperature { soft_pwm_count_fan[FAN_COUNT]; #endif - #if ENABLED(PIDTEMP) - static hotend_pid_t pid[HOTENDS]; - #endif - - #if HAS_HEATED_BED - static float current_temperature_bed; - static int16_t current_temperature_bed_raw, target_temperature_bed; - static uint8_t soft_pwm_amount_bed; - #if ENABLED(PIDTEMPBED) - static PID_t bed_pid; - #endif - #endif - #if ENABLED(BABYSTEPPING) static volatile int16_t babystepsTodo[3]; #endif @@ -178,15 +275,11 @@ class Temperature { static int16_t extrude_min_temp; FORCE_INLINE static bool tooCold(const int16_t temp) { return allow_cold_extrude ? false : temp < extrude_min_temp; } FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); return tooCold(degHotend(HOTEND_INDEX)); } FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); return tooCold(degTargetHotend(HOTEND_INDEX)); } #else @@ -197,6 +290,16 @@ class Temperature { FORCE_INLINE static bool hotEnoughToExtrude(const uint8_t e) { return !tooColdToExtrude(e); } FORCE_INLINE static bool targetHotEnoughToExtrude(const uint8_t e) { return !targetTooColdToExtrude(e); } + #if HEATER_IDLE_HANDLER + static heater_idle_t hotend_idle[HOTENDS]; + #if HAS_HEATED_BED + static heater_idle_t bed_idle; + #endif + #if HAS_HEATED_CHAMBER + static heater_idle_t chamber_idle; + #endif + #endif + private: #if EARLY_WATCHDOG @@ -204,11 +307,9 @@ class Temperature { #endif static volatile bool temp_meas_ready; - static uint16_t raw_temp_value[MAX_EXTRUDERS]; #if WATCH_HOTENDS - static uint16_t watch_target_temp[HOTENDS]; - static millis_t watch_heater_next_ms[HOTENDS]; + static heater_watch_t watch_hotend[HOTENDS]; #endif #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) @@ -217,42 +318,40 @@ class Temperature { #endif #if ENABLED(PID_EXTRUSION_SCALING) - static long last_e_position; - static long lpq[LPQ_MAX_LEN]; - static int lpq_ptr; + static int32_t last_e_position, lpq[LPQ_MAX_LEN]; + static lpq_ptr_t lpq_ptr; #endif - // Init min and max temp with extreme values to prevent false errors during startup - static int16_t minttemp_raw[HOTENDS], - maxttemp_raw[HOTENDS], - minttemp[HOTENDS], - maxttemp[HOTENDS]; + static temp_range_t temp_range[HOTENDS]; #if HAS_HEATED_BED - static uint16_t raw_temp_bed_value; - #if WATCH_THE_BED - static uint16_t watch_target_bed_temp; - static millis_t watch_bed_next_ms; + #if WATCH_BED + static heater_watch_t watch_bed; #endif #if DISABLED(PIDTEMPBED) static millis_t next_bed_check_ms; #endif - #if HEATER_IDLE_HANDLER - static millis_t bed_idle_timeout_ms; - static bool bed_idle_timeout_exceeded; - #endif #ifdef BED_MINTEMP - static int16_t bed_minttemp_raw; + static int16_t mintemp_raw_BED; #endif #ifdef BED_MAXTEMP - static int16_t bed_maxttemp_raw; + static int16_t maxtemp_raw_BED; #endif #endif - #if HAS_TEMP_CHAMBER - static uint16_t raw_temp_chamber_value; - static float current_temperature_chamber; - static int16_t current_temperature_chamber_raw; + #if HAS_HEATED_CHAMBER + #if WATCH_CHAMBER + static heater_watch_t watch_chamber; + #endif + #if DISABLED(PIDTEMPCHAMBER) + static millis_t next_chamber_check_ms; + #endif + #ifdef CHAMBER_MINTEMP + static int16_t mintemp_raw_CHAMBER; + #endif + #ifdef CHAMBER_MAXTEMP + static int16_t maxtemp_raw_CHAMBER; + #endif #endif #ifdef MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED @@ -279,11 +378,6 @@ class Temperature { static bool paused; #endif - #if HEATER_IDLE_HANDLER - static millis_t heater_idle_timeout_ms[HOTENDS]; - static bool heater_idle_timeout_exceeded[HOTENDS]; - #endif - public: #if HAS_ADC_BUTTONS static uint32_t current_ADCKey_raw; @@ -311,7 +405,7 @@ class Temperature { static float analog_to_celsius_bed(const int raw); #endif #if HAS_TEMP_CHAMBER - static float analog_to_celsiusChamber(const int raw); + static float analog_to_celsius_chamber(const int raw); #endif #if FAN_COUNT > 0 @@ -395,21 +489,15 @@ class Temperature { */ #ifdef MILLISECONDS_PREHEAT_TIME static bool is_preheating(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); return preheat_end_time[HOTEND_INDEX] && PENDING(millis(), preheat_end_time[HOTEND_INDEX]); } static void start_preheat_time(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); preheat_end_time[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME; } static void reset_preheat_time(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); preheat_end_time[HOTEND_INDEX] = 0; } #else @@ -427,63 +515,81 @@ class Temperature { //deg=degreeCelsius FORCE_INLINE static float degHotend(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - return current_temperature[HOTEND_INDEX]; + E_UNUSED(); + return temp_hotend[HOTEND_INDEX].current; } #if ENABLED(SHOW_TEMP_ADC_VALUES) FORCE_INLINE static int16_t rawHotendTemp(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - return current_temperature_raw[HOTEND_INDEX]; + E_UNUSED(); + return temp_hotend[HOTEND_INDEX].raw; } #endif FORCE_INLINE static int16_t degTargetHotend(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - return target_temperature[HOTEND_INDEX]; + E_UNUSED(); + return temp_hotend[HOTEND_INDEX].target; } #if WATCH_HOTENDS - static void start_watching_heater(const uint8_t e = 0); + static void start_watching_heater(const uint8_t e=0); + #else + static inline void start_watching_heater(const uint8_t e=0) { UNUSED(e); } + #endif + + #if HAS_LCD_MENU + static inline void start_watching_E0() { start_watching_heater(0); } + static inline void start_watching_E1() { start_watching_heater(1); } + static inline void start_watching_E2() { start_watching_heater(2); } + static inline void start_watching_E3() { start_watching_heater(3); } + static inline void start_watching_E4() { start_watching_heater(4); } + static inline void start_watching_E5() { start_watching_heater(5); } #endif static void setTargetHotend(const int16_t celsius, const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif + E_UNUSED(); #ifdef MILLISECONDS_PREHEAT_TIME if (celsius == 0) reset_preheat_time(HOTEND_INDEX); - else if (target_temperature[HOTEND_INDEX] == 0) + else if (temp_hotend[HOTEND_INDEX].target == 0) start_preheat_time(HOTEND_INDEX); #endif #if ENABLED(AUTO_POWER_CONTROL) powerManager.power_on(); #endif - target_temperature[HOTEND_INDEX] = MIN(celsius, maxttemp[HOTEND_INDEX] - 15); - #if WATCH_HOTENDS - start_watching_heater(HOTEND_INDEX); - #endif + temp_hotend[HOTEND_INDEX].target = MIN(celsius, temp_range[HOTEND_INDEX].maxtemp - 15); + start_watching_heater(HOTEND_INDEX); } + #if WATCH_CHAMBER + static void start_watching_chamber(); + #else + static inline void start_watching_chamber() {} + #endif + + #if HAS_TEMP_CHAMBER + static void setTargetChamber(const int16_t celsius) { + #if HAS_HEATED_CHAMBER + temp_chamber.target = + #ifdef CHAMBER_MAXTEMP + min(celsius, CHAMBER_MAXTEMP) + #else + celsius + #endif + ; + start_watching_chamber(); + #endif // HAS_HEATED_CHAMBER + } + #endif // HAS_TEMP_CHAMBER + FORCE_INLINE static bool isHeatingHotend(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - return target_temperature[HOTEND_INDEX] > current_temperature[HOTEND_INDEX]; + E_UNUSED(); + return temp_hotend[HOTEND_INDEX].target > temp_hotend[HOTEND_INDEX].current; } FORCE_INLINE static bool isCoolingHotend(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - return target_temperature[HOTEND_INDEX] < current_temperature[HOTEND_INDEX]; + E_UNUSED(); + return temp_hotend[HOTEND_INDEX].target < temp_hotend[HOTEND_INDEX].current; } #if HAS_TEMP_HOTEND @@ -497,33 +603,33 @@ class Temperature { #if HAS_HEATED_BED #if ENABLED(SHOW_TEMP_ADC_VALUES) - FORCE_INLINE static int16_t rawBedTemp() { return current_temperature_bed_raw; } + FORCE_INLINE static int16_t rawBedTemp() { return temp_bed.raw; } + #endif + FORCE_INLINE static float degBed() { return temp_bed.current; } + FORCE_INLINE static int16_t degTargetBed() { return temp_bed.target; } + FORCE_INLINE static bool isHeatingBed() { return temp_bed.target > temp_bed.current; } + FORCE_INLINE static bool isCoolingBed() { return temp_bed.target < temp_bed.current; } + + #if WATCH_BED + static void start_watching_bed(); + #else + static inline void start_watching_bed() {} #endif - FORCE_INLINE static float degBed() { return current_temperature_bed; } - FORCE_INLINE static int16_t degTargetBed() { return target_temperature_bed; } - FORCE_INLINE static bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; } - FORCE_INLINE static bool isCoolingBed() { return target_temperature_bed < current_temperature_bed; } static void setTargetBed(const int16_t celsius) { #if ENABLED(AUTO_POWER_CONTROL) powerManager.power_on(); #endif - target_temperature_bed = + temp_bed.target = #ifdef BED_MAXTEMP MIN(celsius, BED_MAXTEMP - 15) #else celsius #endif ; - #if WATCH_THE_BED - start_watching_bed(); - #endif + start_watching_bed(); } - #if WATCH_THE_BED - static void start_watching_bed(); - #endif - static bool wait_for_bed(const bool no_wait_for_cooling=true #if G26_CLICK_CAN_CANCEL , const bool click_to_cancel=false @@ -534,10 +640,15 @@ class Temperature { #if HAS_TEMP_CHAMBER #if ENABLED(SHOW_TEMP_ADC_VALUES) - FORCE_INLINE static int16_t rawChamberTemp() { return current_temperature_chamber_raw; } + FORCE_INLINE static int16_t rawChamberTemp() { return temp_chamber.raw; } #endif - FORCE_INLINE static float degChamber() { return current_temperature_chamber; } - #endif + FORCE_INLINE static float degChamber() { return temp_chambercurrent; } + #if HAS_HEATED_CHAMBER + FORCE_INLINE static bool isHeatingChamber() { return temp_chamber.target > temp_chambercurrent; } + FORCE_INLINE static bool isCoolingChamber() { return temp_chamber.target < temp_chambercurrent; } + FORCE_INLINE static int16_t degTargetChamber() {return temp_chamber.target; } + #endif + #endif // HAS_TEMP_CHAMBER FORCE_INLINE static bool still_heating(const uint8_t e) { return degTargetHotend(e) > TEMP_HYSTERESIS && ABS(degHotend(e) - degTargetHotend(e)) > TEMP_HYSTERESIS; @@ -589,47 +700,17 @@ class Temperature { #if HEATER_IDLE_HANDLER - static void start_heater_idle_timer(const uint8_t e, const millis_t timeout_ms) { - #if HOTENDS == 1 - UNUSED(e); - #endif - heater_idle_timeout_ms[HOTEND_INDEX] = millis() + timeout_ms; - heater_idle_timeout_exceeded[HOTEND_INDEX] = false; - } - static void reset_heater_idle_timer(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - heater_idle_timeout_ms[HOTEND_INDEX] = 0; - heater_idle_timeout_exceeded[HOTEND_INDEX] = false; - #if WATCH_HOTENDS - start_watching_heater(HOTEND_INDEX); - #endif - } - - FORCE_INLINE static bool is_heater_idle(const uint8_t e) { - #if HOTENDS == 1 - UNUSED(e); - #endif - return heater_idle_timeout_exceeded[HOTEND_INDEX]; + E_UNUSED(); + hotend_idle[HOTEND_INDEX].reset(); + start_watching_heater(HOTEND_INDEX); } #if HAS_HEATED_BED - static void start_bed_idle_timer(const millis_t timeout_ms) { - bed_idle_timeout_ms = millis() + timeout_ms; - bed_idle_timeout_exceeded = false; - } - static void reset_bed_idle_timer() { - bed_idle_timeout_ms = 0; - bed_idle_timeout_exceeded = false; - #if WATCH_THE_BED - start_watching_bed(); - #endif + bed_idle.reset(); + start_watching_bed(); } - - FORCE_INLINE static bool is_bed_idle() { return bed_idle_timeout_exceeded; } #endif #endif // HEATER_IDLE_HANDLER @@ -689,25 +770,37 @@ class Temperature { static float get_pid_output_bed(); #endif + #if HAS_HEATED_CHAMBER + static float get_pid_output_chamber(); + #endif + static void _temp_error(const int8_t e, PGM_P const serial_msg, PGM_P const lcd_msg); static void min_temp_error(const int8_t e); static void max_temp_error(const int8_t e); + #if HAS_TEMP_CHAMBER + static void chamber_temp_error(const bool max); + #endif - #if ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED + #if ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED || ENABLED(THERMAL_PROTECTION_CHAMBER) enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway }; - static void thermal_runaway_protection(TRState * const state, millis_t * const timer, const float ¤t, const float &target, const int8_t heater_id, const uint16_t period_seconds, const uint16_t hysteresis_degc); + typedef struct { + millis_t timer = 0; + TRState state = TRInactive; + } tr_state_machine_t; #if ENABLED(THERMAL_PROTECTION_HOTENDS) - static TRState thermal_runaway_state_machine[HOTENDS]; - static millis_t thermal_runaway_timer[HOTENDS]; + static tr_state_machine_t tr_state_machine[HOTENDS]; + #endif + #if HAS_THERMALLY_PROTECTED_BED + static tr_state_machine_t tr_state_machine_bed; + #endif + #if ENABLED(THERMAL_PROTECTION_CHAMBER) + static tr_state_machine_t tr_state_machine_chamber; #endif - #if HAS_THERMALLY_PROTECTED_BED - static TRState thermal_runaway_bed_state_machine; - static millis_t thermal_runaway_bed_timer; - #endif + static void thermal_runaway_protection(tr_state_machine_t &state, const float ¤t, const float &target, const int8_t heater_id, const uint16_t period_seconds, const uint16_t hysteresis_degc); #endif // THERMAL_PROTECTION }; diff --git a/Marlin/src/module/thermistor/thermistor_20.h b/Marlin/src/module/thermistor/thermistor_20.h index b5b12e87fa..46d89b84d2 100644 --- a/Marlin/src/module/thermistor/thermistor_20.h +++ b/Marlin/src/module/thermistor/thermistor_20.h @@ -43,6 +43,10 @@ #define HEATER_4_RAW_HI_TEMP 16383 #define HEATER_4_RAW_LO_TEMP 0 #endif +#if THERMISTORHEATER_5 == 20 + #define HEATER_5_RAW_HI_TEMP 16383 + #define HEATER_5_RAW_LO_TEMP 0 +#endif #if THERMISTORBED == 20 #define HEATER_BED_RAW_HI_TEMP 16383 #define HEATER_BED_RAW_LO_TEMP 0 diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h index b56052e9b8..ab82f2603d 100644 --- a/Marlin/src/module/thermistor/thermistors.h +++ b/Marlin/src/module/thermistor/thermistors.h @@ -26,7 +26,7 @@ #define OVERSAMPLENR 16 #define OV(N) int16_t((N) * (OVERSAMPLENR)) -#define ANY_THERMISTOR_IS(n) (THERMISTORHEATER_0 == n || THERMISTORHEATER_1 == n || THERMISTORHEATER_2 == n || THERMISTORHEATER_3 == n || THERMISTORHEATER_4 == n || THERMISTORBED == n || THERMISTORCHAMBER == n) +#define ANY_THERMISTOR_IS(n) (THERMISTORHEATER_0 == n || THERMISTORHEATER_1 == n || THERMISTORHEATER_2 == n || THERMISTORHEATER_3 == n || THERMISTORHEATER_4 == n || THERMISTORHEATER_5 == n || THERMISTORBED == n || THERMISTORCHAMBER == n) // Pt1000 and Pt100 handling // @@ -272,6 +272,15 @@ static_assert(HEATER_0_TEMPTABLE_LEN < 256 && HEATER_1_TEMPTABLE_LEN < 256 && HE #define HEATER_4_RAW_LO_TEMP 0 #endif #endif +#ifndef HEATER_5_RAW_HI_TEMP + #ifdef HEATER_5_USES_THERMISTOR + #define HEATER_5_RAW_HI_TEMP 0 + #define HEATER_5_RAW_LO_TEMP 16383 + #else + #define HEATER_5_RAW_HI_TEMP 16383 + #define HEATER_5_RAW_LO_TEMP 0 + #endif +#endif #ifndef HEATER_BED_RAW_HI_TEMP #ifdef HEATER_BED_USES_THERMISTOR #define HEATER_BED_RAW_HI_TEMP 0 diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index c160486432..5094e5f5b1 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -838,7 +838,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n thermalManager.fan_speed[0] = singlenozzle_fan_speed[tmp_extruder]; #endif - singlenozzle_temp[active_extruder] = thermalManager.target_temperature[0]; + singlenozzle_temp[active_extruder] = thermalManager.temp_hotend[0].target; if (singlenozzle_temp[tmp_extruder] && singlenozzle_temp[tmp_extruder] != singlenozzle_temp[active_extruder]) { thermalManager.setTargetHotend(singlenozzle_temp[tmp_extruder], 0); #if ENABLED(ULTRA_LCD) || ENABLED(EXTENSIBLE_UI) diff --git a/buildroot/share/tests/LPC1768-tests b/buildroot/share/tests/LPC1768-tests index 8c5176614d..a76ef8eef9 100755 --- a/buildroot/share/tests/LPC1768-tests +++ b/buildroot/share/tests/LPC1768-tests @@ -37,7 +37,7 @@ opt_set EXTRUDERS 2 opt_set TEMP_SENSOR_1 -1 opt_set TEMP_SENSOR_BED 5 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT ADAPTIVE_FAN_SLOWING NO_FAN_SLOWING_IN_PID_TUNING \ - FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY \ + FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY PID_EXTRUSION_SCALING \ FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \ BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \ PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \ diff --git a/buildroot/share/tests/megaatmega2560-tests b/buildroot/share/tests/megaatmega2560-tests index 904864509d..bfb405208a 100755 --- a/buildroot/share/tests/megaatmega2560-tests +++ b/buildroot/share/tests/megaatmega2560-tests @@ -26,9 +26,10 @@ opt_set MOTHERBOARD BOARD_RAMPS_14_EEB opt_set EXTRUDERS 2 opt_set TEMP_SENSOR_0 -2 opt_set TEMP_SENSOR_1 1 -opt_set TEMP_SENSOR_BED 1 +opt_set TEMP_SENSOR_BED 2 opt_set POWER_SUPPLY 1 opt_set GRID_MAX_POINTS_X 16 +opt_set FANMUX0_PIN 53 opt_enable PIDTEMPBED FIX_MOUNTED_PROBE Z_SAFE_HOMING \ SDSUPPORT EEPROM_SETTINGS REPRAP_DISCOUNT_SMART_CONTROLLER \ BLINKM PCA9632 RGB_LED NEOPIXEL_LED AUTO_POWER_CONTROL \ @@ -39,7 +40,9 @@ opt_enable PIDTEMPBED FIX_MOUNTED_PROBE Z_SAFE_HOMING \ POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE BINARY_FILE_TRANSFER \ LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST PINS_DEBUGGING \ MAX7219_DEBUG LED_CONTROL_MENU CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CODEPENDENT_XY_HOMING BACKLASH_COMPENSATION BACKLASH_GCODE -opt_set FANMUX0_PIN 53 +opt_enable SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER +opt_set TEMP_SENSOR_CHAMBER 3 +opt_add CHAMBER_HEATER_PIN 45 exec_test $1 $2 "RAMPS with 2 extruders, RRDFGSC, Linear ABL, LEDs, and many options" # diff --git a/config/default/Configuration.h b/config/default/Configuration.h index 34b3512363..a03fc8ce4b 100644 --- a/config/default/Configuration.h +++ b/config/default/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index 70720edef0..aacec5e520 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/3DFabXYZ/Migbot/Configuration.h b/config/examples/3DFabXYZ/Migbot/Configuration.h index ccb2a8a4a4..c1e38ee206 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -550,6 +551,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 1cf51f6bd0..c7db779b15 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/AlephObjects/TAZ4/Configuration.h b/config/examples/AlephObjects/TAZ4/Configuration.h index 62f50e15e6..8609e50462 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration.h +++ b/config/examples/AlephObjects/TAZ4/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 7 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -565,6 +566,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index 513b627b4f..dd4ff081aa 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/AliExpress/CL-260/Configuration.h b/config/examples/AliExpress/CL-260/Configuration.h index 6836ff9541..720f207db8 100644 --- a/config/examples/AliExpress/CL-260/Configuration.h +++ b/config/examples/AliExpress/CL-260/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/AliExpress/UM2pExt/Configuration.h b/config/examples/AliExpress/UM2pExt/Configuration.h index 08cb970401..f2da7af3ad 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration.h +++ b/config/examples/AliExpress/UM2pExt/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 20 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -556,6 +557,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index b12fcb6217..219c8bcfa2 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Anet/A2/Configuration.h b/config/examples/Anet/A2/Configuration.h index c83055c7a9..dfe6a9463f 100644 --- a/config/examples/Anet/A2/Configuration.h +++ b/config/examples/Anet/A2/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index d88da485ec..018eb74943 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Anet/A2plus/Configuration.h b/config/examples/Anet/A2plus/Configuration.h index dad2f398f1..0f1a70e61e 100644 --- a/config/examples/Anet/A2plus/Configuration.h +++ b/config/examples/Anet/A2plus/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index d88da485ec..018eb74943 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Anet/A6/Configuration.h b/config/examples/Anet/A6/Configuration.h index d90f09782e..00f5e54cf6 100644 --- a/config/examples/Anet/A6/Configuration.h +++ b/config/examples/Anet/A6/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 11 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -565,6 +566,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index d7e8502780..7247d6e993 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Anet/A8/Configuration.h b/config/examples/Anet/A8/Configuration.h index 393823bd45..16903b0ba9 100644 --- a/config/examples/Anet/A8/Configuration.h +++ b/config/examples/Anet/A8/Configuration.h @@ -378,6 +378,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -558,6 +559,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 7592de0147..3490e83e9c 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/AnyCubic/i3/Configuration.h b/config/examples/AnyCubic/i3/Configuration.h index d6444b74b7..9a43d1a5f6 100644 --- a/config/examples/AnyCubic/i3/Configuration.h +++ b/config/examples/AnyCubic/i3/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index ddb3be249b..924cc53d74 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/ArmEd/Configuration.h b/config/examples/ArmEd/Configuration.h index 8cd31463aa..d767c5c4e7 100644 --- a/config/examples/ArmEd/Configuration.h +++ b/config/examples/ArmEd/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 13 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -546,6 +547,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index a44059b69a..8f3c2ca796 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -116,6 +116,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Azteeg/X5GT/Configuration.h b/config/examples/Azteeg/X5GT/Configuration.h index d0550a36de..4e7c86a017 100644 --- a/config/examples/Azteeg/X5GT/Configuration.h +++ b/config/examples/Azteeg/X5GT/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration.h b/config/examples/BIBO/TouchX/cyclops/Configuration.h index 79ad50cd97..72c506d60a 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 0019f7d333..2b84b5a64d 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 1 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/BIBO/TouchX/default/Configuration.h b/config/examples/BIBO/TouchX/default/Configuration.h index a8dacd52ee..b107372cdc 100644 --- a/config/examples/BIBO/TouchX/default/Configuration.h +++ b/config/examples/BIBO/TouchX/default/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 60 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index c6005be857..58742602c8 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/BQ/Hephestos/Configuration.h b/config/examples/BQ/Hephestos/Configuration.h index 130a1af7c2..5a319195d3 100644 --- a/config/examples/BQ/Hephestos/Configuration.h +++ b/config/examples/BQ/Hephestos/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -533,6 +534,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 0a5f8826c6..5d51a58e35 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/BQ/Hephestos_2/Configuration.h b/config/examples/BQ/Hephestos_2/Configuration.h index 95fe651dac..1ba3831640 100644 --- a/config/examples/BQ/Hephestos_2/Configuration.h +++ b/config/examples/BQ/Hephestos_2/Configuration.h @@ -385,6 +385,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -546,6 +547,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index fad23e893c..d48c74c448 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/BQ/WITBOX/Configuration.h b/config/examples/BQ/WITBOX/Configuration.h index 21a7c217a2..0a8499e559 100644 --- a/config/examples/BQ/WITBOX/Configuration.h +++ b/config/examples/BQ/WITBOX/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -533,6 +534,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 0a5f8826c6..5d51a58e35 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Cartesio/Configuration.h b/config/examples/Cartesio/Configuration.h index 93935dd15d..de3ee7c476 100644 --- a/config/examples/Cartesio/Configuration.h +++ b/config/examples/Cartesio/Configuration.h @@ -378,6 +378,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -544,6 +545,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index 09499f02b4..9d2652a8ef 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/CR-10/Configuration.h b/config/examples/Creality/CR-10/Configuration.h index 5a673a3eca..9679767c61 100644 --- a/config/examples/Creality/CR-10/Configuration.h +++ b/config/examples/Creality/CR-10/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index 620dd7efa0..111c74235c 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/CR-10S/Configuration.h b/config/examples/Creality/CR-10S/Configuration.h index 7ba15cb2f5..7b6d462e8e 100644 --- a/config/examples/Creality/CR-10S/Configuration.h +++ b/config/examples/Creality/CR-10S/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index 1e3dd0d679..501ef5a09c 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/CR-10_5S/Configuration.h b/config/examples/Creality/CR-10_5S/Configuration.h index 97a6403ec7..6ea98cba5c 100644 --- a/config/examples/Creality/CR-10_5S/Configuration.h +++ b/config/examples/Creality/CR-10_5S/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index 283675127d..36587da956 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/CR-10mini/Configuration.h b/config/examples/Creality/CR-10mini/Configuration.h index 180dbd9bd3..6dcc15154e 100644 --- a/config/examples/Creality/CR-10mini/Configuration.h +++ b/config/examples/Creality/CR-10mini/Configuration.h @@ -386,6 +386,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -564,6 +565,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index 30a0c11caa..2af6b8b3f2 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/CR-8/Configuration.h b/config/examples/Creality/CR-8/Configuration.h index c57e4ecd77..f901856977 100644 --- a/config/examples/Creality/CR-8/Configuration.h +++ b/config/examples/Creality/CR-8/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index f44cd66ecc..0d6c4363d2 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/Ender-2/Configuration.h b/config/examples/Creality/Ender-2/Configuration.h index 4012e53217..a007da8e56 100644 --- a/config/examples/Creality/Ender-2/Configuration.h +++ b/config/examples/Creality/Ender-2/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -549,6 +550,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index 6c80015a79..7d9e08915c 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/Ender-3/Configuration.h b/config/examples/Creality/Ender-3/Configuration.h index e096661df5..20e6734755 100644 --- a/config/examples/Creality/Ender-3/Configuration.h +++ b/config/examples/Creality/Ender-3/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -549,6 +550,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index fccb793a41..f8ffc8e8de 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Creality/Ender-4/Configuration.h b/config/examples/Creality/Ender-4/Configuration.h index 772d196cf9..699d27121c 100644 --- a/config/examples/Creality/Ender-4/Configuration.h +++ b/config/examples/Creality/Ender-4/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index f3cea9137f..613b358a32 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Einstart-S/Configuration.h b/config/examples/Einstart-S/Configuration.h index 5186ffa40d..d05dd95496 100644 --- a/config/examples/Einstart-S/Configuration.h +++ b/config/examples/Einstart-S/Configuration.h @@ -379,6 +379,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -553,6 +554,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index b007186a09..71d7d8d6c7 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Felix/Configuration.h b/config/examples/Felix/Configuration.h index 70c35d13d0..64ebf6ebf7 100644 --- a/config/examples/Felix/Configuration.h +++ b/config/examples/Felix/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -526,6 +527,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index a694c531db..97fbcb4d94 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Felix/DUAL/Configuration.h b/config/examples/Felix/DUAL/Configuration.h index 75eabb490f..47a9acef39 100644 --- a/config/examples/Felix/DUAL/Configuration.h +++ b/config/examples/Felix/DUAL/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -526,6 +527,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/FlashForge/CreatorPro/Configuration.h b/config/examples/FlashForge/CreatorPro/Configuration.h index e47078d9b5..9becf04f5a 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration.h +++ b/config/examples/FlashForge/CreatorPro/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -535,6 +536,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index 9f5c2fa111..ad506c0425 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/FolgerTech/i3-2020/Configuration.h b/config/examples/FolgerTech/i3-2020/Configuration.h index 9f6c76d160..f0ec17519b 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration.h +++ b/config/examples/FolgerTech/i3-2020/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -550,6 +551,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index 0c13a992f9..a5e6d75669 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Formbot/Raptor/Configuration.h b/config/examples/Formbot/Raptor/Configuration.h index fc15239984..35f40f0228 100644 --- a/config/examples/Formbot/Raptor/Configuration.h +++ b/config/examples/Formbot/Raptor/Configuration.h @@ -422,6 +422,7 @@ #define TEMP_SENSOR_BED 1 #endif #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -597,6 +598,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index f7e3367061..3a86f1a14f 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Formbot/T_Rex_2+/Configuration.h b/config/examples/Formbot/T_Rex_2+/Configuration.h index 8c96fc6b35..9fc6109b42 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration.h @@ -392,6 +392,7 @@ #endif #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -574,6 +575,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index 8deb7fe050..f8c3431595 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Formbot/T_Rex_3/Configuration.h b/config/examples/Formbot/T_Rex_3/Configuration.h index 711d5cd703..c18b198597 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration.h +++ b/config/examples/Formbot/T_Rex_3/Configuration.h @@ -386,6 +386,7 @@ #endif #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -554,6 +555,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index ec9de6e5eb..42afb67d66 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Geeetech/A10M/Configuration.h b/config/examples/Geeetech/A10M/Configuration.h index 62fd3c47e7..672e471ece 100644 --- a/config/examples/Geeetech/A10M/Configuration.h +++ b/config/examples/Geeetech/A10M/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -528,6 +529,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 87d5de9058..eac0599ecd 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Geeetech/A20M/Configuration.h b/config/examples/Geeetech/A20M/Configuration.h index dff1888ffc..c7083b59fe 100644 --- a/config/examples/Geeetech/A20M/Configuration.h +++ b/config/examples/Geeetech/A20M/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -528,6 +529,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 6dbf4dfdef..670aed1031 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Geeetech/GT2560/Configuration.h b/config/examples/Geeetech/GT2560/Configuration.h index 00e318ccd6..e773291afb 100644 --- a/config/examples/Geeetech/GT2560/Configuration.h +++ b/config/examples/Geeetech/GT2560/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -560,6 +561,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h index 8168c35b47..e7a64fe3d8 100644 --- a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h +++ b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/MeCreator2/Configuration.h b/config/examples/Geeetech/MeCreator2/Configuration.h index 5d5dd7f935..224be4fa76 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration.h +++ b/config/examples/Geeetech/MeCreator2/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -552,6 +553,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index ef46da5057..2bf5bc6e28 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h index 186a0210c2..f0d66294ac 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -560,6 +561,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h index fdb673d96a..531469e91c 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -560,6 +561,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h index 767542834c..a9d1bb1870 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index f75f6d0d3e..8da1e0be33 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h index 6f77110c3e..067333d981 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index f75f6d0d3e..8da1e0be33 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Infitary/i3-M508/Configuration.h b/config/examples/Infitary/i3-M508/Configuration.h index 9522f1158d..70db284056 100644 --- a/config/examples/Infitary/i3-M508/Configuration.h +++ b/config/examples/Infitary/i3-M508/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -549,6 +550,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 6a241349d7..04131aba6a 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/JGAurora/A5/Configuration.h b/config/examples/JGAurora/A5/Configuration.h index f3529b3271..dadd9cc675 100644 --- a/config/examples/JGAurora/A5/Configuration.h +++ b/config/examples/JGAurora/A5/Configuration.h @@ -382,6 +382,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 // measured to be satisfactorily accurate on center of bed within +/- 1 degC. #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -557,6 +558,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index 3dcb30e54d..5ec3d2ef21 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/MakerParts/Configuration.h b/config/examples/MakerParts/Configuration.h index bdeeffc8d9..4b8bd85dcd 100644 --- a/config/examples/MakerParts/Configuration.h +++ b/config/examples/MakerParts/Configuration.h @@ -397,6 +397,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -565,6 +566,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 7e14bcbaab..86eea60e84 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Malyan/M150/Configuration.h b/config/examples/Malyan/M150/Configuration.h index 258b3c8eac..44c2f790ea 100644 --- a/config/examples/Malyan/M150/Configuration.h +++ b/config/examples/Malyan/M150/Configuration.h @@ -385,6 +385,7 @@ // The reasons are inconclusive so I leave at 1 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -553,6 +554,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 1308bac15d..e567f1a347 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Malyan/M200/Configuration.h b/config/examples/Malyan/M200/Configuration.h index 06e5ee7b54..b75b391298 100644 --- a/config/examples/Malyan/M200/Configuration.h +++ b/config/examples/Malyan/M200/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 11 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -544,6 +545,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index 9db8a18dfc..e475b0845a 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Micromake/C1/basic/Configuration.h b/config/examples/Micromake/C1/basic/Configuration.h index cca98bc175..1b8d66b792 100644 --- a/config/examples/Micromake/C1/basic/Configuration.h +++ b/config/examples/Micromake/C1/basic/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Micromake/C1/enhanced/Configuration.h b/config/examples/Micromake/C1/enhanced/Configuration.h index 573b179d12..7fee1c1b43 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration.h +++ b/config/examples/Micromake/C1/enhanced/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index 70720edef0..aacec5e520 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Mks/Robin/Configuration.h b/config/examples/Mks/Robin/Configuration.h index 198fbef4ef..0a456d953e 100644 --- a/config/examples/Mks/Robin/Configuration.h +++ b/config/examples/Mks/Robin/Configuration.h @@ -378,6 +378,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -546,6 +547,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 1d14d5e023..d30878f533 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Mks/Sbase/Configuration.h b/config/examples/Mks/Sbase/Configuration.h index caf3062940..62765515d1 100644 --- a/config/examples/Mks/Sbase/Configuration.h +++ b/config/examples/Mks/Sbase/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 915f954c3a..3a1af763dd 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration.h b/config/examples/Printrbot/PrintrboardG2/Configuration.h index 5a3c4270cd..4b152aedf4 100644 --- a/config/examples/Printrbot/PrintrboardG2/Configuration.h +++ b/config/examples/Printrbot/PrintrboardG2/Configuration.h @@ -378,6 +378,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -546,6 +547,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/RapideLite/RL200/Configuration.h b/config/examples/RapideLite/RL200/Configuration.h index 2b02d2e165..9ced21e03a 100644 --- a/config/examples/RapideLite/RL200/Configuration.h +++ b/config/examples/RapideLite/RL200/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index 7528803b81..ecbda140f6 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/RepRapPro/Huxley/Configuration.h b/config/examples/RepRapPro/Huxley/Configuration.h index e75448079a..aa0f95cef8 100644 --- a/config/examples/RepRapPro/Huxley/Configuration.h +++ b/config/examples/RepRapPro/Huxley/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 // Sanguinololu v1.3 with 4.7kOhm pullup #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/RepRapWorld/Megatronics/Configuration.h b/config/examples/RepRapWorld/Megatronics/Configuration.h index 1f6d03ee14..5536adaa86 100644 --- a/config/examples/RepRapWorld/Megatronics/Configuration.h +++ b/config/examples/RepRapWorld/Megatronics/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/RigidBot/Configuration.h b/config/examples/RigidBot/Configuration.h index d95d2b083d..49c58237d2 100644 --- a/config/examples/RigidBot/Configuration.h +++ b/config/examples/RigidBot/Configuration.h @@ -380,6 +380,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -541,6 +542,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index f095f32063..419d1809ad 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/SCARA/Configuration.h b/config/examples/SCARA/Configuration.h index 19cd162139..09e0df91d2 100644 --- a/config/examples/SCARA/Configuration.h +++ b/config/examples/SCARA/Configuration.h @@ -408,6 +408,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -558,6 +559,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index 8ed7481da2..94a89b9543 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/STM32F10/Configuration.h b/config/examples/STM32F10/Configuration.h index 28625f63c5..d527c23bab 100644 --- a/config/examples/STM32F10/Configuration.h +++ b/config/examples/STM32F10/Configuration.h @@ -378,6 +378,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 998 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 60 @@ -547,6 +548,7 @@ #warning "disabled temperature protection" //#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders //#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/STM32F4/Configuration.h b/config/examples/STM32F4/Configuration.h index 0ad83b2e18..b011da05ef 100644 --- a/config/examples/STM32F4/Configuration.h +++ b/config/examples/STM32F4/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Sanguinololu/Configuration.h b/config/examples/Sanguinololu/Configuration.h index 9cb1aa94ee..5e5083e30b 100644 --- a/config/examples/Sanguinololu/Configuration.h +++ b/config/examples/Sanguinololu/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index 6e79599b9e..f2943c7fce 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/TheBorg/Configuration.h b/config/examples/TheBorg/Configuration.h index 431a5582ef..ee8cc5844c 100644 --- a/config/examples/TheBorg/Configuration.h +++ b/config/examples/TheBorg/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index 1cb1367c84..638c8c108b 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/TinyBoy2/Configuration.h b/config/examples/TinyBoy2/Configuration.h index 8ff4887e2f..924c05845e 100644 --- a/config/examples/TinyBoy2/Configuration.h +++ b/config/examples/TinyBoy2/Configuration.h @@ -404,6 +404,7 @@ #define TEMP_SENSOR_BED 0 #endif #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -595,6 +596,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index 39c26d6d5a..62150e0bc5 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Tronxy/X1/Configuration.h b/config/examples/Tronxy/X1/Configuration.h index cfc1b7b472..2c9cfd0564 100644 --- a/config/examples/Tronxy/X1/Configuration.h +++ b/config/examples/Tronxy/X1/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Tronxy/X3A/Configuration.h b/config/examples/Tronxy/X3A/Configuration.h index 07307eb773..56e632539c 100644 --- a/config/examples/Tronxy/X3A/Configuration.h +++ b/config/examples/Tronxy/X3A/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 501 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index b7a7acf5fd..63dc7f2bb5 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Tronxy/X5S-2E/Configuration.h b/config/examples/Tronxy/X5S-2E/Configuration.h index 1dfecec7a3..dabe1e73a0 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration.h +++ b/config/examples/Tronxy/X5S-2E/Configuration.h @@ -379,6 +379,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -564,6 +565,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index d92c39d6df..bca24a60d0 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Tronxy/X5S/Configuration.h b/config/examples/Tronxy/X5S/Configuration.h index 85ec6c06ab..d2eeec194f 100644 --- a/config/examples/Tronxy/X5S/Configuration.h +++ b/config/examples/Tronxy/X5S/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -544,6 +545,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Tronxy/XY100/Configuration.h b/config/examples/Tronxy/XY100/Configuration.h index 27a821acde..fbede1d11a 100644 --- a/config/examples/Tronxy/XY100/Configuration.h +++ b/config/examples/Tronxy/XY100/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -556,6 +557,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/UltiMachine/Archim1/Configuration.h b/config/examples/UltiMachine/Archim1/Configuration.h index 5f85003cc5..ba8c301c06 100644 --- a/config/examples/UltiMachine/Archim1/Configuration.h +++ b/config/examples/UltiMachine/Archim1/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index 135fb1e78c..b933868c6a 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/UltiMachine/Archim2/Configuration.h b/config/examples/UltiMachine/Archim2/Configuration.h index 1525b2119c..2fbee97b3b 100644 --- a/config/examples/UltiMachine/Archim2/Configuration.h +++ b/config/examples/UltiMachine/Archim2/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index fc0f450120..bdc3e7bb53 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/VORONDesign/Configuration.h b/config/examples/VORONDesign/Configuration.h index 93379337f2..b2a0f3af5a 100644 --- a/config/examples/VORONDesign/Configuration.h +++ b/config/examples/VORONDesign/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -554,6 +555,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index f1c46b4cf7..0267039751 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Velleman/K8200/Configuration.h b/config/examples/Velleman/K8200/Configuration.h index c3808e87bb..79f0508253 100644 --- a/config/examples/Velleman/K8200/Configuration.h +++ b/config/examples/Velleman/K8200/Configuration.h @@ -397,6 +397,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -575,6 +576,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 3d8f20773c..39f7c535f5 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -125,6 +125,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Velleman/K8400/Configuration.h b/config/examples/Velleman/K8400/Configuration.h index c4bc1a8c3b..e8cb14ae27 100644 --- a/config/examples/Velleman/K8400/Configuration.h +++ b/config/examples/Velleman/K8400/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index 13a6e1d7eb..9ecff05306 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration.h b/config/examples/Velleman/K8400/Dual-head/Configuration.h index d59835de8a..d63016d605 100644 --- a/config/examples/Velleman/K8400/Dual-head/Configuration.h +++ b/config/examples/Velleman/K8400/Dual-head/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/WASP/PowerWASP/Configuration.h b/config/examples/WASP/PowerWASP/Configuration.h index 13cd36f648..68f3dba3d8 100644 --- a/config/examples/WASP/PowerWASP/Configuration.h +++ b/config/examples/WASP/PowerWASP/Configuration.h @@ -396,6 +396,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -564,6 +565,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index b6b05ce6e5..6d363b6dcd 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/Wanhao/Duplicator 6/Configuration.h b/config/examples/Wanhao/Duplicator 6/Configuration.h index 1f0fb28fb3..936b14c23f 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 13f41ecb24..be4c177d94 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/adafruit/ST7565/Configuration.h b/config/examples/adafruit/ST7565/Configuration.h index 52f627a7c8..ade91c57fd 100644 --- a/config/examples/adafruit/ST7565/Configuration.h +++ b/config/examples/adafruit/ST7565/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/Anycubic/Kossel/Configuration.h b/config/examples/delta/Anycubic/Kossel/Configuration.h index 08218ffd1d..6099e4806d 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration.h @@ -398,6 +398,7 @@ #endif #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -586,6 +587,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 54a5ec27f2..165a2314ff 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h index 41493bd249..a71f593e7f 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index 7573ba6e0f..cfe6404cbe 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/FLSUN/kossel/Configuration.h b/config/examples/delta/FLSUN/kossel/Configuration.h index 3418c48cef..44e197b3e6 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration.h +++ b/config/examples/delta/FLSUN/kossel/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index 7573ba6e0f..cfe6404cbe 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/config/examples/delta/FLSUN/kossel_mini/Configuration.h index a179fe7a11..598b3fe753 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -555,6 +556,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index bf4cb2fb55..eb14efaab0 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration.h b/config/examples/delta/Geeetech/Rostock 301/Configuration.h index c000947b40..7e762ef64c 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index bf4cb2fb55..eb14efaab0 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/Hatchbox_Alpha/Configuration.h b/config/examples/delta/Hatchbox_Alpha/Configuration.h index 3d61b27567..9c2c8ed4e5 100644 --- a/config/examples/delta/Hatchbox_Alpha/Configuration.h +++ b/config/examples/delta/Hatchbox_Alpha/Configuration.h @@ -382,6 +382,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -560,6 +561,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/MKS/SBASE/Configuration.h b/config/examples/delta/MKS/SBASE/Configuration.h index 3c93a36057..2dbf4b8844 100644 --- a/config/examples/delta/MKS/SBASE/Configuration.h +++ b/config/examples/delta/MKS/SBASE/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 9aec36a484..96033aea16 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/Tevo Little Monster/Configuration.h b/config/examples/delta/Tevo Little Monster/Configuration.h index 4c24ba46fb..07aca62ea4 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration.h +++ b/config/examples/delta/Tevo Little Monster/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -549,6 +550,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 9193fdea6b..24a6184f29 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/generic/Configuration.h b/config/examples/delta/generic/Configuration.h index 493a39f6bd..7ff0afcefb 100644 --- a/config/examples/delta/generic/Configuration.h +++ b/config/examples/delta/generic/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index bf4cb2fb55..eb14efaab0 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/kossel_mini/Configuration.h b/config/examples/delta/kossel_mini/Configuration.h index 3a05c80699..bc22251f3c 100644 --- a/config/examples/delta/kossel_mini/Configuration.h +++ b/config/examples/delta/kossel_mini/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 11 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -545,6 +546,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index bb5c2316de..1240151195 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/delta/kossel_pro/Configuration.h b/config/examples/delta/kossel_pro/Configuration.h index 12f371106f..abaa86d10b 100644 --- a/config/examples/delta/kossel_pro/Configuration.h +++ b/config/examples/delta/kossel_pro/Configuration.h @@ -381,6 +381,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -531,6 +532,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/kossel_xl/Configuration.h b/config/examples/delta/kossel_xl/Configuration.h index 58cef322c4..c8be5e91de 100644 --- a/config/examples/delta/kossel_xl/Configuration.h +++ b/config/examples/delta/kossel_xl/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -549,6 +550,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index d35891d8da..57dd180277 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/gCreate/gMax1.5+/Configuration.h b/config/examples/gCreate/gMax1.5+/Configuration.h index bec673e668..07be4a2651 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration.h +++ b/config/examples/gCreate/gMax1.5+/Configuration.h @@ -385,6 +385,7 @@ // a Fortek SSR to do it. If you are using an unaltered gCreate machine, this needs // to be set to 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -558,6 +559,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 97c79c0aa8..74cb5ec3a5 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/makibox/Configuration.h b/config/examples/makibox/Configuration.h index cc2d3e56c0..2bb45de4a6 100644 --- a/config/examples/makibox/Configuration.h +++ b/config/examples/makibox/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 12 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -548,6 +549,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 8649933261..dd40c8ab07 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/stm32f103ret6/Configuration.h b/config/examples/stm32f103ret6/Configuration.h index 22f22a5805..00dfa7ed81 100644 --- a/config/examples/stm32f103ret6/Configuration.h +++ b/config/examples/stm32f103ret6/Configuration.h @@ -378,6 +378,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 998 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 60 @@ -547,6 +548,7 @@ #warning "disabled temperature protection" //#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders //#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/tvrrug/Round2/Configuration.h b/config/examples/tvrrug/Round2/Configuration.h index 8e8be169f5..56682ca11b 100644 --- a/config/examples/tvrrug/Round2/Configuration.h +++ b/config/examples/tvrrug/Round2/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 5 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -534,6 +535,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index c09a4916b0..b56619114a 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. diff --git a/config/examples/wt150/Configuration.h b/config/examples/wt150/Configuration.h index 65ebe38d70..b4e565c272 100644 --- a/config/examples/wt150/Configuration.h +++ b/config/examples/wt150/Configuration.h @@ -377,6 +377,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_CHAMBER 0 +#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -550,6 +551,7 @@ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed +#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //=========================================================================== //============================= Mechanical Settings ========================= diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 01c98b1ec0..8e1ad96110 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -112,6 +112,20 @@ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + #if ENABLED(PIDTEMP) // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated.