🩹 Misc temp sensor fixups (#27884)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
parent
843f79589c
commit
88d368ad9d
3 changed files with 51 additions and 43 deletions
|
|
@ -26,4 +26,4 @@
|
|||
#define TS_TYPICAL_SLOPE 4.5
|
||||
|
||||
// TODO: Implement voltage scaling (calibrated Vrefint) and ADC resolution scaling (when applicable)
|
||||
#define TEMP_SOC_SENSOR(RAW) ((TS_TYPICAL_V - (RAW) / float(OVERSAMPLENR) / float(HAL_ADC_RANGE) * (float(ADC_VREF_MV) / 1000)) / ((TS_TYPICAL_SLOPE) / 1000) + TS_TYPICAL_TEMP)
|
||||
#define TEMP_SOC_SENSOR(RAW) ((TS_TYPICAL_V - (RAW) / float(OVERSAMPLENR) / float(HAL_ADC_RANGE) * (float(ADC_VREF_MV) / 1000.0f)) / ((TS_TYPICAL_SLOPE) / 1000.0f) + TS_TYPICAL_TEMP)
|
||||
|
|
|
|||
|
|
@ -341,6 +341,6 @@
|
|||
|
||||
#elif defined(TS_TYPICAL_V) && defined(TS_TYPICAL_SLOPE) && defined(TS_TYPICAL_TEMP)
|
||||
|
||||
#define TEMP_SOC_SENSOR(RAW) ((TS_TYPICAL_V - (RAW) / float(OVERSAMPLENR) / float(HAL_ADC_RANGE) * (float(ADC_VREF_MV) / 1000.0f)) / ((TS_TYPICAL_SLOPE) / 1000) + TS_TYPICAL_TEMP)
|
||||
#define TEMP_SOC_SENSOR(RAW) ((TS_TYPICAL_V - (RAW) / float(OVERSAMPLENR) / float(HAL_ADC_RANGE) * (float(ADC_VREF_MV) / 1000.0f)) / ((TS_TYPICAL_SLOPE) / 1000.0f) + TS_TYPICAL_TEMP)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2460,11 +2460,6 @@ void Temperature::task() {
|
|||
UNUSED(ms);
|
||||
}
|
||||
|
||||
// For a 5V input the AD595 returns a value scaled with 10mV per °C. (Minimum input voltage is 5V.)
|
||||
#define TEMP_AD595(RAW) ((RAW) * (ADC_VREF_MV / 10) / float(HAL_ADC_RANGE) / (OVERSAMPLENR) * (TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET)
|
||||
// For a 5V input the AD8495 returns a value scaled with 5mV per °C. (Minimum input voltage is 2.7V.)
|
||||
#define TEMP_AD8495(RAW) ((RAW) * (ADC_VREF_MV / 5) / float(HAL_ADC_RANGE) / (OVERSAMPLENR) * (TEMP_SENSOR_AD8495_GAIN) + TEMP_SENSOR_AD8495_OFFSET)
|
||||
|
||||
/**
|
||||
* Bisect search for the range of the 'raw' value, then interpolate
|
||||
* proportionally between the under and over values.
|
||||
|
|
@ -2604,6 +2599,22 @@ void Temperature::task() {
|
|||
}
|
||||
#endif
|
||||
|
||||
#if ANY_THERMISTOR_IS(-1)
|
||||
// For a 5V input the AD595 returns a value scaled with 10mV per °C. (Minimum input voltage is 5V.)
|
||||
static constexpr celsius_float_t temp_ad595(const raw_adc_t raw) {
|
||||
return raw * (float(ADC_VREF_MV) / 10.0f) / float(HAL_ADC_RANGE) / (OVERSAMPLENR)
|
||||
* (TEMP_SENSOR_AD595_GAIN) + (TEMP_SENSOR_AD595_OFFSET);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ANY_THERMISTOR_IS(-4)
|
||||
// For a 5V input the AD8495 returns a value scaled with 5mV per °C. (Minimum input voltage is 2.7V.)
|
||||
static constexpr celsius_float_t temp_ad8495(const raw_adc_t raw) {
|
||||
return raw * (float(ADC_VREF_MV) / 5.0f) / float(HAL_ADC_RANGE) / (OVERSAMPLENR)
|
||||
* (TEMP_SENSOR_AD8495_GAIN) + (TEMP_SENSOR_AD8495_OFFSET);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAS_HOTEND
|
||||
// Derived from RepRap FiveD extruder::getTemperature()
|
||||
// For hot end temperature measurement.
|
||||
|
|
@ -2630,9 +2641,9 @@ void Temperature::task() {
|
|||
return (int16_t)raw * 0.25f;
|
||||
#endif
|
||||
#elif TEMP_SENSOR_0_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_0_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2649,9 +2660,9 @@ void Temperature::task() {
|
|||
return (int16_t)raw * 0.25f;
|
||||
#endif
|
||||
#elif TEMP_SENSOR_1_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_1_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2668,9 +2679,9 @@ void Temperature::task() {
|
|||
return (int16_t)raw * 0.25f;
|
||||
#endif
|
||||
#elif TEMP_SENSOR_2_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_2_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2678,9 +2689,9 @@ void Temperature::task() {
|
|||
#if TEMP_SENSOR_3_IS_CUSTOM
|
||||
return user_thermistor_to_deg_c(CTI_HOTEND_3, raw);
|
||||
#elif TEMP_SENSOR_3_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_3_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2688,9 +2699,9 @@ void Temperature::task() {
|
|||
#if TEMP_SENSOR_4_IS_CUSTOM
|
||||
return user_thermistor_to_deg_c(CTI_HOTEND_4, raw);
|
||||
#elif TEMP_SENSOR_4_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_4_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2698,9 +2709,9 @@ void Temperature::task() {
|
|||
#if TEMP_SENSOR_5_IS_CUSTOM
|
||||
return user_thermistor_to_deg_c(CTI_HOTEND_5, raw);
|
||||
#elif TEMP_SENSOR_5_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_5_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2708,9 +2719,9 @@ void Temperature::task() {
|
|||
#if TEMP_SENSOR_6_IS_CUSTOM
|
||||
return user_thermistor_to_deg_c(CTI_HOTEND_6, raw);
|
||||
#elif TEMP_SENSOR_6_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_6_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2718,9 +2729,9 @@ void Temperature::task() {
|
|||
#if TEMP_SENSOR_7_IS_CUSTOM
|
||||
return user_thermistor_to_deg_c(CTI_HOTEND_7, raw);
|
||||
#elif TEMP_SENSOR_7_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_7_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -2754,9 +2765,9 @@ void Temperature::task() {
|
|||
#elif TEMP_SENSOR_BED_IS_THERMISTOR
|
||||
SCAN_THERMISTOR_TABLE(TEMPTABLE_BED, TEMPTABLE_BED_LEN);
|
||||
#elif TEMP_SENSOR_BED_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_BED_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
UNUSED(raw);
|
||||
return 0;
|
||||
|
|
@ -2772,9 +2783,9 @@ void Temperature::task() {
|
|||
#elif TEMP_SENSOR_CHAMBER_IS_THERMISTOR
|
||||
SCAN_THERMISTOR_TABLE(TEMPTABLE_CHAMBER, TEMPTABLE_CHAMBER_LEN);
|
||||
#elif TEMP_SENSOR_CHAMBER_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_CHAMBER_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
UNUSED(raw);
|
||||
return 0;
|
||||
|
|
@ -2790,9 +2801,9 @@ void Temperature::task() {
|
|||
#elif TEMP_SENSOR_COOLER_IS_THERMISTOR
|
||||
SCAN_THERMISTOR_TABLE(TEMPTABLE_COOLER, TEMPTABLE_COOLER_LEN);
|
||||
#elif TEMP_SENSOR_COOLER_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_COOLER_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
UNUSED(raw);
|
||||
return 0;
|
||||
|
|
@ -2808,9 +2819,9 @@ void Temperature::task() {
|
|||
#elif TEMP_SENSOR_PROBE_IS_THERMISTOR
|
||||
SCAN_THERMISTOR_TABLE(TEMPTABLE_PROBE, TEMPTABLE_PROBE_LEN);
|
||||
#elif TEMP_SENSOR_PROBE_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_PROBE_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
UNUSED(raw);
|
||||
return 0;
|
||||
|
|
@ -2826,9 +2837,9 @@ void Temperature::task() {
|
|||
#elif TEMP_SENSOR_BOARD_IS_THERMISTOR
|
||||
SCAN_THERMISTOR_TABLE(TEMPTABLE_BOARD, TEMPTABLE_BOARD_LEN);
|
||||
#elif TEMP_SENSOR_BOARD_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_BOARD_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
UNUSED(raw);
|
||||
return 0;
|
||||
|
|
@ -2839,14 +2850,11 @@ void Temperature::task() {
|
|||
#if HAS_TEMP_SOC
|
||||
// For SoC temperature measurement.
|
||||
celsius_float_t Temperature::analog_to_celsius_soc(const raw_adc_t raw) {
|
||||
return (
|
||||
#ifdef TEMP_SOC_SENSOR
|
||||
TEMP_SOC_SENSOR(raw)
|
||||
#else
|
||||
0
|
||||
#error "TEMP_SENSOR_SOC requires the TEMP_SOC_SENSOR(RAW) macro to be defined for your board."
|
||||
#endif
|
||||
);
|
||||
#ifndef TEMP_SOC_SENSOR
|
||||
#error "TEMP_SENSOR_SOC requires the TEMP_SOC_SENSOR(RAW) macro to be defined for your board."
|
||||
#define TEMP_SOC_SENSOR(...) 0
|
||||
#endif
|
||||
return TEMP_SOC_SENSOR(raw);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -2864,9 +2872,9 @@ void Temperature::task() {
|
|||
#elif TEMP_SENSOR_REDUNDANT_IS_THERMISTOR
|
||||
SCAN_THERMISTOR_TABLE(TEMPTABLE_REDUNDANT, TEMPTABLE_REDUNDANT_LEN);
|
||||
#elif TEMP_SENSOR_REDUNDANT_IS_AD595
|
||||
return TEMP_AD595(raw);
|
||||
return temp_ad595(raw);
|
||||
#elif TEMP_SENSOR_REDUNDANT_IS_AD8495
|
||||
return TEMP_AD8495(raw);
|
||||
return temp_ad8495(raw);
|
||||
#else
|
||||
UNUSED(raw);
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue