TEMP_SENSOR_SOC (#25642)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
Giuliano Zaro 2023-04-25 04:51:44 +02:00 committed by Scott Lahteine
parent d1738e946a
commit f5a905a641
22 changed files with 587 additions and 101 deletions

View file

@ -432,29 +432,13 @@
// @section temperature
/**
* --NORMAL IS 4.7 PULLUP!-- 1 pullup can be used on hotend sensor, using correct resistor and table
* Temperature Sensors:
*
* Temperature sensors available:
*
* SPI RTD/Thermocouple Boards - IMPORTANT: Read the NOTE below!
* -------
* -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-1)
* NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below.
* -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-1)
* -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-1)
*
* NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default,
* Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN,
* Software SPI will be used on those ports instead. You can force Hardware SPI on the default bus in the
* Configuration_adv.h file. At this time, separate Hardware SPI buses for sensors are not supported.
*
* Analog Themocouple Boards
* -------
* -4 : AD8495 with Thermocouple
* -1 : AD595 with Thermocouple
* NORMAL IS 4.7 PULLUP! Hotend sensors can use 1 pullup with correct resistor and table.
*
* ================================================================
* Analog Thermistors - 4.7 pullup - Normal
* -------
* ================================================================
* 1 : 100 EPCOS - Best choice for EPCOS thermistors
* 331 : 100 Same as #1, but 3.3V scaled for MEGA
* 332 : 100 Same as #1, but 3.3V scaled for DUE
@ -487,23 +471,28 @@
* 61 : 100 Formbot/Vivedino 350°C Thermistor - beta 3950
* 66 : 4.7 Dyze Design / Trianglelab T-D500 500°C High Temperature Thermistor
* 67 : 500 SliceEngineering 450°C Thermistor
* 68 : PT100 amplifier board from Dyze Design
* 68 : PT100 Smplifier board from Dyze Design
* 70 : 100 bq Hephestos 2
* 75 : 100 Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
* 2000 : 100 Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
*
* Analog Thermistors - 1 pullup - Atypical, and requires changing out the 4.7 pullup for 1.
* ------- (but gives greater accuracy and more stable PID)
* ================================================================
* Analog Thermistors - 1 pullup
* Atypical, and requires changing out the 4.7 pullup for 1.
* (but gives greater accuracy and more stable PID)
* ================================================================
* 51 : 100 EPCOS (1 pullup)
* 52 : 200 ATC Semitec 204GT-2 (1 pullup)
* 55 : 100 ATC Semitec 104GT-2 - Used in ParCan & J-Head (1 pullup)
*
* ================================================================
* Analog Thermistors - 10 pullup - Atypical
* -------
* ================================================================
* 99 : 100 Found on some Wanhao i3 machines with a 10 pull-up resistor
*
* ================================================================
* Analog RTDs (Pt100/Pt1000)
* -------
* ================================================================
* 110 : Pt100 with 1 pullup (atypical)
* 147 : Pt100 with 4.7 pullup
* 1010 : Pt1000 with 1 pullup (atypical)
@ -515,15 +504,34 @@
* NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
*
* ================================================================
* SPI RTD/Thermocouple Boards
* ================================================================
* -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-1)
* NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below.
* -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-1)
* -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-1)
*
* NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default,
* Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN,
* Software SPI will be used on those ports instead. You can force Hardware SPI on the default bus in the
* Configuration_adv.h file. At this time, separate Hardware SPI buses for sensors are not supported.
*
* ================================================================
* Analog Thermocouple Boards
* ================================================================
* -4 : AD8495 with Thermocouple
* -1 : AD595 with Thermocouple
*
* ================================================================
* Custom/Dummy/Other Thermal Sensors
* ------
* ================================================================
* 0 : not used
* 1000 : Custom - Specify parameters in Configuration_adv.h
*
* !!! Use these for Testing or Development purposes. NEVER for production machine. !!!
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
*
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@ -538,6 +546,7 @@
#define TEMP_SENSOR_CHAMBER 0
#define TEMP_SENSOR_COOLER 0
#define TEMP_SENSOR_BOARD 0
#define TEMP_SENSOR_SOC 0
#define TEMP_SENSOR_REDUNDANT 0
// Dummy thermistor constant temperature readings, for use with 998 and 999

View file

@ -276,9 +276,15 @@
#define THERMAL_PROTECTION_BOARD // Halt the printer if the board sensor leaves the temp range below.
#define BOARD_MINTEMP 8 // (°C)
#define BOARD_MAXTEMP 70 // (°C)
#ifndef TEMP_BOARD_PIN
//#define TEMP_BOARD_PIN -1 // Board temp sensor pin, if not set in pins file.
//#define TEMP_BOARD_PIN -1 // Board temp sensor pin override.
#endif
//
// SoC Sensor options
//
#if TEMP_SENSOR_SOC
#define THERMAL_PROTECTION_SOC // Halt the printer if the SoC sensor leaves the temp range below.
#define SOC_MAXTEMP 85 // (°C)
#endif
/**
@ -579,6 +585,9 @@
// Use TEMP_SENSOR_BOARD as a trigger for enabling the controller fan
//#define CONTROLLER_FAN_MIN_BOARD_TEMP 40 // (°C) Turn on the fan if the board reaches this temperature
// Use TEMP_SENSOR_SOC as a trigger for enabling the controller fan
//#define CONTROLLER_FAN_MIN_SOC_TEMP 40 // (°C) Turn on the fan if the SoC reaches this temperature
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
#if ENABLED(CONTROLLER_FAN_EDITABLE)
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu

View file

@ -28,6 +28,7 @@
#include "../shared/Marduino.h"
#include "../shared/math_32bit.h"
#include "../shared/HAL_SPI.h"
#include "temp_soc.h"
#include "fastio.h"
#include "Servo.h"
#include "MarlinSerial.h"

View file

@ -51,6 +51,10 @@
#error "TFT_COLOR_UI, TFT_LVGL_UI and TFT_CLASSIC_UI are currently only supported on STM32H7, STM32F4 and STM32F1 hardware."
#endif
#if TEMP_SENSOR_SOC && defined(ATEMP) && TEMP_SOC_PIN != ATEMP
#error "TEMP_SENSOR_SOC requires 'TEMP_SOC_PIN ATEMP' on STM32."
#endif
/**
* Check for common serial pin conflicts
*/

View file

@ -0,0 +1,346 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef STM32F0xx
/*
STM32F030x4 STM32F030x6 STM32F030x8 STM32F030xC https://www.st.com/resource/en/datasheet/stm32f030f4.pdf
--> TS_CAL2 not defined in datasheet
STM32F031x4 STM32F031x6 https://www.st.com/resource/en/datasheet/stm32f031c4.pdf
STM32F038x6 https://www.st.com/resource/en/datasheet/stm32f038c6.pdf
STM32F042x4 STM32F042x6 https://www.st.com/resource/en/datasheet/stm32f042c4.pdf
STM32F048C6 STM32F048G6 STM32F048T6 https://www.st.com/resource/en/datasheet/stm32f048c6.pdf
STM32F051x4 STM32F051x6 STM32F051x8 https://www.st.com/resource/en/datasheet/dm00039193.pdf
STM32F058C8 STM32F058R8 STM32F058T8 https://www.st.com/resource/en/datasheet/stm32f058c8.pdf
STM32F070CB STM32F070RB STM32F070C6 STM32F070F6 https://www.st.com/resource/en/datasheet/stm32f070c6.pdf
--> TS_CAL2 not defined in datasheet
STM32F071x8 STM32F071xB https://www.st.com/resource/en/datasheet/stm32f071cb.pdf
STM32F072x8 STM32F072xB https://www.st.com/resource/en/datasheet/stm32f072c8.pdf
STM32F078CB STM32F078RB STM32F078VB https://www.st.com/resource/en/datasheet/stm32f078cb.pdf
STM32F091xB STM32F091xC https://www.st.com/resource/en/datasheet/stm32f091cc.pdf
STM32F098CC STM32F098RC STM32F098VC https://www.st.com/resource/en/datasheet/stm32f098cc.pdf
*/
#define TS_CAL1_TEMP 30 // Calibration temperature of TS_CAL1 (see specific SoC datasheet)
#define TS_CAL1_REGOFFSET 0x1FFFF7B8 // Memory address of TS_CAL1 for STM32F030x4/x6/x8/xC (see specific SoC datasheet)
#define TS_CAL2_TEMP 110 // Calibration temperature of TS_CAL2 (see specific SoC datasheet)
#define TS_CAL2_REGOFFSET 0x1FFFF7C2 // Memory address of TS_CAL2 for STM32F030x4/x6/x8/xC (see specific SoC datasheet)
#elif defined(STM32F1xx)
/*
STM32F100xC STM32F100xD STM32F100xE https://www.st.com/resource/en/datasheet/stm32f100rc.pdf
--> V=1.41
STM32F100x4 STM32F100x6 STM32F100x8 STM32F100xB https://www.st.com/resource/en/datasheet/stm32f100cb.pdf
--> V=1.41
STM32F101x8 STM32F101xB https://www.st.com/resource/en/datasheet/stm32f101r8.pdf
STM32F101xC STM32F101xD STM32F101xE https://www.st.com/resource/en/datasheet/stm32f101rc.pdf
STM32F101x4 STM32F101x6 https://www.st.com/resource/en/datasheet/stm32f101c4.pdf
STM32F101xF STM32F101xG https://www.st.com/resource/en/datasheet/stm32f101vf.pdf
STM32F102x8 STM32F102xB https://www.st.com/resource/en/datasheet/stm32f102c8.pdf
--> V=1.42 / Slope=4.35
STM32F102x4 STM32F102x6 https://www.st.com/resource/en/datasheet/stm32f102c4.pdf
--> V=1.42 / Slope=4.35
STM32F103x8 STM32F103xB https://www.st.com/resource/en/datasheet/stm32f103c8.pdf
STM32F103xC STM32F103xD STM32F103xE https://www.st.com/resource/en/datasheet/stm32f103rc.pdf
STM32F103x4 STM32F103x6 https://www.st.com/resource/en/datasheet/stm32f103c4.pdf
STM32F103xF STM32F103xG https://www.st.com/resource/en/datasheet/stm32f103rg.pdf
STM32F105xx STM32F107xx https://www.st.com/resource/en/datasheet/stm32f105r8.pdf
*/
#define TS_TYPICAL_V 1.43
#define TS_TYPICAL_TEMP 25
#define TS_TYPICAL_SLOPE 4.3
#elif defined(STM32F2xx)
/*
STM32F205xx STM32F207xx https://www.st.com/resource/en/datasheet/stm32f205rb.pdf
STM32F215xx STM32F217xx https://www.st.com/resource/en/datasheet/stm32f215re.pdf
*/
#define TS_TYPICAL_V 0.76
#define TS_TYPICAL_TEMP 25
#define TS_TYPICAL_SLOPE 2.5
#elif defined(STM32F3xx)
/*
STM32F301x6 STM32F301x8 https://www.st.com/resource/en/datasheet/stm32f301c6.pdf
STM32F302xD STM32F302xE https://www.st.com/resource/en/datasheet/stm32f302re.pdf
STM32F302x6 STM32F302x8 https://www.st.com/resource/en/datasheet/stm32f302r6.pdf
STM32F302xB STM32F302xC https://www.st.com/resource/en/datasheet/stm32f302cb.pdf
STM32F303xD STM32F303xE https://www.st.com/resource/en/datasheet/stm32f303re.pdf
STM32F303xB STM32F303xC https://www.st.com/resource/en/datasheet/stm32f303cb.pdf
STM32F303x6/x8 https://www.st.com/resource/en/datasheet/stm32f303c6.pdf
STM32F334x4 STM32F334x6 STM32F334x8 https://www.st.com/resource/en/datasheet/stm32f334k4.pdf
STM32F373xx https://www.st.com/resource/en/datasheet/stm32f373cc.pdf
STM32F358xC https://www.st.com/resource/en/datasheet/stm32f358cc.pdf
STM32F378xx https://www.st.com/resource/en/datasheet/stm32f378cc.pdf
STM32F318C8 STM32F318K8 https://www.st.com/resource/en/datasheet/stm32f318c8.pdf
STM32F328C8 https://www.st.com/resource/en/datasheet/stm32f328c8.pdf
STM32F398VE https://www.st.com/resource/en/datasheet/stm32f398ve.pdf
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FFFF7B8
#define TS_CAL2_TEMP 110
#define TS_CAL2_REGOFFSET 0x1FFFF7C2
#elif defined(STM32F4xx)
/*
STM32F401xD STM32F401xE https://www.st.com/resource/en/datasheet/stm32f401re.pdf
STM32F411xC STM32F411xE https://www.st.com/resource/en/datasheet/stm32f411ce.pdf
STM32F446xC/E https://www.st.com/resource/en/datasheet/stm32f446mc.pdf
STM32F479xx https://www.st.com/resource/en/datasheet/stm32f479ai.pdf
STM32F412xE STM32F412xG https://www.st.com/resource/en/datasheet/stm32f412ce.pdf
STM32F410x8 STM32F410xB https://www.st.com/resource/en/datasheet/stm32f410cb.pdf
STM32F469xx https://www.st.com/resource/en/datasheet/stm32f469ae.pdf
STM32F423xH https://www.st.com/resource/en/datasheet/stm32f423ch.pdf
STM32F413xG STM32F413xH https://www.st.com/resource/en/datasheet/stm32f413cg.pdf
STM32F415xx STM32F417xx https://www.st.com/resource/en/datasheet/stm32f415rg.pdf
STM32F405xx STM32F407xx https://www.st.com/resource/en/datasheet/stm32f405rg.pdf
STM32F427xx STM32F429xx https://www.st.com/resource/en/datasheet/stm32f427vg.pdf
STM32F437xx STM32F439xx https://www.st.com/resource/en/datasheet/stm32f437vg.pdf
STM32F401xB STM32F401xC https://www.st.com/resource/en/datasheet/stm32f401cb.pdf
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FFF7A2C
#define TS_CAL2_TEMP 110
#define TS_CAL2_REGOFFSET 0x1FFF7A2E
#elif defined(STM32F7xx)
/*
STM32F756xx https://www.st.com/resource/en/datasheet/stm32f756bg.pdf
STM32F745xx STM32F746xx https://www.st.com/resource/en/datasheet/stm32f745ie.pdf
STM32F777xx STM32F778Ax STM32F779xx https://www.st.com/resource/en/datasheet/stm32f777bi.pdf
STM32F765xx STM32F767xx STM32F768Ax STM32F769xx https://www.st.com/resource/en/datasheet/stm32f765bi.pdf
STM32F722xx STM32F723xx https://www.st.com/resource/en/datasheet/stm32f722ic.pdf
--> TS_CAL1/2 = 0x1FF07A2C / 0x1FF07A2E
STM32F732xx STM32F733xx https://www.st.com/resource/en/datasheet/stm32f732ie.pdf
--> TS_CAL1/2 = 0x1FF07A2C / 0x1FF07A2E
STM32F750x8 https://www.st.com/resource/en/datasheet/stm32f750n8.pdf
STM32F730x8 https://www.st.com/resource/en/datasheet/stm32f730i8.pdf
--> TS_CAL1/2 = 0x1FF07A2C / 0x1FF07A2E
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FF0F44C
#define TS_CAL2_TEMP 110
#define TS_CAL2_REGOFFSET 0x1FF0F44E
#elif defined(STM32G0xx)
/*
STM32G030x6/x8 https://www.st.com/resource/en/datasheet/stm32g030c6.pdf
--> TS_CAL2 not defined in datasheet
STM32G050x6/x8 https://www.st.com/resource/en/datasheet/stm32g050c6.pdf
STM32G0B0KE/CE/RE/VE https://www.st.com/resource/en/datasheet/stm32g0b0ce.pdf
--> TS_CAL2 not defined in datasheet
STM32G081xB https://www.st.com/resource/en/datasheet/stm32g081cb.pdf
STM32G071x8/xB https://www.st.com/resource/en/datasheet/stm32g071c8.pdf
STM32G031x4/x6/x8 https://www.st.com/resource/en/datasheet/stm32g031c6.pdf
STM32G041x6/x8 https://www.st.com/resource/en/datasheet/stm32g041c8.pdf
STM32G051x6/x8 https://www.st.com/resource/en/datasheet/stm32g051c6.pdf
STM32G061x6/x8 https://www.st.com/resource/en/datasheet/stm32g061c6.pdf
STM32G0B1xB/xC/xE https://www.st.com/resource/en/datasheet/stm32g0b1cc.pdf
STM32G0C1xC/xE https://www.st.com/resource/en/datasheet/stm32g0c1cc.pdf
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FFF75A8
#define TS_CAL2_TEMP 130
#define TS_CAL2_REGOFFSET 0x1FFF75CA
#elif defined(STM32G4xx)
/*
STM32G431x6 STM32G431x8 STM32G431xB https://www.st.com/resource/en/datasheet/stm32g431c6.pdf
STM32G441xB https://www.st.com/resource/en/datasheet/stm32g441cb.pdf
STM32G491xC STM32G491xE https://www.st.com/resource/en/datasheet/stm32g491cc.pdf
STM32G4A1xE https://www.st.com/resource/en/datasheet/stm32g4a1ce.pdf
STM32G473xB STM32G473xC STM32G473xE https://www.st.com/resource/en/datasheet/stm32g473cb.pdf
STM32G483xE https://www.st.com/resource/en/datasheet/stm32g483ce.pdf
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32G474xB STM32G474xC STM32G474xE https://www.st.com/resource/en/datasheet/stm32g474cb.pdf
STM32G484xE https://www.st.com/resource/en/datasheet/stm32g484ce.pdf
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FFF75A8
#define TS_CAL2_TEMP 130
#define TS_CAL2_REGOFFSET 0x1FFF75CA
#elif defined(STM32H7xx)
/*
STM32H7A3xI/G
--> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818
STM32H7B0xB
--> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818
STM32H7B3xI
--> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818
STM32H725xE/G
STM32H735xG
STM32H723VE STM32H723VG STM32H723ZE STM32H723ZG
STM32H730AB STM32H730IB STM32H730VB STM32H730ZB
STM32H733VG STM32H733ZG
STM32H742xI/G STM32H743xI/G
--> CAL2_TEMP = 110
STM32H745xI/G
STM32H747xI/G
STM32H753xI
STM32H755xI
STM32H757xI
STM32H750VB STM32H750ZB STM32H750IB STM32H750XB
--> CAL2_TEMP = 110
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FF1E820
#define TS_CAL2_TEMP 130
#define TS_CAL2_REGOFFSET 0x1FF1E840
#elif defined(STM32L0xx)
/*
STM32L010RB
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L010F4 STM32L010K4
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L010C6
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L010K8 STM32L010R8
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L011x3 STM32L011x4
--> TS_CAL1 not defined in datasheet
STM32L021D4 STM32L021F4 STM32L021G4 STM32L021K4
--> TS_CAL1 not defined in datasheet
STM32L031x4 STM32L031x6
STM32L041x6
STM32L051x6 STM32L051x8
STM32L071x8 STM32L071xB STM32L071xZ
STM32L081CB STM32L081CZ STM32L081KZ
STM32L052x6 STM32L052x8
STM32L062K8 STM32L062T8 STM32L062C8
STM32L072x8 STM32L072xB STM32L072xZ
STM32L082KB STM32L082KZ STM32L082CZ
STM32L053C6 STM32L053C8 STM32L053R6 STM32L053R8
STM32L063C8 STM32L063R8
STM32L073x8 STM32L073xB STM32L073xZ
STM32L083x8 STM32L083xB STM32L083xZ
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FF8007A
#define TS_CAL2_TEMP 130
#define TS_CAL2_REGOFFSET 0x1FF8007E
#elif defined(STM32L1xx)
/*
STM32L100x6/8/B-A
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L100RC
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L100C6 STM32L100R8/RB
--> TS_CAL1/TS_CAL2 not defined in datasheet
STM32L151x6/8/B-A STM32L152x6/8/B-A
--> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818
STM32L151xD STM32L152xD
STM32L151VD-X STM32L152VD-X
STM32L15xCC STM32L15xRC STM32L15xUC STM32L15xVC
STM32L15xQC STM32L15xRC-A STM32L15xVC-A STM32L15xZC
STM32L162xE
STM32L162VD STM32L162ZD STM32L162QD STM32L162RD
STM32L162VC STM32L162RC
STM32L162VD-X
STM32L162QC STM32L162VC-A STM32L162ZC STM32L162RC-A
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FF800FA
#define TS_CAL2_TEMP 110
#define TS_CAL2_REGOFFSET 0x1FF800FE
#elif defined(STM32L4xx)
/*
STM32L431xx
STM32L451xx
STM32L471xx
--> CAL2_TEMP = 110
STM32L412xx
STM32L422xx
STM32L432KB STM32L432KC
STM32L442KC
STM32L452xx
STM32L462CE STM32L462RE STM32L462VE
STM32L433xx
STM32L443CC STM32L443RC STM32L443VC
STM32L475xx
--> CAL2_TEMP = 110
STM32L476xx
--> CAL2_TEMP = 110
STM32L486xx :
--> CAL2_TEMP = 110
STM32L496xx
STM32L4A6xG
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FFF75A8
#define TS_CAL2_TEMP 130
#define TS_CAL2_REGOFFSET 0x1FFF75CA
#elif defined(STM32MP1xx)
/*
STM32MP131A STM32MP131D
STM32MP131C STM32MP131F
STM32MP133A STM32MP133D
STM32MP133C STM32MP133F
STM32MP135A STM32MP135D
STM32MP135C STM32MP135F
STM32MP151A/D
STM32MP151C/F
STM32MP153A/D
STM32MP153C/F
STM32MP157A/D
STM32MP157C/F
*/
// BSEC -> RCC
//#define TS_CAL1_TEMP 30
//#define TS_CAL1_REGOFFSET 0x5C00 525C[15:0]
//#define TS_CAL2_TEMP 130
//#define TS_CAL2_REGOFFSET 0x5C00 525C[31:16]
#elif defined(STM32WBxx)
/*
STM32WB10CC
STM32WB50CG STM32WB30CE
STM32WB15CC
STM32WB55xx STM32WB35xx
*/
#define TS_CAL1_TEMP 30
#define TS_CAL1_REGOFFSET 0x1FFF75A8
#define TS_CAL2_TEMP 130
#define TS_CAL2_REGOFFSET 0x1FFF75CA
#endif
// TODO implement voltage scaling (calibrated Vrefint) and ADC resolution scaling (when applicable)
/**
* When provided in datasheet, the use of calibrated values (TS_CAL1, TS_CAL2) should always be preferred over typical values.
* Typical values may result in important variation from the actual temperature.
*
* If calibrated values are not provided in datasheet, it is encouraged to calibrate your specific chip yourself.
*/
#if defined(TS_CAL1_TEMP) && defined(TS_CAL1_REGOFFSET) && defined(TS_CAL2_TEMP) && defined(TS_CAL2_REGOFFSET)
#define READMEMORY(ADDR) (*((uint16_t const *)(ADDR)))
#define TEMP_SOC_SENSOR(RAW) (float((TS_CAL2_TEMP) - (TS_CAL1_TEMP)) / (READMEMORY(TS_CAL2_REGOFFSET) - READMEMORY(TS_CAL1_REGOFFSET)) * ((RAW) / float(OVERSAMPLENR) - READMEMORY(TS_CAL1_REGOFFSET)) + (TS_CAL1_TEMP))
#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)) / (TS_TYPICAL_SLOPE/1000) + TS_TYPICAL_TEMP)
#endif

View file

@ -307,6 +307,7 @@ enum ADCIndex : uint8_t {
OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE)
OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER)
OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD)
OPTITEM(HAS_TEMP_SOC, TEMP_SOC)
OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH)
OPTITEM(HAS_ADC_BUTTONS, ADC_KEY)
OPTITEM(HAS_JOY_ADC_X, JOY_X)
@ -335,6 +336,7 @@ void MarlinHAL::adc_init() {
OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN)
OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER_PIN)
OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD_PIN)
OPTITEM(HAS_TEMP_SOC, TEMP_SOC_PIN)
OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN)
OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN)
OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN)
@ -373,6 +375,7 @@ void MarlinHAL::adc_start(const pin_t pin) {
_TCASE(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN, TEMP_PROBE)
_TCASE(HAS_TEMP_COOLER, TEMP_COOLER_PIN, TEMP_COOLER)
_TCASE(HAS_TEMP_BOARD, TEMP_BOARD_PIN, TEMP_BOARD)
_TCASE(HAS_TEMP_SOC, TEMP_SOC_PIN, TEMP_SOC)
_TCASE(HAS_JOY_ADC_X, JOY_X_PIN, JOY_X)
_TCASE(HAS_JOY_ADC_Y, JOY_Y_PIN, JOY_Y)
_TCASE(HAS_JOY_ADC_Z, JOY_Z_PIN, JOY_Z)

View file

@ -242,6 +242,7 @@
#define STR_HEATER_CHAMBER "chamber"
#define STR_COOLER "cooler"
#define STR_MOTHERBOARD "motherboard"
#define STR_SOC "soc"
#define STR_PROBE "probe"
#define STR_REDUNDANT "redundant "
#define STR_LASER_TEMP "laser temperature"

View file

@ -61,10 +61,16 @@ void ControllerFan::update() {
// - At least one stepper driver is enabled
// - The heated bed is enabled
// - TEMP_SENSOR_BOARD is reporting >= CONTROLLER_FAN_MIN_BOARD_TEMP
// - TEMP_SENSOR_SOC is reporting >= CONTROLLER_FAN_MIN_SOC_TEMP
const ena_mask_t axis_mask = TERN(CONTROLLER_FAN_USE_Z_ONLY, _BV(Z_AXIS), (ena_mask_t)~TERN0(CONTROLLER_FAN_IGNORE_Z, _BV(Z_AXIS)));
if ( (stepper.axis_enabled.bits & axis_mask)
|| TERN0(HAS_HEATED_BED, thermalManager.temp_bed.soft_pwm_amount > 0)
|| TERN0(HAS_CONTROLLER_FAN_MIN_BOARD_TEMP, thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP)
#ifdef CONTROLLER_FAN_MIN_BOARD_TEMP
|| thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP
#endif
#ifdef CONTROLLER_FAN_MIN_SOC_TEMP
|| thermalManager.wholeDegSoc() >= CONTROLLER_FAN_MIN_SOC_TEMP
#endif
) lastMotorOn = ms; //... set time to NOW so the fan will turn on
// Fan Settings. Set fan > 0:

View file

@ -288,7 +288,8 @@
*/
// Temperature sensor IDs
#define HID_REDUNDANT -6
#define HID_REDUNDANT -7
#define HID_SOC -6
#define HID_BOARD -5
#define HID_COOLER -4
#define HID_PROBE -3
@ -306,9 +307,8 @@
#define _SENSOR_IS(I,N) || (TEMP_SENSOR(N) == I)
#define _E_SENSOR_IS(I,N) _SENSOR_IS(N,I)
#define ANY_E_SENSOR_IS(N) (0 REPEAT2(HOTENDS, _E_SENSOR_IS, N))
#define ANY_THERMISTOR_IS(N) ( ANY_E_SENSOR_IS(N) \
_SENSOR_IS(N,BED) _SENSOR_IS(N,PROBE) _SENSOR_IS(N,CHAMBER) \
_SENSOR_IS(N,COOLER) _SENSOR_IS(N,BOARD) _SENSOR_IS(N,REDUNDANT) )
#define ANY_THERMISTOR_IS(N) ( ANY_E_SENSOR_IS(N) _SENSOR_IS(N,REDUNDANT) \
_SENSOR_IS(N,BED) _SENSOR_IS(N,PROBE) _SENSOR_IS(N,CHAMBER) _SENSOR_IS(N,COOLER) _SENSOR_IS(N,BOARD) )
#if ANY_THERMISTOR_IS(1000)
#define HAS_USER_THERMISTORS 1

