Make multiple PID parameters a config option
* Adds config parameter `PID_PARAMS_PER_EXTRUDER` - allows single PID parameters to be used where this would be preferable (e.g. dual identical extruders) * When disabled, will use `float Kp, Ki, Kd, Kc;` as before. Preprocessor macros used to switch between. * ultralcd.cpp defines extra menus for extra parameters only where required * M301 reports `e:xx` only if independent pid parameters enabled * EEPROM structure still leaves space for 3 extruders worth, when undef will save single parameter to all extruder positions, but only read the first * Switching off saves approx 330 B with no LCD enabled, 2634B with LCD (RRD) enabled: this is significant. * LCD modifications should be tested.
This commit is contained in:
@ -790,41 +790,43 @@ static void lcd_control_temperature_menu()
|
||||
#ifdef PIDTEMP
|
||||
// set up temp variables - undo the default scaling
|
||||
pid_current_extruder = 0;
|
||||
raw_Ki = unscalePID_i(Ki[0]);
|
||||
raw_Kd = unscalePID_d(Kd[0]);
|
||||
MENU_ITEM_EDIT(float52, MSG_PID_P, &Kp[0], 1, 9990);
|
||||
raw_Ki = unscalePID_i(PID_PARAM(Ki,0));
|
||||
raw_Kd = unscalePID_d(PID_PARAM(Kd,0));
|
||||
MENU_ITEM_EDIT(float52, MSG_PID_P, &PID_PARAM(Kp,0), 1, 9990);
|
||||
// i is typically a small value so allows values below 1
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I, &raw_Ki, 0.01, 9990, copy_and_scalePID_i);
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D, &raw_Kd, 1, 9990, copy_and_scalePID_d);
|
||||
# ifdef PID_ADD_EXTRUSION_RATE
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C, &Kc[0], 1, 9990);
|
||||
# endif//PID_ADD_EXTRUSION_RATE
|
||||
#if EXTRUDERS > 1
|
||||
// set up temp variables - undo the default scaling
|
||||
pid_current_extruder = 1;
|
||||
raw_Ki = unscalePID_i(Ki[1]);
|
||||
raw_Kd = unscalePID_d(Kd[1]);
|
||||
MENU_ITEM_EDIT(float52, MSG_PID_P1, &Kp[1], 1, 9990);
|
||||
// i is typically a small value so allows values below 1
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I1, &raw_Ki, 0.01, 9990, copy_and_scalePID_i);
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D1, &raw_Kd, 1, 9990, copy_and_scalePID_d);
|
||||
# ifdef PID_ADD_EXTRUSION_RATE
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C1, &Kc[1], 1, 9990);
|
||||
# endif//PID_ADD_EXTRUSION_RATE
|
||||
#endif//EXTRUDERS > 1
|
||||
#if EXTRUDERS > 2
|
||||
// set up temp variables - undo the default scaling
|
||||
pid_current_extruder = 2;
|
||||
raw_Ki = unscalePID_i(Ki[2]);
|
||||
raw_Kd = unscalePID_d(Kd[2]);
|
||||
MENU_ITEM_EDIT(float52, MSG_PID_P2, &Kp[2], 1, 9990);
|
||||
// i is typically a small value so allows values below 1
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I2, &raw_Ki, 0.01, 9990, copy_and_scalePID_i);
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D2, &raw_Kd, 1, 9990, copy_and_scalePID_d);
|
||||
# ifdef PID_ADD_EXTRUSION_RATE
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C2, &Kc[2], 1, 9990);
|
||||
# endif//PID_ADD_EXTRUSION_RATE
|
||||
#endif//EXTRUDERS > 2
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C, &PID_PARAM(Kc,0), 1, 9990);
|
||||
#endif//PID_ADD_EXTRUSION_RATE
|
||||
#ifdef PID_PARAMS_PER_EXTRUDER
|
||||
#if EXTRUDERS > 1
|
||||
// set up temp variables - undo the default scaling
|
||||
pid_current_extruder = 0;
|
||||
raw_Ki = unscalePID_i(PID_PARAM(Ki,1));
|
||||
raw_Kd = unscalePID_d(PID_PARAM(Kd,1));
|
||||
MENU_ITEM_EDIT(float52, MSG_PID_P1, &PID_PARAM(Kp,1), 1, 9990);
|
||||
// i is typically a small value so allows values below 1
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I1, &raw_Ki, 0.01, 9990, copy_and_scalePID_i);
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D1, &raw_Kd, 1, 9990, copy_and_scalePID_d);
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C1, &PID_PARAM(Kc,1), 1, 9990);
|
||||
#endif//PID_ADD_EXTRUSION_RATE
|
||||
#endif//EXTRUDERS > 1
|
||||
#if EXTRUDERS > 2
|
||||
// set up temp variables - undo the default scaling
|
||||
pid_current_extruder = 0;
|
||||
raw_Ki = unscalePID_i(PID_PARAM(Ki,2));
|
||||
raw_Kd = unscalePID_d(PID_PARAM(Kd,2));
|
||||
MENU_ITEM_EDIT(float52, MSG_PID_P2, &PID_PARAM(Kp,2), 1, 9990);
|
||||
// i is typically a small value so allows values below 1
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_I2, &raw_Ki, 0.01, 9990, copy_and_scalePID_i);
|
||||
MENU_ITEM_EDIT_CALLBACK(float52, MSG_PID_D2, &raw_Kd, 1, 9990, copy_and_scalePID_d);
|
||||
#ifdef PID_ADD_EXTRUSION_RATE
|
||||
MENU_ITEM_EDIT(float3, MSG_PID_C2, &PID_PARAM(Kc,2), 1, 9990);
|
||||
#endif//PID_ADD_EXTRUSION_RATE
|
||||
#endif//EXTRUDERS > 2
|
||||
#endif // PID_PARAMS_PER_EXTRUDER
|
||||
#endif//PIDTEMP
|
||||
MENU_ITEM(submenu, MSG_PREHEAT_PLA_SETTINGS, lcd_control_temperature_preheat_pla_settings_menu);
|
||||
MENU_ITEM(submenu, MSG_PREHEAT_ABS_SETTINGS, lcd_control_temperature_preheat_abs_settings_menu);
|
||||
@ -1731,7 +1733,7 @@ char *ftostr52(const float &x)
|
||||
void copy_and_scalePID_i()
|
||||
{
|
||||
#ifdef PIDTEMP
|
||||
Ki[pid_current_extruder] = scalePID_i(raw_Ki);
|
||||
PID_PARAM(Ki, pid_current_extruder) = scalePID_i(raw_Ki);
|
||||
updatePID();
|
||||
#endif
|
||||
}
|
||||
@ -1741,7 +1743,7 @@ void copy_and_scalePID_i()
|
||||
void copy_and_scalePID_d()
|
||||
{
|
||||
#ifdef PIDTEMP
|
||||
Kd[pid_current_extruder] = scalePID_d(raw_Kd);
|
||||
PID_PARAM(Kd, pid_current_extruder) = scalePID_d(raw_Kd);
|
||||
updatePID();
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user