Browse Source

PID now per extruder. Fixed typo

Erik vd Zalm 12 years ago
parent
commit
6752cb2d9c

+ 11
- 0
Marlin/Configuration.h View File

136
 //    #define  DEFAULT_Kd 440
136
 //    #define  DEFAULT_Kd 440
137
 #endif // PIDTEMP
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
 // Bed Temperature Control
150
 // Bed Temperature Control
140
 // Select PID or bang-bang with PIDTEMPBED.  If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
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
 #include "temperature.h"
3
 #include "temperature.h"
4
 #include "ultralcd.h"
4
 #include "ultralcd.h"
5
 #include "ConfigurationStore.h"
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
     }while(--size);
14
     }while(--size);
15
-}
15
+}
16
 #define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value))
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
     }while(--size);
24
     }while(--size);
25
-}
25
+}
26
 #define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value))
26
 #define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value))
27
 //======================================================================================
27
 //======================================================================================
28
 
28
 
43
 void Config_StoreSettings() 
43
 void Config_StoreSettings() 
44
 {
44
 {
45
   char ver[4]= "000";
45
   char ver[4]= "000";
46
-  int i=EEPROM_OFFSET;
46
+  int i=EEPROM_OFFSET;
47
   EEPROM_WRITE_VAR(i,ver); // invalidate data first 
47
   EEPROM_WRITE_VAR(i,ver); // invalidate data first 
48
   EEPROM_WRITE_VAR(i,axis_steps_per_unit);  
48
   EEPROM_WRITE_VAR(i,axis_steps_per_unit);  
49
   EEPROM_WRITE_VAR(i,max_feedrate);  
49
   EEPROM_WRITE_VAR(i,max_feedrate);  
58
   EEPROM_WRITE_VAR(i,max_e_jerk);
58
   EEPROM_WRITE_VAR(i,max_e_jerk);
59
   EEPROM_WRITE_VAR(i,add_homeing);
59
   EEPROM_WRITE_VAR(i,add_homeing);
60
   #ifndef ULTIPANEL
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
   #endif
63
   #endif
64
   EEPROM_WRITE_VAR(i,plaPreheatHotendTemp);
64
   EEPROM_WRITE_VAR(i,plaPreheatHotendTemp);
65
   EEPROM_WRITE_VAR(i,plaPreheatHPBTemp);
65
   EEPROM_WRITE_VAR(i,plaPreheatHPBTemp);
75
     EEPROM_WRITE_VAR(i,3000);
75
     EEPROM_WRITE_VAR(i,3000);
76
     EEPROM_WRITE_VAR(i,0);
76
     EEPROM_WRITE_VAR(i,0);
77
     EEPROM_WRITE_VAR(i,0);
77
     EEPROM_WRITE_VAR(i,0);
78
-  #endif
78
+  #endif
79
   char ver2[4]=EEPROM_VERSION;
79
   char ver2[4]=EEPROM_VERSION;
80
   i=EEPROM_OFFSET;
80
   i=EEPROM_OFFSET;
81
   EEPROM_WRITE_VAR(i,ver2); // validate data
81
   EEPROM_WRITE_VAR(i,ver2); // validate data
105
     SERIAL_ECHOPAIR(" Z", max_feedrate[2] ); 
105
     SERIAL_ECHOPAIR(" Z", max_feedrate[2] ); 
106
     SERIAL_ECHOPAIR(" E", max_feedrate[3]);
106
     SERIAL_ECHOPAIR(" E", max_feedrate[3]);
107
     SERIAL_ECHOLN("");
107
     SERIAL_ECHOLN("");
108
-
108
+
109
     SERIAL_ECHO_START;
109
     SERIAL_ECHO_START;
110
     SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
110
     SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
111
     SERIAL_ECHO_START;
111
     SERIAL_ECHO_START;
120
     SERIAL_ECHOPAIR("  M204 S",acceleration ); 
120
     SERIAL_ECHOPAIR("  M204 S",acceleration ); 
121
     SERIAL_ECHOPAIR(" T" ,retract_acceleration);
121
     SERIAL_ECHOPAIR(" T" ,retract_acceleration);
122
     SERIAL_ECHOLN("");
122
     SERIAL_ECHOLN("");
123
-
123
+
124
     SERIAL_ECHO_START;
124
     SERIAL_ECHO_START;
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)");
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
     SERIAL_ECHO_START;
126
     SERIAL_ECHO_START;
131
     SERIAL_ECHOPAIR(" Z" ,max_z_jerk);
131
     SERIAL_ECHOPAIR(" Z" ,max_z_jerk);
132
     SERIAL_ECHOPAIR(" E" ,max_e_jerk);
132
     SERIAL_ECHOPAIR(" E" ,max_e_jerk);
133
     SERIAL_ECHOLN(""); 
133
     SERIAL_ECHOLN(""); 
134
-
134
+
135
     SERIAL_ECHO_START;
135
     SERIAL_ECHO_START;
136
     SERIAL_ECHOLNPGM("Home offset (mm):");
136
     SERIAL_ECHOLNPGM("Home offset (mm):");
137
     SERIAL_ECHO_START;
137
     SERIAL_ECHO_START;
143
     SERIAL_ECHO_START;
143
     SERIAL_ECHO_START;
144
     SERIAL_ECHOLNPGM("PID settings:");
144
     SERIAL_ECHOLNPGM("PID settings:");
145
     SERIAL_ECHO_START;
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
     SERIAL_ECHOLN(""); 
162
     SERIAL_ECHOLN(""); 
150
 #endif
163
 #endif
164
+#endif
151
 } 
