diff --git a/config.h b/config.h index 5b21fcf..93fd1ee 100644 --- a/config.h +++ b/config.h @@ -125,7 +125,7 @@ #define ACCELERATION_TICKS_PER_SECOND 120L // NOTE: Make sure this value is less than 256, when adjusting both dependent parameters. -#define INTERRUPTS_PER_ACCELERATION_TICK (ISR_TICKS_PER_SECOND/ACCELERATION_TICKS_PER_SECOND) +#define ISR_TICKS_PER_ACCELERATION_TICK (ISR_TICKS_PER_SECOND/ACCELERATION_TICKS_PER_SECOND) // The Ranade algorithm can use either floating point or long integers for its counters, but for // integers the counter values must be scaled since these values can be very small (10^-6). This diff --git a/planner.c b/planner.c index 0d2f602..be99a31 100644 --- a/planner.c +++ b/planner.c @@ -32,7 +32,7 @@ #include "protocol.h" #define SOME_LARGE_VALUE 1.0E+38 // Used by rapids and acceleration maximization calculations. Just needs - // to be larger than any feasible mm/min or mm/sec^2 value. + // to be larger than any feasible (mm/min)^2 or mm/sec^2 value. static block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instructions static volatile uint8_t block_buffer_head; // Index of the next block to be pushed @@ -52,12 +52,6 @@ typedef struct { static planner_t pl; -void plan_init() -{ - plan_reset_buffer(); - memset(&pl, 0, sizeof(pl)); // Clear planner struct -} - // Returns the index of the next block in the ring buffer // NOTE: Removed modulo (%) operator, which uses an expensive divide and multiplication. static uint8_t next_block_index(uint8_t block_index) @@ -342,11 +336,12 @@ static void planner_recalculate() // } } -void plan_reset_buffer() +void plan_init() { block_buffer_tail = block_buffer_head; next_buffer_head = next_block_index(block_buffer_head); // block_buffer_planned = block_buffer_head; + memset(&pl, 0, sizeof(pl)); // Clear planner struct } inline void plan_discard_current_block() diff --git a/planner.h b/planner.h index fa51722..a16c8c9 100644 --- a/planner.h +++ b/planner.h @@ -73,9 +73,6 @@ void plan_set_current_position(int32_t x, int32_t y, int32_t z); // Reinitialize plan with a partially completed block void plan_cycle_reinitialize(int32_t step_events_remaining); -// Reset buffer -void plan_reset_buffer(); - // Returns the status of the block ring buffer. True, if buffer is full. uint8_t plan_check_full_buffer(); diff --git a/stepper.c b/stepper.c index 9d43430..f8d6c35 100644 --- a/stepper.c +++ b/stepper.c @@ -182,7 +182,7 @@ ISR(TIMER2_COMPA_vect) // Initialize Ranade variables st.d_counter = current_block->d_next; st.delta_d = current_block->initial_rate; - st.ramp_count = INTERRUPTS_PER_ACCELERATION_TICK/2; + st.ramp_count = ISR_TICKS_PER_ACCELERATION_TICK/2; // Initialize ramp type. if (st.step_events_remaining == current_block->decelerate_after) { st.ramp_type = DECEL_RAMP; } @@ -203,7 +203,7 @@ ISR(TIMER2_COMPA_vect) // Tick acceleration ramp counter st.ramp_count--; if (st.ramp_count == 0) { - st.ramp_count = INTERRUPTS_PER_ACCELERATION_TICK; // Reload ramp counter + st.ramp_count = ISR_TICKS_PER_ACCELERATION_TICK; // Reload ramp counter if (st.ramp_type == ACCEL_RAMP) { // Adjust velocity for acceleration st.delta_d += current_block->rate_delta; if (st.delta_d >= current_block->nominal_rate) { // Reached cruise state. @@ -232,7 +232,7 @@ ISR(TIMER2_COMPA_vect) if (sys.state == STATE_HOLD) { if (st.ramp_type != DECEL_RAMP) { st.ramp_type = DECEL_RAMP; - st.ramp_count = INTERRUPTS_PER_ACCELERATION_TICK/2; + st.ramp_count = ISR_TICKS_PER_ACCELERATION_TICK/2; } if (st.delta_d <= current_block->rate_delta) { st_go_idle(); @@ -279,9 +279,9 @@ ISR(TIMER2_COMPA_vect) st.ramp_type = DECEL_RAMP; if (st.step_events_remaining == current_block->decelerate_after) { if (st.delta_d == current_block->nominal_rate) { - st.ramp_count = INTERRUPTS_PER_ACCELERATION_TICK/2; // Set ramp counter for trapezoid + st.ramp_count = ISR_TICKS_PER_ACCELERATION_TICK/2; // Set ramp counter for trapezoid } else { - st.ramp_count = INTERRUPTS_PER_ACCELERATION_TICK-st.ramp_count; // Set ramp counter for triangle + st.ramp_count = ISR_TICKS_PER_ACCELERATION_TICK-st.ramp_count; // Set ramp counter for triangle } } } @@ -373,7 +373,7 @@ void st_cycle_reinitialize() // Replan buffer from the feed hold stop location. plan_cycle_reinitialize(st.step_events_remaining); st.ramp_type = ACCEL_RAMP; - st.ramp_count = INTERRUPTS_PER_ACCELERATION_TICK/2; + st.ramp_count = ISR_TICKS_PER_ACCELERATION_TICK/2; st.delta_d = 0; sys.state = STATE_QUEUED; } else {