fixed bug with adjusting ki in realtime.
This commit is contained in:
parent
9980ceb4a3
commit
c57906b627
|
@ -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
|
||||||
|
|
|
@ -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('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;
|
break;
|
||||||
#endif //PIDTEMP
|
#endif //PIDTEMP
|
||||||
case 400: // finish all moves
|
case 400: // finish all moves
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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…
Reference in a new issue