Browse Source

fixed bug with adjusting ki in realtime.

pull/1/head
Bernhard Kubicek 13 years ago
parent
commit
c57906b627
  1. 8
      Marlin/Configuration.h
  2. 40
      Marlin/Marlin.pde
  3. 7
      Marlin/temperature.cpp
  4. 1
      Marlin/temperature.h

8
Marlin/Configuration.h

@ -95,11 +95,11 @@
// PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain // PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain
// usually further manual tunine is necessary. // usually further manual tunine is necessary.
#define PID_CRITIAL_GAIN 3000 #define PID_CRITIAL_GAIN 50
#define PID_SWING_AT_CRITIAL 45 //seconds #define PID_SWING_AT_CRITIAL 47 //seconds
#define PID_PI //no differentail term //#define PID_PI //no differentail term
//#define PID_PID //normal PID #define PID_PID //normal PID
#ifdef PID_PID #ifdef PID_PID
//PID according to Ziegler-Nichols method //PID according to Ziegler-Nichols method

40
Marlin/Marlin.pde

@ -898,24 +898,28 @@ inline void process_commands()
#ifdef PIDTEMP #ifdef PIDTEMP
case 301: // M301 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('P')) Kp = code_value();
if(code_seen('C')) Kc = code_value(); if(code_seen('I')) Ki = code_value()*PID_dT;
#endif if(code_seen('D')) Kd = code_value()/PID_dT;
SERIAL_PROTOCOL("ok p:"); #ifdef PID_ADD_EXTRUSION_RATE
SERIAL_PROTOCOL(Kp); if(code_seen('C')) Kc = code_value();
SERIAL_PROTOCOL(" i:"); #endif
SERIAL_PROTOCOL(Ki/PID_dT); updatePID();
SERIAL_PROTOCOL(" d:"); SERIAL_PROTOCOL("ok p:");
SERIAL_PROTOCOL(Kd*PID_dT); SERIAL_PROTOCOL(Kp);
#ifdef PID_ADD_EXTRUSION_RATE SERIAL_PROTOCOL(" i:");
SERIAL_PROTOCOL(" c:"); SERIAL_PROTOCOL(Ki/PID_dT);
SERIAL_PROTOCOL(Kc*PID_dT); SERIAL_PROTOCOL(" d:");
#endif SERIAL_PROTOCOL(Kd*PID_dT);
SERIAL_PROTOCOLLN(""); #ifdef PID_ADD_EXTRUSION_RATE
SERIAL_PROTOCOL(" c:");
SERIAL_PROTOCOL(Kc*PID_dT);
#endif
SERIAL_PROTOCOLLN("");
}
break; break;
#endif //PIDTEMP #endif //PIDTEMP
case 400: // finish all moves case 400: // finish all moves

7
Marlin/temperature.cpp

@ -111,6 +111,13 @@ static unsigned long previous_millis_heater, previous_millis_bed_heater;
//=============================functions ============================ //=============================functions ============================
//=========================================================================== //===========================================================================
void updatePID()
{
#ifdef PIDTEMP
temp_iState_max = PID_INTEGRAL_DRIVE_MAX / Ki;
#endif
}
void manage_heater() void manage_heater()
{ {
#ifdef USE_WATCHDOG #ifdef USE_WATCHDOG

1
Marlin/temperature.h

@ -87,6 +87,7 @@ inline bool isCoolingBed() {return target_raw[TEMPSENSOR_BED] < current_raw[TEMP
void disable_heater(); void disable_heater();
void setWatch(); void setWatch();
void updatePID();
#endif #endif

Loading…
Cancel
Save