165
 } 
152
 #endif
166
 #endif
153
 
167
 
161
     EEPROM_READ_VAR(i,stored_ver); //read stored version
175
     EEPROM_READ_VAR(i,stored_ver); //read stored version
162
     //  SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
176
     //  SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
163
     if (strncmp(ver,stored_ver,3) == 0)
177
     if (strncmp(ver,stored_ver,3) == 0)
164
-    {
178
+    {
165
         // version number match
179
         // version number match
166
         EEPROM_READ_VAR(i,axis_steps_per_unit);  
180
         EEPROM_READ_VAR(i,axis_steps_per_unit);  
167
         EEPROM_READ_VAR(i,max_feedrate);  
181
         EEPROM_READ_VAR(i,max_feedrate);  
176
         EEPROM_READ_VAR(i,max_e_jerk);
190
         EEPROM_READ_VAR(i,max_e_jerk);
177
         EEPROM_READ_VAR(i,add_homeing);
191
         EEPROM_READ_VAR(i,add_homeing);
178
         #ifndef ULTIPANEL
192
         #ifndef ULTIPANEL
179
-        int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed;
180
-        int absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed;
193
+        int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed;
194
+        int absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed;
181
         #endif
195
         #endif
182
         EEPROM_READ_VAR(i,plaPreheatHotendTemp);
196
         EEPROM_READ_VAR(i,plaPreheatHotendTemp);
183
         EEPROM_READ_VAR(i,plaPreheatHPBTemp);
197
         EEPROM_READ_VAR(i,plaPreheatHPBTemp);
184
         EEPROM_READ_VAR(i,plaPreheatFanSpeed);
198
         EEPROM_READ_VAR(i,plaPreheatFanSpeed);
185
         EEPROM_READ_VAR(i,absPreheatHotendTemp);
199
         EEPROM_READ_VAR(i,absPreheatHotendTemp);
186
         EEPROM_READ_VAR(i,absPreheatHPBTemp);
200
         EEPROM_READ_VAR(i,absPreheatHPBTemp);
187
-        EEPROM_READ_VAR(i,absPreheatFanSpeed);
201
+        EEPROM_READ_VAR(i,absPreheatFanSpeed);
188
         #ifndef PIDTEMP
202
         #ifndef PIDTEMP
189
         float Kp,Ki,Kd;
203
         float Kp,Ki,Kd;
190
         #endif
204
         #endif
195
         SERIAL_ECHO_START;
209
         SERIAL_ECHO_START;
196
         SERIAL_ECHOLNPGM("Stored settings retreived:");
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
     Config_PrintSettings();
218
     Config_PrintSettings();
205
 }
219
 }
206
-#endif
207
-
208
-void Config_ResetDefault()
220
+#endif
221
+
222
+void Config_ResetDefault()
209
 {
223
 {
210
     float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT;
224
     float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT;
211
     float tmp2[]=DEFAULT_MAX_FEEDRATE;
225
     float tmp2[]=DEFAULT_MAX_FEEDRATE;
234
     absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
248
     absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
235
 #endif
249
 #endif
236
 #ifdef PIDTEMP
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
 #ifdef PID_ADD_EXTRUSION_RATE
264
 #ifdef PID_ADD_EXTRUSION_RATE
241
     Kc = DEFAULT_Kc;
265
     Kc = DEFAULT_Kc;
242
 #endif//PID_ADD_EXTRUSION_RATE
266
 #endif//PID_ADD_EXTRUSION_RATE

+ 12
- 6
Marlin/Marlin_main.cpp View File

1401
     #ifdef PIDTEMP
1401
     #ifdef PIDTEMP
1402
     case 301: // M301
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
         #ifdef PID_ADD_EXTRUSION_RATE
1410
         #ifdef PID_ADD_EXTRUSION_RATE
1408
         if(code_seen('C')) Kc = code_value();
1411
         if(code_seen('C')) Kc = code_value();
1409
         #endif
1412
         #endif
1410
         updatePID();
1413
         updatePID();
1411
         SERIAL_PROTOCOL(MSG_OK);
1414
         SERIAL_PROTOCOL(MSG_OK);
1412
 		SERIAL_PROTOCOL(" p:");
1415
 		SERIAL_PROTOCOL(" p:");
1413
-        SERIAL_PROTOCOL(Kp);
1416
+        SERIAL_PROTOCOL(Kp[tmp_extruder]);
1414
         SERIAL_PROTOCOL(" i:");
1417
         SERIAL_PROTOCOL(" i:");
1415
-        SERIAL_PROTOCOL(Ki/PID_dT);
1418
+        SERIAL_PROTOCOL(Ki[tmp_extruder]/PID_dT);
1416
         SERIAL_PROTOCOL(" d:");
1419
         SERIAL_PROTOCOL(" d:");
1417
-        SERIAL_PROTOCOL(Kd*PID_dT);
1420
+        SERIAL_PROTOCOL(Kd[tmp_extruder]*PID_dT);
1418
         #ifdef PID_ADD_EXTRUSION_RATE
1421
         #ifdef PID_ADD_EXTRUSION_RATE
1419
         SERIAL_PROTOCOL(" c:");
1422
         SERIAL_PROTOCOL(" c:");
1420
         SERIAL_PROTOCOL(Kc*PID_dT);
1423
         SERIAL_PROTOCOL(Kc*PID_dT);
1936
         case 109:
1939
         case 109:
1937
           SERIAL_ECHO(MSG_M109_INVALID_EXTRUDER);
1940
           SERIAL_ECHO(MSG_M109_INVALID_EXTRUDER);
1938
           break;
1941
           break;
1942
+        case 301:
1943
+          SERIAL_ECHO(MSG_M301_INVALID_EXTRUDER);
1944
+          break;
1939
       }
1945
       }
