✨ TEMP_SENSOR_SOC (#25642)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
parent
d1738e946a
commit
f5a905a641
|
@ -432,29 +432,13 @@
|
|||
// @section temperature
|
||||
|
||||
/**
|
||||
* --NORMAL IS 4.7kΩ PULLUP!-- 1kΩ 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.7kΩ PULLUP! Hotend sensors can use 1kΩ pullup with correct resistor and table.
|
||||
*
|
||||
* ================================================================
|
||||
* Analog Thermistors - 4.7kΩ pullup - Normal
|
||||
* -------
|
||||
* ================================================================
|
||||
* 1 : 100kΩ EPCOS - Best choice for EPCOS thermistors
|
||||
* 331 : 100kΩ Same as #1, but 3.3V scaled for MEGA
|
||||
* 332 : 100kΩ Same as #1, but 3.3V scaled for DUE
|
||||
|
@ -487,23 +471,28 @@
|
|||
* 61 : 100kΩ Formbot/Vivedino 350°C Thermistor - beta 3950
|
||||
* 66 : 4.7MΩ Dyze Design / Trianglelab T-D500 500°C High Temperature Thermistor
|
||||
* 67 : 500kΩ SliceEngineering 450°C Thermistor
|
||||
* 68 : PT100 amplifier board from Dyze Design
|
||||
* 68 : PT100 Smplifier board from Dyze Design
|
||||
* 70 : 100kΩ bq Hephestos 2
|
||||
* 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
|
||||
* 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
|
||||
*
|
||||
* Analog Thermistors - 1kΩ pullup - Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ.
|
||||
* ------- (but gives greater accuracy and more stable PID)
|
||||
* ================================================================
|
||||
* Analog Thermistors - 1kΩ pullup
|
||||
* Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ.
|
||||
* (but gives greater accuracy and more stable PID)
|
||||
* ================================================================
|
||||
* 51 : 100kΩ EPCOS (1kΩ pullup)
|
||||
* 52 : 200kΩ ATC Semitec 204GT-2 (1kΩ pullup)
|
||||
* 55 : 100kΩ ATC Semitec 104GT-2 - Used in ParCan & J-Head (1kΩ pullup)
|
||||
*
|
||||
* ================================================================
|
||||
* Analog Thermistors - 10kΩ pullup - Atypical
|
||||
* -------
|
||||
* ================================================================
|
||||
* 99 : 100kΩ Found on some Wanhao i3 machines with a 10kΩ pull-up resistor
|
||||
*
|
||||
* ================================================================
|
||||
* Analog RTDs (Pt100/Pt1000)
|
||||
* -------
|
||||
* ================================================================
|
||||
* 110 : Pt100 with 1kΩ pullup (atypical)
|
||||
* 147 : Pt100 with 4.7kΩ pullup
|
||||
* 1010 : Pt1000 with 1kΩ 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
|
||||
|
|
|
@ -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.
|
||||
#endif
|
||||
//#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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
346
Marlin/src/HAL/STM32/temp_soc.h
Normal file
346
Marlin/src/HAL/STM32/temp_soc.h
Normal 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
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(); }
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -171,7 +171,10 @@
|
|||
#define TEMP_0_PIN P0_24
|
||||
#define TEMP_1_PIN P0_23
|
||||
#define TEMP_BED_PIN P0_25
|
||||
#define TEMP_BOARD_PIN P1_30 // Onboard thermistor, NTC100K
|
||||
|
||||
#ifndef TEMP_BOARD_PIN
|
||||
#define TEMP_BOARD_PIN P1_30 // Onboard thermistor, NTC100K
|
||||
#endif
|
||||
|
||||
//
|
||||
// Heaters / Fans
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
//
|
||||
|
|
|
@ -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)
|
||||
#define TEMP_BOARD_PIN 5 // Analog Input (OnBoard thermistor beta 3950)
|
||||
|
||||
#ifndef TEMP_BOARD_PIN
|
||||
#define TEMP_BOARD_PIN 5 // Analog Input (OnBoard thermistor beta 3950)
|
||||
#endif
|
||||
|
||||
// SPI for MAX Thermocouple
|
||||
#if !HAS_MEDIA
|
||||
|
|
|
@ -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 TEMP_BED_PIN PC2 // TB
|
||||
#define TEMP_0_PIN PC1 // TH1
|
||||
//#define TEMP_1_PIN PC3 // TH2
|
||||
#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
|
||||
//
|
||||
|
|
|
@ -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
|
||||
//
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue