Skip to content

Commit

Permalink
Merge pull request MarlinFirmware#334 from KevinOConnor/FanKick
Browse files Browse the repository at this point in the history
Add feature to briefly run the cooling fan at full speed when it first starts.
  • Loading branch information
daid committed Jan 9, 2013
2 parents 965baf2 + 3d91bd4 commit 6ec56fa
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 27 deletions.
5 changes: 5 additions & 0 deletions Marlin/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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===========================
//===========================================================================
Expand Down
36 changes: 15 additions & 21 deletions Marlin/planner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -438,8 +438,7 @@ void check_axes_activity()
unsigned char y_active = 0;
unsigned char z_active = 0;
unsigned char e_active = 0;
unsigned char fan_speed = 0;
unsigned char tail_fan_speed = 0;
unsigned char tail_fan_speed = fanSpeed;
block_t *block;

if(block_buffer_tail != block_buffer_head)
Expand All @@ -453,20 +452,9 @@ void check_axes_activity()
if(block->steps_y != 0) y_active++;
if(block->steps_z != 0) z_active++;
if(block->steps_e != 0) e_active++;
if(block->fan_speed != 0) fan_speed++;
block_index = (block_index+1) & (BLOCK_BUFFER_SIZE - 1);
}
}
else
{
#if FAN_PIN > -1
#ifndef FAN_SOFT_PWM
if (fanSpeed != 0){
analogWrite(FAN_PIN,fanSpeed); // If buffer is empty use current fan speed
}
#endif
#endif
}
if((DISABLE_X) && (x_active == 0)) disable_x();
if((DISABLE_Y) && (y_active == 0)) disable_y();
if((DISABLE_Z) && (z_active == 0)) disable_z();
Expand All @@ -478,15 +466,21 @@ void check_axes_activity()
}
#if FAN_PIN > -1
#ifndef FAN_SOFT_PWM
if((fanSpeed == 0) && (fan_speed ==0))
{
analogWrite(FAN_PIN, 0);
}

if (fanSpeed != 0 && tail_fan_speed !=0)
{
analogWrite(FAN_PIN,tail_fan_speed);
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
#ifdef AUTOTEMP
Expand Down
6 changes: 0 additions & 6 deletions Marlin/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,10 +221,7 @@ void lcd_preheat_pla()
setTargetHotend1(plaPreheatHotendTemp);
setTargetHotend2(plaPreheatHotendTemp);
setTargetBed(plaPreheatHPBTemp);
#if FAN_PIN > -1
fanSpeed = plaPreheatFanSpeed;
analogWrite(FAN_PIN, fanSpeed);
#endif
lcd_return_to_status();
}

Expand All @@ -234,10 +231,7 @@ void lcd_preheat_abs()
setTargetHotend1(absPreheatHotendTemp);
setTargetHotend2(absPreheatHotendTemp);
setTargetBed(absPreheatHPBTemp);
#if FAN_PIN > -1
fanSpeed = absPreheatFanSpeed;
analogWrite(FAN_PIN, fanSpeed);
#endif
lcd_return_to_status();
}

Expand Down

0 comments on commit 6ec56fa

Please sign in to comment.