Browse Source

✨ Add TEMP_SENSOR_BOARD (#22279)

Katelyn Schiesser 4 years ago
parent
commit
2f6c8e1176
No account linked to committer's email address

+ 5
- 10
Marlin/Configuration.h View File

474
  *                NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
474
  *                NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
475
  *   201 : Pt100  with circuit in Overlord, similar to Ultimainboard V2.x
475
  *   201 : Pt100  with circuit in Overlord, similar to Ultimainboard V2.x
476
  *
476
  *
477
- *  Custom/Dummy/Other Thermos
477
+ *  Custom/Dummy/Other Thermal Sensors
478
  *  ------
478
  *  ------
479
  *     0 : not used
479
  *     0 : not used
480
  *  1000 : Custom - Specify parameters in Configuration_adv.h
480
  *  1000 : Custom - Specify parameters in Configuration_adv.h
496
 #define TEMP_SENSOR_PROBE 0
496
 #define TEMP_SENSOR_PROBE 0
497
 #define TEMP_SENSOR_CHAMBER 0
497
 #define TEMP_SENSOR_CHAMBER 0
498
 #define TEMP_SENSOR_COOLER 0
498
 #define TEMP_SENSOR_COOLER 0
499
+#define TEMP_SENSOR_BOARD 0
499
 #define TEMP_SENSOR_REDUNDANT 0
500
 #define TEMP_SENSOR_REDUNDANT 0
500
 
501
 
501
 // Dummy thermistor constant temperature readings, for use with 998 and 999
502
 // Dummy thermistor constant temperature readings, for use with 998 and 999
528
  * the print will be aborted. Whichever sensor is selected will have its normal functions disabled; i.e. selecting
529
  * the print will be aborted. Whichever sensor is selected will have its normal functions disabled; i.e. selecting
529
  * the Bed sensor (-1) will disable bed heating/monitoring.
530
  * the Bed sensor (-1) will disable bed heating/monitoring.
530
  *
531
  *
531
- * Use the following to select temp sensors:
532
- *    -5 : Cooler
533
- *    -4 : Probe
534
- *    -3 : not used
535
- *    -2 : Chamber
536
- *    -1 : Bed
537
- *   0-7 : E0 through E7
532
+ * For selecting source/target use: COOLER, PROBE, BOARD, CHAMBER, BED, E0, E1, E2, E3, E4, E5, E6, E7
538
  */
533
  */
539
 #if TEMP_SENSOR_REDUNDANT
534
 #if TEMP_SENSOR_REDUNDANT
540
-  #define TEMP_SENSOR_REDUNDANT_SOURCE     1  // The sensor that will provide the redundant reading.
541
-  #define TEMP_SENSOR_REDUNDANT_TARGET     0  // The sensor that we are providing a redundant reading for.
535
+  #define TEMP_SENSOR_REDUNDANT_SOURCE    E1  // The sensor that will provide the redundant reading.
536
+  #define TEMP_SENSOR_REDUNDANT_TARGET    E0  // The sensor that we are providing a redundant reading for.
542
   #define TEMP_SENSOR_REDUNDANT_MAX_DIFF  10  // (°C) Temperature difference that will trigger a print abort.
537
   #define TEMP_SENSOR_REDUNDANT_MAX_DIFF  10  // (°C) Temperature difference that will trigger a print abort.
543
 #endif
538
 #endif
544
 
539
 

+ 31
- 9
Marlin/Configuration_adv.h View File

125
   #define PROBE_BETA                   3950    // Beta value
125
   #define PROBE_BETA                   3950    // Beta value
126
 #endif
126
 #endif
127
 
127
 
128
+#if TEMP_SENSOR_BOARD == 1000
129
+  #define BOARD_PULLUP_RESISTOR_OHMS   4700    // Pullup resistor
130
+  #define BOARD_RESISTANCE_25C_OHMS    100000  // Resistance at 25C
131
+  #define BOARD_BETA                   3950    // Beta value
132
+#endif
133
+
128
 #if TEMP_SENSOR_REDUNDANT == 1000
134
 #if TEMP_SENSOR_REDUNDANT == 1000
129
   #define REDUNDANT_PULLUP_RESISTOR_OHMS   4700    // Pullup resistor
135
   #define REDUNDANT_PULLUP_RESISTOR_OHMS   4700    // Pullup resistor
130
   #define REDUNDANT_RESISTANCE_25C_OHMS    100000  // Resistance at 25C
136
   #define REDUNDANT_RESISTANCE_25C_OHMS    100000  // Resistance at 25C
225
 #endif
231
 #endif
226
 
232
 
227
 //
233
 //
234
+// Motherboard Sensor options
235
+//
236
+#if TEMP_SENSOR_BOARD
237
+  #define THERMAL_PROTECTION_BOARD   // Halt the printer if the board sensor leaves the temp range below.
238
+  #define BOARD_MINTEMP           8  // (°C)
239
+  #define BOARD_MAXTEMP          70  // (°C)
240
+  #ifndef TEMP_BOARD_PIN
241
+    //#define TEMP_BOARD_PIN -1      // Board temp sensor pin, if not set in pins file.
242
+  #endif
243
+#endif
244
+
245
+//
228
 // Laser Coolant Flow Meter
246
 // Laser Coolant Flow Meter
229
 //
247
 //
230
 //#define LASER_COOLANT_FLOW_METER
248
 //#define LASER_COOLANT_FLOW_METER
480
  */
498
  */
481
 //#define USE_CONTROLLER_FAN
499
 //#define USE_CONTROLLER_FAN
482
 #if ENABLED(USE_CONTROLLER_FAN)
500
 #if ENABLED(USE_CONTROLLER_FAN)
483
-  //#define CONTROLLER_FAN_PIN -1        // Set a custom pin for the controller fan
484
-  //#define CONTROLLER_FAN_USE_Z_ONLY    // With this option only the Z axis is considered
485
-  //#define CONTROLLER_FAN_IGNORE_Z      // Ignore Z stepper. Useful when stepper timeout is disabled.
486
-  #define CONTROLLERFAN_SPEED_MIN      0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)
487
-  #define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
488
-  #define CONTROLLERFAN_SPEED_IDLE     0 // (0-255) Idle speed, used when motors are disabled
489
-  #define CONTROLLERFAN_IDLE_TIME     60 // (seconds) Extra time to keep the fan running after disabling motors
490
-  //#define CONTROLLER_FAN_EDITABLE      // Enable M710 configurable settings
501
+  //#define CONTROLLER_FAN_PIN -1           // Set a custom pin for the controller fan
502
+  //#define CONTROLLER_FAN_USE_Z_ONLY       // With this option only the Z axis is considered
503
+  //#define CONTROLLER_FAN_IGNORE_Z         // Ignore Z stepper. Useful when stepper timeout is disabled.
504
+  #define CONTROLLERFAN_SPEED_MIN         0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)
505
+  #define CONTROLLERFAN_SPEED_ACTIVE    255 // (0-255) Active speed, used when any motor is enabled
506
+  #define CONTROLLERFAN_SPEED_IDLE        0 // (0-255) Idle speed, used when motors are disabled
507
+  #define CONTROLLERFAN_IDLE_TIME        60 // (seconds) Extra time to keep the fan running after disabling motors
508
+
509
+  // Use TEMP_SENSOR_BOARD as a trigger for enabling the controller fan
510
+  //#define CONTROLLER_FAN_MIN_BOARD_TEMP 40  // (°C) Turn on the fan if the board reaches this temperature
511
+
512
+  //#define CONTROLLER_FAN_EDITABLE         // Enable M710 configurable settings
491
   #if ENABLED(CONTROLLER_FAN_EDITABLE)
513
   #if ENABLED(CONTROLLER_FAN_EDITABLE)
492
-    #define CONTROLLER_FAN_MENU          // Enable the Controller Fan submenu
514
+    #define CONTROLLER_FAN_MENU             // Enable the Controller Fan submenu
493
   #endif
515
   #endif
494
 #endif
516
 #endif
495
 
517
 

+ 2
- 2
Marlin/src/MarlinCore.cpp View File

1168
   SETUP_RUN(HAL_init());
1168
   SETUP_RUN(HAL_init());
1169
 
1169
 
1170
   // Init and disable SPI thermocouples; this is still needed
1170
   // Init and disable SPI thermocouples; this is still needed
1171
-  #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 0)
1171
+  #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E0))
1172
     OUT_WRITE(TEMP_0_CS_PIN, HIGH);  // Disable
1172
     OUT_WRITE(TEMP_0_CS_PIN, HIGH);  // Disable
1173
   #endif
1173
   #endif
1174
-  #if TEMP_SENSOR_1_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 1)
1174
+  #if TEMP_SENSOR_1_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E1))
1175
     OUT_WRITE(TEMP_1_CS_PIN, HIGH);
1175
     OUT_WRITE(TEMP_1_CS_PIN, HIGH);
1176
   #endif
1176
   #endif
1177
 
1177
 

+ 3
- 0
Marlin/src/core/language.h View File

231
 #define STR_HEATER_BED                      "bed"
231
 #define STR_HEATER_BED                      "bed"
232
 #define STR_HEATER_CHAMBER                  "chamber"
232
 #define STR_HEATER_CHAMBER                  "chamber"
233
 #define STR_COOLER                          "cooler"
233
 #define STR_COOLER                          "cooler"
234
+#define STR_MOTHERBOARD                     "motherboard"
235
+#define STR_PROBE                           "probe"
236
+#define STR_REDUNDANT                       "redundant "
234
 #define STR_LASER_TEMP                      "laser temperature"
237
 #define STR_LASER_TEMP                      "laser temperature"
235
 
238
 
236
 #define STR_STOPPED_HEATER                  ", system stopped! Heater_ID: "
239
 #define STR_STOPPED_HEATER                  ", system stopped! Heater_ID: "

+ 8
- 3
Marlin/src/feature/controllerfan.cpp View File

76
       )
76
       )
77
     );
77
     );
78
 
78
 
79
-    // If any of the drivers or the heated bed are enabled...
80
-    if (motor_on || TERN0(HAS_HEATED_BED, thermalManager.temp_bed.soft_pwm_amount > 0))
81
-      lastMotorOn = ms; //... set time to NOW so the fan will turn on
79
+    // If any triggers for the controller fan are true...
80
+    //   - At least one stepper driver is enabled
81
+    //   - The heated bed is enabled
82
+    //   - TEMP_SENSOR_BOARD is reporting >= CONTROLLER_FAN_MIN_BOARD_TEMP
83
+    if ( motor_on
84
+      || TERN0(HAS_HEATED_BED, thermalManager.temp_bed.soft_pwm_amount > 0)
85
+      || TERN0(HAS_CONTROLLER_FAN_MIN_BOARD_TEMP, thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP)
86
+    ) lastMotorOn = ms; //... set time to NOW so the fan will turn on
82
 
87
 
83
     // Fan Settings. Set fan > 0:
88
     // Fan Settings. Set fan > 0:
84
     //  - If AutoMode is on and steppers have been enabled for CONTROLLERFAN_IDLE_TIME seconds.
89
     //  - If AutoMode is on and steppers have been enabled for CONTROLLERFAN_IDLE_TIME seconds.

+ 23
- 0
Marlin/src/inc/Conditionals_adv.h View File

125
   #undef THERMAL_PROTECTION_COOLER
125
   #undef THERMAL_PROTECTION_COOLER
126
 #endif
126
 #endif
127
 
127
 