1940
       SERIAL_ECHOLN(tmp_extruder);
1946
       SERIAL_ECHOLN(tmp_extruder);
1941
       return true;
1947
       return true;

+ 9
- 2
Marlin/language.h View File

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

+ 2
- 2
Marlin/planner.cpp View File

478
   if((DISABLE_Z) && (z_active == 0)) disable_z();
478
   if((DISABLE_Z) && (z_active == 0)) disable_z();
479
   if(DISABLE_E) {
479
   if(DISABLE_E) {
480
     if(e0_active == 0) disable_e0();
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
 #if FAN_PIN > -1
484
 #if FAN_PIN > -1
485
   #ifndef FAN_SOFT_PWM
485
   #ifndef FAN_SOFT_PWM

+ 20
- 18
Marlin/temperature.cpp View File

34
 #include "temperature.h"
34
 #include "temperature.h"
35
 #include "watchdog.h"
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
 //=============================public variables============================
48
 //=============================public variables============================
39
 //===========================================================================
49
 //===========================================================================
44
 int current_temperature_bed_raw = 0;
54
 int current_temperature_bed_raw = 0;
45
 float current_temperature_bed = 0;
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
   #ifdef PID_ADD_EXTRUSION_RATE
61
   #ifdef PID_ADD_EXTRUSION_RATE
52
     float Kc=DEFAULT_Kc;
62
     float Kc=DEFAULT_Kc;
53
   #endif
63
   #endif
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
 // Init min and max temp with extreme values to prevent false errors during startup
117
 // Init min and max temp with extreme values to prevent false errors during startup
116
 static int minttemp_raw[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP );
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
 {
294
 {
293
 #ifdef PIDTEMP
295
 #ifdef PIDTEMP
294
   for(int e = 0; e < EXTRUDERS; e++) { 
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
 #endif
299
 #endif
298
 #ifdef PIDTEMPBED
300
 #ifdef PIDTEMPBED
337
             temp_iState[e] = 0.0;
339
             temp_iState[e] = 0.0;
338
             pid_reset[e] = false;
340
             pid_reset[e] = false;
339
           }
341
           }
340
-          pTerm[e] = Kp * pid_error[e];
342
+          pTerm[e] = Kp[e] * pid_error[e];
341
           temp_iState[e] += pid_error[e];
343
           temp_iState[e] += pid_error[e];
342
           temp_iState[e] = constrain(temp_iState[e], temp_iState_min[e], temp_iState_max[e]);
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
           //K1 defined in Configuration.h in the PID settings
347
           //K1 defined in Configuration.h in the PID settings
346
           #define K2 (1.0-K1)
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
           temp_dState[e] = pid_input;
350
           temp_dState[e] = pid_input;
349
 
351
 
350
           pid_output = constrain(pTerm[e] + iTerm[e] - dTerm[e], 0, PID_MAX);
352
           pid_output = constrain(pTerm[e] + iTerm[e] - dTerm[e], 0, PID_MAX);
577
     maxttemp[e] = maxttemp[0];
579
     maxttemp[e] = maxttemp[0];
578
 #ifdef PIDTEMP
580
 #ifdef PIDTEMP
579
     temp_iState_min[e] = 0.0;
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
 #endif //PIDTEMP
583
 #endif //PIDTEMP
582
 #ifdef PIDTEMPBED
584
 #ifdef PIDTEMPBED
583
     temp_iState_min_bed = 0.0;
585
     temp_iState_min_bed = 0.0;

+ 4
- 1
Marlin/temperature.h View File

39
 extern float current_temperature_bed;
39
 extern float current_temperature_bed;
40
 
40
 
41
 #ifdef PIDTEMP
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
 #endif
46
 #endif
44
 #ifdef PIDTEMPBED
47
 #ifdef PIDTEMPBED
45
   extern float bedKp,bedKi,bedKd;
48
   extern float bedKp,bedKi,bedKd;

Loading…
Cancel
Save