Add MAXIMUM_STEPPER_RATE, enforce in multi-stepping
The timing value should be properly set for ALL boards. The compiler will check and set maximum step rate calculations based on those values.
This commit is contained in:
		| @@ -1309,8 +1309,20 @@ void Stepper::stepper_pulse_phase_isr() { | ||||
|   // If there is no current block, do nothing | ||||
|   if (!current_block) return; | ||||
|  | ||||
|   // Count of pending loops and events for this iteration | ||||
|   const uint32_t pending_events = step_event_count - step_events_completed; | ||||
|   uint8_t events_to_do = MIN(pending_events, steps_per_isr); | ||||
|  | ||||
|   // Just update the value we will get at the end of the loop | ||||
|   step_events_completed += events_to_do; | ||||
|  | ||||
|   #if MINIMUM_STEPPER_PULSE | ||||
|     // Get the timer count and estimate the end of the pulse | ||||
|     hal_timer_t pulse_end = HAL_timer_get_count(PULSE_TIMER_NUM) + hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|   #endif | ||||
|  | ||||
|   // Take multiple steps per interrupt (For high speed moves) | ||||
|   for (uint8_t i = steps_per_isr; i--;) { | ||||
|   do { | ||||
|  | ||||
|     #define _APPLY_STEP(AXIS) AXIS ##_APPLY_STEP | ||||
|     #define _INVERT_STEP_PIN(AXIS) INVERT_## AXIS ##_STEP_PIN | ||||
| @@ -1332,11 +1344,6 @@ void Stepper::stepper_pulse_phase_isr() { | ||||
|       } \ | ||||
|     }while(0) | ||||
|  | ||||
|     #if MINIMUM_STEPPER_PULSE > 0 | ||||
|       // Get the timer count and estimate the end of the pulse | ||||
|       hal_timer_t pulse_end = HAL_timer_get_count(PULSE_TIMER_NUM) + hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|     #endif | ||||
|  | ||||
|     // Pulse start | ||||
|     #if HAS_X_STEP | ||||
|       PULSE_START(X); | ||||
| @@ -1382,11 +1389,11 @@ void Stepper::stepper_pulse_phase_isr() { | ||||
|       #endif | ||||
|     #endif // !LIN_ADVANCE | ||||
|  | ||||
|     #if MINIMUM_STEPPER_PULSE > 0 | ||||
|       // Just wait for the requested pulse time. | ||||
|     #if MINIMUM_STEPPER_PULSE | ||||
|       // Just wait for the requested pulse duration | ||||
|       while (HAL_timer_get_count(PULSE_TIMER_NUM) < pulse_end) { /* nada */ } | ||||
|       // Get the timer count and estimate the end of the pulse for the OFF phase | ||||
|       pulse_end = HAL_timer_get_count(PULSE_TIMER_NUM) + hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|       // Add to the value, the value needed for the pulse end and ensuring the maximum driver rate is enforced | ||||
|       pulse_end += hal_timer_t(MIN_STEPPER_PULSE_CYCLES) - hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|     #endif | ||||
|  | ||||
|     // Pulse stop | ||||
| @@ -1413,15 +1420,20 @@ void Stepper::stepper_pulse_phase_isr() { | ||||
|       #endif | ||||
|     #endif // !LIN_ADVANCE | ||||
|  | ||||
|     // If all events done, break loop now | ||||
|     if (++step_events_completed >= step_event_count) break; | ||||
|     // Decrement the count of pending pulses to do | ||||
|     --events_to_do; | ||||
|  | ||||
|     #if MINIMUM_STEPPER_PULSE | ||||
|       // For minimum pulse time wait after stopping pulses also | ||||
|       // Just wait for the requested pulse time. | ||||
|       if (i) while (HAL_timer_get_count(PULSE_TIMER_NUM) < pulse_end) { /* nada */ } | ||||
|       if (events_to_do) { | ||||
|         // Just wait for the requested pulse duration | ||||
|         while (HAL_timer_get_count(PULSE_TIMER_NUM) < pulse_end) { /* nada */ } | ||||
|         // Add to the value, the time that the pulse must be active (to be used on the next loop) | ||||
|         pulse_end += hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|       } | ||||
|     #endif | ||||
|   } // steps_loop | ||||
|  | ||||
|   } while (events_to_do); | ||||
| } | ||||
|  | ||||
| // This is the last half of the stepper interrupt: This one processes and | ||||
| @@ -1819,8 +1831,8 @@ uint32_t Stepper::stepper_block_phase_isr() { | ||||
|       #if MINIMUM_STEPPER_PULSE | ||||
|         // Just wait for the requested pulse duration | ||||
|         while (HAL_timer_get_count(PULSE_TIMER_NUM) < pulse_end) { /* nada */ } | ||||
|         // Get the timer count and estimate the end of the pulse for the OFF phase | ||||
|         pulse_end = HAL_timer_get_count(PULSE_TIMER_NUM) + hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|         // Add to the value, the value needed for the pulse end and ensuring the maximum driver rate is enforced | ||||
|         pulse_end += hal_timer_t(MIN_STEPPER_PULSE_CYCLES) - hal_timer_t((HAL_TICKS_PER_US) * (MINIMUM_STEPPER_PULSE)); | ||||
|       #endif | ||||
|  | ||||
|       LA_steps < 0 ? ++LA_steps : --LA_steps; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user