ouch finger

This commit is contained in:
2026-07-08 22:17:23 +02:00
parent 2fe53d5a8a
commit d1385baa45
11 changed files with 865 additions and 189 deletions

View File

@@ -456,7 +456,7 @@ private:
void updateAutotune(float avgTempC, float maxTempC, uint32_t nowMs) {
float duty = 0.0f;
uint8_t fan = AUTOTUNE_PREHEAT_FAN_PWM;
uint8_t fan = stirFanPwm_;
autotuner_.update(avgTempC, maxTempC, cornerSpreadC_, nowMs, duty, fan);
heaterDutyPercent_ = duty;
@@ -464,7 +464,7 @@ private:
heaterOn_ = duty >= 50.0f;
digitalWrite(HEATER_PIN, heaterOn_ ? HIGH : LOW);
heaterBlock_ = duty > 0.0f ? HeaterBlock::None : HeaterBlock::Autotune;
writeFan(fan);
writeFan(fanManualActive_ ? fanManualPwm_ : stirFanPwm_);
lastHeaterUpdateMs_ = nowMs;
commitAutotuneIfDone();
}
@@ -513,15 +513,7 @@ private:
}
heaterDutyPercent_ = applyHeaterRamp(duty, avgTempC, nowMs);
const uint8_t fanPwm = fanManualActive_ ? fanManualPwm_ : stirFanPwm_;
regulatingFanPwm_ = fanWithMinStir(avgTempC, fanPwm);
}
uint8_t fanWithMinStir(float avgTempC, uint8_t pwm) const {
if (avgTempC < IDLE_AUTO_FAN_OFF_TEMP_C) {
return 0;
}
return pwm;
regulatingFanPwm_ = fanManualActive_ ? fanManualPwm_ : stirFanPwm_;
}
static float clampPercent(float value) {
@@ -547,6 +539,11 @@ private:
float allowanceFromMaxCorner(float maxTempC, float avgTempC) const {
if (!shouldLimitMaxCorner(avgTempC)) {
// Heat-up: only taper when a hot corner nears the emergency ceiling
if (maxTempC >= EMERGENCY_MAX_TEMP_C - 3.0f) {
const float headroom = EMERGENCY_MAX_TEMP_C - maxTempC;
return clampPercent((headroom / 3.0f) * 100.0f);
}
return 100.0f;
}