Browse Source

PID now per extruder. Fixed typo

Erik vd Zalm 12 years ago
parent
commit
6752cb2d9c
7 changed files with 125 additions and 72 deletions
  1. 11
    0
      Marlin/Configuration.h
  2. 67
    43
      Marlin/ConfigurationStore.cpp
  3. 12
    6
      Marlin/Marlin_main.cpp
  4. 9
    2
      Marlin/language.h
  5. 2
    2
      Marlin/planner.cpp
  6. 20
    18
      Marlin/temperature.cpp
  7. 4
    1
      Marlin/temperature.h

+ 11
- 0
Marlin/Configuration.h View File

@@ -136,6 +136,17 @@
136 136
 //    #define  DEFAULT_Kd 440
137 137
 #endif // PIDTEMP
138 138
 
139
+// PID parameters for 2nd extruder
140
+    #define DEFAULT_Kp_E1 22.2
141
+    #define DEFAULT_Ki_E1 1.08
142
+    #define DEFAULT_Kd_E1 114
143
+
144
+
145
+// PID parameters for 3th extruder
146
+//    #define DEFAULT_Kp_E2 22.2
147
+//    #define DEFAULT_Ki_E2 1.08
148
+//    #define DEFAULT_Kd_E2 114
149
+
139 150
 // Bed Temperature Control
140 151
 // Select PID or bang-bang with PIDTEMPBED.  If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
141 152
 //

+ 67
- 43
Marlin/ConfigurationStore.cpp View File

@@ -3,26 +3,26 @@
3 3
 #include "temperature.h"
4 4
 #include "ultralcd.h"
5 5
 #include "ConfigurationStore.h"
6
-
7
-void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size)
8
-{
9
-    do
10
-    {
11
-        eeprom_write_byte((unsigned char*)pos, *value);
12
-        pos++;
13
-        value++;
6
+
7
+void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size)
8
+{
9
+    do
10
+    {
11
+        eeprom_write_byte((unsigned char*)pos, *value);
12
+        pos++;
13
+        value++;
14 14
     }while(--size);
15
-}
15
+}
16 16
 #define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value))
17
-void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size)
18
-{
19
-    do
20
-    {
21
-        *value = eeprom_read_byte((unsigned char*)pos);
22
-        pos++;
23
-        value++;
17
+void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size)
18
+{
19
+    do
20
+    {
21
+        *value = eeprom_read_byte((unsigned char*)pos);
22
+        pos++;
23
+        value++;
24 24
     }while(--size);
25
-}
25
+}
26 26
 #define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value))
27 27
 //======================================================================================
28 28
 
@@ -43,7 +43,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size)
43 43
 void Config_StoreSettings() 
44 44
 {
45 45
   char ver[4]= "000";
46
-  int i=EEPROM_OFFSET;
46
+  int i=EEPROM_OFFSET;
47 47
   EEPROM_WRITE_VAR(i,ver); // invalidate data first 
48 48
   EEPROM_WRITE_VAR(i,axis_steps_per_unit);  
49 49
   EEPROM_WRITE_VAR(i,max_feedrate);  
@@ -58,8 +58,8 @@ void Config_StoreSettings()
58 58
   EEPROM_WRITE_VAR(i,max_e_jerk);
59 59
   EEPROM_WRITE_VAR(i,add_homeing);
60 60
   #ifndef ULTIPANEL
61
-  int plaPreheatHotendTemp = PLA_PREHEAT_HOTEND_TEMP, plaPreheatHPBTemp = PLA_PREHEAT_HPB_TEMP, plaPreheatFanSpeed = PLA_PREHEAT_FAN_SPEED;
62
-  int absPreheatHotendTemp = ABS_PREHEAT_HOTEND_TEMP, absPreheatHPBTemp = ABS_PREHEAT_HPB_TEMP, absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
61
+  int plaPreheatHotendTemp = PLA_PREHEAT_HOTEND_TEMP, plaPreheatHPBTemp = PLA_PREHEAT_HPB_TEMP, plaPreheatFanSpeed = PLA_PREHEAT_FAN_SPEED;
62
+  int absPreheatHotendTemp = ABS_PREHEAT_HOTEND_TEMP, absPreheatHPBTemp = ABS_PREHEAT_HPB_TEMP, absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
63 63
   #endif
64 64
   EEPROM_WRITE_VAR(i,plaPreheatHotendTemp);
65 65
   EEPROM_WRITE_VAR(i,plaPreheatHPBTemp);
@@ -75,7 +75,7 @@ void Config_StoreSettings()
75 75
     EEPROM_WRITE_VAR(i,3000);
76 76
     EEPROM_WRITE_VAR(i,0);
77 77
     EEPROM_WRITE_VAR(i,0);
78
-  #endif
78
+  #endif
79 79
   char ver2[4]=EEPROM_VERSION;
80 80
   i=EEPROM_OFFSET;
81 81
   EEPROM_WRITE_VAR(i,ver2); // validate data
@@ -105,7 +105,7 @@ void Config_PrintSettings()
105 105
     SERIAL_ECHOPAIR(" Z", max_feedrate[2] ); 
106 106
     SERIAL_ECHOPAIR(" E", max_feedrate[3]);
107 107
     SERIAL_ECHOLN("");
108
-
108
+
109 109
     SERIAL_ECHO_START;
110 110
     SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
111 111
     SERIAL_ECHO_START;
@@ -120,7 +120,7 @@ void Config_PrintSettings()
120 120
     SERIAL_ECHOPAIR("  M204 S",acceleration ); 
121 121
     SERIAL_ECHOPAIR(" T" ,retract_acceleration);
122 122
     SERIAL_ECHOLN("");
123
-
123
+
124 124
     SERIAL_ECHO_START;
125 125
     SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s),  Z=maximum Z jerk (mm/s)");
