From 8a583aaa8c1a27a3d13747b7ecead6a3d73a4e81 Mon Sep 17 00:00:00 2001 From: Robbe Derks Date: Wed, 2 Apr 2025 12:15:35 +0200 Subject: [PATCH] Fan controller: fix instability on high rpm fans (#2179) * integrator error relative to max rpm * need to cast --- board/drivers/fan.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/board/drivers/fan.h b/board/drivers/fan.h index b355f58b..ec0e1be5 100644 --- a/board/drivers/fan.h +++ b/board/drivers/fan.h @@ -19,7 +19,7 @@ void fan_init(void) { // Call this at FAN_TICK_FREQ void fan_tick(void) { - const float FAN_I = 0.001f; + const float FAN_I = 6.5f; const uint8_t FAN_STALL_THRESHOLD_MAX = 8U; if (current_board->fan_max_rpm > 0U) { @@ -74,7 +74,7 @@ void fan_tick(void) { if (fan_state.target_rpm == 0U) { fan_state.error_integral = 0.0f; } else { - float error = fan_state.target_rpm - fan_rpm_fast; + float error = (fan_state.target_rpm - fan_rpm_fast) / ((float) current_board->fan_max_rpm); fan_state.error_integral += FAN_I * error; } fan_state.error_integral = CLAMP(fan_state.error_integral, 0U, current_board->fan_max_pwm);