|
@@ -417,19 +417,29 @@ float Temperature::get_pid_output(int e) {
|
417
|
417
|
|
418
|
418
|
pid_output = pTerm[e] + iTerm[e] - dTerm[e];
|
419
|
419
|
|
|
420
|
+ #if ENABLED(SINGLENOZZLE)
|
|
421
|
+ #define _NOZZLE_TEST true
|
|
422
|
+ #define _NOZZLE_EXTRUDER active_extruder
|
|
423
|
+ #define _CTERM_INDEX 0
|
|
424
|
+ #else
|
|
425
|
+ #define _NOZZLE_TEST e == active_extruder
|
|
426
|
+ #define _NOZZLE_EXTRUDER e
|
|
427
|
+ #define _CTERM_INDEX e
|
|
428
|
+ #endif
|
|
429
|
+
|
420
|
430
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
421
|
|
- cTerm[e] = 0;
|
422
|
|
- if (e == active_extruder) {
|
|
431
|
+ cTerm[_CTERM_INDEX] = 0;
|
|
432
|
+ if (_NOZZLE_TEST) {
|
423
|
433
|
long e_position = stepper.position(E_AXIS);
|
424
|
|
- if (e_position > last_position[e]) {
|
425
|
|
- lpq[lpq_ptr++] = e_position - last_position[e];
|
426
|
|
- last_position[e] = e_position;
|
|
434
|
+ if (e_position > last_position[_NOZZLE_EXTRUDER]) {
|
|
435
|
+ lpq[lpq_ptr++] = e_position - last_position[_NOZZLE_EXTRUDER];
|
|
436
|
+ last_position[_NOZZLE_EXTRUDER] = e_position;
|
427
|
437
|
}
|
428
|
438
|
else {
|
429
|
439
|
lpq[lpq_ptr++] = 0;
|
430
|
440
|
}
|
431
|
441
|
if (lpq_ptr >= lpq_len) lpq_ptr = 0;
|
432
|
|
- cTerm[e] = (lpq[lpq_ptr] / planner.axis_steps_per_unit[E_AXIS]) * PID_PARAM(Kc, e);
|
|
442
|
+ cTerm[_CTERM_INDEX] = (lpq[lpq_ptr] / planner.axis_steps_per_unit[E_AXIS]) * PID_PARAM(Kc, e);
|
433
|
443
|
pid_output += cTerm[e];
|
434
|
444
|
}
|
435
|
445
|
#endif //PID_ADD_EXTRUSION_RATE
|