126 126
     SERIAL_ECHO_START;
@@ -131,7 +131,7 @@ void Config_PrintSettings()
131 131
     SERIAL_ECHOPAIR(" Z" ,max_z_jerk);
132 132
     SERIAL_ECHOPAIR(" E" ,max_e_jerk);
133 133
     SERIAL_ECHOLN(""); 
134
-
134
+
135 135
     SERIAL_ECHO_START;
136 136
     SERIAL_ECHOLNPGM("Home offset (mm):");
137 137
     SERIAL_ECHO_START;
@@ -143,11 +143,25 @@ void Config_PrintSettings()
143 143
     SERIAL_ECHO_START;
144 144
     SERIAL_ECHOLNPGM("PID settings:");
145 145
     SERIAL_ECHO_START;
146
-    SERIAL_ECHOPAIR("   M301 P",Kp); 
147
-    SERIAL_ECHOPAIR(" I" ,Ki/PID_dT); 
148
-    SERIAL_ECHOPAIR(" D" ,Kd*PID_dT);
146
+    SERIAL_ECHOPAIR("   M301 P",Kp[0]); 
147
+    SERIAL_ECHOPAIR(" I" ,Ki[0]/PID_dT); 
148
+    SERIAL_ECHOPAIR(" D" ,Kd[0]*PID_dT);
149
+    SERIAL_ECHOLN(""); 
150
+#if EXTRUDERS > 1
151
+    SERIAL_ECHOPAIR("   M301 P",Kp[1]); 
152
+    SERIAL_ECHOPAIR(" I" ,Ki[1]/PID_dT); 
153
+    SERIAL_ECHOPAIR(" D" ,Kd[1]*PID_dT);
154
+    SERIAL_ECHOPGM(" T1");
155
+    SERIAL_ECHOLN(""); 
156
+#endif
157
+#if EXTRUDERS > 2
158
+    SERIAL_ECHOPAIR("   M301 P",Kp[2]); 
159
+    SERIAL_ECHOPAIR(" I" ,Ki[2]/PID_dT); 
160
+    SERIAL_ECHOPAIR(" D" ,Kd[2]*PID_dT);
161
+    SERIAL_ECHOPGM(" T2");
149 162
     SERIAL_ECHOLN(""); 
150 163
 #endif
164
+#endif
151 165
 } 
152 166
 #endif
153 167
 
@@ -161,7 +175,7 @@ void Config_RetrieveSettings()
161 175
     EEPROM_READ_VAR(i,stored_ver); //read stored version
162 176
     //  SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
163 177
     if (strncmp(ver,stored_ver,3) == 0)
