Replaced Kill by Stop. If the printer is stopped. Fix the error and use M999 to restart.

Moved the PID_dT in the Ki and Kd calculation from the configuration.h to temperature.cpp
This commit is contained in:
Erik van der Zalm 2012-03-25 14:36:51 +02:00
parent 8b785f75a6
commit 63aec3c56e
5 changed files with 86 additions and 38 deletions

View file

@ -29,6 +29,7 @@
// Ultimaker = 7 // Ultimaker = 7
// Teensylu = 8 // Teensylu = 8
// Gen3+ =9 // Gen3+ =9
#ifndef MOTHERBOARD #ifndef MOTHERBOARD
#define MOTHERBOARD 7 #define MOTHERBOARD 7
#endif #endif
@ -88,9 +89,9 @@
// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it // If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it
// Ultimaker // Ultimaker
#define DEFAULT_Kp 22.2 #define DEFAULT_Kp 22.2
#define DEFAULT_Ki (1.08*PID_dT) #define DEFAULT_Ki 1.08
#define DEFAULT_Kd (114/PID_dT) #define DEFAULT_Kd 114
// Makergear // Makergear
// #define DEFAULT_Kp 7.0 // #define DEFAULT_Kp 7.0
@ -98,9 +99,9 @@
// #define DEFAULT_Kd 12 // #define DEFAULT_Kd 12
// Mendel Parts V9 on 12V // Mendel Parts V9 on 12V
// #define DEFAULT_Kp 63.0 // #define DEFAULT_Kp 63.0
// #define DEFAULT_Ki (2.25*PID_dT) // #define DEFAULT_Ki 2.25
// #define DEFAULT_Kd (440/PID_dT) // #define DEFAULT_Kd 440
#endif // PIDTEMP #endif // PIDTEMP
//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit //this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
@ -202,7 +203,7 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
#define ULTRA_LCD #define ULTRA_LCD
#define LCD_WIDTH 20 #define LCD_WIDTH 20
#define LCD_HEIGHT 4 #define LCD_HEIGHT 4
// Preheat Constants // Preheat Constants
#define PLA_PREHEAT_HOTEND_TEMP 180 #define PLA_PREHEAT_HOTEND_TEMP 180
#define PLA_PREHEAT_HPB_TEMP 70 #define PLA_PREHEAT_HPB_TEMP 70
@ -215,7 +216,7 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
#else //no panel but just lcd #else //no panel but just lcd
#ifdef ULTRA_LCD #ifdef ULTRA_LCD
#define LCD_WIDTH 16 #define LCD_WIDTH 16
#define LCD_HEIGHT 2 #define LCD_HEIGHT 2
#endif #endif
#endif #endif

View file

@ -162,6 +162,9 @@ void ClearToSend();
void get_coordinates(); void get_coordinates();
void prepare_move(); void prepare_move();
void kill(); void kill();
void Stop();
bool IsStopped();
void enquecommand(const char *cmd); //put an ascii command at the end of the current buffer. void enquecommand(const char *cmd); //put an ascii command at the end of the current buffer.
void prepare_arc_move(char isclockwise); void prepare_arc_move(char isclockwise);

View file

