|
@@ -53,12 +53,14 @@
|
53
|
53
|
#include "../feature/emergency_parser.h"
|
54
|
54
|
#endif
|
55
|
55
|
|
56
|
|
-#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
57
|
|
- static void* heater_ttbl_map[2] = { (void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE };
|
58
|
|
- static uint8_t heater_ttbllen_map[2] = { HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN };
|
59
|
|
-#else
|
60
|
|
- static void* heater_ttbl_map[HOTENDS] = ARRAY_BY_HOTENDS((void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE, (void*)HEATER_2_TEMPTABLE, (void*)HEATER_3_TEMPTABLE, (void*)HEATER_4_TEMPTABLE);
|
61
|
|
- static uint8_t heater_ttbllen_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN, HEATER_3_TEMPTABLE_LEN, HEATER_4_TEMPTABLE_LEN);
|
|
56
|
+#if HOTEND_USES_THERMISTOR
|
|
57
|
+ #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
|
58
|
+ static void* heater_ttbl_map[2] = { (void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE };
|
|
59
|
+ static uint8_t heater_ttbllen_map[2] = { HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN };
|
|
60
|
+ #else
|
|
61
|
+ static void* heater_ttbl_map[HOTENDS] = ARRAY_BY_HOTENDS((void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE, (void*)HEATER_2_TEMPTABLE, (void*)HEATER_3_TEMPTABLE, (void*)HEATER_4_TEMPTABLE);
|
|
62
|
+ static uint8_t heater_ttbllen_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN, HEATER_3_TEMPTABLE_LEN, HEATER_4_TEMPTABLE_LEN);
|
|
63
|
+ #endif
|
62
|
64
|
#endif
|
63
|
65
|
|
64
|
66
|
Temperature thermalManager;
|
|
@@ -930,7 +932,21 @@ void Temperature::manage_heater() {
|
930
|
932
|
#endif // HAS_HEATED_BED
|
931
|
933
|
}
|
932
|
934
|
|
933
|
|
-#define PGM_RD_W(x) (short)pgm_read_word(&x)
|
|
935
|
+#define TEMP_AD595(RAW) ((RAW) * 5.0 * 100.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET)
|
|
936
|
+#define TEMP_AD8495(RAW) ((RAW) * 6.6 * 100.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD8495_GAIN) + TEMP_SENSOR_AD8495_OFFSET)
|
|
937
|
+
|
|
938
|
+#define SCAN_THERMISTOR_TABLE(TBL,LEN) do{ \
|
|
939
|
+ for (uint8_t i = 1; i < LEN; i++) { \
|
|
940
|
+ const short entry10 = (short)pgm_read_word(&TBL[i][0]); \
|
|
941
|
+ if (entry10 > raw) { \
|
|
942
|
+ const short entry00 = (short)pgm_read_word(&TBL[i-1][0]), \
|
|
943
|
+ entry01 = (short)pgm_read_word(&TBL[i-1][1]), \
|
|
944
|
+ entry11 = (short)pgm_read_word(&TBL[i][1]); \
|
|
945
|
+ return entry01 + (raw - entry00) * float(entry11 - entry01) / float(entry10 - entry00); \
|
|
946
|
+ } \
|
|
947
|
+ } \
|
|
948
|
+ return (short)pgm_read_word(&TBL[LEN-1][1]); \
|
|
949
|
+}while(0)
|
934
|
950
|
|
935
|
951
|
// Derived from RepRap FiveD extruder::getTemperature()
|
936
|
952
|
// For hot end temperature measurement.
|
|
@@ -948,68 +964,61 @@ float Temperature::analog2temp(const int raw, const uint8_t e) {
|
948
|
964
|
return 0.0;
|
949
|
965
|
}
|
950
|
966
|
|
951
|
|
- #if ENABLED(HEATER_0_USES_MAX6675)
|
952
|
|
- if (e == 0) return 0.25 * raw;
|
953
|
|
- #endif
|
954
|
|
-
|
955
|
|
- // Thermistor with conversion table?
|
956
|
|
- if (heater_ttbl_map[e] != NULL) {
|
957
|
|
- short(*tt)[][2] = (short(*)[][2])(heater_ttbl_map[e]);
|
958
|
|
- for (uint8_t i = 1; i < heater_ttbllen_map[e]; i++) {
|
959
|
|
- const short entry10 = PGM_RD_W((*tt)[i][0]);
|
960
|
|
- if (entry10 > raw) {
|
961
|
|
- const short entry00 = PGM_RD_W((*tt)[i - 1][0]),
|
962
|
|
- entry01 = PGM_RD_W((*tt)[i - 1][1]),
|
963
|
|
- entry11 = PGM_RD_W((*tt)[i][1]);
|
964
|
|
- return entry01 + (raw - entry00) * float(entry11 - entry01) / float(entry10 - entry00);
|
965
|
|
- }
|
966
|
|
- }
|
967
|
|
- return PGM_RD_W((*tt)[heater_ttbllen_map[e] - 1][1]); // Overflow: Return last value in the table
|
|
967
|
+ switch (e) {
|
|
968
|
+ case 0:
|
|
969
|
+ #if ENABLED(HEATER_0_USES_MAX6675)
|
|
970
|
+ return raw * 0.25;
|
|
971
|
+ #elif ENABLED(HEATER_0_USES_AD595)
|
|
972
|
+ return TEMP_AD595(raw);
|
|
973
|
+ #elif ENABLED(HEATER_0_USES_AD8495)
|
|
974
|
+ return TEMP_AD8495(raw);
|
|
975
|
+ #endif
|
|
976
|
+ case 1:
|
|
977
|
+ #if ENABLED(HEATER_1_USES_AD595)
|
|
978
|
+ return TEMP_AD595(raw);
|
|
979
|
+ #elif ENABLED(HEATER_1_USES_AD8495)
|
|
980
|
+ return TEMP_AD8495(raw);
|
|
981
|
+ #endif
|
|
982
|
+ case 2:
|
|
983
|
+ #if ENABLED(HEATER_2_USES_AD595)
|
|
984
|
+ return TEMP_AD595(raw);
|
|
985
|
+ #elif ENABLED(HEATER_2_USES_AD8495)
|
|
986
|
+ return TEMP_AD8495(raw);
|
|
987
|
+ #endif
|
|
988
|
+ case 3:
|
|
989
|
+ #if ENABLED(HEATER_3_USES_AD595)
|
|
990
|
+ return TEMP_AD595(raw);
|
|
991
|
+ #elif ENABLED(HEATER_3_USES_AD8495)
|
|
992
|
+ return TEMP_AD8495(raw);
|
|
993
|
+ #endif
|
|
994
|
+ case 4:
|
|
995
|
+ #if ENABLED(HEATER_4_USES_AD595)
|
|
996
|
+ return TEMP_AD595(raw);
|
|
997
|
+ #elif ENABLED(HEATER_4_USES_AD8495)
|
|
998
|
+ return TEMP_AD8495(raw);
|
|
999
|
+ #endif
|
|
1000
|
+ default: break;
|
968
|
1001
|
}
|
969
|
1002
|
|
970
|
|
- // Thermocouple with amplifier ADC interface
|
971
|
|
- return (raw *
|
972
|
|
- #if HEATER_USES_AD8495
|
973
|
|
- 660.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD8495_GAIN) + TEMP_SENSOR_AD8495_OFFSET
|
974
|
|
- #elif HEATER_USES_AD595
|
975
|
|
- 5.0 * 100.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET
|
976
|
|
- #else
|
977
|
|
- 0
|
978
|
|
- #endif
|
979
|
|
- );
|
|
1003
|
+ #if HOTEND_USES_THERMISTOR
|
|
1004
|
+ // Thermistor with conversion table?
|
|
1005
|
+ const short(*tt)[][2] = (short(*)[][2])(heater_ttbl_map[e]);
|
|
1006
|
+ SCAN_THERMISTOR_TABLE((*tt), heater_ttbllen_map[e]);
|
|
1007
|
+ #endif
|
980
|
1008
|
}
|
981
|
1009
|
|
982
|
1010
|
#if HAS_HEATED_BED
|
983
|
1011
|
// Derived from RepRap FiveD extruder::getTemperature()
|
984
|
1012
|
// For bed temperature measurement.
|
985
|
1013
|
float Temperature::analog2tempBed(const int raw) {
|
986
|
|
- #if ENABLED(BED_USES_THERMISTOR)
|
987
|
|
-
|
988
|
|
- // Thermistor with conversion table
|
989
|
|
- for (uint8_t i = 1; i < BEDTEMPTABLE_LEN; i++) {
|
990
|
|
- const short entry10 = PGM_RD_W(BEDTEMPTABLE[i][0]);
|
991
|
|
- if (entry10 > raw) {
|
992
|
|
- const short entry00 = PGM_RD_W(BEDTEMPTABLE[i - 1][0]),
|
993
|
|
- entry01 = PGM_RD_W(BEDTEMPTABLE[i - 1][1]),
|
994
|
|
- entry11 = PGM_RD_W(BEDTEMPTABLE[i][1]);
|
995
|
|
- return entry01 + (raw - entry00) * float(entry11 - entry01) / float(entry10 - entry00);
|
996
|
|
- }
|
997
|
|
- }
|
998
|
|
- return PGM_RD_W(BEDTEMPTABLE[BEDTEMPTABLE_LEN - 1][1]); // Overflow: Return last value in the table
|
999
|
|
-
|
|
1014
|
+ #if ENABLED(HEATER_BED_USES_THERMISTOR)
|
|
1015
|
+ SCAN_THERMISTOR_TABLE(BEDTEMPTABLE, BEDTEMPTABLE_LEN);
|
|
1016
|
+ #elif ENABLED(HEATER_BED_USES_AD595)
|
|
1017
|
+ return TEMP_AD595(raw);
|
|
1018
|
+ #elif ENABLED(HEATER_BED_USES_AD8495)
|
|
1019
|
+ return TEMP_AD8495(raw);
|
1000
|
1020
|
#else
|
1001
|
|
-
|
1002
|
|
- // Thermocouple with amplifier ADC interface
|
1003
|
|
- return (raw *
|
1004
|
|
- #if ENABLED(BED_USES_AD595)
|
1005
|
|
- 5.0 * 100.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET
|
1006
|
|
- #elif ENABLED(BED_USES_AD8495)
|
1007
|
|
- 660.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD8495_GAIN) + TEMP_SENSOR_AD8495_OFFSET
|
1008
|
|
- #else
|
1009
|
|
- 0
|
1010
|
|
- #endif
|
1011
|
|
- );
|
1012
|
|
-
|
|
1021
|
+ return 0;
|
1013
|
1022
|
#endif
|
1014
|
1023
|
}
|
1015
|
1024
|
#endif // HAS_HEATED_BED
|
|
@@ -1018,33 +1027,14 @@ float Temperature::analog2temp(const int raw, const uint8_t e) {
|
1018
|
1027
|
// Derived from RepRap FiveD extruder::getTemperature()
|
1019
|
1028
|
// For chamber temperature measurement.
|
1020
|
1029
|
float Temperature::analog2tempChamber(const int raw) {
|
1021
|
|
- #if ENABLED(CHAMBER_USES_THERMISTOR)
|
1022
|
|
-
|
1023
|
|
- // Thermistor with conversion table
|
1024
|
|
- for (uint8_t i = 1; i < CHAMBERTEMPTABLE_LEN; i++) {
|
1025
|
|
- const short entry10 = PGM_RD_W(CHAMBERTEMPTABLE[i][0]);
|
1026
|
|
- if (entry10 > raw) {
|
1027
|
|
- const short entry00 = PGM_RD_W(CHAMBERTEMPTABLE[i - 1][0]),
|
1028
|
|
- entry01 = PGM_RD_W(CHAMBERTEMPTABLE[i - 1][1]),
|
1029
|
|
- entry11 = PGM_RD_W(CHAMBERTEMPTABLE[i][1]);
|
1030
|
|
- return entry01 + (raw - entry00) * float(entry11 - entry01) / float(entry10 - entry00);
|
1031
|
|
- }
|
1032
|
|
- }
|
1033
|
|
- return PGM_RD_W(CHAMBERTEMPTABLE[CHAMBERTEMPTABLE_LEN - 1][1]); // Overflow: Return last value in the table
|
1034
|
|
-
|
|
1030
|
+ #if ENABLED(HEATER_CHAMBER_USES_THERMISTOR)
|
|
1031
|
+ SCAN_THERMISTOR_TABLE(CHAMBERTEMPTABLE, CHAMBERTEMPTABLE_LEN);
|
|
1032
|
+ #elif ENABLED(HEATER_CHAMBER_USES_AD595)
|
|
1033
|
+ return TEMP_AD595(raw);
|
|
1034
|
+ #elif ENABLED(HEATER_CHAMBER_USES_AD8495)
|
|
1035
|
+ return TEMP_AD8495(raw);
|
1035
|
1036
|
#else
|
1036
|
|
-
|
1037
|
|
- // Thermocouple with amplifier ADC interface
|
1038
|
|
- return (raw *
|
1039
|
|
- #if ENABLED(CHAMBER_USES_AD595)
|
1040
|
|
- 5.0 * 100.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET
|
1041
|
|
- #elif ENABLED(CHAMBER_USES_AD8495)
|
1042
|
|
- 660.0 / 1024.0 / (OVERSAMPLENR) * (TEMP_SENSOR_AD8495_GAIN) + TEMP_SENSOR_AD8495_OFFSET
|
1043
|
|
- #else
|
1044
|
|
- 0
|
1045
|
|
- #endif
|
1046
|
|
- );
|
1047
|
|
-
|
|
1037
|
+ return 0;
|
1048
|
1038
|
#endif
|
1049
|
1039
|
}
|
1050
|
1040
|
#endif // HAS_TEMP_CHAMBER
|
|
@@ -1059,8 +1049,7 @@ void Temperature::updateTemperaturesFromRawValues() {
|
1059
|
1049
|
#if ENABLED(HEATER_0_USES_MAX6675)
|
1060
|
1050
|
current_temperature_raw[0] = read_max6675();
|
1061
|
1051
|
#endif
|
1062
|
|
- HOTEND_LOOP()
|
1063
|
|
- current_temperature[e] = Temperature::analog2temp(current_temperature_raw[e], e);
|
|
1052
|
+ HOTEND_LOOP() current_temperature[e] = Temperature::analog2temp(current_temperature_raw[e], e);
|
1064
|
1053
|
#if HAS_HEATED_BED
|
1065
|
1054
|
current_temperature_bed = Temperature::analog2tempBed(current_temperature_bed_raw);
|
1066
|
1055
|
#endif
|