128
+// Usurp a sensor to do redundant readings
129
+#if TEMP_SENSOR_REDUNDANT
130
+  #define REDUNDANT_TEMP_MATCH(M,N) (TEMP_SENSOR_REDUNDANT_##M == HID_##N)
131
+#else
132
+  #define REDUNDANT_TEMP_MATCH(...) 0
133
+#endif
134
+
135
+// Temperature sensor IDs
136
+#define HID_REDUNDANT -6
137
+#define HID_COOLER    -5
138
+#define HID_PROBE     -4
139
+#define HID_BOARD     -3
140
+#define HID_CHAMBER   -2
141
+#define HID_BED       -1
142
+#define HID_E0         0
143
+#define HID_E1         1
144
+#define HID_E2         2
145
+#define HID_E3         3
146
+#define HID_E4         4
147
+#define HID_E5         5
148
+#define HID_E6         6
149
+#define HID_E7         7
150
+
128
 #if ENABLED(MIXING_EXTRUDER) && (ENABLED(RETRACT_SYNC_MIXING) || BOTH(FILAMENT_LOAD_UNLOAD_GCODES, FILAMENT_UNLOAD_ALL_EXTRUDERS))
151
 #if ENABLED(MIXING_EXTRUDER) && (ENABLED(RETRACT_SYNC_MIXING) || BOTH(FILAMENT_LOAD_UNLOAD_GCODES, FILAMENT_UNLOAD_ALL_EXTRUDERS))
129
   #define HAS_MIXER_SYNC_CHANNEL 1
152
   #define HAS_MIXER_SYNC_CHANNEL 1
130
 #endif
153
 #endif

+ 58
- 33
Marlin/src/inc/Conditionals_post.h View File

532
 // Usurp a sensor to do redundant readings
532
 // Usurp a sensor to do redundant readings
533
 #if TEMP_SENSOR_REDUNDANT
533
 #if TEMP_SENSOR_REDUNDANT
534
   #ifndef TEMP_SENSOR_REDUNDANT_SOURCE
534
   #ifndef TEMP_SENSOR_REDUNDANT_SOURCE
535
-    #define TEMP_SENSOR_REDUNDANT_SOURCE 1
535
+    #define TEMP_SENSOR_REDUNDANT_SOURCE E1
536
   #endif
536
   #endif
537
   #ifndef TEMP_SENSOR_REDUNDANT_TARGET
537
   #ifndef TEMP_SENSOR_REDUNDANT_TARGET
538
-    #define TEMP_SENSOR_REDUNDANT_TARGET 0
538
+    #define TEMP_SENSOR_REDUNDANT_TARGET E0
539
   #endif
539
   #endif
540
   #if !PIN_EXISTS(TEMP_REDUNDANT)
540
   #if !PIN_EXISTS(TEMP_REDUNDANT)
541
     #ifndef TEMP_SENSOR_REDUNDANT_MAX_DIFF
541
     #ifndef TEMP_SENSOR_REDUNDANT_MAX_DIFF
542
       #define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10
542
       #define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10
543
     #endif
543
     #endif
544
-    #if TEMP_SENSOR_REDUNDANT_SOURCE == -5
544
+    #if REDUNDANT_TEMP_MATCH(SOURCE, COOLER)
545
       #if !PIN_EXISTS(TEMP_COOLER)
545
       #if !PIN_EXISTS(TEMP_COOLER)
546
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to COOLER requires TEMP_COOLER_PIN."
546
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to COOLER requires TEMP_COOLER_PIN."
547
       #else
547
       #else
548
         #define TEMP_REDUNDANT_PIN TEMP_COOLER_PIN
548
         #define TEMP_REDUNDANT_PIN TEMP_COOLER_PIN
549
       #endif
549
       #endif
550
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == -4
550
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, PROBE)
551
       #if !PIN_EXISTS(TEMP_PROBE)
551
       #if !PIN_EXISTS(TEMP_PROBE)
552
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to PROBE requires TEMP_PROBE_PIN."
552
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to PROBE requires TEMP_PROBE_PIN."
553
       #else
553
       #else
554
         #define TEMP_REDUNDANT_PIN TEMP_PROBE_PIN
554
         #define TEMP_REDUNDANT_PIN TEMP_PROBE_PIN
555
       #endif
555
       #endif
556
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == -2
556
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, CHAMBER)
557
       #if !PIN_EXISTS(TEMP_CHAMBER)
557
       #if !PIN_EXISTS(TEMP_CHAMBER)
558
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to CHAMBER requires TEMP_CHAMBER_PIN."
558
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to CHAMBER requires TEMP_CHAMBER_PIN."
559
       #else
559
       #else
560
         #define TEMP_REDUNDANT_PIN TEMP_CHAMBER_PIN
560
         #define TEMP_REDUNDANT_PIN TEMP_CHAMBER_PIN
561
       #endif
561
       #endif
562
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == -1
562
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, BED)
563
       #if !PIN_EXISTS(TEMP_BED)
563
       #if !PIN_EXISTS(TEMP_BED)
564
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to BED requires TEMP_BED_PIN."
564
         #error "TEMP_SENSOR_REDUNDANT_SOURCE set to BED requires TEMP_BED_PIN."
565
       #else
565
       #else
566
         #define TEMP_REDUNDANT_PIN TEMP_BED_PIN
566
         #define TEMP_REDUNDANT_PIN TEMP_BED_PIN
567
       #endif
567
       #endif
568
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 0
568
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E0)
569
       #if !PIN_EXISTS(TEMP_0)
569
       #if !PIN_EXISTS(TEMP_0)
570
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 0 requires TEMP_0_PIN."
570
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E0 requires TEMP_0_PIN."
571
       #else
571
       #else
572
         #define TEMP_REDUNDANT_PIN TEMP_0_PIN
572
         #define TEMP_REDUNDANT_PIN TEMP_0_PIN
573
       #endif
573
       #endif
574
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 1
574
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E1)
575
       #if !PIN_EXISTS(TEMP_1)
575
       #if !PIN_EXISTS(TEMP_1)
576
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 1 requires TEMP_1_PIN."
576
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E1 requires TEMP_1_PIN."
577
       #else
577
       #else
578
         #define TEMP_REDUNDANT_PIN TEMP_1_PIN
578
         #define TEMP_REDUNDANT_PIN TEMP_1_PIN
579
       #endif
579
       #endif
580
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 2
580
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E2)
581
       #if !PIN_EXISTS(TEMP_2)
581
       #if !PIN_EXISTS(TEMP_2)
582
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 2 requires TEMP_2_PIN."
582
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E2 requires TEMP_2_PIN."
583
       #else
583
       #else
584
         #define TEMP_REDUNDANT_PIN TEMP_2_PIN
584
         #define TEMP_REDUNDANT_PIN TEMP_2_PIN
585
       #endif
585
       #endif
586
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 3
586
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E3)
587
       #if !PIN_EXISTS(TEMP_3)
587
       #if !PIN_EXISTS(TEMP_3)
588
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 3 requires TEMP_3_PIN."
588
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E3 requires TEMP_3_PIN."
589
       #else
589
       #else
590
         #define TEMP_REDUNDANT_PIN TEMP_3_PIN
590
         #define TEMP_REDUNDANT_PIN TEMP_3_PIN
591
       #endif
591
       #endif
592
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 4
592
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E4)
593
       #if !PIN_EXISTS(TEMP_4)
593
       #if !PIN_EXISTS(TEMP_4)
594
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 4 requires TEMP_4_PIN."
594
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E4 requires TEMP_4_PIN."
595
       #else
595
       #else
596
         #define TEMP_REDUNDANT_PIN TEMP_4_PIN
596
         #define TEMP_REDUNDANT_PIN TEMP_4_PIN
597
       #endif
597
       #endif
598
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 5
598
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E5)
599
       #if !PIN_EXISTS(TEMP_5)
599
       #if !PIN_EXISTS(TEMP_5)
600
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 5 requires TEMP_5_PIN."
600
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E5 requires TEMP_5_PIN."
601
       #else
601
       #else
602
         #define TEMP_REDUNDANT_PIN TEMP_5_PIN
602
         #define TEMP_REDUNDANT_PIN TEMP_5_PIN
603
       #endif
603
       #endif
604
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 6
604
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E6)
605
       #if !PIN_EXISTS(TEMP_6)
605
       #if !PIN_EXISTS(TEMP_6)
606
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 6 requires TEMP_6_PIN."
606
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E6 requires TEMP_6_PIN."
607
       #else
607
       #else
608
         #define TEMP_REDUNDANT_PIN TEMP_6_PIN
608
         #define TEMP_REDUNDANT_PIN TEMP_6_PIN
609
       #endif
609
       #endif
610
-    #elif TEMP_SENSOR_REDUNDANT_SOURCE == 7
610
+    #elif REDUNDANT_TEMP_MATCH(SOURCE, E7)
611
       #if !PIN_EXISTS(TEMP_7)
611
       #if !PIN_EXISTS(TEMP_7)
612
-        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to 7 requires TEMP_7_PIN."
612
+        #error "TEMP_SENSOR_REDUNDANT_SOURCE set to E7 requires TEMP_7_PIN."
613
       #else
613
       #else
614
         #define TEMP_REDUNDANT_PIN TEMP_7_PIN
614
         #define TEMP_REDUNDANT_PIN TEMP_7_PIN
615
       #endif
615
       #endif
699
   #define TEMP_SENSOR_REDUNDANT_IS_MAX_TC 1
699
   #define TEMP_SENSOR_REDUNDANT_IS_MAX_TC 1
700
 
700
 
701
   #if TEMP_SENSOR_REDUNDANT == -5
701
   #if TEMP_SENSOR_REDUNDANT == -5
702
-    #if TEMP_SENSOR_REDUNDANT_SOURCE != 0 && TEMP_SENSOR_REDUNDANT_SOURCE != 1
702
+    #if !REDUNDANT_TEMP_MATCH(SOURCE, E0) && !REDUNDANT_TEMP_MATCH(SOURCE, E1)
703
       #error "MAX31865 Thermocouples (-5) not supported for TEMP_SENSOR_REDUNDANT_SOURCE other than TEMP_SENSOR_0/TEMP_SENSOR_1 (0/1)."
703
       #error "MAX31865 Thermocouples (-5) not supported for TEMP_SENSOR_REDUNDANT_SOURCE other than TEMP_SENSOR_0/TEMP_SENSOR_1 (0/1)."
704
     #endif
704
     #endif
705
 
705
 
707
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN    0
707
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN    0
708
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX 1024
708
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX 1024
709
   #elif TEMP_SENSOR_REDUNDANT == -3
709
   #elif TEMP_SENSOR_REDUNDANT == -3
710
-    #if TEMP_SENSOR_REDUNDANT_SOURCE != 0 && TEMP_SENSOR_REDUNDANT_SOURCE != 1
710
+    #if !REDUNDANT_TEMP_MATCH(SOURCE, E0) && !REDUNDANT_TEMP_MATCH(SOURCE, E1)
711
       #error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_REDUNDANT_SOURCE other than TEMP_SENSOR_0/TEMP_SENSOR_1 (0/1)."
711
       #error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_REDUNDANT_SOURCE other than TEMP_SENSOR_0/TEMP_SENSOR_1 (0/1)."
712
     #endif
712
     #endif
713
 
713
 
715
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN -270
715
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN -270
716
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX 1800
716
     #define TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX 1800
717
   #elif TEMP_SENSOR_REDUNDANT == -2
717
   #elif TEMP_SENSOR_REDUNDANT == -2
718
-    #if TEMP_SENSOR_REDUNDANT_SOURCE != 0 && TEMP_SENSOR_REDUNDANT_SOURCE != 1
718
+    #if !REDUNDANT_TEMP_MATCH(SOURCE, E0) && !REDUNDANT_TEMP_MATCH(SOURCE, E1)
719
       #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_REDUNDANT_SOURCE other than TEMP_SENSOR_0/TEMP_SENSOR_1 (0/1)."
719
       #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_REDUNDANT_SOURCE other than TEMP_SENSOR_0/TEMP_SENSOR_1 (0/1)."
720
     #endif
720
     #endif
721
 
721
 
725
   #endif
725
   #endif
726
 
726
 