@ -110,6 +110,7 @@
// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to. // 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) // M503 - print the current settings (from memory not from eeprom)
// M303 - PID relay autotune S<temperature> sets the target temperature. (default target temperature = 150C) // M303 - PID relay autotune S<temperature> sets the target temperature. (default target temperature = 150C)
// M999 - Restart after being stopped by error
//Stepper Movement Variables //Stepper Movement Variables
@ -135,6 +136,7 @@ float add_homeing[3]={0,0,0};
uint8_t active_extruder = 0; uint8_t active_extruder = 0;
unsigned char FanSpeed=0; unsigned char FanSpeed=0;
//=========================================================================== //===========================================================================
//=============================private variables============================= //=============================private variables=============================
//=========================================================================== //===========================================================================
@ -143,7 +145,7 @@ static float destination[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0};
static float offset[3] = {0.0, 0.0, 0.0}; static float offset[3] = {0.0, 0.0, 0.0};
static bool home_all_axis = true; static bool home_all_axis = true;
static float feedrate = 1500.0, next_feedrate, saved_feedrate; static float feedrate = 1500.0, next_feedrate, saved_feedrate;
static long gcode_N, gcode_LastN; static long gcode_N, gcode_LastN, Stopped_gcode_LastN = 0;
static bool relative_mode = false; //Determines Absolute or Relative Coordinates static bool relative_mode = false; //Determines Absolute or Relative Coordinates
static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode. static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
@ -174,6 +176,7 @@ static unsigned long stoptime=0;
static uint8_t tmp_extruder; static uint8_t tmp_extruder;
bool Stopped=false;
//=========================================================================== //===========================================================================
//=============================ROUTINES============================= //=============================ROUTINES=============================
@ -415,11 +418,17 @@ void get_command()
case 1: case 1:
case 2: case 2:
case 3: case 3:
#ifdef SDSUPPORT if(Stopped == false) { // If printer is stopped by an error the G[0-3] codes are ignored.
if(card.saving) #ifdef SDSUPPORT
break; if(card.saving)
#endif //SDSUPPORT break;
SERIAL_PROTOCOLLNPGM(MSG_OK); #endif //SDSUPPORT
SERIAL_PROTOCOLLNPGM(MSG_OK);
}
else {
SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
LCD_MESSAGEPGM(MSG_STOPPED);
}
break; break;
default: default:
break; break;
@ -547,19 +556,25 @@ void process_commands()
{ {
case 0: // G0 -> G1 case 0: // G0 -> G1
case 1: // G1 case 1: // G1
get_coordinates(); // For X Y Z E F if(Stopped == false) {
prepare_move(); get_coordinates(); // For X Y Z E F
//ClearToSend(); prepare_move();
return; //ClearToSend();
return;
}
//break; //break;
case 2: // G2 - CW ARC case 2: // G2 - CW ARC
get_arc_coordinates(); if(Stopped == false) {
prepare_arc_move(true); get_arc_coordinates();
return; prepare_arc_move(true);
return;
}
case 3: // G3 - CCW ARC case 3: // G3 - CCW ARC
get_arc_coordinates(); if(Stopped == false) {
prepare_arc_move(false); get_arc_coordinates();
return; prepare_arc_move(false);
return;
}
case 4: // G4 dwell case 4: // G4 dwell
LCD_MESSAGEPGM(MSG_DWELL); LCD_MESSAGEPGM(MSG_DWELL);
codenum = 0; codenum = 0;
@ -972,6 +987,7 @@ void process_commands()
#if (PS_ON_PIN > -1) #if (PS_ON_PIN > -1)
case 80: // M80 - ATX Power On case 80: // M80 - ATX Power On
SET_OUTPUT(PS_ON_PIN); //GND SET_OUTPUT(PS_ON_PIN); //GND
WRITE(PS_ON_PIN, LOW);
break; break;
#endif #endif
@ -1236,7 +1252,11 @@ void process_commands()
EEPROM_printSettings(); EEPROM_printSettings();
} }
break; break;
case 999: // Restart after being stopped
Stopped = false;
gcode_LastN = Stopped_gcode_LastN;
FlushSerialRequestResend();
break;
} }
} }
@ -1438,4 +1458,18 @@ void kill()
while(1); // Wait for reset while(1); // Wait for reset
} }
void Stop()
{
disable_heater();
if(Stopped == false) {
Stopped = true;
Stopped_gcode_LastN = gcode_LastN; // Save last g_code for restart
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
LCD_MESSAGEPGM(MSG_STOPPED);
}
}
bool IsStopped() { return Stopped; };

View file

