From 04419af4192d455d94062bd1c39d7985d180b378 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 23 Nov 2017 15:25:11 -0600 Subject: [PATCH] Reorganize check_axes_activity --- .travis.yml | 2 +- Marlin/planner.cpp | 142 ++++++++++++++++++++++++--------------------- 2 files changed, 77 insertions(+), 67 deletions(-) diff --git a/.travis.yml b/.travis.yml index 302a2e47b..ffee17038 100644 --- a/.travis.yml +++ b/.travis.yml @@ -215,7 +215,7 @@ script: - opt_set_adv FAN_MIN_PWM 50 - opt_set_adv FAN_KICKSTART_TIME 100 - opt_set_adv XY_FREQUENCY_LIMIT 15 - - opt_enable_adv SHOW_TEMP_ADC_VALUES HOME_Y_BEFORE_X EMERGENCY_PARSER + - opt_enable_adv SHOW_TEMP_ADC_VALUES HOME_Y_BEFORE_X EMERGENCY_PARSER FAN_KICKSTART_TIME - opt_enable_adv ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED ADVANCED_OK - opt_enable_adv VOLUMETRIC_DEFAULT_ON NO_WORKSPACE_OFFSETS ACTION_ON_KILL - opt_enable_adv EXTRA_FAN_SPEED FWERETRACT Z_DUAL_STEPPER_DRIVERS Z_DUAL_ENDSTOPS diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index daaafa90c..fad401e3e 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -407,24 +407,77 @@ void Planner::check_axes_activity() { unsigned char axis_active[NUM_AXIS] = { 0 }, tail_fan_speed[FAN_COUNT]; - #if FAN_COUNT > 0 - for (uint8_t i = 0; i < FAN_COUNT; i++) tail_fan_speed[i] = fanSpeeds[i]; - #endif - #if ENABLED(BARICUDA) #if HAS_HEATER_1 - uint8_t tail_valve_pressure = baricuda_valve_pressure; + uint8_t tail_valve_pressure; #endif #if HAS_HEATER_2 - uint8_t tail_e_to_p_pressure = baricuda_e_to_p_pressure; + uint8_t tail_e_to_p_pressure; #endif #endif if (blocks_queued()) { #if FAN_COUNT > 0 - for (uint8_t i = 0; i < FAN_COUNT; i++) tail_fan_speed[i] = block_buffer[block_buffer_tail].fan_speed[i]; - #endif + + for (uint8_t i = 0; i < FAN_COUNT; i++) + tail_fan_speed[i] = block_buffer[block_buffer_tail].fan_speed[i]; + + #ifdef FAN_KICKSTART_TIME + + static millis_t fan_kick_end[FAN_COUNT] = { 0 }; + + #define KICKSTART_FAN(f) \ + if (tail_fan_speed[f]) { \ // is the fan turned on? + millis_t ms = millis(); \ + if (fan_kick_end[f] == 0) { \ // not yet kickstarted? + fan_kick_end[f] = ms + FAN_KICKSTART_TIME; \ // kickstart until this time + tail_fan_speed[f] = 255; \ // full speed + } else if (PENDING(ms, fan_kick_end[f])) \ // kickstart in progress? + tail_fan_speed[f] = 255; \ // keep full speed going + } else fan_kick_end[f] = 0 // fan off? kick next time + + #if HAS_FAN0 + KICKSTART_FAN(0); + #endif + #if HAS_FAN1 + KICKSTART_FAN(1); + #endif + #if HAS_FAN2 + KICKSTART_FAN(2); + #endif + + #endif // FAN_KICKSTART_TIME + + #ifdef FAN_MIN_PWM + #define CALC_FAN_SPEED(f) (tail_fan_speed[f] ? ( FAN_MIN_PWM + (tail_fan_speed[f] * (255 - FAN_MIN_PWM)) / 255 ) : 0) + #else + #define CALC_FAN_SPEED(f) tail_fan_speed[f] + #endif + + #if ENABLED(FAN_SOFT_PWM) + #if HAS_FAN0 + thermalManager.soft_pwm_amount_fan[0] = CALC_FAN_SPEED(0); + #endif + #if HAS_FAN1 + thermalManager.soft_pwm_amount_fan[1] = CALC_FAN_SPEED(1); + #endif + #if HAS_FAN2 + thermalManager.soft_pwm_amount_fan[2] = CALC_FAN_SPEED(2); + #endif + #else + #if HAS_FAN0 + analogWrite(FAN_PIN, CALC_FAN_SPEED(0)); + #endif + #if HAS_FAN1 + analogWrite(FAN1_PIN, CALC_FAN_SPEED(1)); + #endif + #if HAS_FAN2 + analogWrite(FAN2_PIN, CALC_FAN_SPEED(2)); + #endif + #endif + + #endif // FAN_COUNT > 0 block_t* block; @@ -443,6 +496,21 @@ void Planner::check_axes_activity() { LOOP_XYZE(i) if (block->steps[i]) axis_active[i]++; } } + else { + #if FAN_COUNT > 0 + for (uint8_t i = 0; i < FAN_COUNT; i++) tail_fan_speed[i] = fanSpeeds[i]; + #endif + + #if ENABLED(BARICUDA) + #if HAS_HEATER_1 + tail_valve_pressure = baricuda_valve_pressure; + #endif + #if HAS_HEATER_2 + tail_e_to_p_pressure = baricuda_e_to_p_pressure; + #endif + #endif + } + #if ENABLED(DISABLE_X) if (!axis_active[X_AXIS]) disable_X(); #endif @@ -456,64 +524,6 @@ void Planner::check_axes_activity() { if (!axis_active[E_AXIS]) disable_e_steppers(); #endif - #if FAN_COUNT > 0 - - #ifdef FAN_MIN_PWM - #define CALC_FAN_SPEED(f) (tail_fan_speed[f] ? ( FAN_MIN_PWM + (tail_fan_speed[f] * (255 - FAN_MIN_PWM)) / 255 ) : 0) - #else - #define CALC_FAN_SPEED(f) tail_fan_speed[f] - #endif - - #ifdef FAN_KICKSTART_TIME - - static millis_t fan_kick_end[FAN_COUNT] = { 0 }; - - #define KICKSTART_FAN(f) \ - if (tail_fan_speed[f]) { \ - millis_t ms = millis(); \ - if (fan_kick_end[f] == 0) { \ - fan_kick_end[f] = ms + FAN_KICKSTART_TIME; \ - tail_fan_speed[f] = 255; \ - } else if (PENDING(ms, fan_kick_end[f])) \ - tail_fan_speed[f] = 255; \ - } else fan_kick_end[f] = 0 - - #if HAS_FAN0 - KICKSTART_FAN(0); - #endif - #if HAS_FAN1 - KICKSTART_FAN(1); - #endif - #if HAS_FAN2 - KICKSTART_FAN(2); - #endif - - #endif // FAN_KICKSTART_TIME - - #if ENABLED(FAN_SOFT_PWM) - #if HAS_FAN0 - thermalManager.soft_pwm_amount_fan[0] = CALC_FAN_SPEED(0); - #endif - #if HAS_FAN1 - thermalManager.soft_pwm_amount_fan[1] = CALC_FAN_SPEED(1); - #endif - #if HAS_FAN2 - thermalManager.soft_pwm_amount_fan[2] = CALC_FAN_SPEED(2); - #endif - #else - #if HAS_FAN0 - analogWrite(FAN_PIN, CALC_FAN_SPEED(0)); - #endif - #if HAS_FAN1 - analogWrite(FAN1_PIN, CALC_FAN_SPEED(1)); - #endif - #if HAS_FAN2 - analogWrite(FAN2_PIN, CALC_FAN_SPEED(2)); - #endif - #endif - - #endif // FAN_COUNT > 0 - #if ENABLED(AUTOTEMP) getHighESpeed(); #endif