727
   // mimic setting up the source TEMP_SENSOR
727
   // mimic setting up the source TEMP_SENSOR
728
-  #if TEMP_SENSOR_REDUNDANT_SOURCE == 0
728
+  #if REDUNDANT_TEMP_MATCH(SOURCE, E0)
729
     #define TEMP_SENSOR_0_MAX_TC_TMIN TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN
729
     #define TEMP_SENSOR_0_MAX_TC_TMIN TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN
730
     #define TEMP_SENSOR_0_MAX_TC_TMAX TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX
730
     #define TEMP_SENSOR_0_MAX_TC_TMAX TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX
731
     #ifndef MAX31865_SENSOR_WIRES_0
731
     #ifndef MAX31865_SENSOR_WIRES_0
732
       #define MAX31865_SENSOR_WIRES_0 2
732
       #define MAX31865_SENSOR_WIRES_0 2
733
     #endif
733
     #endif
734
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == 1
734
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, E1)
735
     #define TEMP_SENSOR_1_MAX_TC_TMIN TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN
735
     #define TEMP_SENSOR_1_MAX_TC_TMIN TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN
736
     #define TEMP_SENSOR_1_MAX_TC_TMAX TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX
736
     #define TEMP_SENSOR_1_MAX_TC_TMAX TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX
737
     #ifndef MAX31865_SENSOR_WIRES_1
737
     #ifndef MAX31865_SENSOR_WIRES_1
780
 #if HAS_MAX_TC
780
 #if HAS_MAX_TC
781
 
781
 
782
   // Translate old _SS, _CS, _SCK, _DO, _DI, _MISO, and _MOSI PIN defines.
782
   // Translate old _SS, _CS, _SCK, _DO, _DI, _MISO, and _MOSI PIN defines.
783
-  #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 1)
783
+  #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E1))
784
 
784
 
785
     #if !PIN_EXISTS(TEMP_0_CS) // SS, CS
785
     #if !PIN_EXISTS(TEMP_0_CS) // SS, CS
786
       #if PIN_EXISTS(MAX6675_SS)
786
       #if PIN_EXISTS(MAX6675_SS)
849
 
849
 
850
   #endif // TEMP_SENSOR_0_IS_MAX_TC
850
   #endif // TEMP_SENSOR_0_IS_MAX_TC
851
 
851
 
852
-  #if TEMP_SENSOR_1_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 1)
852
+  #if TEMP_SENSOR_1_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E1))
853
 
853
 
854
     #if !PIN_EXISTS(TEMP_1_CS) // SS2, CS2
854
     #if !PIN_EXISTS(TEMP_1_CS) // SS2, CS2
855
       #if PIN_EXISTS(MAX6675_SS2)
855
       #if PIN_EXISTS(MAX6675_SS2)
2584
 #if HAS_ADC_TEST(COOLER)
2584
 #if HAS_ADC_TEST(COOLER)
2585
   #define HAS_TEMP_ADC_COOLER 1
2585
   #define HAS_TEMP_ADC_COOLER 1
2586
 #endif
2586
 #endif
2587
+#if HAS_ADC_TEST(BOARD)
2588
+  #define HAS_TEMP_ADC_BOARD 1
2589
+#endif
2587
 #if HAS_ADC_TEST(REDUNDANT)
2590
 #if HAS_ADC_TEST(REDUNDANT)
2588
   #define HAS_TEMP_ADC_REDUNDANT 1
2591
   #define HAS_TEMP_ADC_REDUNDANT 1
2589
 #endif
2592
 #endif
2604
 #if HAS_TEMP(COOLER)
2607
 #if HAS_TEMP(COOLER)
2605
   #define HAS_TEMP_COOLER 1
2608
   #define HAS_TEMP_COOLER 1
2606
 #endif
2609
 #endif
2610
+#if HAS_TEMP(BOARD)
2611
+  #define HAS_TEMP_BOARD 1
2612
+#endif
2607
 #if HAS_TEMP(REDUNDANT)
2613
 #if HAS_TEMP(REDUNDANT)
2608
   #define HAS_TEMP_REDUNDANT 1
2614
   #define HAS_TEMP_REDUNDANT 1
2609
 #endif
2615
 #endif
2675
 #if HAS_HEATED_BED || HAS_TEMP_CHAMBER
2681
 #if HAS_HEATED_BED || HAS_TEMP_CHAMBER
2676
   #define BED_OR_CHAMBER 1
2682
   #define BED_OR_CHAMBER 1
2677
 #endif
2683
 #endif
2678
-#if HAS_TEMP_HOTEND || BED_OR_CHAMBER || HAS_TEMP_PROBE || HAS_TEMP_COOLER
2684
+
2685
+#if HAS_TEMP_HOTEND || BED_OR_CHAMBER || HAS_TEMP_PROBE || HAS_TEMP_COOLER || HAS_TEMP_BOARD
2679
   #define HAS_TEMP_SENSOR 1
2686
   #define HAS_TEMP_SENSOR 1
2680
 #endif
2687
 #endif
2681
 
2688
 
2813
 #endif
2820
 #endif
2814
 #undef _NOT_E_AUTO
2821
 #undef _NOT_E_AUTO
2815
 #undef _HAS_FAN
2822
 #undef _HAS_FAN
2816
-#if PIN_EXISTS(CONTROLLER_FAN)
2817
-  #define HAS_CONTROLLER_FAN 1
2818
-#endif
2819
 
2823
 
2820
 #if BED_OR_CHAMBER || HAS_FAN0
2824
 #if BED_OR_CHAMBER || HAS_FAN0
2821
   #define BED_OR_CHAMBER_OR_FAN 1
2825
   #define BED_OR_CHAMBER_OR_FAN 1
2892
   #define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) // Fan frequency default
2896
   #define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) // Fan frequency default
2893
 #endif
2897
 #endif
2894
 
2898
 
2899
+/**
2900
+ * Controller Fan Settings
2901
+ */
2902
+#if PIN_EXISTS(CONTROLLER_FAN)
2903
+  #define HAS_CONTROLLER_FAN 1
2904
+  #if CONTROLLER_FAN_MIN_BOARD_TEMP
2905
+    #define HAS_CONTROLLER_FAN_MIN_BOARD_TEMP 1
2906
+  #endif
2907
+#endif
2908
+
2909
+#if HAS_CONTROLLER_FAN
2910
+  #if ENABLED(CONTROLLER_FAN_USE_BOARD_TEMP)
2911
+    #define HAS_CONTROLLER_FAN_BOARD_TEMP_TRIGGER 1
2912
+    #ifndef CONTROLLER_FAN_TRIGGER_TEMP
2913
+      #define CONTROLLER_FAN_TRIGGER_TEMP 30
2914
+    #endif
2915
+  #else
2916
+    #undef CONTROLLER_FAN_TRIGGER_TEMP
2917
+  #endif
2918
+#endif
2919
+
2895
 // Servos
2920
 // Servos
2896
 #if PIN_EXISTS(SERVO0) && NUM_SERVOS > 0
2921
 #if PIN_EXISTS(SERVO0) && NUM_SERVOS > 0
2897
   #define HAS_SERVO_0 1
2922
   #define HAS_SERVO_0 1

+ 80
- 56
Marlin/src/inc/SanityCheck.h View File

583
   #error "TEMP_SENSOR_1_AS_REDUNDANT is now TEMP_SENSOR_REDUNDANT, with associated TEMP_SENSOR_REDUNDANT_* config."
583
   #error "TEMP_SENSOR_1_AS_REDUNDANT is now TEMP_SENSOR_REDUNDANT, with associated TEMP_SENSOR_REDUNDANT_* config."
584
 #elif defined(MAX_REDUNDANT_TEMP_SENSOR_DIFF)
584
 #elif defined(MAX_REDUNDANT_TEMP_SENSOR_DIFF)
585
   #error "MAX_REDUNDANT_TEMP_SENSOR_DIFF is now TEMP_SENSOR_REDUNDANT_MAX_DIFF"
585
   #error "MAX_REDUNDANT_TEMP_SENSOR_DIFF is now TEMP_SENSOR_REDUNDANT_MAX_DIFF"
586
+#elif MOTHERBOARD == BOARD_DUE3DOM_MINI && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD)
587
+  #warning "Onboard temperature sensor for BOARD_DUE3DOM_MINI has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)."
588
+#elif MOTHERBOARD == BOARD_BTT_SKR_E3_TURBO && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD)
589
+  #warning "Onboard temperature sensor for BOARD_BTT_SKR_E3_TURBO has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)."
586
 #endif
590
 #endif
587
 
591
 
588
 constexpr float arm[] = AXIS_RELATIVE_MODES;
592
 constexpr float arm[] = AXIS_RELATIVE_MODES;
1959
   #error "TEMP_SENSOR_CHAMBER 1000 requires CHAMBER_PULLUP_RESISTOR_OHMS, CHAMBER_RESISTANCE_25C_OHMS and CHAMBER_BETA in Configuration_adv.h."
1963
   #error "TEMP_SENSOR_CHAMBER 1000 requires CHAMBER_PULLUP_RESISTOR_OHMS, CHAMBER_RESISTANCE_25C_OHMS and CHAMBER_BETA in Configuration_adv.h."
1960
 #elif TEMP_SENSOR_PROBE_IS_CUSTOM && !(defined(PROBE_PULLUP_RESISTOR_OHMS) && defined(PROBE_RESISTANCE_25C_OHMS) && defined(PROBE_BETA))
1964
 #elif TEMP_SENSOR_PROBE_IS_CUSTOM && !(defined(PROBE_PULLUP_RESISTOR_OHMS) && defined(PROBE_RESISTANCE_25C_OHMS) && defined(PROBE_BETA))
1961
   #error "TEMP_SENSOR_PROBE 1000 requires PROBE_PULLUP_RESISTOR_OHMS, PROBE_RESISTANCE_25C_OHMS and PROBE_BETA in Configuration_adv.h."
1965
   #error "TEMP_SENSOR_PROBE 1000 requires PROBE_PULLUP_RESISTOR_OHMS, PROBE_RESISTANCE_25C_OHMS and PROBE_BETA in Configuration_adv.h."
1966
+#elif TEMP_SENSOR_BOARD_IS_CUSTOM && !(defined(BOARD_PULLUP_RESISTOR_OHMS) && defined(BOARD_RESISTANCE_25C_OHMS) && defined(BOARD_BETA))
1967
+  #error "TEMP_SENSOR_BOARD 1000 requires BOARD_PULLUP_RESISTOR_OHMS, BOARD_RESISTANCE_25C_OHMS and BOARD_BETA in Configuration_adv.h."
1962
 #elif TEMP_SENSOR_REDUNDANT_IS_CUSTOM && !(defined(REDUNDANT_PULLUP_RESISTOR_OHMS) && defined(REDUNDANT_RESISTANCE_25C_OHMS) && defined(REDUNDANT_BETA))
1968
 #elif TEMP_SENSOR_REDUNDANT_IS_CUSTOM && !(defined(REDUNDANT_PULLUP_RESISTOR_OHMS) && defined(REDUNDANT_RESISTANCE_25C_OHMS) && defined(REDUNDANT_BETA))
1963
   #error "TEMP_SENSOR_REDUNDANT 1000 requires REDUNDANT_PULLUP_RESISTOR_OHMS, REDUNDANT_RESISTANCE_25C_OHMS and REDUNDANT_BETA in Configuration_adv.h."
1969
   #error "TEMP_SENSOR_REDUNDANT 1000 requires REDUNDANT_PULLUP_RESISTOR_OHMS, REDUNDANT_RESISTANCE_25C_OHMS and REDUNDANT_BETA in Configuration_adv.h."
1964
 #endif
1970
 #endif
1966
 /**
1972
 /**
1967
  * Required MAX31865 settings
1973
  * Required MAX31865 settings
1968
  */
