Przeglądaj źródła

Chamber temperature monitoring and auto fan control.

This is an initial cut for feedback, updated for 2.0.x.

Chamber temperature is currently reported along with hot end and bed
temperatures to serial. The format is just like that used for hot end
and bed temperatures, but using 'C' prefix. As there is no heater,
target is always 0. Is this appropriate, is there a better way to report
chamber temperatures?

Chamber temperatures are not reported on the LCD in any way.

When auto chamber fan is enabled, it currently just uses the same
temperature threshold as the other auto controlled fans.

As the chamber temperature is not connected to any heater, it doesn't
undergo mintemp/maxtemp monitoring. This would need to change in the
future if chamber heating became a feature.
Lenbok 6 lat temu
rodzic
commit
0e8242180d

+ 1
- 0
Marlin/Configuration.h Wyświetl plik

@@ -316,6 +316,7 @@
316 316
 #define TEMP_SENSOR_3 0
317 317
 #define TEMP_SENSOR_4 0
318 318
 #define TEMP_SENSOR_BED 0
319
+#define TEMP_SENSOR_CHAMBER 0
319 320
 
320 321
 // Dummy thermistor constant temperature readings, for use with 998 and 999
321 322
 #define DUMMY_THERMISTOR_998_VALUE 25

+ 1
- 0
Marlin/Configuration_adv.h Wyświetl plik

@@ -230,6 +230,7 @@
230 230
 #define E2_AUTO_FAN_PIN -1
231 231
 #define E3_AUTO_FAN_PIN -1
232 232
 #define E4_AUTO_FAN_PIN -1
233
+#define CHAMBER_AUTO_FAN_PIN -1
233 234
 #define EXTRUDER_AUTO_FAN_TEMPERATURE 50
234 235
 #define EXTRUDER_AUTO_FAN_SPEED   255  // == full speed
235 236
 

+ 2
- 2
Marlin/src/HAL/HAL_AVR/fastio_AVR.h Wyświetl plik

