Added redundant temp sensor
This commit is contained in:
		@@ -88,10 +88,14 @@
 | 
			
		||||
// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan) (1k pullup)
 | 
			
		||||
 | 
			
		||||
#define TEMP_SENSOR_0 -1
 | 
			
		||||
#define TEMP_SENSOR_1 0
 | 
			
		||||
#define TEMP_SENSOR_1 -1
 | 
			
		||||
#define TEMP_SENSOR_2 0
 | 
			
		||||
#define TEMP_SENSOR_BED 0
 | 
			
		||||
 | 
			
		||||
// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
 | 
			
		||||
#define TEMP_SENSOR_1_AS_REDUNDANT 
 | 
			
		||||
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 5
 | 
			
		||||
 | 
			
		||||
// 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
 | 
			
		||||
 
 | 
			
		||||
@@ -367,5 +367,8 @@ const unsigned int dropsegments=5; //everything with less than this number of st
 | 
			
		||||
  #undef BED_MAXTEMP
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
 | 
			
		||||
  #error "You cannot use  TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif //__CONFIGURATION_ADV_H
 | 
			
		||||
 
 | 
			
		||||
@@ -40,10 +40,13 @@
 | 
			
		||||
int target_temperature[EXTRUDERS] = { 0 };
 | 
			
		||||
int target_temperature_bed = 0;
 | 
			
		||||
int current_temperature_raw[EXTRUDERS] = { 0 };
 | 
			
		||||
float current_temperature[EXTRUDERS] = { 0 };
 | 
			
		||||
float current_temperature[EXTRUDERS] = { 0.0 };
 | 
			
		||||
int current_temperature_bed_raw = 0;
 | 
			
		||||
float current_temperature_bed = 0;
 | 
			
		||||
 | 
			
		||||
float current_temperature_bed = 0.0;
 | 
			
		||||
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
 | 
			
		||||
  int redundant_temperature_raw = 0;
 | 
			
		||||
  float redundant_temperature = 0.0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef PIDTEMP
 | 
			
		||||
  float Kp=DEFAULT_Kp;
 | 
			
		||||
  float Ki=(DEFAULT_Ki*PID_dT);
 | 
			
		||||
