refactored stepper_plan -> planner (untested)
This commit is contained in:
parent
fc1c1b7e09
commit
a4c64945e0
2
Makefile
2
Makefile
@ -31,7 +31,7 @@ DEVICE = atmega328p
|
|||||||
CLOCK = 16000000
|
CLOCK = 16000000
|
||||||
PROGRAMMER = -c avrisp2 -P usb
|
PROGRAMMER = -c avrisp2 -P usb
|
||||||
OBJECTS = main.o motion_control.o gcode.o spindle_control.o wiring_serial.o serial_protocol.o stepper.o \
|
OBJECTS = main.o motion_control.o gcode.o spindle_control.o wiring_serial.o serial_protocol.o stepper.o \
|
||||||
eeprom.o settings.o stepper_plan.o
|
eeprom.o settings.o planner.o
|
||||||
# FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m
|
# FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m
|
||||||
FUSES = -U hfuse:w:0xd2:m -U lfuse:w:0xff:m
|
FUSES = -U hfuse:w:0xd2:m -U lfuse:w:0xff:m
|
||||||
# update that line with this when programmer is back up:
|
# update that line with this when programmer is back up:
|
||||||
|
2
main.c
2
main.c
@ -21,7 +21,7 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <avr/sleep.h>
|
#include <avr/sleep.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "stepper_plan.h"
|
#include "planner.h"
|
||||||
#include "stepper.h"
|
#include "stepper.h"
|
||||||
#include "spindle_control.h"
|
#include "spindle_control.h"
|
||||||
#include "motion_control.h"
|
#include "motion_control.h"
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "nuts_bolts.h"
|
#include "nuts_bolts.h"
|
||||||
#include "stepper.h"
|
#include "stepper.h"
|
||||||
#include "stepper_plan.h"
|
#include "planner.h"
|
||||||
#include "wiring_serial.h"
|
#include "wiring_serial.h"
|
||||||
|
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ void mc_dwell(uint32_t milliseconds)
|
|||||||
// 1/feed_rate minutes.
|
// 1/feed_rate minutes.
|
||||||
void mc_line(double x, double y, double z, double feed_rate, int invert_feed_rate)
|
void mc_line(double x, double y, double z, double feed_rate, int invert_feed_rate)
|
||||||
{
|
{
|
||||||
st_buffer_line(x, y, z, feed_rate, invert_feed_rate);
|
plan_buffer_line(x, y, z, feed_rate, invert_feed_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute an arc. theta == start angle, angular_travel == number of radians to go along the arc,
|
// Execute an arc. theta == start angle, angular_travel == number of radians to go along the arc,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
stepper_plan.c - buffers movement commands and manages the acceleration profile plan
|
planner.c - buffers movement commands and manages the acceleration profile plan
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
@ -54,7 +54,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "stepper_plan.h"
|
#include "planner.h"
|
||||||
#include "nuts_bolts.h"
|
#include "nuts_bolts.h"
|
||||||
#include "stepper.h"
|
#include "stepper.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
@ -404,5 +404,6 @@ void plan_buffer_line(double x, double y, double z, double feed_rate, int invert
|
|||||||
memcpy(position, target, sizeof(target)); // position[] = target[]
|
memcpy(position, target, sizeof(target)); // position[] = target[]
|
||||||
|
|
||||||
if (acceleration_manager_enabled) { planner_recalculate(); }
|
if (acceleration_manager_enabled) { planner_recalculate(); }
|
||||||
|
st_wake_up();
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
stepper_plan.h - buffers movement commands and manages the acceleration profile plan
|
planner.h - buffers movement commands and manages the acceleration profile plan
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
@ -21,8 +21,8 @@
|
|||||||
// This module is to be considered a sub-module of stepper.c. Please don't include
|
// This module is to be considered a sub-module of stepper.c. Please don't include
|
||||||
// this file from any other module.
|
// this file from any other module.
|
||||||
|
|
||||||
#ifndef stepper_plan_h
|
#ifndef planner_h
|
||||||
#define stepper_plan_h
|
#define planner_h
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
@ -59,11 +59,9 @@ extern int32_t position[3];
|
|||||||
// Initialize the motion plan subsystem
|
// Initialize the motion plan subsystem
|
||||||
void plan_init();
|
void plan_init();
|
||||||
|
|
||||||
// Do not call directly unless you are writing a motor driver. In current iteration this is called by
|
// Add a new linear movement to the buffer. x, y and z is the signed, absolute target position in
|
||||||
// st_buffer_line which also wakes up the stepper subsystem.
|
// millimaters. Feed rate specifies the speed of the motion. If feed rate is inverted, the feed
|
||||||
// Add a new linear movement to the buffer. steps_x, _y and _z is the signed, relative motion in
|
// rate is taken to mean "frequency" and would complete the operation in 1/feed_rate minutes.
|
||||||
// steps. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
|
|
||||||
// calculation the caller must also provide the physical length of the line in millimeters.
|
|
||||||
void plan_buffer_line(double x, double y, double z, double feed_rate, int invert_feed_rate);
|
void plan_buffer_line(double x, double y, double z, double feed_rate, int invert_feed_rate);
|
||||||
|
|
||||||
// Call when the current block is no longer needed. Discards the block and makes the memory
|
// Call when the current block is no longer needed. Discards the block and makes the memory
|
20
stepper.c
20
stepper.c
@ -30,7 +30,7 @@
|
|||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "nuts_bolts.h"
|
#include "nuts_bolts.h"
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include "stepper_plan.h"
|
#include "planner.h"
|
||||||
#include "wiring_serial.h"
|
#include "wiring_serial.h"
|
||||||
|
|
||||||
|
|
||||||
@ -40,13 +40,14 @@
|
|||||||
#define STEPPING_MASK (STEP_MASK | DIRECTION_MASK) // All stepping-related bits (step/direction)
|
#define STEPPING_MASK (STEP_MASK | DIRECTION_MASK) // All stepping-related bits (step/direction)
|
||||||
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
|
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
|
||||||
|
|
||||||
#define MINIMUM_STEPS_PER_MINUTE 1200 // The stepper subsystem will never run slower than this, exept when sleeping
|
|
||||||
#define CYCLES_PER_ACCELERATION_TICK ((TICKS_PER_MICROSECOND*1000000)/ACCELERATION_TICKS_PER_SECOND)
|
#define CYCLES_PER_ACCELERATION_TICK ((TICKS_PER_MICROSECOND*1000000)/ACCELERATION_TICKS_PER_SECOND)
|
||||||
|
|
||||||
|
#define MINIMUM_STEPS_PER_MINUTE 1200 // The stepper subsystem will never run slower than this, exept when sleeping
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 |= (1<<OCIE1A)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 |= (1<<OCIE1A)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~(1<<OCIE1A)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~(1<<OCIE1A)
|
||||||
|
|
||||||
static block_t *current_block; // A convenience pointer to the block currently being traced
|
static block_t *current_block; // A pointer to the block currently being traced
|
||||||
|
|
||||||
// Variables used by The Stepper Driver Interrupt
|
// Variables used by The Stepper Driver Interrupt
|
||||||
static uint8_t out_bits; // The next stepping-bits to be output
|
static uint8_t out_bits; // The next stepping-bits to be output
|
||||||
@ -81,6 +82,10 @@ static uint32_t trapezoid_adjusted_rate; // The current rate of step_events
|
|||||||
|
|
||||||
void set_step_events_per_minute(uint32_t steps_per_minute);
|
void set_step_events_per_minute(uint32_t steps_per_minute);
|
||||||
|
|
||||||
|
void st_wake_up() {
|
||||||
|
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
|
}
|
||||||
|
|
||||||
// Initializes the trapezoid generator from the current block. Called whenever a new
|
// Initializes the trapezoid generator from the current block. Called whenever a new
|
||||||
// block begins.
|
// block begins.
|
||||||
inline void trapezoid_generator_reset() {
|
inline void trapezoid_generator_reset() {
|
||||||
@ -107,15 +112,6 @@ inline void trapezoid_generator_tick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a new linear movement to the buffer. steps_x, _y and _z is the signed, relative motion in
|
|
||||||
// steps. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
|
|
||||||
// calculation the caller must also provide the physical length of the line in millimeters.
|
|
||||||
void st_buffer_line(double x, double y, double z, double feed_rate, int invert_feed_rate) {
|
|
||||||
plan_buffer_line(x, y, z, feed_rate, invert_feed_rate);
|
|
||||||
// Ensure that block processing is running by enabling The Stepper Driver Interrupt
|
|
||||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
|
||||||
}
|
|
||||||
|
|
||||||
void st_get_position_steps(int32_t (*vector)[3]) {
|
void st_get_position_steps(int32_t (*vector)[3]) {
|
||||||
memcpy(vector, position, sizeof(position)); // vector[] = position[]
|
memcpy(vector, position, sizeof(position)); // vector[] = position[]
|
||||||
}
|
}
|
||||||
|
10
stepper.h
10
stepper.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
stepper.h - stepper motor driver: executes motion plans using stepper motors
|
stepper.h - stepper motor driver: executes motion plans of planner.c using the stepper motors
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
@ -27,10 +27,6 @@
|
|||||||
// Initialize and start the stepper motor subsystem
|
// Initialize and start the stepper motor subsystem
|
||||||
void st_init();
|
void st_init();
|
||||||
|
|
||||||
// Add a new linear movement to the buffer. steps_x, _y and _z is the signed, relative motion in
|
|
||||||
// steps. Microseconds specify how many microseconds the move should take to perform.
|
|
||||||
void st_buffer_line(double x, double y, double z, double feed_rate, int invert_feed_rate);
|
|
||||||
|
|
||||||
// Copy the current absolute position in steps into the provided vector
|
// Copy the current absolute position in steps into the provided vector
|
||||||
void st_get_position_steps(int32_t (*vector)[3]);
|
void st_get_position_steps(int32_t (*vector)[3]);
|
||||||
|
|
||||||
@ -40,4 +36,8 @@ void st_synchronize();
|
|||||||
// Execute the homing cycle
|
// Execute the homing cycle
|
||||||
void st_go_home();
|
void st_go_home();
|
||||||
|
|
||||||
|
// The stepper subsystem goes to sleep when it runs out of things to execute. Call this
|
||||||
|
// to notify the subsystem that it is time to go to work.
|
||||||
|
void st_wake_up();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user