@ -78,6 +78,7 @@
#define MSG_NO_MOVE "No move." #define MSG_NO_MOVE "No move."
#define MSG_PART_RELEASE "Partial Release" #define MSG_PART_RELEASE "Partial Release"
#define MSG_KILLED "KILLED. " #define MSG_KILLED "KILLED. "
#define MSG_STOPPED "STOPPED. "
#define MSG_PREHEAT_PLA " Preheat PLA" #define MSG_PREHEAT_PLA " Preheat PLA"
#define MSG_PREHEAT_ABS " Preheat ABS" #define MSG_PREHEAT_ABS " Preheat ABS"
#define MSG_STEPPER_RELEASED "Released." #define MSG_STEPPER_RELEASED "Released."
@ -116,6 +117,7 @@
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\n" #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\n"
#define MSG_COUNT_X " Count X:" #define MSG_COUNT_X " Count X:"
#define MSG_ERR_KILLED "Printer halted. kill() called !!" #define MSG_ERR_KILLED "Printer halted. kill() called !!"
#define MSG_ERR_STOPPED "Printer stopped deu to errors. Fix the error and use M999 to restart!. (Temperature is reset. Set it before restarting)"
#define MSG_RESEND "Resend:" #define MSG_RESEND "Resend:"
#define MSG_UNKNOWN_COMMAND "Unknown command:\"" #define MSG_UNKNOWN_COMMAND "Unknown command:\""
#define MSG_ACTIVE_EXTRUDER "Active Extruder: " #define MSG_ACTIVE_EXTRUDER "Active Extruder: "
@ -221,6 +223,7 @@
#define MSG_NO_MOVE "No move." #define MSG_NO_MOVE "No move."
#define MSG_PART_RELEASE "Partial Release" #define MSG_PART_RELEASE "Partial Release"
#define MSG_KILLED "KILLED. " #define MSG_KILLED "KILLED. "
#define MSG_STOPPED "STOPPED. "
#define MSG_PREHEAT_PLA " Preheat PLA" #define MSG_PREHEAT_PLA " Preheat PLA"
#define MSG_PREHEAT_ABS " Preheat ABS" #define MSG_PREHEAT_ABS " Preheat ABS"
#define MSG_STEPPER_RELEASED "Released." #define MSG_STEPPER_RELEASED "Released."
@ -259,6 +262,7 @@
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\n" #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\n"
#define MSG_COUNT_X " Count X:" #define MSG_COUNT_X " Count X:"
#define MSG_ERR_KILLED "Printer halted. kill() called !!" #define MSG_ERR_KILLED "Printer halted. kill() called !!"
#define MSG_ERR_STOPPED "Printer stopped deu to errors. Fix the error and use M999 to restart!"
#define MSG_RESEND "Resend:" #define MSG_RESEND "Resend:"
#define MSG_UNKNOWN_COMMAND "Unknown command:\"" #define MSG_UNKNOWN_COMMAND "Unknown command:\""
#define MSG_ACTIVE_EXTRUDER "Active Extruder: " #define MSG_ACTIVE_EXTRUDER "Active Extruder: "

View file

@ -51,8 +51,8 @@ int current_raw_bed = 0;
float pid_setpoint[EXTRUDERS] = { 0.0 }; float pid_setpoint[EXTRUDERS] = { 0.0 };
float Kp=DEFAULT_Kp; float Kp=DEFAULT_Kp;
float Ki=DEFAULT_Ki; float Ki=(DEFAULT_Ki*PID_dT);
float Kd=DEFAULT_Kd; float Kd=(DEFAULT_Kd/PID_dT);
#ifdef PID_ADD_EXTRUSION_RATE #ifdef PID_ADD_EXTRUSION_RATE
float Kc=DEFAULT_Kc; float Kc=DEFAULT_Kc;
#endif #endif
@ -708,22 +708,28 @@ void disable_heater()
void max_temp_error(uint8_t e) { void max_temp_error(uint8_t e) {
digitalWrite(heater_pin_map[e], 0); digitalWrite(heater_pin_map[e], 0);
SERIAL_ERROR_START; if(IsStopped() == false) {
SERIAL_ERRORLN(e); SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !"); SERIAL_ERRORLN(e);
SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !");
}
} }
void min_temp_error(uint8_t e) { void min_temp_error(uint8_t e) {
digitalWrite(heater_pin_map[e], 0); digitalWrite(heater_pin_map[e], 0);
SERIAL_ERROR_START; if(IsStopped() == false) {
SERIAL_ERRORLN(e); SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !"); SERIAL_ERRORLN(e);
SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !");
}
} }
void bed_max_temp_error(void) { void bed_max_temp_error(void) {
digitalWrite(HEATER_BED_PIN, 0); digitalWrite(HEATER_BED_PIN, 0);
SERIAL_ERROR_START; if(IsStopped() == false) {
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!"); SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
}
} }
#define HEAT_INTERVAL 250 #define HEAT_INTERVAL 250
@ -956,7 +962,7 @@ ISR(TIMER0_COMPB_vect)
max_temp_error(e); max_temp_error(e);
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
{ {
kill();; Stop();;
} }
#endif #endif
} }
@ -965,7 +971,7 @@ ISR(TIMER0_COMPB_vect)
min_temp_error(e); min_temp_error(e);
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
{ {
kill(); Stop();
} }
#endif #endif
} }
@ -975,7 +981,7 @@ ISR(TIMER0_COMPB_vect)
if(current_raw_bed >= bed_maxttemp) { if(current_raw_bed >= bed_maxttemp) {
target_raw_bed = 0; target_raw_bed = 0;
bed_max_temp_error(); bed_max_temp_error();
kill(); Stop();
} }
#endif #endif
} }