Browse Source

Removal of functional range constraint

Also lined up the >> 1 and / 2 mentioned earlier in the unconstrained I term issue,
Rerouter 8 years ago
parent
commit
02fe9cf558
2 changed files with 5 additions and 17 deletions
  1. 5
    16
      Marlin/temperature.cpp
  2. 0
    1
      Marlin/temperature.h

+ 5
- 16
Marlin/temperature.cpp View File

137
   #endif
137
   #endif
138
 
138
 
139
   float Temperature::pid_error[HOTENDS];
139
   float Temperature::pid_error[HOTENDS];
140
-  bool Temperature::pid_reset[HOTENDS];
141
 #endif
140
 #endif
142
 
141
 
143
 #if ENABLED(PIDTEMPBED)
142
 #if ENABLED(PIDTEMPBED)
195
 #endif
194
 #endif
196
 
195
 
197
 #if HAS_PID_HEATING
196
 #if HAS_PID_HEATING
198
-
199
   void Temperature::PID_autotune(float temp, int hotend, int ncycles, bool set_result/*=false*/) {
197
   void Temperature::PID_autotune(float temp, int hotend, int ncycles, bool set_result/*=false*/) {
200
     float input = 0.0;
198
     float input = 0.0;
201
     int cycles = 0;
199
     int cycles = 0;
452
 }
450
 }
453
 
451
 
454
 #if HAS_AUTO_FAN
452
 #if HAS_AUTO_FAN
455
-
456
   void Temperature::checkExtruderAutoFans() {
453
   void Temperature::checkExtruderAutoFans() {
457
     const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN };
454
     const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN };
458
     const int fanBit[] = {
455
     const int fanBit[] = {
535
   #endif
532
   #endif
536
   float pid_output;
533
   float pid_output;
537
   #if ENABLED(PIDTEMP)
534
   #if ENABLED(PIDTEMP)
538
-    #if DISABLED(PID_OPENLOOP)
535
+    #if ENABLED(PID_OPENLOOP)
536
+      pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX);
537
+    #else
539
       pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];
538
       pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];
540
       dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];
539
       dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];
541
       temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX];
540
       temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX];
542
-      if (pid_error[HOTEND_INDEX] > PID_FUNCTIONAL_RANGE) {
543
-        pid_output = BANG_MAX;
544
-        pid_reset[HOTEND_INDEX] = true;
545
-      }
546
-      else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0) {
541
+      if (target_temperature[HOTEND_INDEX] == 0) {
547
         pid_output = 0;
542
         pid_output = 0;
548
-        pid_reset[HOTEND_INDEX] = true;
543
+        temp_iState[HOTEND_INDEX] = 0.0;
549
       }
544
       }
550
       else {
545
       else {
551
-        if (pid_reset[HOTEND_INDEX]) {
552
-          temp_iState[HOTEND_INDEX] = 0.0;
553
-          pid_reset[HOTEND_INDEX] = false;
554
-        }
555
         pTerm[HOTEND_INDEX] = PID_PARAM(Kp, HOTEND_INDEX) * pid_error[HOTEND_INDEX];
546
         pTerm[HOTEND_INDEX] = PID_PARAM(Kp, HOTEND_INDEX) * pid_error[HOTEND_INDEX];
556
         temp_iState[HOTEND_INDEX] += pid_error[HOTEND_INDEX];
547
         temp_iState[HOTEND_INDEX] += pid_error[HOTEND_INDEX];
557
         iTerm[HOTEND_INDEX] = PID_PARAM(Ki, HOTEND_INDEX) * temp_iState[HOTEND_INDEX];
548
         iTerm[HOTEND_INDEX] = PID_PARAM(Ki, HOTEND_INDEX) * temp_iState[HOTEND_INDEX];
584
           pid_output = 0;
575
           pid_output = 0;
585
         }
576
         }
586
       }
577
       }
587
-    #else
588
-      pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX);
589
     #endif //PID_OPENLOOP
578
     #endif //PID_OPENLOOP
590
 
579
 
591
     #if ENABLED(PID_DEBUG)
580
     #if ENABLED(PID_DEBUG)

+ 0
- 1
Marlin/temperature.h View File

158
       #endif
158
       #endif
159
 
159
 
160
       static float pid_error[HOTENDS];
160
       static float pid_error[HOTENDS];
161
-      static bool pid_reset[HOTENDS];
162
     #endif
161
     #endif
163
 
162
 
164
     #if ENABLED(PIDTEMPBED)
163
     #if ENABLED(PIDTEMPBED)

Loading…
Cancel
Save