Reduce Step Smoothing ceiling to 50% CPU usage (#18719)
This commit is contained in:
parent
4a55bdb165
commit
a847f37d43
@ -2099,11 +2099,11 @@ 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
|
||||||
#else
|
#else
|
||||||
|
@ -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…
Reference in New Issue
Block a user