PID_ADD_EXTRUSION_RATE based on MarlinKimbra
This commit is contained in:
parent
92ac133f2b
commit
0c7c45063b
|
@ -417,19 +417,29 @@ float Temperature::get_pid_output(int e) {
|
|||
|
||||
pid_output = pTerm[e] + iTerm[e] - dTerm[e];
|
||||
|
||||
#if ENABLED(SINGLENOZZLE)
|
||||
#define _NOZZLE_TEST true
|
||||
#define _NOZZLE_EXTRUDER active_extruder
|
||||
#define _CTERM_INDEX 0
|
||||
#else
|
||||
#define _NOZZLE_TEST e == active_extruder
|
||||
#define _NOZZLE_EXTRUDER e
|
||||
#define _CTERM_INDEX e
|
||||
#endif
|
||||
|
||||
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
||||
cTerm[e] = 0;
|
||||
if (e == active_extruder) {
|
||||
cTerm[_CTERM_INDEX] = 0;
|
||||
if (_NOZZLE_TEST) {
|
||||
long e_position = stepper.position(E_AXIS);
|
||||
if (e_position > last_position[e]) {
|
||||
lpq[lpq_ptr++] = e_position - last_position[e];
|
||||
last_position[e] = e_position;
|
||||
if (e_position > last_position[_NOZZLE_EXTRUDER]) {
|
||||
lpq[lpq_ptr++] = e_position - last_position[_NOZZLE_EXTRUDER];
|
||||
last_position[_NOZZLE_EXTRUDER] = e_position;
|
||||
}
|
||||
else {
|
||||
lpq[lpq_ptr++] = 0;
|
||||
}
|
||||
if (lpq_ptr >= lpq_len) lpq_ptr = 0;
|
||||
cTerm[e] = (lpq[lpq_ptr] / planner.axis_steps_per_unit[E_AXIS]) * PID_PARAM(Kc, e);
|
||||
cTerm[_CTERM_INDEX] = (lpq[lpq_ptr] / planner.axis_steps_per_unit[E_AXIS]) * PID_PARAM(Kc, e);
|
||||
pid_output += cTerm[e];
|
||||
}
|
||||
#endif //PID_ADD_EXTRUSION_RATE
|
||||
|
|
Loading…
Reference in a new issue