@@ -242,9 +242,9 @@ typedef enum {
242 242
 
243 243
 //find out which harware PWMs are already in use
244 244
 #if PIN_EXISTS(CONTROLLER_FAN)
245
-  #define PWM_CHK_FAN_B(p) (p == CONTROLLER_FAN_PIN || p == E0_AUTO_FAN_PIN || p ==  E1_AUTO_FAN_PIN || p ==  E2_AUTO_FAN_PIN || p ==  E3_AUTO_FAN_PIN || p ==  E4_AUTO_FAN_PIN)
245
+  #define PWM_CHK_FAN_B(p) (p == CONTROLLER_FAN_PIN || p == E0_AUTO_FAN_PIN || p ==  E1_AUTO_FAN_PIN || p ==  E2_AUTO_FAN_PIN || p ==  E3_AUTO_FAN_PIN || p ==  E4_AUTO_FAN_PIN || p == CHAMBER_AUTO_FAN_PIN)
246 246
 #else
247
-  #define PWM_CHK_FAN_B(p) (p == E0_AUTO_FAN_PIN || p ==  E1_AUTO_FAN_PIN || p ==  E2_AUTO_FAN_PIN || p ==  E3_AUTO_FAN_PIN || p ==  E4_AUTO_FAN_PIN)
247
+  #define PWM_CHK_FAN_B(p) (p == E0_AUTO_FAN_PIN || p ==  E1_AUTO_FAN_PIN || p ==  E2_AUTO_FAN_PIN || p ==  E3_AUTO_FAN_PIN || p ==  E4_AUTO_FAN_PIN || p == CHAMBER_AUTO_FAN_PIN)
248 248
 #endif
249 249
 
250 250
 #if PIN_EXISTS(FAN) || PIN_EXISTS(FAN1) || PIN_EXISTS(FAN2)

+ 18
- 2
Marlin/src/inc/Conditionals_post.h Wyświetl plik

@@ -389,6 +389,15 @@
389 389
   #define BED_USES_THERMISTOR
390 390
 #endif
391 391
 
392
+#if TEMP_SENSOR_CHAMBER <= -2
393
+  #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_CHAMBER"
394
+#elif TEMP_SENSOR_CHAMBER == -1
395
+  #define CHAMBER_USES_AD595
396
+#elif TEMP_SENSOR_CHAMBER > 0
397
+  #define THERMISTORCHAMBER TEMP_SENSOR_CHAMBER
398
+  #define CHAMBER_USES_THERMISTOR
399
+#endif
400
+
392 401
 #ifdef __SAM3X8E__
393 402
   #define HEATER_USES_AD595 (ENABLED(HEATER_0_USES_AD595) || ENABLED(HEATER_1_USES_AD595) || ENABLED(HEATER_2_USES_AD595) || ENABLED(HEATER_3_USES_AD595))
394 403
 #endif
@@ -754,7 +763,8 @@
754 763
 #define HAS_TEMP_4 (PIN_EXISTS(TEMP_4) && TEMP_SENSOR_4 != 0 && TEMP_SENSOR_4 > -2)
755 764
 #define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
756 765
 #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
757
-#define HAS_TEMP_SENSOR (HAS_TEMP_HOTEND || HAS_TEMP_BED)
766
+#define HAS_TEMP_CHAMBER (PIN_EXISTS(TEMP_CHAMBER) && TEMP_SENSOR_CHAMBER != 0 && TEMP_SENSOR_CHAMBER > -2)
767
+#define HAS_TEMP_SENSOR (HAS_TEMP_HOTEND || HAS_TEMP_BED || HAS_TEMP_CHAMBER)
758 768
 
759 769
 // Heaters
760 770
 #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
@@ -775,7 +785,8 @@
775 785
 #define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
776 786
 #define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
777 787
 #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
778
-#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
788
+#define HAS_AUTO_CHAMBER_FAN (PIN_EXISTS(CHAMBER_AUTO_FAN))
789
+#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_CHAMBER_FAN)
779 790
 #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
780 791
 #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
781 792
 #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
@@ -786,6 +797,11 @@
786 797
 #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
787 798
 #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
788 799
 #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
800
+#define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
801
+#define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
802
+#define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
803
+#define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
804
+#define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
789 805
 
790 806
 // Other fans
791 807
 #define HAS_FAN0 (PIN_EXISTS(FAN))

+ 85
- 6
Marlin/src/module/temperature.cpp Wyświetl plik

@@ -83,10 +83,12 @@ Temperature thermalManager;
83 83
 // public:
84 84
 
85 85
 float Temperature::current_temperature[HOTENDS] = { 0.0 },
86
+      Temperature::current_temperature_chamber = 0.0,
86 87
       Temperature::current_temperature_bed = 0.0;
87 88
 
88 89
 int16_t Temperature::current_temperature_raw[HOTENDS] = { 0 },
89 90
         Temperature::target_temperature[HOTENDS] = { 0 },
91
+        Temperature::current_temperature_chamber_raw = 0,
90 92
         Temperature::current_temperature_bed_raw = 0;
91 93
 
92 94
 #if ENABLED(AUTO_POWER_E_FANS)
@@ -179,6 +181,7 @@ volatile bool Temperature::temp_meas_ready = false;
179 181
 #endif
180 182
 
181 183
 uint16_t Temperature::raw_temp_value[MAX_EXTRUDERS] = { 0 },
184
+         Temperature::raw_temp_chamber_value = 0,
182 185
          Temperature::raw_temp_bed_value = 0;
183 186
 
184 187
 // Init min and max temp with extreme values to prevent false errors during startup
@@ -550,19 +553,22 @@ int Temperature::getHeaterPower(int heater) {
550 553
 #if HAS_AUTO_FAN
551 554
 
552 555
   void Temperature::checkExtruderAutoFans() {
553
-    static const pin_t fanPin[] PROGMEM = { E0_AUTO_FAN_PIN, E1_AUTO_FAN_PIN, E2_AUTO_FAN_PIN, E3_AUTO_FAN_PIN, E4_AUTO_FAN_PIN };
556
+    static const pin_t fanPin[] PROGMEM = { E0_AUTO_FAN_PIN, E1_AUTO_FAN_PIN, E2_AUTO_FAN_PIN, E3_AUTO_FAN_PIN, E4_AUTO_FAN_PIN, CHAMBER_AUTO_FAN_PIN };
554 557
     static const uint8_t fanBit[] PROGMEM = {
555 558
                     0,
556 559
       AUTO_1_IS_0 ? 0 :               1,
557 560
       AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 :               2,
558 561
       AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 :               3,
559
-      AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4
562
+      AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4,
563
+      AUTO_CHAMBER_IS_0 ? 0 : AUTO_CHAMBER_IS_1 ? 1 : AUTO_CHAMBER_IS_2 ? 2 : AUTO_CHAMBER_IS_3 ? 3 : AUTO_CHAMBER_IS_4 ? 4 : 5
560 564
     };
561 565
     uint8_t fanState = 0;
562 566
 
563 567
     HOTEND_LOOP()
564 568
       if (current_temperature[e] > EXTRUDER_AUTO_FAN_TEMPERATURE)
565 569
         SBI(fanState, pgm_read_byte(&fanBit[e]));
570
+    if (current_temperature_chamber > EXTRUDER_AUTO_FAN_TEMPERATURE)
571
+      SBI(fanState, pgm_read_byte(&fanBit[5]));
566 572
 
567 573
     uint8_t fanDone = 0;
568 574
     for (uint8_t f = 0; f < COUNT(fanPin); f++) {
@@ -998,6 +1004,42 @@ float Temperature::analog2temp(const int raw, const uint8_t e) {
998 1004
   }
999 1005
 #endif // HAS_TEMP_BED
1000 1006
 
1007
+#if HAS_TEMP_CHAMBER
1008
+  // Derived from RepRap FiveD extruder::getTemperature()
1009
+  // For chamber temperature measurement.
1010
+  float Temperature::analog2tempChamber(const int raw) {
1011
+    #if ENABLED(CHAMBER_USES_THERMISTOR)
1012
+      float celsius = 0;
1013
+      byte i;
1014
+
1015
+      for (i = 1; i < CHAMBERTEMPTABLE_LEN; i++) {
1016
+        if (PGM_RD_W(CHAMBERTEMPTABLE[i][0]) > raw) {
1017
+          celsius  = PGM_RD_W(CHAMBERTEMPTABLE[i - 1][1]) +
1018
+                     (raw - PGM_RD_W(CHAMBERTEMPTABLE[i - 1][0])) *
1019
+                     (float)(PGM_RD_W(CHAMBERTEMPTABLE[i][1]) - PGM_RD_W(CHAMBERTEMPTABLE[i - 1][1])) /
1020
+                     (float)(PGM_RD_W(CHAMBERTEMPTABLE[i][0]) - PGM_RD_W(CHAMBERTEMPTABLE[i - 1][0]));
1021
+          break;
1022
+        }
1023
+      }
1024
+
1025
+      // Overflow: Set to last value in the table
1026
+      if (i == CHAMBERTEMPTABLE_LEN) celsius = PGM_RD_W(CHAMBERTEMPTABLE[i - 1][1]);
1027
+
1028
+      return celsius;
1029
+
1030
+    #elif defined(CHAMBER_USES_AD595)
1031
+
1032
+      return ((raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN)) + TEMP_SENSOR_AD595_OFFSET;
1033
+
1034
+    #else
1035
+
1036
+      UNUSED(raw);
1037
+      return 0;
1038
+
1039
+    #endif
1040
+  }
1041
+#endif // HAS_TEMP_CHAMBER
1042
+
1001 1043
 /**
1002 1044
  * Get the raw values into the actual temperatures.
1003 1045
  * The raw values are created in interrupt context,
@@ -1013,6 +1055,9 @@ void Temperature::updateTemperaturesFromRawValues() {
1013 1055
   #if HAS_TEMP_BED
1014 1056
     current_temperature_bed = Temperature::analog2tempBed(current_temperature_bed_raw);
1015 1057
   #endif
1058
+  #if HAS_TEMP_CHAMBER
1059
+    current_temperature_chamber = Temperature::analog2tempChamber(current_temperature_chamber_raw);
1060
+  #endif
1016 1061
   #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
1017 1062
     redundant_temperature = Temperature::analog2temp(redundant_temperature_raw, 1);
1018 1063
   #endif
@@ -1076,7 +1121,7 @@ void Temperature::init() {
1076 1121
     inited = true;
1077 1122
   #endif
1078 1123
 
1079
-  #if MB(RUMBA) && (TEMP_SENSOR_0 == -1 || TEMP_SENSOR_1 == -1 || TEMP_SENSOR_2 == -1 || TEMP_SENSOR_BED == -1)
1124
+  #if MB(RUMBA) && (TEMP_SENSOR_0 == -1 || TEMP_SENSOR_1 == -1 || TEMP_SENSOR_2 == -1 || TEMP_SENSOR_BED == -1 || TEMP_SENSOR_CHAMBER == -1)
1080 1125
     // Disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector
1081 1126
     MCUCR = _BV(JTD);
1082 1127
     MCUCR = _BV(JTD);
@@ -1162,6 +1207,9 @@ void Temperature::init() {
1162 1207
   #if HAS_TEMP_BED
1163 1208
     HAL_ANALOG_SELECT(TEMP_BED_PIN);
1164 1209
   #endif
1210
+  #if HAS_TEMP_CHAMBER
1211
+    HAL_ANALOG_SELECT(TEMP_CHAMBER_PIN);
1212
+  #endif
1165 1213
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
1166 1214
     HAL_ANALOG_SELECT(FILWIDTH_PIN);
1167 1215
   #endif
@@ -1227,6 +1275,16 @@ void Temperature::init() {
1227 1275
       SET_OUTPUT(E4_AUTO_FAN_PIN);
1228 1276
     #endif
1229 1277
   #endif
1278
+  #if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_0 && !AUTO_CHAMBER_IS_1 && !AUTO_CHAMBER_IS_2 && !AUTO_CHAMBER_IS_3 && ! AUTO_CHAMBER_IS_4
1279
+    #if CHAMBER_AUTO_FAN_PIN == FAN1_PIN
1280
+      SET_OUTPUT(CHAMBER_AUTO_FAN_PIN);
1281
+      #if ENABLED(FAST_PWM_FAN)
1282
+        setPwmFrequency(CHAMBER_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1283
+      #endif
1284
+    #else
1285
+      SET_OUTPUT(CHAMBER_AUTO_FAN_PIN);
1286
+    #endif
1287
+  #endif
1230 1288
 
1231 1289
   // Wait for temperature measurement to settle
1232 1290
   delay(250);
@@ -1630,6 +1688,7 @@ void Temperature::set_current_temp_raw() {
1630 1688
     #endif
1631 1689
   #endif
1632 1690
   current_temperature_bed_raw = raw_temp_bed_value;
1691
+  current_temperature_chamber_raw = raw_temp_chamber_value;
1633 1692
   temp_meas_ready = true;
1634 1693
 }
1635 1694
 
@@ -1994,6 +2053,15 @@ void Temperature::isr() {
1994 2053
         break;
1995 2054
     #endif
1996 2055
 
2056
+    #if HAS_TEMP_CHAMBER
2057
+      case PrepareTemp_CHAMBER:
2058
+        HAL_START_ADC(TEMP_CHAMBER_PIN);
2059
+        break;
2060
+      case MeasureTemp_CHAMBER:
2061
+        raw_temp_chamber_value += ADC;
2062
+        break;
2063
+    #endif
2064
+
1997 2065
     #if HAS_TEMP_1
1998 2066
       case PrepareTemp_1:
1999 2067
         HAL_START_ADC(TEMP_1_PIN);
@@ -2080,6 +2148,7 @@ void Temperature::isr() {
2080 2148
 
2081 2149
     ZERO(raw_temp_value);
2082 2150
     raw_temp_bed_value = 0;
2151
+    raw_temp_chamber_value = 0;
2083 2152
 
2084 2153
     #define TEMPDIR(N) ((HEATER_##N##_RAW_LO_TEMP) > (HEATER_##N##_RAW_HI_TEMP) ? -1 : 1)
2085 2154
 
@@ -2191,15 +2260,17 @@ void Temperature::isr() {
2191 2260
     #if NUM_SERIAL > 1
2192 2261
       , const int8_t port=-1
2193 2262
     #endif
2194
-    , const int8_t e=-2
2263
+    , const int8_t e=-3
2195 2264
   ) {
2196
-    #if !(HAS_TEMP_BED && HAS_TEMP_HOTEND) && HOTENDS <= 1
2265
+    #if !(HAS_TEMP_BED && HAS_TEMP_HOTEND && HAS_TEMP_CHAMBER) && HOTENDS <= 1
2197 2266
       UNUSED(e);
2198 2267
     #endif
2199 2268
 
2200 2269
     SERIAL_PROTOCOLCHAR_P(port, ' ');
2201 2270
     SERIAL_PROTOCOLCHAR_P(port,
2202
-      #if HAS_TEMP_BED && HAS_TEMP_HOTEND
2271
+      #if HAS_TEMP_CHAMBER && HAS_TEMP_BED && HAS_TEMP_HOTEND
2272
+        e == -2 ? 'C' : e == -1 ? 'B' : 'T'
2273
+      #elif HAS_TEMP_BED && HAS_TEMP_HOTEND
2203 2274
         e == -1 ? 'B' : 'T'
2204 2275
       #elif HAS_TEMP_HOTEND
2205 2276
         'T'
@@ -2246,6 +2317,14 @@ void Temperature::isr() {
2246 2317
         , -1 // BED
2247 2318
       );
2248 2319
     #endif
2320
+    #if HAS_TEMP_CHAMBER
2321
+      print_heater_state(degChamber(), 0
2322
+        #if ENABLED(SHOW_TEMP_ADC_VALUES)
2323
+          , rawChamberTemp()
2324
+        #endif
2325
+        , -2 // CHAMBER
2326
+      );
2327
+    #endif
2249 2328
     #if HOTENDS > 1
2250 2329
       HOTEND_LOOP() print_heater_state(degHotend(e), degTargetHotend(e)
2251 2330
         #if ENABLED(SHOW_TEMP_ADC_VALUES)

+ 12
- 0
Marlin/src/module/temperature.h Wyświetl plik

@@ -74,6 +74,10 @@ enum ADCSensorState : char {
74 74
     PrepareTemp_BED,
75 75
     MeasureTemp_BED,
76 76
   #endif
77
+  #if HAS_TEMP_CHAMBER
78
+    PrepareTemp_CHAMBER,
79
+    MeasureTemp_CHAMBER,
80
+  #endif
77 81
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
78 82
     Prepare_FILWIDTH,
79 83
     Measure_FILWIDTH,
@@ -113,9 +117,11 @@ class Temperature {
113 117
   public:
114 118
 
115 119
     static float current_temperature[HOTENDS],
120
+                 current_temperature_chamber,
116 121
                  current_temperature_bed;
117 122
     static int16_t current_temperature_raw[HOTENDS],
118 123
                    target_temperature[HOTENDS],
124
+                   current_temperature_chamber_raw,
119 125
                    current_temperature_bed_raw;
120 126
 
121 127
     #if ENABLED(AUTO_POWER_E_FANS)
@@ -244,6 +250,7 @@ class Temperature {
244 250
     #endif
245 251
 
246 252
     static uint16_t raw_temp_value[MAX_EXTRUDERS],
253
+                    raw_temp_chamber_value,
247 254
                     raw_temp_bed_value;
248 255
 
249 256
     // Init min and max temp with extreme values to prevent false errors during startup
@@ -315,6 +322,9 @@ class Temperature {
315 322
     #if HAS_TEMP_BED
316 323
       static float analog2tempBed(const int raw);
317 324
     #endif
325
+    #if HAS_TEMP_CHAMBER
326
+      static float analog2tempChamber(const int raw);
327
+    #endif
318 328
 
319 329
     /**
320 330
      * Called from the Temperature ISR
@@ -369,6 +379,7 @@ class Temperature {
369 379
       return current_temperature[HOTEND_INDEX];
370 380
     }
371 381
     FORCE_INLINE static float degBed() { return current_temperature_bed; }
382
+    FORCE_INLINE static float degChamber() { return current_temperature_chamber; }
372 383
 
373 384
     #if ENABLED(SHOW_TEMP_ADC_VALUES)
374 385
       FORCE_INLINE static int16_t rawHotendTemp(const uint8_t e) {
@@ -378,6 +389,7 @@ class Temperature {
378 389
         return current_temperature_raw[HOTEND_INDEX];
379 390
       }
380 391
       FORCE_INLINE static int16_t rawBedTemp() { return current_temperature_bed_raw; }
392
+      FORCE_INLINE static int16_t rawChamberTemp() { return current_temperature_chamber_raw; }
381 393
     #endif
382 394
 
383 395
     FORCE_INLINE static int16_t degTargetHotend(const uint8_t e) {

+ 4
- 0
Marlin/src/module/thermistor/thermistor_20.h Wyświetl plik

@@ -47,6 +47,10 @@
47 47
   #define HEATER_BED_RAW_HI_TEMP 16383
48 48
   #define HEATER_BED_RAW_LO_TEMP 0
49 49
 #endif
50
+#if THERMISTORCHAMBER == 20
51
+  #define HEATER_CHAMBER_RAW_HI_TEMP 16383
52
+  #define HEATER_CHAMBER_RAW_LO_TEMP 0
53
+#endif
50 54
 const short temptable_20[][2] PROGMEM = {
51 55
   { OV(  0),    0 },
52 56
   { OV(227),    1 },

+ 19
- 1
Marlin/src/module/thermistor/thermistors.h Wyświetl plik

@@ -28,7 +28,7 @@
28 28
 #define OVERSAMPLENR 16
29 29
 #define OV(N) int16_t((N) * (OVERSAMPLENR))
30 30
 
31
-#define ANY_THERMISTOR_IS(n) (THERMISTORHEATER_0 == n || THERMISTORHEATER_1 == n || THERMISTORHEATER_2 == n || THERMISTORHEATER_3 == n || THERMISTORHEATER_4 == n || THERMISTORBED == n)
31
+#define ANY_THERMISTOR_IS(n) (THERMISTORHEATER_0 == n || THERMISTORHEATER_1 == n || THERMISTORHEATER_2 == n || THERMISTORHEATER_3 == n || THERMISTORHEATER_4 == n || THERMISTORBED == n || THERMISTORCHAMBER == n)
32 32
 
33 33
 // Pt1000 and Pt100 handling
34 34
 //
@@ -190,6 +190,15 @@
190 190
   #endif
191 191
 #endif
192 192
 
193
+#ifdef THERMISTORCHAMBER
194
+  #define CHAMBERTEMPTABLE TT_NAME(THERMISTORCHAMBER)
195
+  #define CHAMBERTEMPTABLE_LEN COUNT(CHAMBERTEMPTABLE)
196
+#else
197
+  #ifdef CHAMBER_USES_THERMISTOR
198
+    #error "No chamber thermistor table specified"
199
+  #endif
200
+#endif
201
+
193 202
 // Set the high and low raw values for the heaters
194 203
 // For thermistors the highest temperature results in the lowest ADC value
195 204
 // For thermocouples the highest temperature results in the highest ADC value
@@ -247,5 +256,14 @@
247 256
     #define HEATER_BED_RAW_LO_TEMP 0
248 257
   #endif
249 258
 #endif
259
+#ifndef HEATER_CHAMBER_RAW_HI_TEMP
260
+  #ifdef CHAMBER_USES_THERMISTOR
261
+    #define HEATER_CHAMBER_RAW_HI_TEMP 0
262
+    #define HEATER_CHAMBER_RAW_LO_TEMP 16383
263
+  #else
264
+    #define HEATER_CHAMBER_RAW_HI_TEMP 16383
265
+    #define HEATER_CHAMBER_RAW_LO_TEMP 0
266
+  #endif
267
+#endif
250 268
 
251 269
 #endif // THERMISTORS_H_

+ 7
- 0
Marlin/src/pins/pins.h Wyświetl plik

@@ -618,6 +618,13 @@
618 618
     #define E4_AUTO_FAN_PIN -1
619 619
   #endif
620 620
 #endif
621
+#ifndef CHAMBER_AUTO_FAN_PIN
622
+  #ifdef ORIG_CHAMBER_AUTO_FAN_PIN
623
+    #define CHAMBER_AUTO_FAN_PIN ORIG_CHAMBER_AUTO_FAN_PIN
624
+  #else
625
+    #define CHAMBER_AUTO_FAN_PIN -1
626
+  #endif
627
+#endif
621 628
 
622 629
 // List of pins which to ignore when asked to change by gcode, 0 and 1 are RX and TX, do not mess with those!
623 630
 #define _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN, E0_MS1_PIN, E0_MS2_PIN, E0_CS_PIN,

+ 3
- 3
Marlin/src/pins/pinsDebug_list.h Wyświetl plik

@@ -83,9 +83,6 @@
83 83
 #if PIN_EXISTS(TEMP_CHAMBER) && TEMP_CHAMBER_PIN < NUM_ANALOG_INPUTS
84 84
   REPORT_NAME_ANALOG(__LINE__, TEMP_CHAMBER_PIN)
85 85
 #endif
86
-#if PIN_EXISTS(TEMP_X) && TEMP_X_PIN < NUM_ANALOG_INPUTS
87
-  REPORT_NAME_ANALOG(__LINE__, TEMP_X_PIN)
88
-#endif
89 86
 #if PIN_EXISTS(ADC_KEYPAD) && ADC_KEYPAD_PIN < NUM_ANALOG_INPUTS
90 87
   REPORT_NAME_ANALOG(__LINE__, ADC_KEYPAD_PIN)
91 88
 #endif
@@ -166,6 +163,9 @@
166 163
 #if PIN_EXISTS(CASE_LIGHT)
167 164
   REPORT_NAME_DIGITAL(__LINE__, CASE_LIGHT_PIN)
168 165
 #endif
166
+#if PIN_EXISTS(CHAMBER_AUTO_FAN)
167
+  REPORT_NAME_DIGITAL(__LINE__, CHAMBER_AUTO_FAN_PIN)
168
+#endif
169 169
 #if PIN_EXISTS(CONTROLLER_FAN)
170 170
   REPORT_NAME_DIGITAL(__LINE__, CONTROLLER_FAN_PIN)
171 171
 #endif

+ 1
- 0
Marlin/src/pins/pins_RUMBA.h Wyświetl plik

@@ -107,6 +107,7 @@
107 107
 
108 108
 // optional for extruder 4 or chamber:
109 109
 //#define TEMP_X_PIN         12   // Analog Input (default connector for thermistor *T3* on rumba board is used)
110
+//#define TEMP_CHAMBER_PIN   12   // Analog Input (default connector for thermistor *T3* on rumba board is used)
110 111
 
111 112
 #if TEMP_SENSOR_BED == -1
112 113
   #define TEMP_BED_PIN      7   // Analog Input (connector *K3* on RUMBA thermocouple ADD ON is used <-- this can't be used when TEMP_SENSOR_2 is defined as thermocouple)

Ładowanie…
Anuluj
Zapisz