164
-    {
178
+    {
165 179
         // version number match
166 180
         EEPROM_READ_VAR(i,axis_steps_per_unit);  
167 181
         EEPROM_READ_VAR(i,max_feedrate);  
@@ -176,15 +190,15 @@ void Config_RetrieveSettings()
176 190
         EEPROM_READ_VAR(i,max_e_jerk);
177 191
         EEPROM_READ_VAR(i,add_homeing);
178 192
         #ifndef ULTIPANEL
179
-        int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed;
180
-        int absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed;
193
+        int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed;
194
+        int absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed;
181 195
         #endif
182 196
         EEPROM_READ_VAR(i,plaPreheatHotendTemp);
183 197
         EEPROM_READ_VAR(i,plaPreheatHPBTemp);
184 198
         EEPROM_READ_VAR(i,plaPreheatFanSpeed);
185 199
         EEPROM_READ_VAR(i,absPreheatHotendTemp);
186 200
         EEPROM_READ_VAR(i,absPreheatHPBTemp);
187
-        EEPROM_READ_VAR(i,absPreheatFanSpeed);
201
+        EEPROM_READ_VAR(i,absPreheatFanSpeed);
188 202
         #ifndef PIDTEMP
189 203
         float Kp,Ki,Kd;
190 204
         #endif
@@ -195,17 +209,17 @@ void Config_RetrieveSettings()
195 209
         SERIAL_ECHO_START;
196 210
         SERIAL_ECHOLNPGM("Stored settings retreived:");
197 211
     }
198
-    else
199
-    {
200
-        Config_ResetDefault();
201
-        SERIAL_ECHO_START;
202
-        SERIAL_ECHOLN("Using Default settings:");
203
-    }
212
+    else
213
+    {
214
+        Config_ResetDefault();
215
+        SERIAL_ECHO_START;
216
+        SERIAL_ECHOLN("Using Default settings:");
217
+    }
204 218
     Config_PrintSettings();
205 219
 }