View file

@ -2216,6 +2216,9 @@
#if HAS_ADC_TEST(BOARD)
#define HAS_TEMP_ADC_BOARD 1
#endif
#if HAS_ADC_TEST(SOC)
#define HAS_TEMP_ADC_SOC 1
#endif
#if HAS_ADC_TEST(REDUNDANT)
#define HAS_TEMP_ADC_REDUNDANT 1
#endif
@ -2239,6 +2242,9 @@
#if HAS_TEMP(BOARD)
#define HAS_TEMP_BOARD 1
#endif
#if HAS_TEMP(SOC)
#define HAS_TEMP_SOC 1
#endif
#if HAS_TEMP(REDUNDANT)
#define HAS_TEMP_REDUNDANT 1
#endif
@ -2312,7 +2318,7 @@
#define BED_OR_CHAMBER 1
#endif
#if HAS_TEMP_HOTEND || BED_OR_CHAMBER || HAS_TEMP_PROBE || HAS_TEMP_COOLER || HAS_TEMP_BOARD
#if HAS_TEMP_HOTEND || BED_OR_CHAMBER || HAS_TEMP_PROBE || HAS_TEMP_COOLER || HAS_TEMP_BOARD || HAS_TEMP_SOC
#define HAS_TEMP_SENSOR 1
#endif
@ -2548,9 +2554,6 @@
*/
#if PIN_EXISTS(CONTROLLER_FAN)
#define HAS_CONTROLLER_FAN 1
#if CONTROLLER_FAN_MIN_BOARD_TEMP
#define HAS_CONTROLLER_FAN_MIN_BOARD_TEMP 1
#endif
#endif
#if HAS_CONTROLLER_FAN

