Enforce sensor range for temperature target (#18465)
* Mitigate stepper timeout * Add CHAMBER PWM code * Structured thermistor tables * Fix reversed sensor ranges * Prevent temps outside sensor range
This commit is contained in:
parent
70fa4c9323
commit
c43bbcce15
56 changed files with 295 additions and 167 deletions
|
@ -240,10 +240,6 @@ bool wait_for_heatup = true;
|
|||
|
||||
#endif
|
||||
|
||||
// Inactivity shutdown
|
||||
millis_t max_inactive_time, // = 0
|
||||
stepper_inactive_time = SEC_TO_MS(DEFAULT_STEPPER_DEACTIVE_TIME);
|
||||
|
||||
#if PIN_EXISTS(CHDK)
|
||||
extern millis_t chdk_timeout;
|
||||
#endif
|
||||
|
@ -469,20 +465,23 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
|||
|
||||
const millis_t ms = millis();
|
||||
|
||||
if (max_inactive_time && ELAPSED(ms, gcode.previous_move_ms + max_inactive_time)) {
|
||||
// Prevent steppers timing-out in the middle of M600
|
||||
#define STAY_TEST (BOTH(ADVANCED_PAUSE_FEATURE, PAUSE_PARK_NO_STEPPER_TIMEOUT) && did_pause_print)
|
||||
|
||||
if (STAY_TEST || ignore_stepper_queue)
|
||||
gcode.reset_stepper_timeout(ms);
|
||||
|
||||
if (gcode.stepper_max_timed_out(ms)) {
|
||||
SERIAL_ERROR_START();
|
||||
SERIAL_ECHOLNPAIR(STR_KILL_INACTIVE_TIME, parser.command_ptr);
|
||||
kill();
|
||||
}
|
||||
|
||||
// Prevent steppers timing-out in the middle of M600
|
||||
#define STAY_TEST (BOTH(ADVANCED_PAUSE_FEATURE, PAUSE_PARK_NO_STEPPER_TIMEOUT) && did_pause_print)
|
||||
|
||||
if (stepper_inactive_time) {
|
||||
if (gcode.stepper_inactive_time) {
|
||||
static bool already_shutdown_steppers; // = false
|
||||
if (planner.has_blocks_queued())
|
||||
gcode.reset_stepper_timeout();
|
||||
else if (!STAY_TEST && !ignore_stepper_queue && ELAPSED(ms, gcode.previous_move_ms + stepper_inactive_time)) {
|
||||
gcode.reset_stepper_timeout(ms);
|
||||
else if (!STAY_TEST && !ignore_stepper_queue && gcode.stepper_inactive_timeout()) {
|
||||
if (!already_shutdown_steppers) {
|
||||
already_shutdown_steppers = true; // L6470 SPI will consume 99% of free time without this
|
||||
if (ENABLED(DISABLE_INACTIVE_X)) DISABLE_AXIS_X();
|
||||
|
@ -601,7 +600,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
|||
}
|
||||
#endif // !SWITCHING_EXTRUDER
|
||||
|
||||
gcode.reset_stepper_timeout();
|
||||
gcode.reset_stepper_timeout(ms);
|
||||
}
|
||||
#endif // EXTRUDER_RUNOUT_PREVENT
|
||||
|
||||
|
|
|
@ -87,9 +87,6 @@ extern bool wait_for_heatup;
|
|||
void wait_for_user_response(millis_t ms=0, const bool no_sleep=false);
|
||||
#endif
|
||||
|
||||
// Inactivity shutdown timer
|
||||
extern millis_t max_inactive_time, stepper_inactive_time;
|
||||
|
||||
#if ENABLED(PSU_CONTROL)
|
||||
extern bool powersupply_on;
|
||||
#define PSU_PIN_ON() do{ OUT_WRITE(PS_ON_PIN, PSU_ACTIVE_HIGH); powersupply_on = true; }while(0)
|
||||
|
|
|
@ -206,7 +206,7 @@
|
|||
if (human) SERIAL_CHAR(is_current ? ']' : ' ');
|
||||
|
||||
SERIAL_FLUSHTX();
|
||||
idle();
|
||||
idle_no_sleep();
|
||||
}
|
||||
if (!lcd) SERIAL_EOL();
|
||||
|
||||
|
|
|
@ -164,6 +164,8 @@
|
|||
*/
|
||||
G29_TYPE GcodeSuite::G29() {
|
||||
|
||||
reset_stepper_timeout();
|
||||
|
||||
const bool seenQ = EITHER(DEBUG_LEVELING_FEATURE, PROBE_MANUALLY) && parser.seen('Q');
|
||||
|
||||
// G29 Q is also available if debugging
|
||||
|
@ -675,7 +677,7 @@ G29_TYPE GcodeSuite::G29() {
|
|||
#endif
|
||||
|
||||
abl_should_enable = false;
|
||||
idle();
|
||||
idle_no_sleep();
|
||||
|
||||
} // inner
|
||||
} // outer
|
||||
|
|
|
@ -203,15 +203,15 @@
|
|||
*/
|
||||
void GcodeSuite::G28() {
|
||||
|
||||
#if ENABLED(LASER_MOVE_G28_OFF)
|
||||
cutter.set_inline_enabled(false); // turn off laser
|
||||
#endif
|
||||
|
||||
if (DEBUGGING(LEVELING)) {
|
||||
DEBUG_ECHOLNPGM(">>> G28");
|
||||
log_machine_info();
|
||||
}
|
||||
|
||||
#if ENABLED(LASER_MOVE_G28_OFF)
|
||||
cutter.set_inline_enabled(false); // turn off laser
|
||||
#endif
|
||||
|
||||
TERN_(DWIN_CREALITY_LCD, HMI_flag.home_flag = true);
|
||||
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
|
@ -251,6 +251,9 @@ void GcodeSuite::G28() {
|
|||
|
||||
TERN_(CNC_WORKSPACE_PLANES, workspace_plane = PLANE_XY);
|
||||
|
||||
// Count this command as movement / activity
|
||||
reset_stepper_timeout();
|
||||
|
||||
#define HAS_CURRENT_HOME(N) (defined(N##_CURRENT_HOME) && N##_CURRENT_HOME != N##_CURRENT)
|
||||
#if HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2)
|
||||
#define HAS_HOMING_CURRENT 1
|
||||
|
|
|
@ -50,6 +50,7 @@ void GcodeSuite::M17() {
|
|||
*/
|
||||
void GcodeSuite::M18_M84() {
|
||||
if (parser.seenval('S')) {
|
||||
reset_stepper_timeout();
|
||||
stepper_inactive_time = parser.value_millis_from_seconds();
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
*/
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../MarlinCore.h" // for max_inactive_time
|
||||
|
||||
/**
|
||||
* M85: Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
|
||||
|
|
|
@ -53,6 +53,9 @@ void GcodeSuite::T(const uint8_t tool_index) {
|
|||
DEBUG_POS("BEFORE", current_position);
|
||||
}
|
||||
|
||||
// Count this command as movement / activity
|
||||
reset_stepper_timeout();
|
||||
|
||||
#if ENABLED(PRUSA_MMU2)
|
||||
if (parser.string_arg) {
|
||||
mmu2.tool_change(parser.string_arg); // Special commands T?/Tx/Tc
|
||||
|
|
|
@ -59,7 +59,10 @@ GcodeSuite gcode;
|
|||
|
||||
#include "../MarlinCore.h" // for idle()
|
||||
|
||||
millis_t GcodeSuite::previous_move_ms;
|
||||
// Inactivity shutdown
|
||||
millis_t GcodeSuite::previous_move_ms = 0,
|
||||
GcodeSuite::max_inactive_time = 0,
|
||||
GcodeSuite::stepper_inactive_time = SEC_TO_MS(DEFAULT_STEPPER_DEACTIVE_TIME);
|
||||
|
||||
// Relative motion mode for each logical axis
|
||||
static constexpr xyze_bool_t ar_init = AXIS_RELATIVE_MODES;
|
||||
|
|
|
@ -334,8 +334,14 @@ public:
|
|||
static bool select_coordinate_system(const int8_t _new);
|
||||
#endif
|
||||
|
||||
static millis_t previous_move_ms;
|
||||
FORCE_INLINE static void reset_stepper_timeout() { previous_move_ms = millis(); }
|
||||
static millis_t previous_move_ms, max_inactive_time, stepper_inactive_time;
|
||||
FORCE_INLINE static void reset_stepper_timeout(const millis_t ms=millis()) { previous_move_ms = ms; }
|
||||
FORCE_INLINE static bool stepper_max_timed_out(const millis_t ms=millis()) {
|
||||
return max_inactive_time && ELAPSED(ms, previous_move_ms + max_inactive_time);
|
||||
}
|
||||
FORCE_INLINE static bool stepper_inactive_timeout(const millis_t ms=millis()) {
|
||||
return ELAPSED(ms, previous_move_ms + stepper_inactive_time);
|
||||
}
|
||||
|
||||
static int8_t get_target_extruder_from_command();
|
||||
static int8_t get_target_e_stepper_from_command();
|
||||
|
|
|
@ -110,12 +110,12 @@
|
|||
|
||||
#if HOTEND_USES_THERMISTOR
|
||||
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
||||
static const void* heater_ttbl_map[2] = { (void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE };
|
||||
static const temp_entry_t* heater_ttbl_map[2] = { HEATER_0_TEMPTABLE, HEATER_1_TEMPTABLE };
|
||||
static constexpr uint8_t heater_ttbllen_map[2] = { HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN };
|
||||
#else
|
||||
#define NEXT_TEMPTABLE(N) ,HEATER_##N##_TEMPTABLE
|
||||
#define NEXT_TEMPTABLE_LEN(N) ,HEATER_##N##_TEMPTABLE_LEN
|
||||
static const void* heater_ttbl_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE REPEAT_S(1, HOTENDS, NEXT_TEMPTABLE));
|
||||
static const temp_entry_t* heater_ttbl_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE REPEAT_S(1, HOTENDS, NEXT_TEMPTABLE));
|
||||
static constexpr uint8_t heater_ttbllen_map[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_TEMPTABLE_LEN REPEAT_S(1, HOTENDS, NEXT_TEMPTABLE_LEN));
|
||||
#endif
|
||||
#endif
|
||||
|
@ -900,11 +900,13 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
|
|||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOPAIR(STR_PID_DEBUG, ee, STR_PID_DEBUG_INPUT, temp_hotend[ee].celsius, STR_PID_DEBUG_OUTPUT, pid_output);
|
||||
#if DISABLED(PID_OPENLOOP)
|
||||
{
|
||||
SERIAL_ECHOPAIR( STR_PID_DEBUG_PTERM, work_pid[ee].Kp, STR_PID_DEBUG_ITERM, work_pid[ee].Ki, STR_PID_DEBUG_DTERM, work_pid[ee].Kd
|
||||
#if ENABLED(PID_EXTRUSION_SCALING)
|
||||
, STR_PID_DEBUG_CTERM, work_pid[ee].Kc
|
||||
#endif
|
||||
);
|
||||
}
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
}
|
||||
|
@ -920,7 +922,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
|
|||
return pid_output;
|
||||
}
|
||||
|
||||
#endif // HOTENDS
|
||||
#endif // HAS_HOTEND
|
||||
|
||||
#if ENABLED(PIDTEMPBED)
|
||||
|
||||
|
@ -1058,7 +1060,7 @@ void Temperature::manage_heater() {
|
|||
|
||||
} // HOTEND_LOOP
|
||||
|
||||
#endif // HOTENDS
|
||||
#endif // HAS_HOTEND
|
||||
|
||||
#if HAS_AUTO_FAN
|
||||
if (ELAPSED(ms, next_auto_fan_check_ms)) { // only need to check fan state very infrequently
|
||||
|
@ -1208,22 +1210,22 @@ void Temperature::manage_heater() {
|
|||
* Bisect search for the range of the 'raw' value, then interpolate
|
||||
* proportionally between the under and over values.
|
||||
*/
|
||||
#define SCAN_THERMISTOR_TABLE(TBL,LEN) do{ \
|
||||
uint8_t l = 0, r = LEN, m; \
|
||||
for (;;) { \
|
||||
m = (l + r) >> 1; \
|
||||
if (!m) return short(pgm_read_word(&TBL[0][1])); \
|
||||
if (m == l || m == r) return short(pgm_read_word(&TBL[LEN-1][1])); \
|
||||
short v00 = pgm_read_word(&TBL[m-1][0]), \
|
||||
v10 = pgm_read_word(&TBL[m-0][0]); \
|
||||
if (raw < v00) r = m; \
|
||||
else if (raw > v10) l = m; \
|
||||
else { \
|
||||
const short v01 = short(pgm_read_word(&TBL[m-1][1])), \
|
||||
v11 = short(pgm_read_word(&TBL[m-0][1])); \
|
||||
return v01 + (raw - v00) * float(v11 - v01) / float(v10 - v00); \
|
||||
} \
|
||||
} \
|
||||
#define SCAN_THERMISTOR_TABLE(TBL,LEN) do{ \
|
||||
uint8_t l = 0, r = LEN, m; \
|
||||
for (;;) { \
|
||||
m = (l + r) >> 1; \
|
||||
if (!m) return int16_t(pgm_read_word(&TBL[0].celsius)); \
|
||||
if (m == l || m == r) return int16_t(pgm_read_word(&TBL[LEN-1].celsius)); \
|
||||
int16_t v00 = pgm_read_word(&TBL[m-1].value), \
|
||||
v10 = pgm_read_word(&TBL[m-0].value); \
|
||||
if (raw < v00) r = m; \
|
||||
else if (raw > v10) l = m; \
|
||||
else { \
|
||||
const int16_t v01 = int16_t(pgm_read_word(&TBL[m-1].celsius)), \
|
||||
v11 = int16_t(pgm_read_word(&TBL[m-0].celsius)); \
|
||||
return v01 + (raw - v00) * float(v11 - v01) / float(v10 - v00); \
|
||||
} \
|
||||
} \
|
||||
}while(0)
|
||||
|
||||
#if HAS_USER_THERMISTORS
|
||||
|
@ -1452,13 +1454,13 @@ void Temperature::manage_heater() {
|
|||
|
||||
#if HOTEND_USES_THERMISTOR
|
||||
// Thermistor with conversion table?
|
||||
const short(*tt)[][2] = (short(*)[][2])(heater_ttbl_map[e]);
|
||||
const temp_entry_t(*tt)[] = (temp_entry_t(*)[])(heater_ttbl_map[e]);
|
||||
SCAN_THERMISTOR_TABLE((*tt), heater_ttbllen_map[e]);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif // HOTENDS
|
||||
#endif // HAS_HOTEND
|
||||
|
||||
#if HAS_HEATED_BED
|
||||
// Derived from RepRap FiveD extruder::getTemperature()
|
||||
|
@ -1790,80 +1792,91 @@ void Temperature::init() {
|
|||
#if HAS_HOTEND
|
||||
|
||||
#define _TEMP_MIN_E(NR) do{ \
|
||||
temp_range[NR].mintemp = HEATER_ ##NR## _MINTEMP; \
|
||||
while (analog_to_celsius_hotend(temp_range[NR].raw_min, NR) < HEATER_ ##NR## _MINTEMP) \
|
||||
const int16_t tmin = _MAX(HEATER_ ##NR## _MINTEMP, (int16_t)pgm_read_word(&HEATER_ ##NR## _TEMPTABLE[HEATER_ ##NR## _SENSOR_MINTEMP_IND].celsius)); \
|
||||
temp_range[NR].mintemp = tmin; \
|
||||
while (analog_to_celsius_hotend(temp_range[NR].raw_min, NR) < tmin) \
|
||||
temp_range[NR].raw_min += TEMPDIR(NR) * (OVERSAMPLENR); \
|
||||
}while(0)
|
||||
#define _TEMP_MAX_E(NR) do{ \
|
||||
temp_range[NR].maxtemp = HEATER_ ##NR## _MAXTEMP; \
|
||||
while (analog_to_celsius_hotend(temp_range[NR].raw_max, NR) > HEATER_ ##NR## _MAXTEMP) \
|
||||
const int16_t tmax = _MIN(HEATER_ ##NR## _MAXTEMP, (int16_t)pgm_read_word(&HEATER_ ##NR## _TEMPTABLE[HEATER_ ##NR## _SENSOR_MAXTEMP_IND].celsius) - 1); \
|
||||
temp_range[NR].maxtemp = tmax; \
|
||||
while (analog_to_celsius_hotend(temp_range[NR].raw_max, NR) > tmax) \
|
||||
temp_range[NR].raw_max -= TEMPDIR(NR) * (OVERSAMPLENR); \
|
||||
}while(0)
|
||||
|
||||
#ifdef HEATER_0_MINTEMP
|
||||
#if THERMISTOR_HEATER_0
|
||||
#ifdef HEATER_0_MINTEMP
|
||||
_TEMP_MIN_E(0);
|
||||
#endif
|
||||
#ifdef HEATER_0_MAXTEMP
|
||||
_TEMP_MAX_E(0);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_0_MAXTEMP
|
||||
_TEMP_MAX_E(0);
|
||||
#endif
|
||||
#if HAS_MULTI_HOTEND
|
||||
|
||||
#if HAS_MULTI_HOTEND && THERMISTOR_HEATER_1
|
||||
#ifdef HEATER_1_MINTEMP
|
||||
_TEMP_MIN_E(1);
|
||||
#endif
|
||||
#ifdef HEATER_1_MAXTEMP
|
||||
_TEMP_MAX_E(1);
|
||||
#endif
|
||||
#if HOTENDS > 2
|
||||
#ifdef HEATER_2_MINTEMP
|
||||
_TEMP_MIN_E(2);
|
||||
#endif
|
||||
#ifdef HEATER_2_MAXTEMP
|
||||
_TEMP_MAX_E(2);
|
||||
#endif
|
||||
#if HOTENDS > 3
|
||||
#ifdef HEATER_3_MINTEMP
|
||||
_TEMP_MIN_E(3);
|
||||
#endif
|
||||
#ifdef HEATER_3_MAXTEMP
|
||||
_TEMP_MAX_E(3);
|
||||
#endif
|
||||
#if HOTENDS > 4
|
||||
#ifdef HEATER_4_MINTEMP
|
||||
_TEMP_MIN_E(4);
|
||||
#endif
|
||||
#ifdef HEATER_4_MAXTEMP
|
||||
_TEMP_MAX_E(4);
|
||||
#endif
|
||||
#if HOTENDS > 5
|
||||
#ifdef HEATER_5_MINTEMP
|
||||
_TEMP_MIN_E(5);
|
||||
#endif
|
||||
#ifdef HEATER_5_MAXTEMP
|
||||
_TEMP_MAX_E(5);
|
||||
#endif
|
||||
#if HOTENDS > 6
|
||||
#ifdef HEATER_6_MINTEMP
|
||||
_TEMP_MIN_E(6);
|
||||
#endif
|
||||
#ifdef HEATER_6_MAXTEMP
|
||||
_TEMP_MAX_E(6);
|
||||
#endif
|
||||
#if HOTENDS > 7
|
||||
#ifdef HEATER_7_MINTEMP
|
||||
_TEMP_MIN_E(7);
|
||||
#endif
|
||||
#ifdef HEATER_7_MAXTEMP
|
||||
_TEMP_MAX_E(7);
|
||||
#endif
|
||||
#endif // HOTENDS > 7
|
||||
#endif // HOTENDS > 6
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
#endif // HOTENDS > 2
|
||||
#endif // HAS_MULTI_HOTEND
|
||||
#endif
|
||||
|
||||
#endif // HOTENDS
|
||||
#if HOTENDS > 2 && THERMISTOR_HEATER_2
|
||||
#ifdef HEATER_2_MINTEMP
|
||||
_TEMP_MIN_E(2);
|
||||
#endif
|
||||
#ifdef HEATER_2_MAXTEMP
|
||||
_TEMP_MAX_E(2);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 3 && THERMISTOR_HEATER_3
|
||||
#ifdef HEATER_3_MINTEMP
|
||||
_TEMP_MIN_E(3);
|
||||
#endif
|
||||
#ifdef HEATER_3_MAXTEMP
|
||||
_TEMP_MAX_E(3);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 4 && THERMISTOR_HEATER_4
|
||||
#ifdef HEATER_4_MINTEMP
|
||||
_TEMP_MIN_E(4);
|
||||
#endif
|
||||
#ifdef HEATER_4_MAXTEMP
|
||||
_TEMP_MAX_E(4);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 5 && THERMISTOR_HEATER_5
|
||||
#ifdef HEATER_5_MINTEMP
|
||||
_TEMP_MIN_E(5);
|
||||
#endif
|
||||
#ifdef HEATER_5_MAXTEMP
|
||||
_TEMP_MAX_E(5);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 6 && THERMISTOR_HEATER_6
|
||||
#ifdef HEATER_6_MINTEMP
|
||||
_TEMP_MIN_E(6);
|
||||
#endif
|
||||
#ifdef HEATER_6_MAXTEMP
|
||||
_TEMP_MAX_E(6);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 7 && THERMISTOR_HEATER_7
|
||||
#ifdef HEATER_7_MINTEMP
|
||||
_TEMP_MIN_E(7);
|
||||
#endif
|
||||
#ifdef HEATER_7_MAXTEMP
|
||||
_TEMP_MAX_E(7);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // HAS_HOTEND
|
||||
|
||||
#if HAS_HEATED_BED
|
||||
#ifdef BED_MINTEMP
|
||||
|
@ -2319,7 +2332,7 @@ void Temperature::readings_ready() {
|
|||
}
|
||||
}
|
||||
|
||||
#endif // HOTENDS
|
||||
#endif // HAS_HOTEND
|
||||
|
||||
#if HAS_HEATED_BED
|
||||
#if TEMPDIR(BED) < 0
|
||||
|
@ -2573,6 +2586,10 @@ void Temperature::tick() {
|
|||
_SLOW_PWM(BED, soft_pwm_bed, temp_bed);
|
||||
#endif
|
||||
|
||||
#if HAS_HEATED_CHAMBER
|
||||
_SLOW_PWM(CHAMBER, soft_pwm_chamber, temp_chamber);
|
||||
#endif
|
||||
|
||||
} // slow_pwm_count == 0
|
||||
|
||||
#if HAS_HOTEND
|
||||
|
@ -2584,6 +2601,10 @@ void Temperature::tick() {
|
|||
_PWM_OFF(BED, soft_pwm_bed);
|
||||
#endif
|
||||
|
||||
#if HAS_HEATED_CHAMBER
|
||||
_PWM_OFF(CHAMBER, soft_pwm_chamber);
|
||||
#endif
|
||||
|
||||
#if ENABLED(FAN_SOFT_PWM)
|
||||
if (pwm_count_tmp >= 127) {
|
||||
pwm_count_tmp = 0;
|
||||
|
@ -2662,6 +2683,7 @@ void Temperature::tick() {
|
|||
HOTEND_LOOP() soft_pwm_hotend[e].dec();
|
||||
#endif
|
||||
TERN_(HAS_HEATED_BED, soft_pwm_bed.dec());
|
||||
TERN_(HAS_HEATED_CHAMBER, soft_pwm_chamber.dec());
|
||||
}
|
||||
|
||||
#endif // SLOW_PWM_HEATERS
|
||||
|
|
|
@ -608,7 +608,7 @@ class Temperature {
|
|||
return ABS(degHotend(e) - temp) < (TEMP_HYSTERESIS);
|
||||
}
|
||||
|
||||
#endif // HOTENDS
|
||||
#endif // HAS_HOTEND
|
||||
|
||||
#if HAS_HEATED_BED
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor
|
||||
const short temptable_1[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_1[] PROGMEM = {
|
||||
{ OV( 23), 300 },
|
||||
{ OV( 25), 295 },
|
||||
{ OV( 27), 290 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 3960 K, 4.7 kOhm pull-up, RS thermistor 198-961
|
||||
const short temptable_10[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_10[] PROGMEM = {
|
||||
{ OV( 1), 929 },
|
||||
{ OV( 36), 299 },
|
||||
{ OV( 71), 246 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// Pt1000 with 1k0 pullup
|
||||
const short temptable_1010[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_1010[] PROGMEM = {
|
||||
PtLine( 0, 1000, 1000),
|
||||
PtLine( 25, 1000, 1000),
|
||||
PtLine( 50, 1000, 1000),
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// Pt1000 with 4k7 pullup
|
||||
const short temptable_1047[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_1047[] PROGMEM = {
|
||||
// only a few values are needed as the curve is very flat
|
||||
PtLine( 0, 1000, 4700),
|
||||
PtLine( 50, 1000, 4700),
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 3950 K, 4.7 kOhm pull-up, QU-BD silicone bed QWG-104F-3950 thermistor
|
||||
const short temptable_11[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_11[] PROGMEM = {
|
||||
{ OV( 1), 938 },
|
||||
{ OV( 31), 314 },
|
||||
{ OV( 41), 290 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// Pt100 with 1k0 pullup
|
||||
const short temptable_110[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_110[] PROGMEM = {
|
||||
// only a few values are needed as the curve is very flat
|
||||
PtLine( 0, 100, 1000),
|
||||
PtLine( 50, 100, 1000),
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4700 K, 4.7 kOhm pull-up, (personal calibration for Makibox hot bed)
|
||||
const short temptable_12[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_12[] PROGMEM = {
|
||||
{ OV( 35), 180 }, // top rating 180C
|
||||
{ OV( 211), 140 },
|
||||
{ OV( 233), 135 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4100 K, 4.7 kOhm pull-up, Hisens thermistor
|
||||
const short temptable_13[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_13[] PROGMEM = {
|
||||
{ OV( 20.04), 300 },
|
||||
{ OV( 23.19), 290 },
|
||||
{ OV( 26.71), 280 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// Pt100 with 4k7 pullup
|
||||
const short temptable_147[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_147[] PROGMEM = {
|
||||
// only a few values are needed as the curve is very flat
|
||||
PtLine( 0, 100, 4700),
|
||||
PtLine( 50, 100, 4700),
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// 100k bed thermistor in JGAurora A5. Calibrated by Sam Pinches 21st Jan 2018 using cheap k-type thermocouple inserted into heater block, using TM-902C meter.
|
||||
const short temptable_15[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_15[] PROGMEM = {
|
||||
{ OV( 31), 275 },
|
||||
{ OV( 33), 270 },
|
||||
{ OV( 35), 260 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327 - version (measured/tested/approved)
|
||||
const short temptable_18[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_18[] PROGMEM = {
|
||||
{ OV( 1), 713 },
|
||||
{ OV( 17), 284 },
|
||||
{ OV( 20), 275 },
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
|
||||
// Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
|
||||
//
|
||||
const short temptable_2[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_2[] PROGMEM = {
|
||||
{ OV( 1), 848 },
|
||||
{ OV( 30), 300 }, // top rating 300C
|
||||
{ OV( 34), 290 },
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#define REVERSE_TEMP_SENSOR_RANGE
|
||||
#define REVERSE_TEMP_SENSOR_RANGE_20 1
|
||||
|
||||
// Pt100 with INA826 amp on Ultimaker v2.0 electronics
|
||||
const short temptable_20[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_20[] PROGMEM = {
|
||||
{ OV( 0), 0 },
|
||||
{ OV(227), 1 },
|
||||
{ OV(236), 10 },
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#define REVERSE_TEMP_SENSOR_RANGE
|
||||
#define REVERSE_TEMP_SENSOR_RANGE_201 1
|
||||
|
||||
// Pt100 with LMV324 amp on Overlord v1.1 electronics
|
||||
const short temptable_201[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_201[] PROGMEM = {
|
||||
{ OV( 0), 0 },
|
||||
{ OV( 8), 1 },
|
||||
{ OV( 23), 6 },
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// Temptable sent from dealer technologyoutlet.co.uk
|
||||
//
|
||||
|
||||
const short temptable_202[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_202[] PROGMEM = {
|
||||
{ OV( 1), 864 },
|
||||
{ OV( 35), 300 },
|
||||
{ OV( 38), 295 },
|
||||
|
|
|
@ -21,13 +21,13 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#define REVERSE_TEMP_SENSOR_RANGE
|
||||
#define REVERSE_TEMP_SENSOR_RANGE_21 1
|
||||
|
||||
#undef OV_SCALE
|
||||
#define OV_SCALE(N) (float((N) * 5) / 3.3f)
|
||||
|
||||
// Pt100 with INA826 amp with 3.3v excitation based on "Pt100 with INA826 amp on Ultimaker v2.0 electronics"
|
||||
const short temptable_21[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_21[] PROGMEM = {
|
||||
{ OV( 0), 0 },
|
||||
{ OV(227), 1 },
|
||||
{ OV(236), 10 },
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
*/
|
||||
|
||||
// 100k hotend thermistor with 4.7k pull up to 3.3v and 220R to analog input as in GTM32 Pro vB
|
||||
const short temptable_22[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_22[] PROGMEM = {
|
||||
{ OV( 1), 352 },
|
||||
{ OV( 6), 341 },
|
||||
{ OV( 11), 330 },
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
*/
|
||||
|
||||
// 100k hotbed thermistor with 4.7k pull up to 3.3v and 220R to analog input as in GTM32 Pro vB
|
||||
const short temptable_23[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_23[] PROGMEM = {
|
||||
{ OV( 1), 938 },
|
||||
{ OV( 11), 423 },
|
||||
{ OV( 21), 351 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4120 K, 4.7 kOhm pull-up, mendel-parts
|
||||
const short temptable_3[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_3[] PROGMEM = {
|
||||
{ OV( 1), 864 },
|
||||
{ OV( 21), 300 },
|
||||
{ OV( 25), 290 },
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#define OVM(V) OV((V)*(0.327/0.5))
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor
|
||||
const short temptable_331[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_331[] PROGMEM = {
|
||||
{ OVM( 23), 300 },
|
||||
{ OVM( 25), 295 },
|
||||
{ OVM( 27), 290 },
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#define OVM(V) OV((V)*(0.327/0.327))
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor
|
||||
const short temptable_332[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_332[] PROGMEM = {
|
||||
{ OVM( 268), 150 },
|
||||
{ OVM( 293), 145 },
|
||||
{ OVM( 320), 141 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 10 kOhm, beta25 = 3950 K, 4.7 kOhm pull-up, Generic 10k thermistor
|
||||
const short temptable_4[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_4[] PROGMEM = {
|
||||
{ OV( 1), 430 },
|
||||
{ OV( 54), 137 },
|
||||
{ OV( 107), 107 },
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan)
|
||||
// Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
|
||||
// Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
|
||||
const short temptable_5[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_5[] PROGMEM = {
|
||||
{ OV( 1), 713 },
|
||||
{ OV( 17), 300 }, // top rating 300C
|
||||
{ OV( 20), 290 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// 100k Zonestar thermistor. Adjusted By Hally
|
||||
const short temptable_501[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_501[] PROGMEM = {
|
||||
{ OV( 1), 713 },
|
||||
{ OV( 14), 300 }, // Top rating 300C
|
||||
{ OV( 16), 290 },
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
// Unknown thermistor for the Zonestar P802M hot bed. Adjusted By Nerseth
|
||||
// These were the shipped settings from Zonestar in original firmware: P802M_8_Repetier_V1.6_Zonestar.zip
|
||||
const short temptable_502[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_502[] PROGMEM = {
|
||||
{ OV( 56.0 / 4), 300 },
|
||||
{ OV( 187.0 / 4), 250 },
|
||||
{ OV( 615.0 / 4), 190 },
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// Verified by linagee.
|
||||
// Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
|
||||
// Advantage: Twice the resolution and better linearity from 150C to 200C
|
||||
const short temptable_51[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_51[] PROGMEM = {
|
||||
{ OV( 1), 350 },
|
||||
{ OV( 190), 250 }, // top rating 250C
|
||||
{ OV( 203), 245 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
// 100k thermistor supplied with RPW-Ultra hotend, 4.7k pullup
|
||||
|
||||
const short temptable_512[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_512[] PROGMEM = {
|
||||
{ OV(26), 300 },
|
||||
{ OV(28), 295 },
|
||||
{ OV(30), 290 },
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
|
||||
// Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
|
||||
// Advantage: More resolution and better linearity from 150C to 200C
|
||||
const short temptable_52[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_52[] PROGMEM = {
|
||||
{ OV( 1), 500 },
|
||||
{ OV( 125), 300 }, // top rating 300C
|
||||
{ OV( 142), 290 },
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
|
||||
// Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
|
||||
// Advantage: More resolution and better linearity from 150C to 200C
|
||||
const short temptable_55[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_55[] PROGMEM = {
|
||||
{ OV( 1), 500 },
|
||||
{ OV( 76), 300 },
|
||||
{ OV( 87), 290 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4092 K, 8.2 kOhm pull-up, 100k Epcos (?) thermistor
|
||||
const short temptable_6[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_6[] PROGMEM = {
|
||||
{ OV( 1), 350 },
|
||||
{ OV( 28), 250 }, // top rating 250C
|
||||
{ OV( 31), 245 },
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
// beta: 3950
|
||||
// min adc: 1 at 0.0048828125 V
|
||||
// max adc: 1023 at 4.9951171875 V
|
||||
const short temptable_60[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_60[] PROGMEM = {
|
||||
{ OV( 51), 272 },
|
||||
{ OV( 61), 258 },
|
||||
{ OV( 71), 247 },
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
// Resistance Tolerance + / -1%
|
||||
// B Value 3950K at 25/50 deg. C
|
||||
// B Value Tolerance + / - 1%
|
||||
const short temptable_61[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_61[] PROGMEM = {
|
||||
{ OV( 2.00), 420 }, // Guestimate to ensure we dont lose a reading and drop temps to -50 when over
|
||||
{ OV( 12.07), 350 },
|
||||
{ OV( 12.79), 345 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 2.5 MOhm, beta25 = 4500 K, 4.7 kOhm pull-up, DyzeDesign 500 °C Thermistor
|
||||
const short temptable_66[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_66[] PROGMEM = {
|
||||
{ OV( 17.5), 850 },
|
||||
{ OV( 17.9), 500 },
|
||||
{ OV( 21.7), 480 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 500 KOhm, beta25 = 3800 K, 4.7 kOhm pull-up, SliceEngineering 450 °C Thermistor
|
||||
const short temptable_67[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_67[] PROGMEM = {
|
||||
{ OV( 22 ), 500 },
|
||||
{ OV( 23 ), 490 },
|
||||
{ OV( 25 ), 480 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 3974 K, 4.7 kOhm pull-up, Honeywell 135-104LAG-J01
|
||||
const short temptable_7[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_7[] PROGMEM = {
|
||||
{ OV( 1), 941 },
|
||||
{ OV( 19), 362 },
|
||||
{ OV( 37), 299 }, // top rating 300C
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// ANENG AN8009 DMM with a K-type probe used for measurements.
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 4100 K, 4.7 kOhm pull-up, bqh2 stock thermistor
|
||||
const short temptable_70[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_70[] PROGMEM = {
|
||||
{ OV( 18), 270 },
|
||||
{ OV( 27), 248 },
|
||||
{ OV( 34), 234 },
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
// Beta = 3974
|
||||
// R1 = 0 Ohm
|
||||
// R2 = 4700 Ohm
|
||||
const short temptable_71[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_71[] PROGMEM = {
|
||||
{ OV( 35), 300 },
|
||||
{ OV( 51), 269 },
|
||||
{ OV( 59), 258 },
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
//#define HIGH_TEMP_RANGE_75
|
||||
|
||||
const short temptable_75[][2] PROGMEM = { // Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
|
||||
const temp_entry_t temptable_75[] PROGMEM = { // Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
|
||||
{ OV(111.06), 200 }, // v=0.542 r=571.747 res=0.501 degC/count
|
||||
|
||||
#ifdef HIGH_TEMP_RANGE_75
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 3950 K, 10 kOhm pull-up, NTCS0603E3104FHT
|
||||
const short temptable_8[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_8[] PROGMEM = {
|
||||
{ OV( 1), 704 },
|
||||
{ OV( 54), 216 },
|
||||
{ OV( 107), 175 },
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
// R25 = 100 kOhm, beta25 = 3960 K, 4.7 kOhm pull-up, GE Sensing AL03006-58.2K-97-G1
|
||||
const short temptable_9[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_9[] PROGMEM = {
|
||||
{ OV( 1), 936 },
|
||||
{ OV( 36), 300 },
|
||||
{ OV( 71), 246 },
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
// 100k bed thermistor with a 10K pull-up resistor - made by $ buildroot/share/scripts/createTemperatureLookupMarlin.py --rp=10000
|
||||
|
||||
const short temptable_99[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_99[] PROGMEM = {
|
||||
{ OV( 5.81), 350 }, // v=0.028 r= 57.081 res=13.433 degC/count
|
||||
{ OV( 6.54), 340 }, // v=0.032 r= 64.248 res=11.711 degC/count
|
||||
{ OV( 7.38), 330 }, // v=0.036 r= 72.588 res=10.161 degC/count
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#define DUMMY_THERMISTOR_998_VALUE 25
|
||||
#endif
|
||||
|
||||
const short temptable_998[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_998[] PROGMEM = {
|
||||
{ OV( 1), DUMMY_THERMISTOR_998_VALUE },
|
||||
{ OV(1023), DUMMY_THERMISTOR_998_VALUE }
|
||||
};
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#define DUMMY_THERMISTOR_999_VALUE 25
|
||||
#endif
|
||||
|
||||
const short temptable_999[][2] PROGMEM = {
|
||||
const temp_entry_t temptable_999[] PROGMEM = {
|
||||
{ OV( 1), DUMMY_THERMISTOR_999_VALUE },
|
||||
{ OV(1023), DUMMY_THERMISTOR_999_VALUE }
|
||||
};
|
||||
|
|
|
@ -42,6 +42,8 @@
|
|||
|
||||
#define ANY_THERMISTOR_IS(n) (THERMISTOR_HEATER_0 == n || THERMISTOR_HEATER_1 == n || THERMISTOR_HEATER_2 == n || THERMISTOR_HEATER_3 == n || THERMISTOR_HEATER_4 == n || THERMISTOR_HEATER_5 == n || THERMISTOR_HEATER_6 == n || THERMISTOR_HEATER_7 == n || THERMISTORBED == n || THERMISTORCHAMBER == n || THERMISTORPROBE == n)
|
||||
|
||||
typedef struct { int16_t value, celsius; } temp_entry_t;
|
||||
|
||||
// Pt1000 and Pt100 handling
|
||||
//
|
||||
// Rt=R0*(1+a*T+b*T*T) [for T>0]
|
||||
|
@ -185,12 +187,13 @@
|
|||
#include "thermistor_999.h"
|
||||
#endif
|
||||
#if ANY_THERMISTOR_IS(1000) // Custom
|
||||
const short temptable_1000[][2] PROGMEM = { { 0, 0 } };
|
||||
const temp_entry_t temptable_1000[] PROGMEM = { { 0, 0 } };
|
||||
#endif
|
||||
|
||||
#define _TT_NAME(_N) temptable_ ## _N
|
||||
#define TT_NAME(_N) _TT_NAME(_N)
|
||||
|
||||
|
||||
#if THERMISTOR_HEATER_0
|
||||
#define HEATER_0_TEMPTABLE TT_NAME(THERMISTOR_HEATER_0)
|
||||
#define HEATER_0_TEMPTABLE_LEN COUNT(HEATER_0_TEMPTABLE)
|
||||
|
@ -288,9 +291,12 @@
|
|||
#else
|
||||
#define CHAMBER_TEMPTABLE_LEN 0
|
||||
#endif
|
||||
|
||||
#ifdef THERMISTORPROBE
|
||||
#define PROBE_TEMPTABLE TT_NAME(THERMISTORPROBE)
|
||||
#define PROBE_TEMPTABLE_LEN COUNT(PROBE_TEMPTABLE)
|
||||
#elif defined(HEATER_PROBE_USES_THERMISTOR)
|
||||
#error "No probe thermistor table specified"
|
||||
#else
|
||||
#define PROBE_TEMPTABLE_LEN 0
|
||||
#endif
|
||||
|
@ -300,7 +306,7 @@ static_assert(
|
|||
HEATER_0_TEMPTABLE_LEN < 256 && HEATER_1_TEMPTABLE_LEN < 256
|
||||
&& HEATER_2_TEMPTABLE_LEN < 256 && HEATER_3_TEMPTABLE_LEN < 256
|
||||
&& HEATER_4_TEMPTABLE_LEN < 256 && HEATER_5_TEMPTABLE_LEN < 256
|
||||
&& HEATER_6_TEMPTABLE_LEN < 258 && HEATER_7_TEMPTABLE_LEN < 258
|
||||
&& HEATER_6_TEMPTABLE_LEN < 256 && HEATER_7_TEMPTABLE_LEN < 256
|
||||
&& BED_TEMPTABLE_LEN < 256 && CHAMBER_TEMPTABLE_LEN < 256
|
||||
&& PROBE_TEMPTABLE_LEN < 256,
|
||||
"Temperature conversion tables over 255 entries need special consideration."
|
||||
|
@ -309,8 +315,85 @@ static_assert(
|
|||
// Set the high and low raw values for the heaters
|
||||
// For thermistors the highest temperature results in the lowest ADC value
|
||||
// For thermocouples the highest temperature results in the highest ADC value
|
||||
|
||||
#define _TT_REV(N) REVERSE_TEMP_SENSOR_RANGE_##N
|
||||
#define TT_REV(N) _TT_REV(N)
|
||||
|
||||
#ifdef HEATER_0_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_0)
|
||||
#define HEATER_0_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_0_SENSOR_MAXTEMP_IND HEATER_0_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_0_SENSOR_MINTEMP_IND HEATER_0_TEMPTABLE_LEN - 1
|
||||
#define HEATER_0_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_1_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_1)
|
||||
#define HEATER_1_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_1_SENSOR_MAXTEMP_IND HEATER_1_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_1_SENSOR_MINTEMP_IND HEATER_1_TEMPTABLE_LEN - 1
|
||||
#define HEATER_1_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_2_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_2)
|
||||
#define HEATER_2_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_2_SENSOR_MAXTEMP_IND HEATER_2_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_2_SENSOR_MINTEMP_IND HEATER_2_TEMPTABLE_LEN - 1
|
||||
#define HEATER_2_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_3_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_3)
|
||||
#define HEATER_3_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_3_SENSOR_MAXTEMP_IND HEATER_3_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_3_SENSOR_MINTEMP_IND HEATER_3_TEMPTABLE_LEN - 1
|
||||
#define HEATER_3_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_4_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_4)
|
||||
#define HEATER_4_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_4_SENSOR_MAXTEMP_IND HEATER_4_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_4_SENSOR_MINTEMP_IND HEATER_4_TEMPTABLE_LEN - 1
|
||||
#define HEATER_4_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_5_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_5)
|
||||
#define HEATER_5_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_5_SENSOR_MAXTEMP_IND HEATER_5_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_5_SENSOR_MINTEMP_IND HEATER_5_TEMPTABLE_LEN - 1
|
||||
#define HEATER_5_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_6_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_6)
|
||||
#define HEATER_6_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_6_SENSOR_MAXTEMP_IND HEATER_6_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_6_SENSOR_MINTEMP_IND HEATER_6_TEMPTABLE_LEN - 1
|
||||
#define HEATER_6_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HEATER_7_TEMPTABLE
|
||||
#if TT_REV(THERMISTOR_HEATER_7)
|
||||
#define HEATER_7_SENSOR_MINTEMP_IND 0
|
||||
#define HEATER_7_SENSOR_MAXTEMP_IND HEATER_7_TEMPTABLE_LEN - 1
|
||||
#else
|
||||
#define HEATER_7_SENSOR_MINTEMP_IND HEATER_7_TEMPTABLE_LEN - 1
|
||||
#define HEATER_7_SENSOR_MAXTEMP_IND 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef HEATER_0_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_0_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_0) || !defined(HEATER_0_USES_THERMISTOR)
|
||||
#define HEATER_0_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_0_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -319,7 +402,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_1_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_1_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_1) || !defined(HEATER_1_USES_THERMISTOR)
|
||||
#define HEATER_1_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_1_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -328,7 +411,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_2_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_2_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_2) || !defined(HEATER_2_USES_THERMISTOR)
|
||||
#define HEATER_2_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_2_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -337,7 +420,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_3_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_3_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_3) || !defined(HEATER_3_USES_THERMISTOR)
|
||||
#define HEATER_3_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_3_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -346,7 +429,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_4_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_4_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_4) || !defined(HEATER_4_USES_THERMISTOR)
|
||||
#define HEATER_4_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_4_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -355,7 +438,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_5_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_5_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_5) || !defined(HEATER_5_USES_THERMISTOR)
|
||||
#define HEATER_5_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_5_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -364,7 +447,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_6_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_6_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_6) || !defined(HEATER_6_USES_THERMISTOR)
|
||||
#define HEATER_6_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_6_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -373,7 +456,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_7_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_7_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTOR_HEATER_7) || !defined(HEATER_7_USES_THERMISTOR)
|
||||
#define HEATER_7_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_7_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -382,7 +465,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_BED_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_BED_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTORBED) || !defined(HEATER_BED_USES_THERMISTOR)
|
||||
#define HEATER_BED_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_BED_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -391,7 +474,7 @@ static_assert(
|
|||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_CHAMBER_RAW_HI_TEMP
|
||||
#if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_CHAMBER_USES_THERMISTOR)
|
||||
#if TT_REV(THERMISTORCHAMBER) || !defined(HEATER_CHAMBER_USES_THERMISTOR)
|
||||
#define HEATER_CHAMBER_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_CHAMBER_RAW_LO_TEMP 0
|
||||
#else
|
||||
|
@ -399,5 +482,15 @@ static_assert(
|
|||
#define HEATER_CHAMBER_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#endif
|
||||
#endif
|
||||
#ifndef HEATER_PROBE_RAW_HI_TEMP
|
||||
#if TT_REV(THERMISTORPROBE) || !defined(HEATER_PROBE_USES_THERMISTOR)
|
||||
#define HEATER_PROBE_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#define HEATER_PROBE_RAW_LO_TEMP 0
|
||||
#else
|
||||
#define HEATER_PROBE_RAW_HI_TEMP 0
|
||||
#define HEATER_PROBE_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#undef REVERSE_TEMP_SENSOR_RANGE
|
||||
#undef _TT_REV
|
||||
#undef TT_REV
|
||||
|
|
Reference in a new issue