Merge pull request #1344 from grob6000/independent_pid
Independent PID parameters for each extruder
This commit is contained in:
@ -3196,30 +3196,52 @@ Sigma_Exit:
|
||||
#endif // M300
|
||||
|
||||
#ifdef PIDTEMP
|
||||
case 301: // M301
|
||||
{
|
||||
if(code_seen('P')) Kp = code_value();
|
||||
if(code_seen('I')) Ki = scalePID_i(code_value());
|
||||
if(code_seen('D')) Kd = scalePID_d(code_value());
|
||||
case 301: // M301
|
||||
{
|
||||
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
if(code_seen('C')) Kc = code_value();
|
||||
#endif
|
||||
// multi-extruder PID patch: M301 updates or prints a single extruder's PID values
|
||||
// default behaviour (omitting E parameter) is to update for extruder 0 only
|
||||
int e = 0; // extruder being updated
|
||||
if (code_seen('E'))
|
||||
{
|
||||
e = (int)code_value();
|
||||
}
|
||||
if (e < EXTRUDERS) // catch bad input value
|
||||
{
|
||||
|
||||
if (code_seen('P')) PID_PARAM(Kp,e) = code_value();
|
||||
if (code_seen('I')) PID_PARAM(Ki,e) = scalePID_i(code_value());
|
||||
if (code_seen('D')) PID_PARAM(Kd,e) = scalePID_d(code_value());
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
if (code_seen('C')) PID_PARAM(Kc,e) = code_value();
|
||||
#endif
|
||||
|
||||
updatePID();
|
||||
SERIAL_PROTOCOL(MSG_OK);
|
||||
#ifdef PID_PARAMS_PER_EXTRUDER
|
||||
SERIAL_PROTOCOL(" e:"); // specify extruder in serial output
|
||||
SERIAL_PROTOCOL(e);
|
||||
#endif // PID_PARAMS_PER_EXTRUDER
|
||||
SERIAL_PROTOCOL(" p:");
|
||||
SERIAL_PROTOCOL(PID_PARAM(Kp,e));
|
||||
SERIAL_PROTOCOL(" i:");
|
||||
SERIAL_PROTOCOL(unscalePID_i(PID_PARAM(Ki,e)));
|
||||
SERIAL_PROTOCOL(" d:");
|
||||
SERIAL_PROTOCOL(unscalePID_d(PID_PARAM(Kd,e)));
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
SERIAL_PROTOCOL(" c:");
|
||||
//Kc does not have scaling applied above, or in resetting defaults
|
||||
SERIAL_PROTOCOL(PID_PARAM(Kc,e));
|
||||
#endif
|
||||
SERIAL_PROTOCOLLN("");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLN(MSG_INVALID_EXTRUDER);
|
||||
}
|
||||
|
||||
updatePID();
|
||||
SERIAL_PROTOCOL(MSG_OK);
|
||||
SERIAL_PROTOCOL(" p:");
|
||||
SERIAL_PROTOCOL(Kp);
|
||||
SERIAL_PROTOCOL(" i:");
|
||||
SERIAL_PROTOCOL(unscalePID_i(Ki));
|
||||
SERIAL_PROTOCOL(" d:");
|
||||
SERIAL_PROTOCOL(unscalePID_d(Kd));
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
SERIAL_PROTOCOL(" c:");
|
||||
//Kc does not have scaling applied above, or in resetting defaults
|
||||
SERIAL_PROTOCOL(Kc);
|
||||
#endif
|
||||
SERIAL_PROTOCOLLN("");
|
||||
}
|
||||
break;
|
||||
#endif //PIDTEMP
|
||||
|
Reference in New Issue
Block a user