View file

@ -1976,6 +1976,8 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
#error "TEMP_SENSOR_REDUNDANT_SOURCE can't be PROBE. TEMP_SENSOR_PROBE is in use."
#elif REDUNDANT_TEMP_MATCH(SOURCE, BOARD) && HAS_TEMP_BOARD
#error "TEMP_SENSOR_REDUNDANT_SOURCE can't be BOARD. TEMP_SENSOR_BOARD is in use."
#elif REDUNDANT_TEMP_MATCH(SOURCE, SOC)
#error "TEMP_SENSOR_REDUNDANT_SOURCE can't be SOC."
#elif REDUNDANT_TEMP_MATCH(SOURCE, CHAMBER) && HAS_TEMP_CHAMBER
#error "TEMP_SENSOR_REDUNDANT_SOURCE can't be CHAMBER. TEMP_SENSOR_CHAMBER is in use."
#elif REDUNDANT_TEMP_MATCH(SOURCE, BED) && HAS_TEMP_BED
@ -2004,6 +2006,8 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
#error "TEMP_SENSOR_REDUNDANT_TARGET can't be CHAMBER without TEMP_CHAMBER_PIN defined."
#elif REDUNDANT_TEMP_MATCH(TARGET, BOARD) && !PIN_EXISTS(TEMP_BOARD)
#error "TEMP_SENSOR_REDUNDANT_TARGET can't be BOARD without TEMP_BOARD_PIN defined."
#elif REDUNDANT_TEMP_MATCH(TARGET, SOC)
#error "TEMP_SENSOR_REDUNDANT_TARGET can't be SOC."
#elif REDUNDANT_TEMP_MATCH(TARGET, PROBE) && !PIN_EXISTS(TEMP_PROBE)
#error "TEMP_SENSOR_REDUNDANT_TARGET can't be PROBE without TEMP_PROBE_PIN defined."
#elif REDUNDANT_TEMP_MATCH(TARGET, COOLER) && !PIN_EXISTS(TEMP_COOLER)
@ -2135,8 +2139,14 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
#error "CONTROLLER_FAN_MIN_BOARD_TEMP requires TEMP_SENSOR_BOARD."
#endif
#if TEMP_SENSOR_BOARD && !PIN_EXISTS(TEMP_BOARD)
#error "TEMP_SENSOR_BOARD requires TEMP_BOARD_PIN."
#if TEMP_SENSOR_SOC
#if !PIN_EXISTS(TEMP_SOC)
#error "TEMP_SENSOR_SOC requires TEMP_SOC_PIN."
#elif ENABLED(THERMAL_PROTECTION_SOC) && !defined(SOC_MAXTEMP)
#error "THERMAL_PROTECTION_SOC requires SOC_MAXTEMP."
#endif
#elif CONTROLLER_FAN_MIN_SOC_TEMP
#error "CONTROLLER_FAN_MIN_SOC_TEMP requires TEMP_SENSOR_SOC."
#endif
#if ENABLED(LASER_COOLANT_FLOW_METER) && !(PIN_EXISTS(FLOWMETER) && ENABLED(LASER_FEATURE))

