diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index b718640c1c..98d0da2756 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -66,6 +66,11 @@ //#define CONTROLLERFAN_PIN 23 //Pin used for the fan to cool controller, comment out to disable this function #define CONTROLLERFAN_SEC 60 //How many seconds, after all motors were disabled, the fan should run +// When first starting the main fan, run it at full speed for the +// given number of milliseconds. This gets the fan spinning reliably +// before setting a PWM value. Set to zero to disable. +#define FAN_KICKSTART_TIME 100 + //=========================================================================== //=============================Mechanical Settings=========================== //=========================================================================== diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index c7da244e9a..6173bcea3a 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -466,6 +466,20 @@ void check_axes_activity() } #if FAN_PIN > -1 #ifndef FAN_SOFT_PWM + if (FAN_KICKSTART_TIME) { + static unsigned long FanKickEnd; + if (tail_fan_speed) { + if (FanKickEnd == 0) { + // Just starting up fan - run at full power. + FanKickEnd = millis() + FAN_KICKSTART_TIME; + tail_fan_speed = 255; + } else if (FanKickEnd > millis()) + // Fan still spinning up. + tail_fan_speed = 255; + } else { + FanKickEnd = 0; + } + } analogWrite(FAN_PIN,tail_fan_speed); #endif #endif