@@ -157,28 +160,28 @@ void PID_autotune(float temp, int extruder, int ncycles)
 | 
			
		||||
  float Kp, Ki, Kd;
 | 
			
		||||
  float max = 0, min = 10000;
 | 
			
		||||
 | 
			
		||||
	if ((extruder > EXTRUDERS)
 | 
			
		||||
  if ((extruder > EXTRUDERS)
 | 
			
		||||
  #if (TEMP_BED_PIN <= -1)
 | 
			
		||||
		||(extruder < 0)
 | 
			
		||||
	#endif
 | 
			
		||||
	){
 | 
			
		||||
  	SERIAL_ECHOLN("PID Autotune failed. Bad extruder number.");
 | 
			
		||||
  	return;
 | 
			
		||||
	}
 | 
			
		||||
       ||(extruder < 0)
 | 
			
		||||
  #endif
 | 
			
		||||
       ){
 | 
			
		||||
          SERIAL_ECHOLN("PID Autotune failed. Bad extruder number.");
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
	
 | 
			
		||||
  SERIAL_ECHOLN("PID Autotune start");
 | 
			
		||||
  
 | 
			
		||||
  disable_heater(); // switch off all heaters.
 | 
			
		||||
 | 
			
		||||
	if (extruder<0)
 | 
			
		||||
	{
 | 
			
		||||
	 	soft_pwm_bed = (MAX_BED_POWER)/2;
 | 
			
		||||
		bias = d = (MAX_BED_POWER)/2;
 | 
			
		||||
  }
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
	  soft_pwm[extruder] = (PID_MAX)/2;
 | 
			
		||||
		bias = d = (PID_MAX)/2;
 | 
			
		||||
  if (extruder<0)
 | 
			
		||||
  {
 | 
			
		||||
     soft_pwm_bed = (MAX_BED_POWER)/2;
 | 
			
		||||
     bias = d = (MAX_BED_POWER)/2;
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
   {
 | 
			
		||||
     soft_pwm[extruder] = (PID_MAX)/2;
 | 
			
		||||
     bias = d = (PID_MAX)/2;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -196,10 +199,10 @@ void PID_autotune(float temp, int extruder, int ncycles)
 | 
			
		||||
      if(heating == true && input > temp) {
 | 
			
		||||
        if(millis() - t2 > 5000) { 
 | 
			
		||||
          heating=false;
 | 
			
		||||
					if (extruder<0)
 | 
			
		||||
						soft_pwm_bed = (bias - d) >> 1;
 | 
			
		||||
					else
 | 
			
		||||
						soft_pwm[extruder] = (bias - d) >> 1;
 | 
			
		||||
          if (extruder<0)
 | 
			
		||||
            soft_pwm_bed = (bias - d) >> 1;
 | 
			
		||||
          else
 | 
			
		||||
            soft_pwm[extruder] = (bias - d) >> 1;
 | 
			
		||||
          t1=millis();
 | 
			
		||||
          t_high=t1 - t2;
 | 
			
		||||
          max=temp;
 | 
			
		||||
@@ -250,10 +253,10 @@ void PID_autotune(float temp, int extruder, int ncycles)
 | 
			
		||||
              */
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
					if (extruder<0)
 | 
			
		||||
						soft_pwm_bed = (bias + d) >> 1;
 | 
			
		||||
					else
 | 
			
		||||
						soft_pwm[extruder] = (bias + d) >> 1;
 | 
			
		||||
          if (extruder<0)
 | 
			
		||||
            soft_pwm_bed = (bias + d) >> 1;
 | 
			
		||||
          else
 | 
			
		||||
            soft_pwm[extruder] = (bias + d) >> 1;
 | 
			
		||||
          cycles++;
 | 
			
		||||
          min=temp;
 | 
			
		||||
        }
 | 
			
		||||
@@ -264,14 +267,14 @@ void PID_autotune(float temp, int extruder, int ncycles)
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    if(millis() - temp_millis > 2000) {
 | 
			
		||||
			int p;
 | 
			
		||||
			if (extruder<0){
 | 
			
		||||
	      p=soft_pwm_bed;       
 | 
			
		||||
	      SERIAL_PROTOCOLPGM("ok B:");
 | 
			
		||||
			}else{
 | 
			
		||||
	      p=soft_pwm[extruder];       
 | 
			
		||||
	      SERIAL_PROTOCOLPGM("ok T:");
 | 
			
		||||
			}
 | 
			
		||||
      int p;
 | 
			
		||||
      if (extruder<0){
 | 
			
		||||
        p=soft_pwm_bed;       
 | 
			
		||||
        SERIAL_PROTOCOLPGM("ok B:");
 | 
			
		||||
      }else{
 | 
			
		||||
        p=soft_pwm[extruder];       
 | 
			
		||||
        SERIAL_PROTOCOLPGM("ok T:");
 | 
			
		||||
      }
 | 
			
		||||
			
 | 
			
		||||
      SERIAL_PROTOCOL(input);   
 | 
			
		||||
      SERIAL_PROTOCOLPGM(" @:");
 | 
			
		||||
@@ -471,7 +474,19 @@ void manage_heater()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    #ifdef TEMP_SENSOR_1_AS_REDUNDANT
 | 
			
		||||
      if(fabs(current_temperature[1] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) {
 | 
			
		||||
        disable_heater();
 | 
			
		||||
        if(IsStopped() == false) {
 | 
			
		||||
          SERIAL_ERROR_START;
 | 
			
		||||
          SERIAL_ERRORLNPGM("Extruder switched off. Temperature difference between temp sensors is to high !");
 | 
			
		||||
          LCD_ALERTMESSAGEPGM("Err: REDUNDANT TEMP ERROR");
 | 
			
		||||
        }
 | 
			
		||||
        #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
 | 
			
		||||
          Stop();
 | 
			
		||||
        #endif
 | 
			
		||||
      }
 | 
			
		||||
    #endif
 | 
			
		||||
  } // End extruder for loop
 | 
			
		||||
 | 
			
		||||
  #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
 | 
			
		||||
@@ -644,7 +659,9 @@ static void updateTemperaturesFromRawValues()
 | 
			
		||||
        current_temperature[e] = analog2temp(current_temperature_raw[e], e);
 | 
			
		||||
    }
 | 
			
		||||
    current_temperature_bed = analog2tempBed(current_temperature_bed_raw);
 | 
			
		||||
 | 
			
		||||
    #ifdef TEMP_SENSOR_1_AS_REDUNDANT
 | 
			
		||||
      redundant_temperature =analog2temp(redundant_temperature_raw, 1);
 | 
			
		||||
    #endif
 | 
			
		||||
    //Reset the watchdog after we know we have a temperature measurement.
 | 
			
		||||
    watchdog_reset();
 | 
			
		||||
 | 
			
		||||
@@ -1145,6 +1162,9 @@ ISR(TIMER0_COMPB_vect)
 | 
			
		||||
#if EXTRUDERS > 1
 | 
			
		||||
      current_temperature_raw[1] = raw_temp_1_value;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
 | 
			
		||||
      redundant_temperature_raw = raw_temp_1_value;
 | 
			
		||||
#endif
 | 
			
		||||
#if EXTRUDERS > 2
 | 
			
		||||
      current_temperature_raw[2] = raw_temp_2_value;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,9 @@ extern int target_temperature[EXTRUDERS];
 | 
			
		||||
extern float current_temperature[EXTRUDERS];
 | 
			
		||||
extern int target_temperature_bed;
 | 
			
		||||
extern float current_temperature_bed;
 | 
			
		||||
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
 | 
			
		||||
  extern float redundant_temperature;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef PIDTEMP
 | 
			
		||||
  extern float Kp,Ki,Kd,Kc;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user