1974
  */
1969
-#if TEMP_SENSOR_0_IS_MAX31865 || (TEMP_SENSOR_REDUNDANT_IS_MAX31865 && TEMP_SENSOR_REDUNDANT_SOURCE == 0)
1975
+#if TEMP_SENSOR_0_IS_MAX31865 || (TEMP_SENSOR_REDUNDANT_IS_MAX31865 && REDUNDANT_TEMP_MATCH(SOURCE, E0))
1970
   #if !defined(MAX31865_SENSOR_WIRES_0) || !WITHIN(MAX31865_SENSOR_WIRES_0, 2, 4)
1976
   #if !defined(MAX31865_SENSOR_WIRES_0) || !WITHIN(MAX31865_SENSOR_WIRES_0, 2, 4)
1971
     #error "MAX31865_SENSOR_WIRES_0 must be defined as an integer between 2 and 4."
1977
     #error "MAX31865_SENSOR_WIRES_0 must be defined as an integer between 2 and 4."
1972
   #elif !defined(MAX31865_SENSOR_OHMS_0) || !defined(MAX31865_CALIBRATION_OHMS_0)
1978
   #elif !defined(MAX31865_SENSOR_OHMS_0) || !defined(MAX31865_CALIBRATION_OHMS_0)
1973
     #error "MAX31865_SENSOR_OHMS_0 and MAX31865_CALIBRATION_OHMS_0 must be set if TEMP_SENSOR_0/TEMP_SENSOR_REDUNDANT is MAX31865."
1979
     #error "MAX31865_SENSOR_OHMS_0 and MAX31865_CALIBRATION_OHMS_0 must be set if TEMP_SENSOR_0/TEMP_SENSOR_REDUNDANT is MAX31865."
1974
   #endif
1980
   #endif
1975
 #endif
1981
 #endif
1976
-#if TEMP_SENSOR_1_IS_MAX31865 || (TEMP_SENSOR_REDUNDANT_IS_MAX31865 && TEMP_SENSOR_REDUNDANT_SOURCE == 1)
1982
+#if TEMP_SENSOR_1_IS_MAX31865 || (TEMP_SENSOR_REDUNDANT_IS_MAX31865 && REDUNDANT_TEMP_MATCH(SOURCE, E1))
1977
   #if !defined(MAX31865_SENSOR_WIRES_1) || !WITHIN(MAX31865_SENSOR_WIRES_1, 2, 4)
1983
   #if !defined(MAX31865_SENSOR_WIRES_1) || !WITHIN(MAX31865_SENSOR_WIRES_1, 2, 4)
1978
     #error "MAX31865_SENSOR_WIRES_1 must be defined as an integer between 2 and 4."
1984
     #error "MAX31865_SENSOR_WIRES_1 must be defined as an integer between 2 and 4."
1979
   #elif !defined(MAX31865_SENSOR_OHMS_1) || !defined(MAX31865_CALIBRATION_OHMS_1)
1985
   #elif !defined(MAX31865_SENSOR_OHMS_1) || !defined(MAX31865_CALIBRATION_OHMS_1)
1989
     #error "TEMP_SENSOR_REDUNDANT requires TEMP_SENSOR_REDUNDANT_SOURCE."
1995
     #error "TEMP_SENSOR_REDUNDANT requires TEMP_SENSOR_REDUNDANT_SOURCE."
1990
   #elif !defined(TEMP_SENSOR_REDUNDANT_TARGET)
1996
   #elif !defined(TEMP_SENSOR_REDUNDANT_TARGET)
1991
     #error "TEMP_SENSOR_REDUNDANT requires TEMP_SENSOR_REDUNDANT_TARGET."
1997
     #error "TEMP_SENSOR_REDUNDANT requires TEMP_SENSOR_REDUNDANT_TARGET."
1992
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == TEMP_SENSOR_REDUNDANT_TARGET
1998
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, TEMP_SENSOR_REDUNDANT_TARGET)
1993
     #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be the same as TEMP_SENSOR_REDUNDANT_TARGET."
1999
     #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be the same as TEMP_SENSOR_REDUNDANT_TARGET."
1994
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE < -5 || TEMP_SENSOR_REDUNDANT_SOURCE > 7
1995
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE must be between -5 and 7."
1996
-  #elif TEMP_SENSOR_REDUNDANT_TARGET < -5 || TEMP_SENSOR_REDUNDANT_TARGET > 7
1997
-    #error "TEMP_SENSOR_REDUNDANT_TARGET must be between -5 and 7."
1998
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == -3
1999
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be -3 (not used)."
2000
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == -3
2001
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be -3 (not used)."
2002
   #elif HAS_MULTI_HOTEND && TEMP_SENSOR_REDUNDANT_SOURCE < HOTENDS
2000
   #elif HAS_MULTI_HOTEND && TEMP_SENSOR_REDUNDANT_SOURCE < HOTENDS
2003
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE must be after the last TEMP_SENSOR used with a hotend; you can't use a sensor in the middle of two hotends."
2004
-  #endif
2005
-
2006
-  #if TEMP_SENSOR_REDUNDANT_SOURCE == 0 && HAS_HOTEND
2007
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE can not be 0 if a hotend is used. E0 always uses TEMP_SENSOR_0."
2008
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == -5 && HAS_TEMP_COOLER
2009
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be Cooler (-5): TEMP_SENSOR_COOLER has already defined the sensor."
2010
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == -4 && HAS_TEMP_PROBE
2011
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be Probe (-4): TEMP_SENSOR_PROBE has already defined the sensor."
2012
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == -2 && HAS_TEMP_CHAMBER
2013
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be Chamber (-2): TEMP_SENSOR_CHAMBER has already defined the sensor."
2014
-  #elif TEMP_SENSOR_REDUNDANT_SOURCE == -1 && HAS_TEMP_BED
2015
-    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be Bed (-1): TEMP_SENSOR_BED has already defined the sensor."
2016
-  #endif
2017
-
2018
-  #if TEMP_SENSOR_REDUNDANT_TARGET == 0 && !PIN_EXISTS(TEMP_0)
2019
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E0 (0): requires TEMP_0_PIN"
2020
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 1 && !PIN_EXISTS(TEMP_1)
2021
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E1 (1): requires TEMP_1_PIN"
2022
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 2 && !PIN_EXISTS(TEMP_2)
2023
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E2 (2): requires TEMP_2_PIN"
2024
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 3 && !PIN_EXISTS(TEMP_3)
2025
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E3 (3): requires TEMP_3_PIN"
2026
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 4 && !PIN_EXISTS(TEMP_4)
2027
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E4 (4): requires TEMP_4_PIN"
2028
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 5 && !PIN_EXISTS(TEMP_5)
2029
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E5 (5): requires TEMP_5_PIN"
2030
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 6 && !PIN_EXISTS(TEMP_6)
2031
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E6 (6): requires TEMP_6_PIN"
2032
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == 7 && !PIN_EXISTS(TEMP_7)
2033
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E7 (7): requires TEMP_7_PIN"
2034
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == -1 && !PIN_EXISTS(TEMP_BED)
2035
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be Bed (-1): requires TEMP_BED_PIN"
2036
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == -2 && !PIN_EXISTS(TEMP_CHAMBER)
2037
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be Chamber (-2): requires TEMP_CHAMBER_PIN"
2038
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == -4 && !PIN_EXISTS(TEMP_PROBE)
2039
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be Probe (-4): requires TEMP_PROBE_PIN"
2040
-  #elif TEMP_SENSOR_REDUNDANT_TARGET == -5 && !PIN_EXISTS(TEMP_COOLER)
2041
-    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be Cooler (-5): requires TEMP_COOLER_PIN"
2042
-  #endif
2043
-
2044
-  #if TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 0 && !PIN_EXISTS(TEMP_0_CS)
2045
-    #error "TEMP_SENSOR_REDUNDANT MAX Thermocouple with TEMP_SENSOR_REDUNDANT_SOURCE 0 requires TEMP_0_CS_PIN."
2046
-  #elif TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 1 && !PIN_EXISTS(TEMP_1_CS)
2047
-    #error "TEMP_SENSOR_REDUNDANT MAX Thermocouple with TEMP_SENSOR_REDUNDANT_SOURCE 1 requires TEMP_1_CS_PIN."
2001
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE must be after the last used hotend TEMP_SENSOR."
2002
+  #endif
2003
+
2004
+  #if REDUNDANT_TEMP_MATCH(SOURCE, E0) && HAS_HOTEND
2005
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be 0 if a hotend is used. E0 always uses TEMP_SENSOR_0."
2006
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, COOLER) && HAS_TEMP_COOLER
2007
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be COOLER. TEMP_SENSOR_COOLER is in use."
2008
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, PROBE) && HAS_TEMP_PROBE
2009
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be PROBE. TEMP_SENSOR_PROBE is in use."
2010
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, BOARD) && HAS_TEMP_BOARD
2011
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be BOARD. TEMP_SENSOR_BOARD is in use."
2012
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, CHAMBER) && HAS_TEMP_CHAMBER
2013
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be CHAMBER. TEMP_SENSOR_CHAMBER is in use."
2014
+  #elif REDUNDANT_TEMP_MATCH(SOURCE, BED) && HAS_TEMP_BED
2015
+    #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be BED. TEMP_SENSOR_BED is in use."
2016
+  #endif
2017
+
2018
+  #if REDUNDANT_TEMP_MATCH(TARGET, E0) && !PIN_EXISTS(TEMP_0)
2019
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E0 without TEMP_0_PIN defined."
2020
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E1) && !PIN_EXISTS(TEMP_1)
2021
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E1 without TEMP_1_PIN defined."
2022
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E2) && !PIN_EXISTS(TEMP_2)
2023
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E2 without TEMP_2_PIN defined."
2024
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E3) && !PIN_EXISTS(TEMP_3)
2025
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E3 without TEMP_3_PIN defined."
2026
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E4) && !PIN_EXISTS(TEMP_4)
2027
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E4 without TEMP_4_PIN defined."
2028
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E5) && !PIN_EXISTS(TEMP_5)
2029
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E5 without TEMP_5_PIN defined."
2030
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E6) && !PIN_EXISTS(TEMP_6)
2031
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E6 without TEMP_6_PIN defined."
2032
+  #elif REDUNDANT_TEMP_MATCH(TARGET, E7) && !PIN_EXISTS(TEMP_7)
2033
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be E7 without TEMP_7_PIN defined."
2034
+  #elif REDUNDANT_TEMP_MATCH(TARGET, BED) && !PIN_EXISTS(TEMP_BED)
2035
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be BED without TEMP_BED_PIN defined."
2036
+  #elif REDUNDANT_TEMP_MATCH(TARGET, CHAMBER) && !PIN_EXISTS(TEMP_CHAMBER)
2037
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be CHAMBER without TEMP_CHAMBER_PIN defined."
2038
+  #elif REDUNDANT_TEMP_MATCH(TARGET, BOARD) && !PIN_EXISTS(TEMP_BOARD)
2039
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be BOARD without TEMP_BOARD_PIN defined."
2040
+  #elif REDUNDANT_TEMP_MATCH(TARGET, PROBE) && !PIN_EXISTS(TEMP_PROBE)
2041
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be PROBE without TEMP_PROBE_PIN defined."
2042
+  #elif REDUNDANT_TEMP_MATCH(TARGET, COOLER) && !PIN_EXISTS(TEMP_COOLER)
2043
+    #error "TEMP_SENSOR_REDUNDANT_TARGET can't be COOLER without TEMP_COOLER_PIN defined."
2044
+  #endif
2045
+
2046
+  #if TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E0) && !PIN_EXISTS(TEMP_0_CS)
2047
+    #error "TEMP_SENSOR_REDUNDANT MAX Thermocouple with TEMP_SENSOR_REDUNDANT_SOURCE E0 requires TEMP_0_CS_PIN."
2048
+  #elif TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E1) && !PIN_EXISTS(TEMP_1_CS)
2049
+    #error "TEMP_SENSOR_REDUNDANT MAX Thermocouple with TEMP_SENSOR_REDUNDANT_SOURCE E1 requires TEMP_1_CS_PIN."
2048
   #endif
