imported last Marlin changes
This commit is contained in:
commit
2f4a20257c
@ -257,6 +257,44 @@
|
||||
#define EXTRUDE_MINTEMP 170
|
||||
#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
|
||||
|
||||
/*================== Thermal Runaway Protection ==============================
|
||||
This is a feature to protect your printer from burn up in flames if it has
|
||||
a thermistor coming off place (this happened to a friend of mine recently and
|
||||
motivated me writing this feature).
|
||||
|
||||
The issue: If a thermistor come off, it will read a lower temperature than actual.
|
||||
The system will turn the heater on forever, burning up the filament and anything
|
||||
else around.
|
||||
|
||||
After the temperature reaches the target for the first time, this feature will
|
||||
start measuring for how long the current temperature stays below the target
|
||||
minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).
|
||||
|
||||
If it stays longer than _PERIOD, it means the thermistor temperature
|
||||
cannot catch up with the target, so something *may be* wrong. Then, to be on the
|
||||
safe side, the system will he halt.
|
||||
|
||||
Bear in mind the count down will just start AFTER the first time the
|
||||
thermistor temperature is over the target, so you will have no problem if
|
||||
your extruder heater takes 2 minutes to hit the target on heating.
|
||||
|
||||
*/
|
||||
// If you want to enable this feature for all your extruder heaters,
|
||||
// uncomment the 2 defines below:
|
||||
|
||||
// Parameters for all extruder heaters
|
||||
//#define THERMAL_RUNAWAY_PROTECTION_PERIOD 40 //in seconds
|
||||
//#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS 4 // in degree Celsius
|
||||
|
||||
// If you want to enable this feature for your bed heater,
|
||||
// uncomment the 2 defines below:
|
||||
|
||||
// Parameters for the bed heater
|
||||
//#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD 20 //in seconds
|
||||
//#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS 2 // in degree Celsius
|
||||
//===========================================================================
|
||||
|
||||
|
||||
//===========================================================================
|
||||
//=============================Mechanical Settings===========================
|
||||
//===========================================================================
|
||||
|
@ -410,9 +410,11 @@ const unsigned int dropsegments=5; //everything with less than this number of st
|
||||
#ifdef FWRETRACT
|
||||
#define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
|
||||
#define RETRACT_LENGTH 3 //default retract length (positive mm)
|
||||
#define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
|
||||
#define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
|
||||
#define RETRACT_ZLIFT 0 //default retract Z-lift
|
||||
#define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
|
||||
#define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
|
||||
#define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
|
||||
#endif
|
||||
|
||||
|
@ -238,9 +238,9 @@ extern unsigned char fanSpeedSoftPwm;
|
||||
|
||||
#ifdef FWRETRACT
|
||||
extern bool autoretract_enabled;
|
||||
extern bool retracted;
|
||||
extern float retract_length, retract_feedrate, retract_zlift;
|
||||
extern float retract_recover_length, retract_recover_feedrate;
|
||||
extern bool retracted[EXTRUDERS];
|
||||
extern float retract_length, retract_length_swap, retract_feedrate, retract_zlift;
|
||||
extern float retract_recover_length, retract_recover_length_swap, retract_recover_feedrate;
|
||||
#endif
|
||||
|
||||
extern unsigned long starttime;
|
||||
|
@ -254,11 +254,29 @@ int EtoPPressure=0;
|
||||
|
||||
#ifdef FWRETRACT
|
||||
bool autoretract_enabled=false;
|
||||
bool retracted=false;
|
||||
bool retracted[EXTRUDERS]={false
|
||||
#if EXTRUDERS > 1
|
||||
, false
|
||||
#if EXTRUDERS > 2
|
||||
, false
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
bool retracted_swap[EXTRUDERS]={false
|
||||
#if EXTRUDERS > 1
|
||||
, false
|
||||
#if EXTRUDERS > 2
|
||||
, false
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
float retract_length = RETRACT_LENGTH;
|
||||
float retract_length_swap = RETRACT_LENGTH_SWAP;
|
||||
float retract_feedrate = RETRACT_FEEDRATE;
|
||||
float retract_zlift = RETRACT_ZLIFT;
|
||||
float retract_recover_length = RETRACT_RECOVER_LENGTH;
|
||||
float retract_recover_length_swap = RETRACT_RECOVER_LENGTH_SWAP;
|
||||
float retract_recover_feedrate = RETRACT_RECOVER_FEEDRATE;
|
||||
#endif
|
||||
|
||||
@ -291,6 +309,8 @@ int EtoPPressure=0;
|
||||
float axis_scaling[3]={1,1,1}; // Build size scaling, default to 1
|
||||
#endif
|
||||
|
||||
bool cancel_heatup = false ;
|
||||
|
||||
//===========================================================================
|
||||
//=============================Private Variables=============================
|
||||
//===========================================================================
|
||||
@ -1184,23 +1204,27 @@ void refresh_cmd_timeout(void)
|
||||
}
|
||||
|
||||
#ifdef FWRETRACT
|
||||
void retract(bool retracting) {
|
||||
if(retracting && !retracted) {
|
||||
void retract(bool retracting, bool swapretract = false) {
|
||||
if(retracting && !retracted[active_extruder]) {
|
||||
destination[X_AXIS]=current_position[X_AXIS];
|
||||
destination[Y_AXIS]=current_position[Y_AXIS];
|
||||
destination[Z_AXIS]=current_position[Z_AXIS];
|
||||
destination[E_AXIS]=current_position[E_AXIS];
|
||||
if (swapretract) {
|
||||
current_position[E_AXIS]+=retract_length_swap/volumetric_multiplier[active_extruder];
|
||||
} else {
|
||||
current_position[E_AXIS]+=retract_length/volumetric_multiplier[active_extruder];
|
||||
}
|
||||
plan_set_e_position(current_position[E_AXIS]);
|
||||
float oldFeedrate = feedrate;
|
||||
feedrate=retract_feedrate*60;
|
||||
retracted=true;
|
||||
retracted[active_extruder]=true;
|
||||
prepare_move();
|
||||
current_position[Z_AXIS]-=retract_zlift;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
prepare_move();
|
||||
feedrate = oldFeedrate;
|
||||
} else if(!retracting && retracted) {
|
||||
} else if(!retracting && retracted[active_extruder]) {
|
||||
destination[X_AXIS]=current_position[X_AXIS];
|
||||
destination[Y_AXIS]=current_position[Y_AXIS];
|
||||
destination[Z_AXIS]=current_position[Z_AXIS];
|
||||
@ -1208,11 +1232,15 @@ void refresh_cmd_timeout(void)
|
||||
current_position[Z_AXIS]+=retract_zlift;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
//prepare_move();
|
||||
if (swapretract) {
|
||||
current_position[E_AXIS]-=(retract_length_swap+retract_recover_length_swap)/volumetric_multiplier[active_extruder];
|
||||
} else {
|
||||
current_position[E_AXIS]-=(retract_length+retract_recover_length)/volumetric_multiplier[active_extruder];
|
||||
}
|
||||
plan_set_e_position(current_position[E_AXIS]);
|
||||
float oldFeedrate = feedrate;
|
||||
feedrate=retract_recover_feedrate*60;
|
||||
retracted=false;
|
||||
retracted[active_extruder]=false;
|
||||
prepare_move();
|
||||
feedrate = oldFeedrate;
|
||||
}
|
||||
@ -1284,10 +1312,19 @@ void process_commands()
|
||||
break;
|
||||
#ifdef FWRETRACT
|
||||
case 10: // G10 retract
|
||||
#if EXTRUDERS > 1
|
||||
retracted_swap[active_extruder]=(code_seen('S') && code_value_long() == 1); // checks for swap retract argument
|
||||
retract(true,retracted_swap[active_extruder]);
|
||||
#else
|
||||
retract(true);
|
||||
#endif
|
||||
break;
|
||||
case 11: // G11 retract_recover
|
||||
#if EXTRUDERS > 1
|
||||
retract(false,retracted_swap[active_extruder]);
|
||||
#else
|
||||
retract(false);
|
||||
#endif
|
||||
break;
|
||||
#endif //FWRETRACT
|
||||
case 28: //G28 Home all Axis one at a time
|
||||
@ -2039,13 +2076,15 @@ void process_commands()
|
||||
/* See if we are heating up or cooling down */
|
||||
target_direction = isHeatingHotend(tmp_extruder); // true if heating, false if cooling
|
||||
|
||||
cancel_heatup = false;
|
||||
|
||||
#ifdef TEMP_RESIDENCY_TIME
|
||||
long residencyStart;
|
||||
residencyStart = -1;
|
||||
/* continue to loop until we have reached the target temp
|
||||
_and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */
|
||||
while((residencyStart == -1) ||
|
||||
(residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) {
|
||||
while((!cancel_heatup)&&((residencyStart == -1) ||
|
||||
(residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL)))) ) {
|
||||
#else
|
||||
while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) {
|
||||
#endif //TEMP_RESIDENCY_TIME
|
||||
@ -2102,9 +2141,10 @@ void process_commands()
|
||||
}
|
||||
codenum = millis();
|
||||
|
||||
cancel_heatup = false;
|
||||
target_direction = isHeatingBed(); // true if heating, false if cooling
|
||||
|
||||
while ( target_direction ? (isHeatingBed()) : (isCoolingBed()&&(CooldownNoWait==false)) )
|
||||
while ( (target_direction)&&(!cancel_heatup) ? (isHeatingBed()) : (isCoolingBed()&&(CooldownNoWait==false)) )
|
||||
{
|
||||
if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
|
||||
{
|
||||
@ -2514,8 +2554,28 @@ void process_commands()
|
||||
int t= code_value() ;
|
||||
switch(t)
|
||||
{
|
||||
case 0: autoretract_enabled=false;retracted=false;break;
|
||||
case 1: autoretract_enabled=true;retracted=false;break;
|
||||
case 0:
|
||||
{
|
||||
autoretract_enabled=false;
|
||||
retracted[0]=false;
|
||||
#if EXTRUDERS > 1
|
||||
retracted[1]=false;
|
||||
#endif
|
||||
#if EXTRUDERS > 2
|
||||
retracted[2]=false;
|
||||
#endif
|
||||
}break;
|
||||
case 1:
|
||||
{
|
||||
autoretract_enabled=true;
|
||||
retracted[0]=false;
|
||||
#if EXTRUDERS > 1
|
||||
retracted[1]=false;
|
||||
#endif
|
||||
#if EXTRUDERS > 2
|
||||
retracted[2]=false;
|
||||
#endif
|
||||
}break;
|
||||
default:
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOPGM(MSG_UNKNOWN_COMMAND);
|
||||
|
@ -171,9 +171,11 @@
|
||||
#define MSG_KILLED "KILLED. "
|
||||
#define MSG_STOPPED "STOPPED. "
|
||||
#define MSG_CONTROL_RETRACT "Retract mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Swap Re.mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retract V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "S UnRet+mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
|
||||
#define MSG_AUTORETRACT "AutoRetr."
|
||||
#define MSG_FILAMENTCHANGE "Change filament"
|
||||
@ -371,9 +373,11 @@
|
||||
#define MSG_STOPPED "Zatrzymany. "
|
||||
#define MSG_STEPPER_RELEASED "Zwolniony."
|
||||
#define MSG_CONTROL_RETRACT "Wycofaj mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Z Wycof. mm"
|
||||
#define MSG_CONTROL_RETRACTF "Wycofaj V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Skok Z mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "Cof. wycof. +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Z Cof. wyc. +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "Cof. wycof. V"
|
||||
#define MSG_AUTORETRACT "Auto. wycofanie"
|
||||
#define MSG_FILAMENTCHANGE "Zmien filament"
|
||||
@ -572,9 +576,11 @@
|
||||
#define MSG_STOPPED "STOPPE."
|
||||
#define MSG_STEPPER_RELEASED "RELACHE."
|
||||
#define MSG_CONTROL_RETRACT "Retraction mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Ech. Retr. mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retraction V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Ech. UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
|
||||
#define MSG_AUTORETRACT "Retract. Auto."
|
||||
#define MSG_FILAMENTCHANGE "Changer filament"
|
||||
@ -774,9 +780,11 @@
|
||||
#define MSG_STOPPED "GESTOPPT"
|
||||
#define MSG_STEPPER_RELEASED "Stepper frei"
|
||||
#define MSG_CONTROL_RETRACT "Retract mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Wechs. Retract mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retract V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Wechs. UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
|
||||
#define MSG_AUTORETRACT "AutoRetr."
|
||||
#define MSG_FILAMENTCHANGE "Filament wechseln"
|
||||
@ -972,9 +980,11 @@
|
||||
#define MSG_KILLED "PARADA DE EMERG."
|
||||
#define MSG_STOPPED "PARADA"
|
||||
#define MSG_CONTROL_RETRACT "Retraer mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Interc. Retraer mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retraer V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Levantar mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "DesRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Interc. DesRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "DesRet V"
|
||||
#define MSG_AUTORETRACT "AutoRetr."
|
||||
#define MSG_FILAMENTCHANGE "Cambiar filamento"
|
||||
@ -1179,9 +1189,11 @@
|
||||
#define MSG_KILLED "УБИТО."
|
||||
#define MSG_STOPPED "ОСТАНОВЛЕНО."
|
||||
#define MSG_CONTROL_RETRACT "Откат mm:"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "своп Откат mm:"
|
||||
#define MSG_CONTROL_RETRACTF "Откат V:"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Прыжок mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "Возврат +mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "своп Возврат +mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "Возврат V:"
|
||||
#define MSG_AUTORETRACT "АвтоОткат:"
|
||||
#define MSG_FILAMENTCHANGE "Change filament"
|
||||
@ -1376,9 +1388,11 @@
|
||||
#define MSG_KILLED "UCCISO. "
|
||||
#define MSG_STOPPED "ARRESTATO. "
|
||||
#define MSG_CONTROL_RETRACT "Ritrai mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Scamb. Ritrai mm"
|
||||
#define MSG_CONTROL_RETRACTF "Ritrai V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Salta mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Scamb. UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
|
||||
#define MSG_AUTORETRACT "AutoArretramento"
|
||||
#define MSG_FILAMENTCHANGE "Cambia filamento"
|
||||
@ -1581,9 +1595,11 @@
|
||||
#define MSG_STOPPED "PARADA. "
|
||||
#define MSG_STEPPER_RELEASED "Lancado."
|
||||
#define MSG_CONTROL_RETRACT " Retrair mm:"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Troca Retrair mm:"
|
||||
#define MSG_CONTROL_RETRACTF " Retrair V:"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT " Levantar mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER " DesRet +mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Troca DesRet +mm:"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF " DesRet V:"
|
||||
#define MSG_AUTORETRACT " AutoRetr.:"
|
||||
#define MSG_FILAMENTCHANGE "Change filament"
|
||||
@ -1781,9 +1797,11 @@
|
||||
#define MSG_KILLED "KILLED. "
|
||||
#define MSG_STOPPED "STOPPED. "
|
||||
#define MSG_CONTROL_RETRACT "Veda mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Va. Veda mm"
|
||||
#define MSG_CONTROL_RETRACTF "Veda V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Z mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Va. UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
|
||||
#define MSG_AUTORETRACT "AutoVeto."
|
||||
#define MSG_FILAMENTCHANGE "Change filament"
|
||||
@ -1979,9 +1997,11 @@
|
||||
#define MSG_KILLED "ATURADA D'EMERCH."
|
||||
#define MSG_STOPPED "ATURADA."
|
||||
#define MSG_CONTROL_RETRACT "Retraer mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Swap Retraer mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retraer F"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Devantar mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "DesRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Swap DesRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "DesRet F"
|
||||
#define MSG_AUTORETRACT "AutoRetr."
|
||||
#define MSG_FILAMENTCHANGE "Cambear"
|
||||
@ -2185,9 +2205,11 @@
|
||||
#define MSG_KILLED "AFGEBROKEN. "
|
||||
#define MSG_STOPPED "GESTOPT. "
|
||||
#define MSG_CONTROL_RETRACT "Retract mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Ruil Retract mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retract F"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Ruil UnRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet F"
|
||||
#define MSG_AUTORETRACT "AutoRetr."
|
||||
#define MSG_FILAMENTCHANGE "Verv. Filament"
|
||||
@ -2384,9 +2406,11 @@
|
||||
#define MSG_KILLED "PARADA DE EMERG. "
|
||||
#define MSG_STOPPED "ATURAT. "
|
||||
#define MSG_CONTROL_RETRACT "Retreure mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Swap Retreure mm"
|
||||
#define MSG_CONTROL_RETRACTF "Retreure F"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Aixecar mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "DesRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Swap DesRet +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "DesRet F"
|
||||
#define MSG_AUTORETRACT "AutoRetr."
|
||||
#define MSG_FILAMENTCHANGE "Canviar filament"
|
||||
@ -2582,9 +2606,11 @@
|
||||
#define MSG_KILLED "LARRIALDI GELDIA"
|
||||
#define MSG_STOPPED "GELDITUTA. "
|
||||
#define MSG_CONTROL_RETRACT "Atzera egin mm"
|
||||
#define MSG_CONTROL_RETRACT_SWAP "Swap Atzera egin mm"
|
||||
#define MSG_CONTROL_RETRACTF "Atzera egin V"
|
||||
#define MSG_CONTROL_RETRACT_ZLIFT "Igo mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER "Atzera egin +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Swap Atzera egin +mm"
|
||||
#define MSG_CONTROL_RETRACT_RECOVERF "Atzera egin V"
|
||||
#define MSG_AUTORETRACT "Atzera egin"
|
||||
#define MSG_FILAMENTCHANGE "Aldatu filament."
|
||||
|
@ -416,6 +416,10 @@ void manage_heater()
|
||||
for(int e = 0; e < EXTRUDERS; e++)
|
||||
{
|
||||
|
||||
#ifdef THERMAL_RUNAWAY_PROTECTION_PERIOD && THERMAL_RUNAWAY_PROTECTION_PERIOD > 0
|
||||
thermal_runaway_protection(&thermal_runaway_state_machine[e], &thermal_runaway_timer[e], current_temperature[e], target_temperature[e], e, THERMAL_RUNAWAY_PROTECTION_PERIOD, THERMAL_RUNAWAY_PROTECTION_HYSTERESIS);
|
||||
#endif
|
||||
|
||||
#ifdef PIDTEMP
|
||||
pid_input = current_temperature[e];
|
||||
|
||||
@ -526,6 +530,10 @@ void manage_heater()
|
||||
|
||||
#if TEMP_SENSOR_BED != 0
|
||||
|
||||
#ifdef THERMAL_RUNAWAY_PROTECTION_PERIOD && THERMAL_RUNAWAY_PROTECTION_PERIOD > 0
|
||||
thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, 9, THERMAL_RUNAWAY_PROTECTION_BED_PERIOD, THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS);
|
||||
#endif
|
||||
|
||||
#ifdef PIDTEMPBED
|
||||
pid_input = current_temperature_bed;
|
||||
|
||||
@ -896,6 +904,66 @@ void setWatch()
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef THERMAL_RUNAWAY_PROTECTION_PERIOD && THERMAL_RUNAWAY_PROTECTION_PERIOD > 0
|
||||
void thermal_runaway_protection(int *state, unsigned long *timer, float temperature, float target_temperature, int heater_id, int period_seconds, int hysteresis_degc)
|
||||
{
|
||||
/*
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHO("Thermal Thermal Runaway Running. Heater ID:");
|
||||
SERIAL_ECHO(heater_id);
|
||||
SERIAL_ECHO(" ; State:");
|
||||
SERIAL_ECHO(*state);
|
||||
SERIAL_ECHO(" ; Timer:");
|
||||
SERIAL_ECHO(*timer);
|
||||
SERIAL_ECHO(" ; Temperature:");
|
||||
SERIAL_ECHO(temperature);
|
||||
SERIAL_ECHO(" ; Target Temp:");
|
||||
SERIAL_ECHO(target_temperature);
|
||||
SERIAL_ECHOLN("");
|
||||
*/
|
||||
if ((target_temperature == 0) || thermal_runaway)
|
||||
{
|
||||
*state = 0;
|
||||
*timer = 0;
|
||||
return;
|
||||
}
|
||||
switch (*state)
|
||||
{
|
||||
case 0: // "Heater Inactive" state
|
||||
if (target_temperature > 0) *state = 1;
|
||||
break;
|
||||
case 1: // "First Heating" state
|
||||
if (temperature >= target_temperature) *state = 2;
|
||||
break;
|
||||
case 2: // "Temperature Stable" state
|
||||
if (temperature >= (target_temperature - hysteresis_degc))
|
||||
{
|
||||
*timer = millis();
|
||||
}
|
||||
else if ( (millis() - *timer) > period_seconds*1000)
|
||||
{
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Thermal Runaway, system stopped! Heater_ID: ");
|
||||
SERIAL_ERRORLN((int)heater_id);
|
||||
LCD_ALERTMESSAGEPGM("THERMAL RUNAWAY");
|
||||
thermal_runaway = true;
|
||||
while(1)
|
||||
{
|
||||
disable_heater();
|
||||
disable_x();
|
||||
disable_y();
|
||||
disable_z();
|
||||
disable_e0();
|
||||
disable_e1();
|
||||
disable_e2();
|
||||
manage_heater();
|
||||
lcd_update();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void disable_heater()
|
||||
{
|
||||
|
@ -154,6 +154,17 @@ void disable_heater();
|
||||
void setWatch();
|
||||
void updatePID();
|
||||
|
||||
#ifdef THERMAL_RUNAWAY_PROTECTION_PERIOD && THERMAL_RUNAWAY_PROTECTION_PERIOD > 0
|
||||
void thermal_runaway_protection(int *state, unsigned long *timer, float temperature, float target_temperature, int heater_id, int period_seconds, int hysteresis_degc);
|
||||
static int thermal_runaway_state_machine[3]; // = {0,0,0};
|
||||
static unsigned long thermal_runaway_timer[3]; // = {0,0,0};
|
||||
static bool thermal_runaway = false;
|
||||
#if TEMP_SENSOR_BED != 0
|
||||
static int thermal_runaway_bed_state_machine;
|
||||
static unsigned long thermal_runaway_bed_timer;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
FORCE_INLINE void autotempShutdown(){
|
||||
#ifdef AUTOTEMP
|
||||
if(autotemp_enabled)
|
||||
|
@ -256,6 +256,8 @@ static void lcd_sdcard_stop()
|
||||
enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
||||
}
|
||||
autotempShutdown();
|
||||
|
||||
cancel_heatup = true;
|
||||
}
|
||||
|
||||
/* Menu implementation */
|
||||
@ -907,9 +909,15 @@ static void lcd_control_retract_menu()
|
||||
MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
|
||||
MENU_ITEM_EDIT(bool, MSG_AUTORETRACT, &autoretract_enabled);
|
||||
MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT, &retract_length, 0, 100);
|
||||
#if EXTRUDERS > 1
|
||||
MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT_SWAP, &retract_length_swap, 0, 100);
|
||||
#endif
|
||||
MENU_ITEM_EDIT(float3, MSG_CONTROL_RETRACTF, &retract_feedrate, 1, 999);
|
||||
MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT_ZLIFT, &retract_zlift, 0, 999);
|
||||
MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT_RECOVER, &retract_recover_length, 0, 100);
|
||||
#if EXTRUDERS > 1
|
||||
MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT_RECOVER_SWAP, &retract_recover_length_swap, 0, 100);
|
||||
#endif
|
||||
MENU_ITEM_EDIT(float3, MSG_CONTROL_RETRACT_RECOVERF, &retract_recover_feedrate, 1, 999);
|
||||
END_MENU();
|
||||
}
|
||||
|
@ -43,6 +43,8 @@
|
||||
extern int absPreheatHPBTemp;
|
||||
extern int absPreheatFanSpeed;
|
||||
|
||||
extern bool cancel_heatup;
|
||||
|
||||
void lcd_buzz(long duration,uint16_t freq);
|
||||
bool lcd_clicked();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user