Browse Source

Reduce Step Smoothing ceiling to 50% CPU usage (#18719)

vanilla_fb_2.0.x
Jason Smith 5 years ago
committed by GitHub
parent
commit
a847f37d43
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      Marlin/src/module/stepper.cpp
  2. 6
      Marlin/src/module/stepper.h

4
Marlin/src/module/stepper.cpp

@ -2099,10 +2099,10 @@ uint32_t Stepper::block_phase_isr() {
#if ENABLED(ADAPTIVE_STEP_SMOOTHING) #if ENABLED(ADAPTIVE_STEP_SMOOTHING)
uint8_t oversampling = 0; // Assume no axis smoothing (via oversampling) uint8_t oversampling = 0; // Assume no axis smoothing (via oversampling)
// Decide if axis smoothing is possible // Decide if axis smoothing is possible
uint32_t max_rate = current_block->nominal_rate; // Get the maximum rate (maximum event speed) uint32_t max_rate = current_block->nominal_rate; // Get the step event rate
while (max_rate < MIN_STEP_ISR_FREQUENCY) { // As long as more ISRs are possible... while (max_rate < MIN_STEP_ISR_FREQUENCY) { // As long as more ISRs are possible...
max_rate <<= 1; // Try to double the rate max_rate <<= 1; // Try to double the rate
if (max_rate >= MAX_STEP_ISR_FREQUENCY_1X) break; // Don't exceed the estimated ISR limit if (max_rate < MIN_STEP_ISR_FREQUENCY) // Don't exceed the estimated ISR limit
++oversampling; // Increase the oversampling (used for left-shift) ++oversampling; // Increase the oversampling (used for left-shift)
} }
oversampling_factor = oversampling; // For all timer interval calculations oversampling_factor = oversampling; // For all timer interval calculations

6
Marlin/src/module/stepper.h

@ -229,8 +229,10 @@
#define MAX_STEP_ISR_FREQUENCY_2X ((F_CPU) / ISR_EXECUTION_CYCLES(2)) #define MAX_STEP_ISR_FREQUENCY_2X ((F_CPU) / ISR_EXECUTION_CYCLES(2))
#define MAX_STEP_ISR_FREQUENCY_1X ((F_CPU) / ISR_EXECUTION_CYCLES(1)) #define MAX_STEP_ISR_FREQUENCY_1X ((F_CPU) / ISR_EXECUTION_CYCLES(1))
// The minimum allowable frequency for step smoothing will be 1/10 of the maximum nominal frequency (in Hz) // The minimum step ISR rate used by ADAPTIVE_STEP_SMOOTHING to target 50% CPU usage
#define MIN_STEP_ISR_FREQUENCY MAX_STEP_ISR_FREQUENCY_1X // This does not account for the possibility of multi-stepping.
// Perhaps DISABLE_MULTI_STEPPING should be required with ADAPTIVE_STEP_SMOOTHING.
#define MIN_STEP_ISR_FREQUENCY (MAX_STEP_ISR_FREQUENCY_1X / 2)
// //
// Stepper class definition // Stepper class definition

Loading…
Cancel
Save