2050
   #endif
2049
 #endif
2051
 #endif
2050
 
2052
 
2209
   #endif
2211
   #endif
2210
 #endif
2212
 #endif
2211
 
2213
 
2214
+#if TEMP_SENSOR_PROBE
2215
+  #if !PIN_EXISTS(TEMP_PROBE)
2216
+    #error "TEMP_SENSOR_PROBE requires TEMP_PROBE_PIN."
2217
+  #elif !HAS_TEMP_ADC_PROBE
2218
+    #error "TEMP_PROBE_PIN must be an ADC pin."
2219
+  #elif DISABLED(FIX_MOUNTED_PROBE)
2220
+    #error "TEMP_SENSOR_PROBE shouldn't be set without FIX_MOUNTED_PROBE."
2221
+  #endif
2222
+#endif
2223
+
2224
+#if TEMP_SENSOR_BOARD
2225
+  #if !PIN_EXISTS(TEMP_BOARD)
2226
+    #error "TEMP_SENSOR_BOARD requires TEMP_BOARD_PIN."
2227
+  #elif !HAS_TEMP_ADC_BOARD
2228
+    #error "TEMP_BOARD_PIN must be an ADC pin."
2229
+  #elif ENABLED(THERMAL_PROTECTION_BOARD) && (!defined(BOARD_MINTEMP) || !defined(BOARD_MAXTEMP))
2230
+    #error "THERMAL_PROTECTION_BOARD requires BOARD_MINTEMP and BOARD_MAXTEMP."
2231
+  #endif
2232
+#elif CONTROLLER_FAN_MIN_BOARD_TEMP
2233
+  #error "CONTROLLER_FAN_MIN_BOARD_TEMP requires TEMP_SENSOR_BOARD."
2234
+#endif
2235
+
2212
 #if ENABLED(LASER_COOLANT_FLOW_METER) && !(PIN_EXISTS(FLOWMETER) && ENABLED(LASER_FEATURE))
2236
 #if ENABLED(LASER_COOLANT_FLOW_METER) && !(PIN_EXISTS(FLOWMETER) && ENABLED(LASER_FEATURE))
2213
   #error "LASER_COOLANT_FLOW_METER requires FLOWMETER_PIN and LASER_FEATURE."
2237
   #error "LASER_COOLANT_FLOW_METER requires FLOWMETER_PIN and LASER_FEATURE."
2214
 #endif
2238
 #endif

+ 105
- 32
Marlin/src/module/temperature.cpp View File

58
 #endif
58
 #endif
59
 
59
 
60
 // MAX TC related macros
60
 // MAX TC related macros
61
-#define TEMP_SENSOR_IS_MAX(n, M) (ENABLED(TEMP_SENSOR_##n##_IS_MAX##M) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX##M) && TEMP_SENSOR_REDUNDANT_SOURCE == (n)))
62
-#define TEMP_SENSOR_IS_ANY_MAX_TC(n) (ENABLED(TEMP_SENSOR_##n##_IS_MAX_TC) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX_TC) && TEMP_SENSOR_REDUNDANT_SOURCE == n))
61
+#define TEMP_SENSOR_IS_MAX(n, M) (ENABLED(TEMP_SENSOR_##n##_IS_MAX##M) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX##M) && REDUNDANT_TEMP_MATCH(SOURCE, E##n)))
62
+#define TEMP_SENSOR_IS_ANY_MAX_TC(n) (ENABLED(TEMP_SENSOR_##n##_IS_MAX_TC) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX_TC) && REDUNDANT_TEMP_MATCH(SOURCE, E##n)))
63
 
63
 
64
 // LIB_MAX6675 can be added to the build_flags in platformio.ini to use a user-defined library
64
 // LIB_MAX6675 can be added to the build_flags in platformio.ini to use a user-defined library
65
 // If LIB_MAX6675 is not on the build_flags then raw SPI reads will be used.
65
 // If LIB_MAX6675 is not on the build_flags then raw SPI reads will be used.
262
 #endif
262
 #endif
263
 
263
 
264
 #if HAS_TEMP_REDUNDANT
264
 #if HAS_TEMP_REDUNDANT
265
-  redundant_temp_info_t Temperature::temp_redundant;
265
+  redundant_info_t Temperature::temp_redundant;
266
 #endif
266
 #endif
267
 
267
 
268
 #if ENABLED(AUTO_POWER_E_FANS)
268
 #if ENABLED(AUTO_POWER_E_FANS)
436
   probe_info_t Temperature::temp_probe; // = { 0 }
436
   probe_info_t Temperature::temp_probe; // = { 0 }
437
 #endif
437
 #endif
438
 
438
 
439
+#if HAS_TEMP_BOARD
440
+  board_info_t Temperature::temp_board; // = { 0 }
441
+  #if ENABLED(THERMAL_PROTECTION_BOARD)
442
+    int16_t Temperature::mintemp_raw_BOARD = TEMP_SENSOR_BOARD_RAW_LO_TEMP,
443
+            Temperature::maxtemp_raw_BOARD = TEMP_SENSOR_COOLER_RAW_HI_TEMP;
444
+  #endif
445
+#endif
446
+
439
 #if ENABLED(PREVENT_COLD_EXTRUSION)
447
 #if ENABLED(PREVENT_COLD_EXTRUSION)
440
   bool Temperature::allow_cold_extrude = false;
448
   bool Temperature::allow_cold_extrude = false;
441
   celsius_t Temperature::extrude_min_temp = EXTRUDE_MINTEMP;
449
   celsius_t Temperature::extrude_min_temp = EXTRUDE_MINTEMP;
937
     SERIAL_ERROR_START();
945
     SERIAL_ERROR_START();
938
     SERIAL_ECHOPGM_P(serial_msg);
946
     SERIAL_ECHOPGM_P(serial_msg);
939
     SERIAL_ECHOPGM(STR_STOPPED_HEATER);
947
     SERIAL_ECHOPGM(STR_STOPPED_HEATER);
940
-    if (heater_id >= 0)
941
-      SERIAL_ECHO(heater_id);
942
-    else if (TERN0(HAS_HEATED_CHAMBER, heater_id == H_CHAMBER))
943
-      SERIAL_ECHOPGM(STR_HEATER_CHAMBER);
944
-    else if (TERN0(HAS_COOLER, heater_id == H_COOLER))
945
-      SERIAL_ECHOPGM(STR_COOLER);
946
-    else
947
-      SERIAL_ECHOPGM(STR_HEATER_BED);
948
+
949
+    heater_id_t real_heater_id = heater_id;
950
+
951
+    #if HAS_TEMP_REDUNDANT
952
+      if (heater_id == H_REDUNDANT) {
953
+        SERIAL_ECHOPGM(STR_REDUNDANT); // print redundant and cascade to print target, too.
954
+        real_heater_id = (heater_id_t)TEMP_SENSOR_REDUNDANT_TARGET;
955
+      }
956
+    #endif
957
+
958
+    switch (real_heater_id) {
959
+      OPTCODE(HAS_TEMP_COOLER,  case H_COOLER:  SERIAL_ECHOPGM(STR_COOLER);         break)
960
+      OPTCODE(HAS_TEMP_PROBE,   case H_PROBE:   SERIAL_ECHOPGM(STR_PROBE);          break)
961
+      OPTCODE(HAS_TEMP_BOARD,   case H_BOARD:   SERIAL_ECHOPGM(STR_MOTHERBOARD);    break)
962
+      OPTCODE(HAS_TEMP_CHAMBER, case H_CHAMBER: SERIAL_ECHOPGM(STR_HEATER_CHAMBER); break)
963
+      OPTCODE(HAS_TEMP_BED,     case H_BED:     SERIAL_ECHOPGM(STR_HEATER_BED);     break)
964
+      default:
965
+        if (real_heater_id >= 0)
966
+          SERIAL_ECHOLNPAIR("E", real_heater_id);
967
+    }
948
     SERIAL_EOL();
968
     SERIAL_EOL();
949
   }
969
   }
950
 
970
 
1663
       #if TEMP_SENSOR_PROBE_IS_CUSTOM
1683
       #if TEMP_SENSOR_PROBE_IS_CUSTOM
1664
         { true, 0, 0, PROBE_PULLUP_RESISTOR_OHMS, PROBE_RESISTANCE_25C_OHMS, 0, 0, PROBE_BETA, 0 },
1684
         { true, 0, 0, PROBE_PULLUP_RESISTOR_OHMS, PROBE_RESISTANCE_25C_OHMS, 0, 0, PROBE_BETA, 0 },
1665
       #endif
1685
       #endif
1686
+      #if TEMP_SENSOR_BOARD_IS_CUSTOM
1687
+        { true, 0, 0, BOARD_PULLUP_RESISTOR_OHMS, BOARD_RESISTANCE_25C_OHMS, 0, 0, BOARD_BETA, 0 },
1688
+      #endif
1666
       #if TEMP_SENSOR_REDUNDANT_IS_CUSTOM
1689
       #if TEMP_SENSOR_REDUNDANT_IS_CUSTOM
1667
         { true, 0, 0, REDUNDANT_PULLUP_RESISTOR_OHMS, REDUNDANT_RESISTANCE_25C_OHMS, 0, 0, REDUNDANT_BETA, 0 },
1690
         { true, 0, 0, REDUNDANT_PULLUP_RESISTOR_OHMS, REDUNDANT_RESISTANCE_25C_OHMS, 0, 0, REDUNDANT_BETA, 0 },
1668
       #endif
1691
       #endif
1698
       TERN_(TEMP_SENSOR_CHAMBER_IS_CUSTOM, t_index == CTI_CHAMBER ? PSTR("CHAMBER") :)
1721
       TERN_(TEMP_SENSOR_CHAMBER_IS_CUSTOM, t_index == CTI_CHAMBER ? PSTR("CHAMBER") :)
1699
       TERN_(TEMP_SENSOR_COOLER_IS_CUSTOM, t_index == CTI_COOLER ? PSTR("COOLER") :)
1722
       TERN_(TEMP_SENSOR_COOLER_IS_CUSTOM, t_index == CTI_COOLER ? PSTR("COOLER") :)
1700
       TERN_(TEMP_SENSOR_PROBE_IS_CUSTOM, t_index == CTI_PROBE ? PSTR("PROBE") :)
1723
       TERN_(TEMP_SENSOR_PROBE_IS_CUSTOM, t_index == CTI_PROBE ? PSTR("PROBE") :)
1724
+      TERN_(TEMP_SENSOR_BOARD_IS_CUSTOM, t_index == CTI_BOARD ? PSTR("BOARD") :)
1701
       TERN_(TEMP_SENSOR_REDUNDANT_IS_CUSTOM, t_index == CTI_REDUNDANT ? PSTR("REDUNDANT") :)
1725
       TERN_(TEMP_SENSOR_REDUNDANT_IS_CUSTOM, t_index == CTI_REDUNDANT ? PSTR("REDUNDANT") :)
1702
       nullptr
1726
       nullptr
1703
     );
1727
     );
1933
   }
1957
   }
1934
 #endif // HAS_TEMP_PROBE
1958
 #endif // HAS_TEMP_PROBE
1935
 
1959
 