View file

@ -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

View file

@ -54,6 +54,7 @@ typedef enum : int_fast8_t {
H_COOLER = HID_COOLER,
H_PROBE = HID_PROBE,
H_BOARD = HID_BOARD,
H_SOC = HID_SOC,
H_CHAMBER = HID_CHAMBER,
H_BED = HID_BED,
H_E0 = HID_E0, H_E1, H_E2, H_E3, H_E4, H_E5, H_E6, H_E7,
@ -83,6 +84,9 @@ enum ADCSensorState : char {
#if HAS_TEMP_ADC_BOARD
PrepareTemp_BOARD, MeasureTemp_BOARD,
#endif
#if HAS_TEMP_ADC_SOC
PrepareTemp_SOC, MeasureTemp_SOC,
#endif
#if HAS_TEMP_ADC_REDUNDANT
PrepareTemp_REDUNDANT, MeasureTemp_REDUNDANT,
#endif
@ -480,6 +484,9 @@ struct PIDHeaterInfo : public HeaterInfo {
#if HAS_TEMP_BOARD
typedef temp_info_t board_info_t;
#endif
#if HAS_TEMP_SOC
typedef temp_info_t soc_info_t;
#endif
// Heater watch handling
template <int INCREASE, int HYSTERESIS, millis_t PERIOD>
@ -607,6 +614,9 @@ class Temperature {
#if HAS_TEMP_BOARD
static board_info_t temp_board;
#endif
#if HAS_TEMP_SOC
static soc_info_t temp_soc;
#endif
#if HAS_TEMP_REDUNDANT
static redundant_info_t temp_redundant;
#endif
@ -754,6 +764,10 @@ class Temperature {
static raw_adc_t mintemp_raw_BOARD, maxtemp_raw_BOARD;
#endif
#if BOTH(HAS_TEMP_SOC, THERMAL_PROTECTION_SOC)
static raw_adc_t maxtemp_raw_SOC;
#endif
#if MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED > 1
static uint8_t consecutive_low_temperature_error[HOTENDS];
#endif
@ -846,6 +860,9 @@ class Temperature {
#if HAS_TEMP_BOARD
static celsius_float_t analog_to_celsius_board(const raw_adc_t raw);
#endif
#if HAS_TEMP_SOC
static celsius_float_t analog_to_celsius_soc(const raw_adc_t raw);
#endif
#if HAS_TEMP_REDUNDANT
static celsius_float_t analog_to_celsius_redundant(const raw_adc_t raw);
#endif
@ -1119,6 +1136,14 @@ class Temperature {
static celsius_t wholeDegBoard() { return static_cast<celsius_t>(temp_board.celsius + 0.5f); }
#endif
#if HAS_TEMP_SOC
#if ENABLED(SHOW_TEMP_ADC_VALUES)
static raw_adc_t rawSocTemp() { return temp_soc.getraw(); }
#endif
static celsius_float_t degSoc() { return temp_soc.celsius; }
static celsius_t wholeDegSoc() { return static_cast<celsius_t>(temp_soc.celsius + 0.5f); }
#endif
#if HAS_TEMP_REDUNDANT
#if ENABLED(SHOW_TEMP_ADC_VALUES)
static raw_adc_t rawRedundantTemp() { return temp_redundant.getraw(); }

View file

@ -532,6 +532,10 @@ static_assert(255 > TEMPTABLE_0_LEN || 255 > TEMPTABLE_1_LEN || 255 > TEMPTABLE_
#define TEMP_SENSOR_BOARD_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
#endif
#endif
#ifndef TEMP_SENSOR_SOC_RAW_HI_TEMP
#define TEMP_SENSOR_SOC_RAW_LO_TEMP 0
#define TEMP_SENSOR_SOC_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
#endif
#ifndef TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP
#if TT_REVRAW(REDUNDANT)
#define TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE

View file

@ -171,7 +171,10 @@
#define TEMP_0_PIN P0_24
#define TEMP_1_PIN P0_23
#define TEMP_BED_PIN P0_25
#ifndef TEMP_BOARD_PIN
#define TEMP_BOARD_PIN P1_30 // Onboard thermistor, NTC100K
#endif
//
// Heaters / Fans

View file

@ -456,6 +456,11 @@
#define TEMP_BED_PIN -1
#endif
// Use ATEMP if TEMP_SOC_PIN is not defined
#if !defined(TEMP_SOC_PIN) && defined(ATEMP)
#define TEMP_SOC_PIN ATEMP
#endif
#ifndef SD_DETECT_PIN
#define SD_DETECT_PIN -1
#endif

View file

@ -118,10 +118,13 @@
//
#define TEMP_0_PIN 0 // Analog Input, Header J2
#define TEMP_1_PIN 1 // Analog Input, Header J3
#define TEMP_BOARD_PIN 91 // Onboard thermistor, 100k TDK NTCG104LH104JT1
#define TEMP_BED_PIN 2 // Analog Input, Header J6
#define TEMP_PROBE_PIN 3 // Analog Input, Header J15
#ifndef TEMP_BOARD_PIN
#define TEMP_BOARD_PIN 91 // Onboard thermistor, 100k TDK NTCG104LH104JT1
#endif
//
// Heaters / Fans
//

View file

@ -69,7 +69,10 @@
#define TEMP_0_PIN 0 // Analog Input (HOTEND0 thermistor)
#define TEMP_1_PIN 2 // Analog Input (unused)
#define TEMP_BED_PIN 1 // Analog Input (BED thermistor)
#ifndef TEMP_BOARD_PIN
#define TEMP_BOARD_PIN 5 // Analog Input (OnBoard thermistor beta 3950)
#endif
// SPI for MAX Thermocouple
#if !HAS_MEDIA

View file

@ -148,18 +148,22 @@
#define E0_SLAVE_ADDRESS 0
#endif
#endif
//
// Temperature Sensors
//
#define TEMP_BED_PIN PC2 // TB
#define TEMP_0_PIN PC1 // TH1
//#define TEMP_1_PIN PC3 // TH2
#define TEMP_BOARD_PIN PC3
#ifndef TEMP_SENSOR_BOARD
#define TEMP_SENSOR_BOARD 13
#endif
#define FIL_RUNOUT_PIN PA10 // MT_DET
#ifndef TEMP_BOARD_PIN
#define TEMP_BOARD_PIN PC3
#endif
#if TEMP_BOARD_PIN == PC3 && TEMP_SENSOR_BOARD != 13
#warning "The built-in TEMP_SENSOR_BOARD is 13 for ERYONE Ery32 mini."
#endif
//
// LCD Pins
//

View file

@ -160,10 +160,13 @@
//
#define TEMP_0_PIN PA2 // T0 <-> E0
#define TEMP_1_PIN PA0 // T1 <-> E1
#define TEMP_BOARD_PIN PC2 // Onboard thermistor, NTC100K
#define TEMP_BED_PIN PA1 // T2 <-> Bed
#define TEMP_PROBE_PIN PC3 // Shares J4 connector with PD1
#ifndef TEMP_BOARD_PIN
#define TEMP_BOARD_PIN PC2 // Onboard thermistor, NTC100K
#endif
//
// Heaters / Fans
//

View file

@ -190,7 +190,7 @@ def extract():
elif state == Parse.BLOCK_COMMENT:
# Look for temperature sensors
if cline == "Temperature sensors available:":
if re.match(r'temperature sensors.*:', cline, re.IGNORECASE):
state, cline = Parse.GET_SENSORS, "Temperature Sensors"
options_json, section = use_comment(cline, options_json, section, comment_buff)

View file

@ -10,8 +10,8 @@ set -e
# Build with the default configurations
#
restore_configs
opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1
exec_test $1 $2 "BigTreeTech SKR Mini v1.1 - Basic Configuration" "$3"
opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1 TEMP_SENSOR_SOC 1
exec_test $1 $2 "BigTreeTech SKR Mini v1.1 - SOC Temperature" "$3"
# clean up
restore_configs