From: Erik van der Zalm Date: Mon, 30 Apr 2012 11:36:19 +0000 (+0200) Subject: Added temperature window to M109. This is needed for systems with no overshoot PID. X-Git-Tag: iwj-success-2012-07-29~33 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=02af69911ec48898c5590025badd20cc2a1748e1;p=marlin.git Added temperature window to M109. This is needed for systems with no overshoot PID. --- diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 18942a5..512f017 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -58,6 +58,7 @@ // Actual temperature must be close to target for this long before M109 returns success #define TEMP_RESIDENCY_TIME 10 // (seconds) #define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one +#define TEMP_WINDOW 1 // (degC) Window around target to start the recidency timer x degC early. // The minimal temperature defines the temperature below which the heater will not be enabled It is used // to check that the wiring to the thermistor is not broken. diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 083e803..88fb349 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -104,12 +104,12 @@ // M240 - Trigger a camera to take a photograph // M301 - Set PID parameters P I and D // M302 - Allow cold extrudes +// M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C) // M400 - Finish all moves // M500 - stores paramters in EEPROM // M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). // M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to. // M503 - print the current settings (from memory not from eeprom) -// M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C) // M999 - Restart after being stopped by error //Stepper Movement Variables @@ -940,8 +940,8 @@ void process_commands() #ifdef TEMP_RESIDENCY_TIME /* start/restart the TEMP_RESIDENCY_TIME timer whenever we reach target temp for the first time or when current temp falls outside the hysteresis after target temp was reached */ - if ((residencyStart == -1 && target_direction && !isHeatingHotend(tmp_extruder)) || - (residencyStart == -1 && !target_direction && !isCoolingHotend(tmp_extruder)) || + if ((residencyStart == -1 && target_direction && (degHotend(tmp_extruder) >= (degTargetHotend(tmp_extruder)-TEMP_WINDOW))) || + (residencyStart == -1 && !target_direction && (degHotend(tmp_extruder) <= (degTargetHotend(tmp_extruder)+TEMP_WINDOW))) || (residencyStart > -1 && labs(degHotend(tmp_extruder) - degTargetHotend(tmp_extruder)) > TEMP_HYSTERESIS) ) { residencyStart = millis();