1960
+#if HAS_TEMP_BOARD
1961
+  // For motherboard temperature measurement.
1962
+  celsius_float_t Temperature::analog_to_celsius_board(const int16_t raw) {
1963
+    #if TEMP_SENSOR_BOARD_IS_CUSTOM
1964
+      return user_thermistor_to_deg_c(CTI_BOARD, raw);
1965
+    #elif TEMP_SENSOR_BOARD_IS_THERMISTOR
1966
+      SCAN_THERMISTOR_TABLE(TEMPTABLE_BOARD, TEMPTABLE_BOARD_LEN);
1967
+    #elif TEMP_SENSOR_BOARD_IS_AD595
1968
+      return TEMP_AD595(raw);
1969
+    #elif TEMP_SENSOR_BOARD_IS_AD8495
1970
+      return TEMP_AD8495(raw);
1971
+    #else
1972
+      UNUSED(raw);
1973
+      return 0;
1974
+    #endif
1975
+  }
1976
+#endif // HAS_TEMP_BOARD
1977
+
1936
 #if HAS_TEMP_REDUNDANT
1978
 #if HAS_TEMP_REDUNDANT
1937
   // For redundant temperature measurement.
1979
   // For redundant temperature measurement.
1938
   celsius_float_t Temperature::analog_to_celsius_redundant(const int16_t raw) {
1980
   celsius_float_t Temperature::analog_to_celsius_redundant(const int16_t raw) {
1939
     #if TEMP_SENSOR_REDUNDANT_IS_CUSTOM
1981
     #if TEMP_SENSOR_REDUNDANT_IS_CUSTOM
1940
       return user_thermistor_to_deg_c(CTI_REDUNDANT, raw);
1982
       return user_thermistor_to_deg_c(CTI_REDUNDANT, raw);
1941
-    #elif TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 0
1983
+    #elif TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E0)
1942
       return TERN(TEMP_SENSOR_REDUNDANT_IS_MAX31865, max31865_0.temperature((uint16_t)raw), raw * 0.25);
1984
       return TERN(TEMP_SENSOR_REDUNDANT_IS_MAX31865, max31865_0.temperature((uint16_t)raw), raw * 0.25);
1943
-    #elif TEMP_SENSOR_REDUNDANT_IS_MAX_TC && TEMP_SENSOR_REDUNDANT_SOURCE == 1
1985
+    #elif TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E1)
1944
       return TERN(TEMP_SENSOR_REDUNDANT_IS_MAX31865, max31865_1.temperature((uint16_t)raw), raw * 0.25);
1986
       return TERN(TEMP_SENSOR_REDUNDANT_IS_MAX31865, max31865_1.temperature((uint16_t)raw), raw * 0.25);
1945
     #elif TEMP_SENSOR_REDUNDANT_IS_THERMISTOR
1987
     #elif TEMP_SENSOR_REDUNDANT_IS_THERMISTOR
1946
       SCAN_THERMISTOR_TABLE(TEMPTABLE_REDUNDANT, TEMPTABLE_REDUNDANT_LEN);
1988
       SCAN_THERMISTOR_TABLE(TEMPTABLE_REDUNDANT, TEMPTABLE_REDUNDANT_LEN);
1983
   TERN_(HAS_TEMP_CHAMBER,   temp_chamber.celsius   = analog_to_celsius_chamber(temp_chamber.raw));
2025
   TERN_(HAS_TEMP_CHAMBER,   temp_chamber.celsius   = analog_to_celsius_chamber(temp_chamber.raw));
1984
   TERN_(HAS_TEMP_COOLER,    temp_cooler.celsius    = analog_to_celsius_cooler(temp_cooler.raw));
2026
   TERN_(HAS_TEMP_COOLER,    temp_cooler.celsius    = analog_to_celsius_cooler(temp_cooler.raw));
1985
   TERN_(HAS_TEMP_PROBE,     temp_probe.celsius     = analog_to_celsius_probe(temp_probe.raw));
2027
   TERN_(HAS_TEMP_PROBE,     temp_probe.celsius     = analog_to_celsius_probe(temp_probe.raw));
2028
+  TERN_(HAS_TEMP_BOARD,     temp_board.celsius     = analog_to_celsius_board(temp_board.raw));
1986
   TERN_(HAS_TEMP_REDUNDANT, temp_redundant.celsius = analog_to_celsius_redundant(temp_redundant.raw));
2029
   TERN_(HAS_TEMP_REDUNDANT, temp_redundant.celsius = analog_to_celsius_redundant(temp_redundant.raw));
1987
 
2030
 
1988
   TERN_(FILAMENT_WIDTH_SENSOR, filwidth.update_measured_mm());
2031
   TERN_(FILAMENT_WIDTH_SENSOR, filwidth.update_measured_mm());
2030
 
2073
 
2031
   #endif // HAS_HOTEND
2074
   #endif // HAS_HOTEND
2032
 
2075
 
2076
+  #define TP_CMP(S,A,B) (TEMPDIR(S) < 0 ? ((A)<(B)) : ((A)>(B)))
2033
   #if ENABLED(THERMAL_PROTECTION_BED)
2077
   #if ENABLED(THERMAL_PROTECTION_BED)
2034
-    #define BEDCMP(A,B) (TEMPDIR(BED) < 0 ? ((A)<(B)) : ((A)>(B)))
2035
-    if (BEDCMP(temp_bed.raw, maxtemp_raw_BED)) max_temp_error(H_BED);
2036
-    if (temp_bed.target > 0 && BEDCMP(mintemp_raw_BED, temp_bed.raw)) min_temp_error(H_BED);
2078
+    if (TP_CMP(BED, temp_bed.raw, maxtemp_raw_BED)) max_temp_error(H_BED);
2079
+    if (temp_bed.target > 0 && TP_CMP(BED, mintemp_raw_BED, temp_bed.raw)) min_temp_error(H_BED);
2037
   #endif
2080
   #endif
2038
 
2081
 
2039
   #if BOTH(HAS_HEATED_CHAMBER, THERMAL_PROTECTION_CHAMBER)
2082
   #if BOTH(HAS_HEATED_CHAMBER, THERMAL_PROTECTION_CHAMBER)
2040
-    #define CHAMBERCMP(A,B) (TEMPDIR(CHAMBER) < 0 ? ((A)<(B)) : ((A)>(B)))
2041
-    if (CHAMBERCMP(temp_chamber.raw, maxtemp_raw_CHAMBER)) max_temp_error(H_CHAMBER);
2042
-    if (temp_chamber.target > 0 && CHAMBERCMP(mintemp_raw_CHAMBER, temp_chamber.raw)) min_temp_error(H_CHAMBER);
2083
+    if (TP_CMP(CHAMBER, temp_chamber.raw, maxtemp_raw_CHAMBER)) max_temp_error(H_CHAMBER);
2084
+    if (temp_chamber.target > 0 && TP_CMP(CHAMBER, mintemp_raw_CHAMBER, temp_chamber.raw)) min_temp_error(H_CHAMBER);
2043
   #endif
2085
   #endif
2044
 
2086
 
2045
   #if BOTH(HAS_COOLER, THERMAL_PROTECTION_COOLER)
2087
   #if BOTH(HAS_COOLER, THERMAL_PROTECTION_COOLER)
2046
-    #define COOLERCMP(A,B) (TEMPDIR(COOLER) < 0 ? ((A)<(B)) : ((A)>(B)))
2047
-    if (cutter.unitPower > 0 && COOLERCMP(temp_cooler.raw, maxtemp_raw_COOLER)) max_temp_error(H_COOLER);
2048
-    if (COOLERCMP(mintemp_raw_COOLER, temp_cooler.raw)) min_temp_error(H_COOLER);
2088
+    if (cutter.unitPower > 0 && TP_CMP(COOLER, temp_cooler.raw, maxtemp_raw_COOLER)) max_temp_error(H_COOLER);
2089
+    if (TP_CMP(COOLER, mintemp_raw_COOLER, temp_cooler.raw)) min_temp_error(H_COOLER);
2090
+  #endif
2091
+
2092
+  #if BOTH(HAS_TEMP_BOARD, THERMAL_PROTECTION_BOARD)
2093
+    if (TP_CMP(BOARD, temp_board.raw, maxtemp_raw_BOARD)) max_temp_error(H_BOARD);
2094
+    if (TP_CMP(BOARD, mintemp_raw_BOARD, temp_board.raw)) min_temp_error(H_BOARD);
2049
   #endif
2095
   #endif
2096
+  #undef TP_CMP
2097
+
2050
 } // Temperature::updateTemperaturesFromRawValues
2098
 } // Temperature::updateTemperaturesFromRawValues
2051
 
2099
 
2052
 /**
2100
 /**
2275
   #if HAS_TEMP_ADC_PROBE
2323
   #if HAS_TEMP_ADC_PROBE
2276
     HAL_ANALOG_SELECT(TEMP_PROBE_PIN);
2324
     HAL_ANALOG_SELECT(TEMP_PROBE_PIN);
2277
   #endif
2325
   #endif
2326
+  #if HAS_TEMP_ADC_BOARD
2327
+    HAL_ANALOG_SELECT(TEMP_BOARD_PIN);
2328
+  #endif
2278
   #if HAS_TEMP_ADC_REDUNDANT
2329
   #if HAS_TEMP_ADC_REDUNDANT
2279
     HAL_ANALOG_SELECT(TEMP_REDUNDANT_PIN);
2330
     HAL_ANALOG_SELECT(TEMP_REDUNDANT_PIN);
2280
   #endif
2331
   #endif
2388
     #endif
2439
     #endif
2389
   #endif // HAS_HOTEND
2440
   #endif // HAS_HOTEND
2390
 
2441
 
2442
+  // TODO: combine these into the macros above
2391
   #if HAS_HEATED_BED
2443
   #if HAS_HEATED_BED
2392
     while (analog_to_celsius_bed(mintemp_raw_BED) < BED_MINTEMP) mintemp_raw_BED += TEMPDIR(BED) * (OVERSAMPLENR);
2444
     while (analog_to_celsius_bed(mintemp_raw_BED) < BED_MINTEMP) mintemp_raw_BED += TEMPDIR(BED) * (OVERSAMPLENR);
2393
     while (analog_to_celsius_bed(maxtemp_raw_BED) > BED_MAXTEMP) maxtemp_raw_BED -= TEMPDIR(BED) * (OVERSAMPLENR);
2445
     while (analog_to_celsius_bed(maxtemp_raw_BED) > BED_MAXTEMP) maxtemp_raw_BED -= TEMPDIR(BED) * (OVERSAMPLENR);
2403
     while (analog_to_celsius_cooler(maxtemp_raw_COOLER) < COOLER_MAXTEMP) maxtemp_raw_COOLER -= TEMPDIR(COOLER) * (OVERSAMPLENR);
2455
     while (analog_to_celsius_cooler(maxtemp_raw_COOLER) < COOLER_MAXTEMP) maxtemp_raw_COOLER -= TEMPDIR(COOLER) * (OVERSAMPLENR);
2404
   #endif
2456
   #endif
2405
 
2457
 
2458
+  #if HAS_TEMP_BOARD
2459
+    while (analog_to_celsius_board(mintemp_raw_BOARD) > BOARD_MINTEMP) mintemp_raw_BOARD += TEMPDIR(BOARD) * (OVERSAMPLENR);
2460
+    while (analog_to_celsius_board(maxtemp_raw_BOARD) < BOARD_MAXTEMP) maxtemp_raw_BOARD -= TEMPDIR(BOARD) * (OVERSAMPLENR);
2461
+  #endif
2462
+
2406
   #if HAS_TEMP_REDUNDANT
2463
   #if HAS_TEMP_REDUNDANT
2407
     temp_redundant.target = &(
2464
     temp_redundant.target = &(
2408
-      #if TEMP_SENSOR_REDUNDANT_TARGET == -5 && HAS_TEMP_COOLER
2465
+      #if REDUNDANT_TEMP_MATCH(TARGET, COOLER) && HAS_TEMP_COOLER
2409
         temp_cooler
2466
         temp_cooler
2410
-      #elif TEMP_SENSOR_REDUNDANT_TARGET == -4 && HAS_TEMP_PROBE
2467
+      #elif REDUNDANT_TEMP_MATCH(TARGET, PROBE) && HAS_TEMP_PROBE
2411
         temp_probe
2468
         temp_probe
2412
-      #elif TEMP_SENSOR_REDUNDANT_TARGET == -2 && HAS_TEMP_CHAMBER
2469
+      #elif REDUNDANT_TEMP_MATCH(TARGET, BOARD) && HAS_TEMP_BOARD
2470
+        temp_board
2471
+      #elif REDUNDANT_TEMP_MATCH(TARGET, CHAMBER) && HAS_TEMP_CHAMBER
2413
         temp_chamber
2472
         temp_chamber
2414
-      #elif TEMP_SENSOR_REDUNDANT_TARGET == -1 && HAS_TEMP_BED
2473
+      #elif REDUNDANT_TEMP_MATCH(TARGET, BED) && HAS_TEMP_BED
2415
         temp_bed
2474
         temp_bed
2416
       #else
2475
       #else
2417
         temp_hotend[TEMP_SENSOR_REDUNDANT_TARGET]
2476
         temp_hotend[TEMP_SENSOR_REDUNDANT_TARGET]
2787
  */
