diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 6a48635..2d890b7 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -104,11 +104,11 @@ // PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain // usually further manual tunine is necessary. - #define PID_CRITIAL_GAIN 3000 - #define PID_SWING_AT_CRITIAL 45 //seconds + #define PID_CRITIAL_GAIN 50 + #define PID_SWING_AT_CRITIAL 47 //seconds - #define PID_PI //no differentail term - //#define PID_PID //normal PID + //#define PID_PI //no differentail term + #define PID_PID //normal PID #ifdef PID_PID //PID according to Ziegler-Nichols method diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 7ef5399..9f84f6c 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -902,24 +902,28 @@ inline void process_commands() #ifdef PIDTEMP case 301: // M301 - if(code_seen('P')) Kp = code_value(); - if(code_seen('I')) Ki = code_value()*PID_dT; - if(code_seen('D')) Kd = code_value()/PID_dT; - #ifdef PID_ADD_EXTRUSION_RATE - if(code_seen('C')) Kc = code_value(); - #endif - SERIAL_PROTOCOL("ok p:"); - SERIAL_PROTOCOL(Kp); - SERIAL_PROTOCOL(" i:"); - SERIAL_PROTOCOL(Ki/PID_dT); - SERIAL_PROTOCOL(" d:"); - SERIAL_PROTOCOL(Kd*PID_dT); - #ifdef PID_ADD_EXTRUSION_RATE - SERIAL_PROTOCOL(" c:"); - SERIAL_PROTOCOL(Kc*PID_dT); - #endif - SERIAL_PROTOCOLLN(""); - + { + + + if(code_seen('P')) Kp = code_value(); + if(code_seen('I')) Ki = code_value()*PID_dT; + if(code_seen('D')) Kd = code_value()/PID_dT; + #ifdef PID_ADD_EXTRUSION_RATE + if(code_seen('C')) Kc = code_value(); + #endif + updatePID(); + SERIAL_PROTOCOL("ok p:"); + SERIAL_PROTOCOL(Kp); + SERIAL_PROTOCOL(" i:"); + SERIAL_PROTOCOL(Ki/PID_dT); + SERIAL_PROTOCOL(" d:"); + SERIAL_PROTOCOL(Kd*PID_dT); + #ifdef PID_ADD_EXTRUSION_RATE + SERIAL_PROTOCOL(" c:"); + SERIAL_PROTOCOL(Kc*PID_dT); + #endif + SERIAL_PROTOCOLLN(""); + } break; #endif //PIDTEMP case 400: // finish all moves diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 3e6edee..89ee47d 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -114,6 +114,13 @@ static unsigned long previous_millis_heater, previous_millis_bed_heater; //=============================functions ============================ //=========================================================================== +void updatePID() +{ +#ifdef PIDTEMP + temp_iState_max = PID_INTEGRAL_DRIVE_MAX / Ki; +#endif +} + void manage_heater() { #ifdef USE_WATCHDOG diff --git a/Marlin/temperature.h b/Marlin/temperature.h index 9c4b59a..0f0de98 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -87,6 +87,7 @@ inline bool isCoolingBed() {return target_raw[TEMPSENSOR_BED] < current_raw[TEMP void disable_heater(); void setWatch(); +void updatePID(); #endif