206
-#endif
207
-
208
-void Config_ResetDefault()
220
+#endif
221
+
222
+void Config_ResetDefault()
209 223
 {
210 224
     float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT;
211 225
     float tmp2[]=DEFAULT_MAX_FEEDRATE;
@@ -234,9 +248,19 @@ void Config_ResetDefault()
234 248
     absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
235 249
 #endif
236 250
 #ifdef PIDTEMP
237
-    Kp = DEFAULT_Kp;
238
-    Ki = (DEFAULT_Ki*PID_dT);
239
-    Kd = (DEFAULT_Kd/PID_dT);
251
+    Kp[0] = DEFAULT_Kp;
252
+    Ki[0] = (DEFAULT_Ki*PID_dT);
253
+    Kd[0] = (DEFAULT_Kd/PID_dT);
254
+    #if EXTRUDERS > 1
255
+    Kp[1] = DEFAULT_Kp_E1;
256
+    Ki[1] = (DEFAULT_Ki_E1*PID_dT);
257
+    Kd[1] = (DEFAULT_Kd_E1/PID_dT);
258
+    #endif
259
+    #if EXTRUDERS > 2
260
+    Kp[2] = DEFAULT_Kp_E2;
261
+    Ki[2] = (DEFAULT_Ki_E2*PID_dT);
262
+    Kd[2] = (DEFAULT_Kd_E2/PID_dT);
263
+    #endif
240 264
 #ifdef PID_ADD_EXTRUSION_RATE
241 265
     Kc = DEFAULT_Kc;
242 266
 #endif//PID_ADD_EXTRUSION_RATE

+ 12
- 6
Marlin/Marlin_main.cpp View File

@@ -1401,20 +1401,23 @@ void process_commands()
1401 1401
     #ifdef PIDTEMP
1402 1402
     case 301: // M301
1403 1403
       {
1404
-        if(code_seen('P')) Kp = code_value();
1405
-        if(code_seen('I')) Ki = code_value()*PID_dT;
1406
-        if(code_seen('D')) Kd = code_value()/PID_dT;
1404
+        if(setTargetedHotend(301)){
1405
+          break;
1406
+        }
1407
+        if(code_seen('P')) Kp[tmp_extruder] = code_value();
1408
+        if(code_seen('I')) Ki[tmp_extruder] = code_value()*PID_dT;
1409
+        if(code_seen('D')) Kd[tmp_extruder] = code_value()/PID_dT;
1407 1410
         #ifdef PID_ADD_EXTRUSION_RATE
1408 1411
         if(code_seen('C')) Kc = code_value();
1409 1412
         #endif
1410 1413
         updatePID();
1411 1414
         SERIAL_PROTOCOL(MSG_OK);
1412 1415
 		SERIAL_PROTOCOL(" p:");
1413
-        SERIAL_PROTOCOL(Kp);
1416
+        SERIAL_PROTOCOL(Kp[tmp_extruder]);
1414 1417
         SERIAL_PROTOCOL(" i:");
1415
-        SERIAL_PROTOCOL(Ki/PID_dT);
1418
+        SERIAL_PROTOCOL(Ki[tmp_extruder]/PID_dT);
1416 1419
         SERIAL_PROTOCOL(" d:");
1417
-        SERIAL_PROTOCOL(Kd*PID_dT);
1420
+        SERIAL_PROTOCOL(Kd[tmp_extruder]*PID_dT);
1418 1421
         #ifdef PID_ADD_EXTRUSION_RATE
1419 1422
         SERIAL_PROTOCOL(" c:");
1420 1423
         SERIAL_PROTOCOL(Kc*PID_dT);
@@ -1936,6 +1939,9 @@ bool setTargetedHotend(int code){
1936 1939
         case 109:
1937 1940
           SERIAL_ECHO(MSG_M109_INVALID_EXTRUDER);
1938 1941
           break;
1942
+        case 301:
1943
+          SERIAL_ECHO(MSG_M301_INVALID_EXTRUDER);
1944
+          break;
1939 1945
       }
1940 1946
       SERIAL_ECHOLN(tmp_extruder);
1941 1947
       return true;

+ 9
- 2
Marlin/language.h View File

@@ -139,6 +139,7 @@
139 139
 	#define MSG_M105_INVALID_EXTRUDER "M105 Invalid extruder "
140 140
 	#define MSG_ERR_NO_THERMISTORS "No thermistors - no temperature"
141 141
 	#define MSG_M109_INVALID_EXTRUDER "M109 Invalid extruder "
142
+        #define MSG_M301_INVALID_EXTRUDER "M301 Invalid extruder "
142 143
 	#define MSG_HEATING "Heating..."
143 144
 	#define MSG_HEATING_COMPLETE "Heating done."
144 145
 	#define MSG_BED_HEATING "Bed Heating."
@@ -293,6 +294,7 @@
293 294
 	#define MSG_M105_INVALID_EXTRUDER "M105 Niepoprawny ekstruder "
294 295
 	#define MSG_ERR_NO_THERMISTORS "Brak termistorow - brak temperatury :("
295 296
 	#define MSG_M109_INVALID_EXTRUDER "M109 Niepoprawny ekstruder "
297
+	#define MSG_M301_INVALID_EXTRUDER "M301 Niepoprawny ekstruder "
296 298
 	#define MSG_HEATING "Nagrzewanie ekstrudera..."
297 299
 	#define MSG_HEATING_COMPLETE "Nagrzewanie ekstrudera zakonczone."
298 300
 	#define MSG_BED_HEATING "Nagrzewanie loza..."
@@ -452,6 +454,7 @@
452 454
 #define MSG_M105_INVALID_EXTRUDER "M105 Extruder invalide"
453 455
 #define MSG_ERR_NO_THERMISTORS "Pas de thermistor, pas de temperature"
454 456
 #define MSG_M109_INVALID_EXTRUDER "M109 Extruder invalide "
457
+#define MSG_M301_INVALID_EXTRUDER "M301 Extruder invalide "
455 458
 #define MSG_HEATING "En chauffe..."
456 459
 #define MSG_HEATING_COMPLETE "Chauffe terminee."
457 460
 #define MSG_BED_HEATING "Chauffe du lit."
@@ -570,7 +573,7 @@
570 573
 	#define MSG_NO_CARD          "Keine SDKarte"
571 574
 	#define MSG_DWELL            "Warten..."		
572 575
 	#define MSG_USERWAIT         "Warte auf Nutzer..."
573
-    #define MSG_RESUMING         "Druck fortsetzung"
576
+    #define MSG_RESUMING         "Druck fortsetzung"
574 577
 	#define MSG_NO_MOVE          "Kein Zug."
575 578
 	#define MSG_PART_RELEASE     "Stepper tlw frei"
576 579
 	#define MSG_KILLED           "KILLED"
@@ -609,6 +612,7 @@
609 612
 	#define MSG_M105_INVALID_EXTRUDER "M105 Invalid extruder "
610 613
 	#define MSG_ERR_NO_THERMISTORS "No thermistors - no temp"
611 614
 	#define MSG_M109_INVALID_EXTRUDER "M109 Invalid extruder "
615
+        #define MSG_M301_INVALID_EXTRUDER "M301 Invalid extruder "
612 616
 	#define MSG_HEATING "Heating..."
613 617
 	#define MSG_HEATING_COMPLETE "Heating done."
614 618
 	#define MSG_BED_HEATING "Bed Heating."
@@ -767,6 +771,7 @@
767 771
 #define MSG_M105_INVALID_EXTRUDER "M105 Extrusor Invalido "
768 772
 #define MSG_ERR_NO_THERMISTORS "No hay termistores - no temp"
769 773
 #define MSG_M109_INVALID_EXTRUDER "M109 Extrusor Invalido "
774
+#define MSG_M301_INVALID_EXTRUDER "M301 Extrusor Invalido "
770 775
 #define MSG_HEATING "Calentando..."
771 776
 #define MSG_HEATING_COMPLETE "Calentamiento Hecho."
772 777
 #define MSG_BED_HEATING "Calentando la base."
@@ -916,7 +921,8 @@
916 921
 #define MSG_M104_INVALID_EXTRUDER			"M104 ошибка экструдера "
917 922
 #define MSG_M105_INVALID_EXTRUDER			"M105 ошибка экструдера "
918 923
 #define MSG_ERR_NO_THERMISTORS				"Нет термистра - нет температуры"
919
-#define MSG_M109_INVALID_EXTRUDER			"M109 ошибка экструдера "
924
+#define MSG_M109_INVALID_EXTRUDER "M109 ошибка экструдера "
925
+#define MSG_M301_INVALID_EXTRUDER			"M301 ошибка экструдера "
920 926
 #define MSG_HEATING							"Нагрев...  "
921 927
 #define MSG_HEATING_COMPLETE				"Наргето.    "
922 928
 #define MSG_BED_HEATING						"Нагрев стола...     "
@@ -1235,6 +1241,7 @@
1235 1241
 	#define MSG_M105_INVALID_EXTRUDER "M105 Extrusor inválido "
1236 1242
 	#define MSG_ERR_NO_THERMISTORS "Nao ha termistor - no temp"
1237 1243
 	#define MSG_M109_INVALID_EXTRUDER "M109 Extrusor inválido "
1244
+	#define MSG_M301_INVALID_EXTRUDER "M301 Extrusor inválido "
1238 1245
 	#define MSG_HEATING "Aquecendo..."
1239 1246
 	#define MSG_HEATING_COMPLETE "Aquecido."
1240 1247
 	#define MSG_BED_HEATING "Aquecendo a Base."

+ 2
- 2
Marlin/planner.cpp View File

@@ -478,8 +478,8 @@ void check_axes_activity()
478 478
   if((DISABLE_Z) && (z_active == 0)) disable_z();
479 479
   if(DISABLE_E) {
480 480
     if(e0_active == 0) disable_e0();
481
-    if(e1_active == 0) disable_e1();
482
-    if(e2_active == 0) disable_e2();
481
+    if(e1_active == 1) disable_e1();
482
+    if(e2_active == 2) disable_e2();
483 483
   }
484 484
 #if FAN_PIN > -1
485 485
   #ifndef FAN_SOFT_PWM

+ 20
- 18
Marlin/temperature.cpp View File

@@ -34,6 +34,16 @@
34 34
 #include "temperature.h"
35 35
 #include "watchdog.h"
36 36
 
37
+#if EXTRUDERS > 3
38
+# error Unsupported number of extruders
39
+#elif EXTRUDERS > 2
40
+# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2, v3 }
41
+#elif EXTRUDERS > 1
42
+# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2 }
43
+#else
44
+# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1 }
45
+#endif
46
+
37 47
 //===========================================================================
38 48
 //=============================public variables============================
39 49
 //===========================================================================
@@ -44,10 +54,10 @@ float current_temperature[EXTRUDERS] = { 0 };
44 54
 int current_temperature_bed_raw = 0;
45 55
 float current_temperature_bed = 0;
46 56
 
47
-#ifdef PIDTEMP
48
-  float Kp=DEFAULT_Kp;
49
-  float Ki=(DEFAULT_Ki*PID_dT);
50
-  float Kd=(DEFAULT_Kd/PID_dT);
57
+#ifdef PIDTEMP  
58
+  float Kp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_Kp, DEFAULT_Kp_E1, DEFAULT_Kp_E2);
59
+  float Ki[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_Ki*PID_dT, DEFAULT_Ki_E1*PID_dT, DEFAULT_Ki_E2*PID_dT);
60
+  float Kd[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_Kd/PID_dT, DEFAULT_Kd_E1/PID_dT, DEFAULT_Kd_E2/PID_dT);
51 61
   #ifdef PID_ADD_EXTRUSION_RATE
52 62
     float Kc=DEFAULT_Kc;
53 63
   #endif
@@ -102,15 +112,7 @@ static volatile bool temp_meas_ready = false;
102 112
 
103 113
 
104 114
   
105
-#if EXTRUDERS > 3
106
-# error Unsupported number of extruders
107
-#elif EXTRUDERS > 2
108
-# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2, v3 }
109
-#elif EXTRUDERS > 1
110
-# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2 }
111
-#else
112
-# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1 }
113
-#endif
115
+
114 116
 
115 117
 // Init min and max temp with extreme values to prevent false errors during startup
116 118
 static int minttemp_raw[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP );
@@ -292,7 +294,7 @@ void updatePID()
292 294
 {
293 295
 #ifdef PIDTEMP
294 296
   for(int e = 0; e < EXTRUDERS; e++) { 
295
-     temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki;  
297
+     temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki[e];  
296 298
   }
297 299
 #endif
298 300
 #ifdef PIDTEMPBED
@@ -337,14 +339,14 @@ void manage_heater()
337 339
             temp_iState[e] = 0.0;
338 340
             pid_reset[e] = false;
339 341
           }
340
-          pTerm[e] = Kp * pid_error[e];
342
+          pTerm[e] = Kp[e] * pid_error[e];
341 343
           temp_iState[e] += pid_error[e];
342 344
           temp_iState[e] = constrain(temp_iState[e], temp_iState_min[e], temp_iState_max[e]);
343
-          iTerm[e] = Ki * temp_iState[e];
345
+          iTerm[e] = Ki[e] * temp_iState[e];
344 346
 
345 347
           //K1 defined in Configuration.h in the PID settings
346 348
           #define K2 (1.0-K1)
347
-          dTerm[e] = (Kd * (pid_input - temp_dState[e]))*K2 + (K1 * dTerm[e]);
349
+          dTerm[e] = (Kd[e] * (pid_input - temp_dState[e]))*K2 + (K1 * dTerm[e]);
348 350
           temp_dState[e] = pid_input;
349 351
 
350 352
           pid_output = constrain(pTerm[e] + iTerm[e] - dTerm[e], 0, PID_MAX);
@@ -577,7 +579,7 @@ void tp_init()
577 579
     maxttemp[e] = maxttemp[0];
578 580
 #ifdef PIDTEMP
579 581
     temp_iState_min[e] = 0.0;
580
-    temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki;
582
+    temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki[e];
581 583
 #endif //PIDTEMP
582 584
 #ifdef PIDTEMPBED
583 585
     temp_iState_min_bed = 0.0;

+ 4
- 1
Marlin/temperature.h View File

@@ -39,7 +39,10 @@ extern int target_temperature_bed;
39 39
 extern float current_temperature_bed;
40 40
 
41 41
 #ifdef PIDTEMP
42
-  extern float Kp,Ki,Kd,Kc;
42
+  extern float Kp[EXTRUDERS];
43
+  extern float Ki[EXTRUDERS];
44
+  extern float Kd[EXTRUDERS];
45
+  extern float Kc;
43 46
 #endif
44 47
 #ifdef PIDTEMPBED
45 48
   extern float bedKp,bedKi,bedKd;

Loading…
Cancel
Save