2846
  */
2788
 void Temperature::update_raw_temperatures() {
2847
 void Temperature::update_raw_temperatures() {
2789
 
2848
 
2849
+  // TODO: can this be collapsed into a HOTEND_LOOP()?
2790
   #if HAS_TEMP_ADC_0 && !TEMP_SENSOR_0_IS_MAX_TC
2850
   #if HAS_TEMP_ADC_0 && !TEMP_SENSOR_0_IS_MAX_TC
2791
     temp_hotend[0].update();
2851
     temp_hotend[0].update();
2792
   #endif
2852
   #endif
2808
   TERN_(HAS_TEMP_ADC_BED,     temp_bed.update());
2868
   TERN_(HAS_TEMP_ADC_BED,     temp_bed.update());
2809
   TERN_(HAS_TEMP_ADC_CHAMBER, temp_chamber.update());
2869
   TERN_(HAS_TEMP_ADC_CHAMBER, temp_chamber.update());
2810
   TERN_(HAS_TEMP_ADC_PROBE,   temp_probe.update());
2870
   TERN_(HAS_TEMP_ADC_PROBE,   temp_probe.update());
2871
+  TERN_(HAS_TEMP_ADC_BOARD,   temp_board.update());
2811
   TERN_(HAS_TEMP_ADC_COOLER,  temp_cooler.update());
2872
   TERN_(HAS_TEMP_ADC_COOLER,  temp_cooler.update());
2812
 
2873
 
2813
   TERN_(HAS_JOY_ADC_X, joystick.x.update());
2874
   TERN_(HAS_JOY_ADC_X, joystick.x.update());
2834
     HOTEND_LOOP() temp_hotend[e].reset();
2895
     HOTEND_LOOP() temp_hotend[e].reset();
2835
   #endif
2896
   #endif
2836
 
2897
 
2837
-  TERN_(HAS_HEATED_BED, temp_bed.reset());
2838
-  TERN_(HAS_TEMP_CHAMBER, temp_chamber.reset());
2839
-  TERN_(HAS_TEMP_PROBE, temp_probe.reset());
2840
-  TERN_(HAS_TEMP_COOLER, temp_cooler.reset());
2898
+  TERN_(HAS_HEATED_BED,     temp_bed.reset());
2899
+  TERN_(HAS_TEMP_CHAMBER,   temp_chamber.reset());
2900
+  TERN_(HAS_TEMP_PROBE,     temp_probe.reset());
2901
+  TERN_(HAS_TEMP_COOLER,    temp_cooler.reset());
2902
+  TERN_(HAS_TEMP_BOARD,     temp_board.reset());
2841
   TERN_(HAS_TEMP_REDUNDANT, temp_redundant.reset());
2903
   TERN_(HAS_TEMP_REDUNDANT, temp_redundant.reset());
2842
 
2904
 
2843
   TERN_(HAS_JOY_ADC_X, joystick.x.reset());
2905
   TERN_(HAS_JOY_ADC_X, joystick.x.reset());
3264
       case MeasureTemp_PROBE: ACCUMULATE_ADC(temp_probe); break;
3326
       case MeasureTemp_PROBE: ACCUMULATE_ADC(temp_probe); break;
3265
     #endif
3327
     #endif
3266
 
3328
 
3329
+    #if HAS_TEMP_ADC_BOARD
3330
+      case PrepareTemp_BOARD: HAL_START_ADC(TEMP_BOARD_PIN); break;
3331
+      case MeasureTemp_BOARD: ACCUMULATE_ADC(temp_board); break;
3332
+    #endif
3333
+
3267
     #if HAS_TEMP_ADC_REDUNDANT
3334
     #if HAS_TEMP_ADC_REDUNDANT
3268
       case PrepareTemp_REDUNDANT: HAL_START_ADC(TEMP_REDUNDANT_PIN); break;
3335
       case PrepareTemp_REDUNDANT: HAL_START_ADC(TEMP_REDUNDANT_PIN); break;
3269
       case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break;
3336
       case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break;
3430
       #if HAS_TEMP_COOLER
3497
       #if HAS_TEMP_COOLER
3431
         case H_COOLER: k = 'L'; break;
3498
         case H_COOLER: k = 'L'; break;
3432
       #endif
3499
       #endif
3500
+      #if HAS_TEMP_BOARD
3501
+        case H_BOARD: k = 'M'; break;
3502
+      #endif
3433
       #if HAS_TEMP_REDUNDANT
3503
       #if HAS_TEMP_REDUNDANT
3434
         case H_REDUNDANT: k = 'R'; break;
3504
         case H_REDUNDANT: k = 'R'; break;
3435
       #endif
3505
       #endif
3459
     OPTARG(HAS_TEMP_REDUNDANT, const bool include_r/*=false*/)
3529
     OPTARG(HAS_TEMP_REDUNDANT, const bool include_r/*=false*/)
3460
   ) {
3530
   ) {
3461
     #if HAS_TEMP_HOTEND
3531
     #if HAS_TEMP_HOTEND
3462
-      print_heater_state(H_NONE, degHotend(target_extruder), degTargetHotend(target_extruder) OPTARG(SHOW_TEMP_ADC_VALUES, rawHotendTemp(target_extruder)));
3532
+      print_heater_state(H_E0, degHotend(target_extruder), degTargetHotend(target_extruder) OPTARG(SHOW_TEMP_ADC_VALUES, rawHotendTemp(target_extruder)));
3463
     #endif
3533
     #endif
3464
     #if HAS_HEATED_BED
3534
     #if HAS_HEATED_BED
3465
       print_heater_state(H_BED, degBed(), degTargetBed() OPTARG(SHOW_TEMP_ADC_VALUES, rawBedTemp()));
3535
       print_heater_state(H_BED, degBed(), degTargetBed() OPTARG(SHOW_TEMP_ADC_VALUES, rawBedTemp()));
3471
       print_heater_state(H_COOLER, degCooler(), TERN0(HAS_COOLER, degTargetCooler()) OPTARG(SHOW_TEMP_ADC_VALUES, rawCoolerTemp()));
3541
       print_heater_state(H_COOLER, degCooler(), TERN0(HAS_COOLER, degTargetCooler()) OPTARG(SHOW_TEMP_ADC_VALUES, rawCoolerTemp()));
3472
     #endif
3542
     #endif
3473
     #if HAS_TEMP_PROBE
3543
     #if HAS_TEMP_PROBE
3474
-      print_heater_state(H_PROBE, degProbe(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawProbeTemp()) );
3544
+      print_heater_state(H_PROBE, degProbe(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawProbeTemp()));
3545
+    #endif
3546
+    #if HAS_TEMP_BOARD
3547
+      print_heater_state(H_BOARD, degBoard(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawBoardTemp()));
3475
     #endif
3548
     #endif
3476
     #if HAS_TEMP_REDUNDANT
3549
     #if HAS_TEMP_REDUNDANT
3477
       if (include_r) print_heater_state(H_REDUNDANT, degRedundant(), degRedundantTarget() OPTARG(SHOW_TEMP_ADC_VALUES, rawRedundantTemp()));
3550
       if (include_r) print_heater_state(H_REDUNDANT, degRedundant(), degRedundantTarget() OPTARG(SHOW_TEMP_ADC_VALUES, rawRedundantTemp()));

+ 36
- 5
Marlin/src/module/temperature.h View File

46
 
46
 
47
 // Element identifiers. Positive values are hotends. Negative values are other heaters or coolers.
47
 // Element identifiers. Positive values are hotends. Negative values are other heaters or coolers.
48
 typedef enum : int8_t {
48
 typedef enum : int8_t {
49
-  H_NONE = -6,
50
-  H_COOLER, H_PROBE, H_REDUNDANT, H_CHAMBER, H_BED,
51
-  H_E0, H_E1, H_E2, H_E3, H_E4, H_E5, H_E6, H_E7
49
+  H_REDUNDANT = HID_REDUNDANT,
50
+  H_COOLER = HID_COOLER,
51
+  H_PROBE = HID_PROBE,
52
+  H_BOARD = HID_BOARD,
53
+  H_CHAMBER = HID_CHAMBER,
54
+  H_BED = HID_BED,
55
+  H_E0 = HID_E0, H_E1, H_E2, H_E3, H_E4, H_E5, H_E6, H_E7
52
 } heater_id_t;
56
 } heater_id_t;
53
 
57
 
54
 // PID storage
58
 // PID storage
105
   #if HAS_TEMP_ADC_PROBE
109
   #if HAS_TEMP_ADC_PROBE
106
     PrepareTemp_PROBE, MeasureTemp_PROBE,
110
     PrepareTemp_PROBE, MeasureTemp_PROBE,
107
   #endif
111
   #endif
112
+  #if HAS_TEMP_ADC_BOARD
113
+    PrepareTemp_BOARD, MeasureTemp_BOARD,
114
+  #endif
108
   #if HAS_TEMP_ADC_REDUNDANT
115
   #if HAS_TEMP_ADC_REDUNDANT
109
     PrepareTemp_REDUNDANT, MeasureTemp_REDUNDANT,
116
     PrepareTemp_REDUNDANT, MeasureTemp_REDUNDANT,
110
   #endif
117
   #endif
192
   // A redundant temperature sensor
199
   // A redundant temperature sensor
193
   typedef struct RedundantTempInfo : public TempInfo {
200
   typedef struct RedundantTempInfo : public TempInfo {
194
     temp_info_t* target;
201
     temp_info_t* target;
195
-  } redundant_temp_info_t;
202
+  } redundant_info_t;
196
 #endif
203
 #endif
197
 
204
 
198
 // A PWM heater with temperature sensor
205
 // A PWM heater with temperature sensor
231
 #elif HAS_TEMP_CHAMBER
238
 #elif HAS_TEMP_CHAMBER
232
   typedef temp_info_t chamber_info_t;
239
   typedef temp_info_t chamber_info_t;
233
 #endif
240
 #endif
241
+#if HAS_TEMP_BOARD
242
+  typedef temp_info_t board_info_t;
243
+#endif
234
 #if EITHER(HAS_COOLER, HAS_TEMP_COOLER)
244
 #if EITHER(HAS_COOLER, HAS_TEMP_COOLER)
235
   typedef heater_info_t cooler_info_t;
245
   typedef heater_info_t cooler_info_t;
236
 #endif
246
 #endif
312
     #if TEMP_SENSOR_COOLER_IS_CUSTOM
322
     #if TEMP_SENSOR_COOLER_IS_CUSTOM
313
       CTI_COOLER,
323
       CTI_COOLER,
314
     #endif
324
     #endif
325
+    #if TEMP_SENSOR_BOARD_IS_CUSTOM
326
+      CTI_BOARD,
327
+    #endif
315
     #if TEMP_SENSOR_REDUNDANT_IS_CUSTOM
328
     #if TEMP_SENSOR_REDUNDANT_IS_CUSTOM
316
       CTI_REDUNDANT,
329
       CTI_REDUNDANT,
317
     #endif
330
     #endif
352
     #if HAS_TEMP_COOLER
365
     #if HAS_TEMP_COOLER
353
       static cooler_info_t temp_cooler;
366
       static cooler_info_t temp_cooler;
354
     #endif
367
     #endif
368
+    #if HAS_TEMP_BOARD
369
+      static board_info_t temp_board;
370
+    #endif
355
     #if HAS_TEMP_REDUNDANT
371
     #if HAS_TEMP_REDUNDANT
356
-      static redundant_temp_info_t temp_redundant;
372
+      static redundant_info_t temp_redundant;
357
     #endif
373
     #endif
358
 
374
 
359
     #if ENABLED(AUTO_POWER_E_FANS)
375
     #if ENABLED(AUTO_POWER_E_FANS)
478
       static int16_t mintemp_raw_COOLER, maxtemp_raw_COOLER;
494
       static int16_t mintemp_raw_COOLER, maxtemp_raw_COOLER;
479
     #endif
495
     #endif
480
 
496
 
497
+    #if HAS_TEMP_BOARD && ENABLED(THERMAL_PROTECTION_BOARD)
498
+      static int16_t mintemp_raw_BOARD, maxtemp_raw_BOARD;
499
+    #endif
500
+
481
     #if MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED > 1
501
     #if MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED > 1
482
       static uint8_t consecutive_low_temperature_error[HOTENDS];
502
       static uint8_t consecutive_low_temperature_error[HOTENDS];
483
     #endif
503
     #endif
551
     #if HAS_TEMP_COOLER
571
     #if HAS_TEMP_COOLER
552
       static celsius_float_t analog_to_celsius_cooler(const int16_t raw);
572
       static celsius_float_t analog_to_celsius_cooler(const int16_t raw);
553
     #endif
573
     #endif
574
+    #if HAS_TEMP_BOARD
575
+      static celsius_float_t analog_to_celsius_board(const int16_t raw);
576
+    #endif
554
     #if HAS_TEMP_REDUNDANT
577
     #if HAS_TEMP_REDUNDANT
555
       static celsius_float_t analog_to_celsius_redundant(const int16_t raw);
578
       static celsius_float_t analog_to_celsius_redundant(const int16_t raw);
556
     #endif
579
     #endif
787
       #endif
810
       #endif
788
     #endif
811
     #endif
789
 
812
 
813
+    #if HAS_TEMP_BOARD
814
+      #if ENABLED(SHOW_TEMP_ADC_VALUES)
815
+        static inline int16_t rawBoardTemp()    { return temp_board.raw; }
816
+      #endif
817
+      static inline celsius_float_t degBoard()  { return temp_board.celsius; }
818
+      static inline celsius_t wholeDegBoard()   { return static_cast<celsius_t>(degBoard() + 0.5f); }
819
+    #endif
820
+
790
     #if HAS_TEMP_REDUNDANT
821
     #if HAS_TEMP_REDUNDANT
791
       #if ENABLED(SHOW_TEMP_ADC_VALUES)
822
       #if ENABLED(SHOW_TEMP_ADC_VALUES)
792
         static inline int16_t rawRedundantTemp()         { return temp_redundant.raw; }
823
         static inline int16_t rawRedundantTemp()         { return temp_redundant.raw; }

+ 18
- 0
Marlin/src/module/thermistor/thermistors.h View File

51
                             || TEMP_SENSOR_IS(n, CHAMBER) \
51
                             || TEMP_SENSOR_IS(n, CHAMBER) \
52
                             || TEMP_SENSOR_IS(n, COOLER) \
52
                             || TEMP_SENSOR_IS(n, COOLER) \
53
                             || TEMP_SENSOR_IS(n, PROBE) \
53
                             || TEMP_SENSOR_IS(n, PROBE) \
54
+                            || TEMP_SENSOR_IS(n, BOARD) \
54
                             || TEMP_SENSOR_IS(n, REDUNDANT) )
55
                             || TEMP_SENSOR_IS(n, REDUNDANT) )
