Browse Source

Reset timer count before first block step

pull/1/head
Scott Lahteine 7 years ago
parent
commit
5cf6a062e3
  1. 21
      Marlin/src/module/stepper.cpp
  2. 3
      Marlin/src/module/stepper.h

21
Marlin/src/module/stepper.cpp

@ -408,10 +408,13 @@ void Stepper::isr() {
}
// If there is no current block, attempt to pop one from the buffer
bool first_step = false;
if (!current_block) {
// Anything in the buffer?
if ((current_block = planner.get_current_block())) {
trapezoid_generator_reset();
HAL_timer_set_current_count(STEP_TIMER_NUM, 0);
first_step = true;
// Initialize Bresenham counters to 1/2 the ceiling
counter_X = counter_Y = counter_Z = counter_E = -(current_block->step_event_count >> 1);
@ -666,12 +669,18 @@ void Stepper::isr() {
// Calculate new timer value
if (step_events_completed <= (uint32_t)current_block->accelerate_until) {
#ifdef CPU_32_BIT
MultiU32X24toH32(acc_step_rate, acceleration_time, current_block->acceleration_rate);
#else
MultiU24X32toH16(acc_step_rate, acceleration_time, current_block->acceleration_rate);
#endif
acc_step_rate += current_block->initial_rate;
if (first_step) {
acc_step_rate = current_block->initial_rate;
acceleration_time = 0;
}
else {
#ifdef CPU_32_BIT
MultiU32X24toH32(acc_step_rate, acceleration_time, current_block->acceleration_rate);
#else
MultiU24X32toH16(acc_step_rate, acceleration_time, current_block->acceleration_rate);
#endif
acc_step_rate += current_block->initial_rate;
}
// upper limit
NOMORE(acc_step_rate, current_block->nominal_rate);

3
Marlin/src/module/stepper.h

@ -362,9 +362,6 @@ class Stepper {
OCR1A_nominal = calc_timer_interval(current_block->nominal_rate);
// make a note of the number of step loops required at nominal speed
step_loops_nominal = step_loops;
acc_step_rate = current_block->initial_rate;
acceleration_time = calc_timer_interval(acc_step_rate);
_NEXT_ISR(acceleration_time);
#if ENABLED(LIN_ADVANCE)
if (current_block->use_advance_lead) {

Loading…
Cancel
Save