✨ TEMP_SENSOR_SOC (#25642)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
committed by
Scott Lahteine
parent
d1738e946a
commit
f5a905a641
@@ -564,6 +564,11 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_SOC
|
||||
soc_info_t Temperature::temp_soc; // = { 0 }
|
||||
raw_adc_t Temperature::maxtemp_raw_SOC = TEMP_SENSOR_SOC_RAW_HI_TEMP;
|
||||
#endif
|
||||
|
||||
#if BOTH(HAS_MARLINUI_MENU, PREVENT_COLD_EXTRUSION) && E_MANUAL > 0
|
||||
bool Temperature::allow_cold_extrude_override = false;
|
||||
#else
|
||||
@@ -1356,6 +1361,7 @@ void Temperature::_temp_error(const heater_id_t heater_id, FSTR_P const serial_m
|
||||
OPTCODE(HAS_TEMP_COOLER, case H_COOLER: SERIAL_ECHOPGM(STR_COOLER); break)
|
||||
OPTCODE(HAS_TEMP_PROBE, case H_PROBE: SERIAL_ECHOPGM(STR_PROBE); break)
|
||||
OPTCODE(HAS_TEMP_BOARD, case H_BOARD: SERIAL_ECHOPGM(STR_MOTHERBOARD); break)
|
||||
OPTCODE(HAS_TEMP_SOC, case H_SOC: SERIAL_ECHOPGM(STR_SOC); break)
|
||||
OPTCODE(HAS_TEMP_CHAMBER, case H_CHAMBER: SERIAL_ECHOPGM(STR_HEATER_CHAMBER); break)
|
||||
OPTCODE(HAS_TEMP_BED, case H_BED: SERIAL_ECHOPGM(STR_HEATER_BED); break)
|
||||
default:
|
||||
@@ -2368,6 +2374,20 @@ void Temperature::task() {
|
||||
}
|
||||
#endif // HAS_TEMP_BOARD
|
||||
|
||||
#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
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_REDUNDANT
|
||||
// For redundant temperature measurement.
|
||||
celsius_float_t Temperature::analog_to_celsius_redundant(const raw_adc_t raw) {
|
||||
@@ -2430,6 +2450,7 @@ void Temperature::updateTemperaturesFromRawValues() {
|
||||
TERN_(HAS_TEMP_COOLER, temp_cooler.celsius = analog_to_celsius_cooler(temp_cooler.getraw()));
|
||||
TERN_(HAS_TEMP_PROBE, temp_probe.celsius = analog_to_celsius_probe(temp_probe.getraw()));
|
||||
TERN_(HAS_TEMP_BOARD, temp_board.celsius = analog_to_celsius_board(temp_board.getraw()));
|
||||
TERN_(HAS_TEMP_SOC, temp_soc.celsius = analog_to_celsius_soc(temp_soc.getraw()));
|
||||
TERN_(HAS_TEMP_REDUNDANT, temp_redundant.celsius = analog_to_celsius_redundant(temp_redundant.getraw()));
|
||||
|
||||
TERN_(FILAMENT_WIDTH_SENSOR, filwidth.update_measured_mm());
|
||||
@@ -2507,6 +2528,10 @@ void Temperature::updateTemperaturesFromRawValues() {
|
||||
if (TP_CMP(BOARD, temp_board.getraw(), maxtemp_raw_BOARD)) maxtemp_error(H_BOARD);
|
||||
if (TP_CMP(BOARD, mintemp_raw_BOARD, temp_board.getraw())) mintemp_error(H_BOARD);
|
||||
#endif
|
||||
|
||||
#if BOTH(HAS_TEMP_SOC, THERMAL_PROTECTION_SOC)
|
||||
if (TP_CMP(SOC, temp_soc.getraw(), maxtemp_raw_SOC)) maxtemp_error(H_SOC);
|
||||
#endif
|
||||
#undef TP_CMP
|
||||
|
||||
} // Temperature::updateTemperaturesFromRawValues
|
||||
@@ -2722,6 +2747,7 @@ void Temperature::init() {
|
||||
TERN_(HAS_TEMP_ADC_PROBE, hal.adc_enable(TEMP_PROBE_PIN));
|
||||
TERN_(HAS_TEMP_ADC_COOLER, hal.adc_enable(TEMP_COOLER_PIN));
|
||||
TERN_(HAS_TEMP_ADC_BOARD, hal.adc_enable(TEMP_BOARD_PIN));
|
||||
TERN_(HAS_TEMP_ADC_SOC, hal.adc_enable(TEMP_SOC_PIN));
|
||||
TERN_(HAS_TEMP_ADC_REDUNDANT, hal.adc_enable(TEMP_REDUNDANT_PIN));
|
||||
TERN_(FILAMENT_WIDTH_SENSOR, hal.adc_enable(FILWIDTH_PIN));
|
||||
TERN_(HAS_ADC_BUTTONS, hal.adc_enable(ADC_KEYPAD_PIN));
|
||||
@@ -2858,6 +2884,10 @@ void Temperature::init() {
|
||||
while (analog_to_celsius_board(maxtemp_raw_BOARD) > BOARD_MAXTEMP) maxtemp_raw_BOARD -= TEMPDIR(BOARD) * (OVERSAMPLENR);
|
||||
#endif
|
||||
|
||||
#if BOTH(HAS_TEMP_SOC, THERMAL_PROTECTION_SOC)
|
||||
while (analog_to_celsius_soc(maxtemp_raw_SOC) > SOC_MAXTEMP) maxtemp_raw_SOC -= OVERSAMPLENR;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_REDUNDANT
|
||||
temp_redundant.target = &(
|
||||
#if REDUNDANT_TEMP_MATCH(TARGET, COOLER) && HAS_TEMP_COOLER
|
||||
@@ -3340,6 +3370,7 @@ void Temperature::update_raw_temperatures() {
|
||||
TERN_(HAS_TEMP_ADC_PROBE, temp_probe.update());
|
||||
TERN_(HAS_TEMP_ADC_COOLER, temp_cooler.update());
|
||||
TERN_(HAS_TEMP_ADC_BOARD, temp_board.update());
|
||||
TERN_(HAS_TEMP_ADC_SOC, temp_soc.update());
|
||||
|
||||
TERN_(HAS_JOY_ADC_X, joystick.x.update());
|
||||
TERN_(HAS_JOY_ADC_Y, joystick.y.update());
|
||||
@@ -3370,6 +3401,7 @@ void Temperature::readings_ready() {
|
||||
TERN_(HAS_TEMP_PROBE, temp_probe.reset());
|
||||
TERN_(HAS_TEMP_COOLER, temp_cooler.reset());
|
||||
TERN_(HAS_TEMP_BOARD, temp_board.reset());
|
||||
TERN_(HAS_TEMP_SOC, temp_soc.reset());
|
||||
TERN_(HAS_TEMP_REDUNDANT, temp_redundant.reset());
|
||||
|
||||
TERN_(HAS_JOY_ADC_X, joystick.x.reset());
|
||||
@@ -3828,6 +3860,11 @@ void Temperature::isr() {
|
||||
case MeasureTemp_BOARD: ACCUMULATE_ADC(temp_board); break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_ADC_SOC
|
||||
case PrepareTemp_SOC: hal.adc_start(TEMP_SOC_PIN); break;
|
||||
case MeasureTemp_SOC: ACCUMULATE_ADC(temp_soc); break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_ADC_REDUNDANT
|
||||
case PrepareTemp_REDUNDANT: hal.adc_start(TEMP_REDUNDANT_PIN); break;
|
||||
case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break;
|
||||
@@ -3967,8 +4004,10 @@ void Temperature::isr() {
|
||||
* Print a single heater state in the form:
|
||||
* Bed: " B:nnn.nn /nnn.nn"
|
||||
* Chamber: " C:nnn.nn /nnn.nn"
|
||||
* Probe: " P:nnn.nn /nnn.nn"
|
||||
* Probe: " P:nnn.nn"
|
||||
* Cooler: " L:nnn.nn /nnn.nn"
|
||||
* Board: " M:nnn.nn"
|
||||
* SoC: " S:nnn.nn"
|
||||
* Redundant: " R:nnn.nn /nnn.nn"
|
||||
* Extruder: " T0:nnn.nn /nnn.nn"
|
||||
* With ADC: " T0:nnn.nn /nnn.nn (nnn.nn)"
|
||||
@@ -3977,6 +4016,7 @@ void Temperature::isr() {
|
||||
OPTARG(SHOW_TEMP_ADC_VALUES, const float r)
|
||||
) {
|
||||
char k;
|
||||
bool show_t = true;
|
||||
switch (e) {
|
||||
default:
|
||||
#if HAS_TEMP_HOTEND
|
||||
@@ -3989,13 +4029,16 @@ void Temperature::isr() {
|
||||
case H_CHAMBER: k = 'C'; break;
|
||||
#endif
|
||||
#if HAS_TEMP_PROBE
|
||||
case H_PROBE: k = 'P'; break;
|
||||
case H_PROBE: k = 'P'; show_t = false; break;
|
||||
#endif
|
||||
#if HAS_TEMP_COOLER
|
||||
case H_COOLER: k = 'L'; break;
|
||||
#endif
|
||||
#if HAS_TEMP_BOARD
|
||||
case H_BOARD: k = 'M'; break;
|
||||
case H_BOARD: k = 'M'; show_t = false; break;
|
||||
#endif
|
||||
#if HAS_TEMP_SOC
|
||||
case H_SOC: k = 'S'; show_t = false; break;
|
||||
#endif
|
||||
#if HAS_TEMP_REDUNDANT
|
||||
case H_REDUNDANT: k = 'R'; break;
|
||||
@@ -4010,10 +4053,8 @@ void Temperature::isr() {
|
||||
#else
|
||||
#define SFP 2
|
||||
#endif
|
||||
SERIAL_CHAR(':');
|
||||
SERIAL_PRINT(c, SFP);
|
||||
SERIAL_ECHOPGM(" /");
|
||||
SERIAL_PRINT(t, SFP);
|
||||
SERIAL_CHAR(':'); SERIAL_PRINT(c, SFP);
|
||||
if (show_t) { SERIAL_ECHOPGM(" /"); SERIAL_PRINT(t, SFP); }
|
||||
#if ENABLED(SHOW_TEMP_ADC_VALUES)
|
||||
// Temperature MAX SPI boards do not have an OVERSAMPLENR defined
|
||||
SERIAL_ECHOPGM(" (", TERN(HAS_MAXTC_LIBRARIES, k == 'T', false) ? r : r * RECIPROCAL(OVERSAMPLENR));
|
||||
@@ -4043,6 +4084,9 @@ void Temperature::isr() {
|
||||
#if HAS_TEMP_BOARD
|
||||
print_heater_state(H_BOARD, degBoard(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawBoardTemp()));
|
||||
#endif
|
||||
#if HAS_TEMP_SOC
|
||||
print_heater_state(H_SOC, degSoc(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawSocTemp()));
|
||||
#endif
|
||||
#if HAS_TEMP_REDUNDANT
|
||||
if (include_r) print_heater_state(H_REDUNDANT, degRedundant(), degRedundantTarget() OPTARG(SHOW_TEMP_ADC_VALUES, rawRedundantTemp()));
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user