55
 
56
 
56
 typedef struct { int16_t value; celsius_t celsius; } temp_entry_t;
57
 typedef struct { int16_t value; celsius_t celsius; } temp_entry_t;
305
   #define TEMPTABLE_PROBE_LEN 0
306
   #define TEMPTABLE_PROBE_LEN 0
306
 #endif
307
 #endif
307
 
308
 
309
+#if TEMP_SENSOR_BOARD > 0
310
+  #define TEMPTABLE_BOARD TT_NAME(TEMP_SENSOR_BOARD)
311
+  #define TEMPTABLE_BOARD_LEN COUNT(TEMPTABLE_BOARD)
312
+#else
313
+  #define TEMPTABLE_BOARD_LEN 0
314
+#endif
315
+
308
 #if TEMP_SENSOR_REDUNDANT > 0
316
 #if TEMP_SENSOR_REDUNDANT > 0
309
   #define TEMPTABLE_REDUNDANT TT_NAME(TEMP_SENSOR_REDUNDANT)
317
   #define TEMPTABLE_REDUNDANT TT_NAME(TEMP_SENSOR_REDUNDANT)
310
   #define TEMPTABLE_REDUNDANT_LEN COUNT(TEMPTABLE_REDUNDANT)
318
   #define TEMPTABLE_REDUNDANT_LEN COUNT(TEMPTABLE_REDUNDANT)
319
            || 255 > TEMPTABLE_CHAMBER_LEN
327
            || 255 > TEMPTABLE_CHAMBER_LEN
320
            || 255 > TEMPTABLE_COOLER_LEN
328
            || 255 > TEMPTABLE_COOLER_LEN
321
            || 255 > TEMPTABLE_PROBE_LEN
329
            || 255 > TEMPTABLE_PROBE_LEN
330
+           || 255 > TEMPTABLE_BOARD_LEN
322
            || 255 > TEMPTABLE_REDUNDANT_LEN
331
            || 255 > TEMPTABLE_REDUNDANT_LEN
323
   , "Temperature conversion tables over 255 entries need special consideration."
332
   , "Temperature conversion tables over 255 entries need special consideration."
324
 );
333
 );
513
     #define TEMP_SENSOR_PROBE_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
522
     #define TEMP_SENSOR_PROBE_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
514
   #endif
523
   #endif
515
 #endif
524
 #endif
525
+#ifndef TEMP_SENSOR_BOARD_RAW_HI_TEMP
526
+  #if TT_REVRAW(BOARD)
527
+    #define TEMP_SENSOR_BOARD_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
528
+    #define TEMP_SENSOR_BOARD_RAW_LO_TEMP 0
529
+  #else
530
+    #define TEMP_SENSOR_BOARD_RAW_HI_TEMP 0
531
+    #define TEMP_SENSOR_BOARD_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
532
+  #endif
533
+#endif
516
 #ifndef TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP
534
 #ifndef TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP
517
   #if TT_REVRAW(REDUNDANT)
535
   #if TT_REVRAW(REDUNDANT)
518
     #define TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
536
     #define TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE

+ 1
- 1
Marlin/src/pins/lpc1768/pins_BTT_SKR_common.h View File

65
   #define TEMP_BED_PIN                  P0_23_A0  // A0 (T0) - (67) - TEMP_BED_PIN
65
   #define TEMP_BED_PIN                  P0_23_A0  // A0 (T0) - (67) - TEMP_BED_PIN
66
 #endif
66
 #endif
67
 
67
 
68
-#if HOTENDS == 1 && TEMP_SENSOR_REDUNDANT_SOURCE != 1
68
+#if HOTENDS == 1 && !REDUNDANT_TEMP_MATCH(SOURCE, E1)
69
   #if TEMP_SENSOR_PROBE
69
   #if TEMP_SENSOR_PROBE
70
     #define TEMP_PROBE_PIN            TEMP_1_PIN
70
     #define TEMP_PROBE_PIN            TEMP_1_PIN
71
   #elif TEMP_SENSOR_CHAMBER
71
   #elif TEMP_SENSOR_CHAMBER

+ 1
- 1
Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h View File

165
 //
165
 //
166
 #define TEMP_0_PIN                         P0_24
166
 #define TEMP_0_PIN                         P0_24
167
 #define TEMP_1_PIN                         P0_23
167
 #define TEMP_1_PIN                         P0_23
168
-//#define TEMP_2_PIN                       P1_30  // Onboard thermistor
169
 #define TEMP_BED_PIN                       P0_25
168
 #define TEMP_BED_PIN                       P0_25
169
+#define TEMP_BOARD_PIN                     P1_30  // Onboard thermistor, NTC100K
170
 
170
 
171
 //
171
 //
172
 // Heaters / Fans
172
 // Heaters / Fans

+ 5
- 4
Marlin/src/pins/rambo/pins_EINSY_RAMBO.h View File

114
 //
114
 //
115
 // Temperature Sensors
115
 // Temperature Sensors
116
 //
116
 //
117
-#define TEMP_0_PIN                             0  // Analog Input
118
-#define TEMP_1_PIN                             1  // Analog Input
119
-#define TEMP_BED_PIN                           2  // Analog Input
120
-#define TEMP_PROBE_PIN                         3  // Analog Input
117
+#define TEMP_0_PIN                             0  // Analog Input, Header J2
118
+#define TEMP_1_PIN                             1  // Analog Input, Header J3
119
+#define TEMP_BOARD_PIN                TEMP_1_PIN  // Analog Input, Header J3
120
+#define TEMP_BED_PIN                           2  // Analog Input, Header J6
121
+#define TEMP_PROBE_PIN                         3  // Analog Input, Header J15
121
 
122
 
122
 //
123
 //
123
 // Heaters / Fans
124
 // Heaters / Fans

+ 1
- 1
Marlin/src/pins/sam/pins_DUE3DOM_MINI.h View File

68
 //
68
 //
69
 #define TEMP_0_PIN                             0  // Analog Input (HOTEND0 thermistor)
69
 #define TEMP_0_PIN                             0  // Analog Input (HOTEND0 thermistor)
70
 #define TEMP_1_PIN                             2  // Analog Input (unused)
70
 #define TEMP_1_PIN                             2  // Analog Input (unused)
71
-#define TEMP_2_PIN                             5  // Analog Input (OnBoard thermistor beta 3950)
72
 #define TEMP_BED_PIN                           1  // Analog Input (BED thermistor)
71
 #define TEMP_BED_PIN                           1  // Analog Input (BED thermistor)
72
+#define TEMP_BOARD_PIN                         5  // Analog Input (OnBoard thermistor beta 3950)
73
 
73
 
74
 // SPI for MAX Thermocouple
74
 // SPI for MAX Thermocouple
75
 #if DISABLED(SDSUPPORT)
75
 #if DISABLED(SDSUPPORT)

+ 1
- 0
Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h View File

161
 //
161
 //
162
 #define TEMP_0_PIN                          PA2   // T0 <-> E0
162
 #define TEMP_0_PIN                          PA2   // T0 <-> E0
163
 #define TEMP_1_PIN                          PA0   // T1 <-> E1
163
 #define TEMP_1_PIN                          PA0   // T1 <-> E1
164
+#define TEMP_BOARD_PIN               TEMP_1_PIN   // Onboard sensor shared with T1
164
 #define TEMP_BED_PIN                        PA1   // T2 <-> Bed
165
 #define TEMP_BED_PIN                        PA1   // T2 <-> Bed
165
 #define TEMP_PROBE_PIN                      PC3   // Shares J4 connector with PD1
166
 #define TEMP_PROBE_PIN                      PC3   // Shares J4 connector with PD1
166
 
167
 

Loading…
Cancel
Save