Minor bug fixes: Homing travel calculations. Cycle resuming after spindle and dwell commands.
- Homing travel calculations fixed. It was computing the min travel rather than max. - Auto-start disable and pausing after spindle or dwell commands. Related to plan_synchronize() function call. Now fixed, but still need to work on the system state. - Pushed a fix to make this branch more Arduino IDE compatible. Removed extern call in nuts_bolts.c - Updated the stepper configuration option of enabling or disabling the new Adaptive Multi-Axis Step Smoothing Algorithm. Now works either way. - Updated some copyright info.
This commit is contained in:
parent
47cd40c8dc
commit
f10bad43b2
4
config.h
4
config.h
@ -2,7 +2,7 @@
|
|||||||
config.h - compile time configuration
|
config.h - compile time configuration
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
@ -88,7 +88,7 @@
|
|||||||
// set this only as high as needed. Approximate successful values can widely range from 50 to 200 or more.
|
// set this only as high as needed. Approximate successful values can widely range from 50 to 200 or more.
|
||||||
#define ACCELERATION_TICKS_PER_SECOND 100
|
#define ACCELERATION_TICKS_PER_SECOND 100
|
||||||
|
|
||||||
#define ACTIVE_MULTI_AXIS_STEP_SMOOTHING
|
#define ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
#define ENABLE_SOFTWARE_DEBOUNCE
|
#define ENABLE_SOFTWARE_DEBOUNCE
|
||||||
|
|
||||||
// Minimum planner junction speed. Sets the default minimum junction speed the planner plans to at
|
// Minimum planner junction speed. Sets the default minimum junction speed the planner plans to at
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
coolant_control.c - coolant control methods
|
coolant_control.c - coolant control methods
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2012 Sungeun K. Jeon
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
coolant_control.h - spindle control methods
|
coolant_control.h - spindle control methods
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2012 Sungeun K. Jeon
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
cpu_map.h - CPU and pin mapping configuration file
|
cpu_map.h - CPU and pin mapping configuration file
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2013 Sungeun K. Jeon
|
Copyright (c) 2013-2014 Sungeun K. Jeon
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
defaults.h - defaults settings configuration file
|
defaults.h - defaults settings configuration file
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2012-2013 Sungeun K. Jeon
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
gcode.c
2
gcode.c
@ -2,8 +2,8 @@
|
|||||||
gcode.c - rs274/ngc parser.
|
gcode.c - rs274/ngc parser.
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
gcode.h
2
gcode.h
@ -2,8 +2,8 @@
|
|||||||
gcode.h - rs274/ngc parser.
|
gcode.h - rs274/ngc parser.
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
11
limits.c
11
limits.c
@ -2,8 +2,8 @@
|
|||||||
limits.c - code pertaining to limit-switches and performing the homing cycle
|
limits.c - code pertaining to limit-switches and performing the homing cycle
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2012-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -132,11 +132,12 @@ void limits_go_home(uint8_t cycle_mask, bool approach, float homing_rate)
|
|||||||
else { invert_pin = !approach; }
|
else { invert_pin = !approach; }
|
||||||
|
|
||||||
// Determine travel distance to the furthest homing switch based on user max travel settings.
|
// Determine travel distance to the furthest homing switch based on user max travel settings.
|
||||||
|
// NOTE: settings.max_travel[] is stored as a negative value.
|
||||||
float max_travel = settings.max_travel[X_AXIS];
|
float max_travel = settings.max_travel[X_AXIS];
|
||||||
if (max_travel < settings.max_travel[Y_AXIS]) { max_travel = settings.max_travel[Y_AXIS]; }
|
if (max_travel > settings.max_travel[Y_AXIS]) { max_travel = settings.max_travel[Y_AXIS]; }
|
||||||
if (max_travel < settings.max_travel[Z_AXIS]) { max_travel = settings.max_travel[Z_AXIS]; }
|
if (max_travel > settings.max_travel[Z_AXIS]) { max_travel = settings.max_travel[Z_AXIS]; }
|
||||||
max_travel *= 1.25; // Ensure homing switches engaged by over-estimating max travel.
|
max_travel *= -1.25; // Ensure homing switches engaged by over-estimating max travel.
|
||||||
if (approach) { max_travel = -max_travel; }
|
if (!approach) { max_travel = -max_travel; }
|
||||||
|
|
||||||
// Set target location and rate for active axes.
|
// Set target location and rate for active axes.
|
||||||
float target[N_AXIS];
|
float target[N_AXIS];
|
||||||
|
2
limits.h
2
limits.h
@ -2,8 +2,8 @@
|
|||||||
limits.h - code pertaining to limit-switches and performing the homing cycle
|
limits.h - code pertaining to limit-switches and performing the homing cycle
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2013-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
main.c
2
main.c
@ -2,8 +2,8 @@
|
|||||||
main.c - An embedded CNC Controller with rs274/ngc (g-code) support
|
main.c - An embedded CNC Controller with rs274/ngc (g-code) support
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
motion_control.c - high level interface for issuing motion commands
|
motion_control.c - high level interface for issuing motion commands
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
Copyright (c) 2011 Jens Geisler
|
Copyright (c) 2011 Jens Geisler
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
@ -301,13 +301,7 @@ void mc_homing_cycle()
|
|||||||
// NOTE: This function is called from the main loop and mc_line() only and executes when one of
|
// NOTE: This function is called from the main loop and mc_line() only and executes when one of
|
||||||
// two conditions exist respectively: There are no more blocks sent (i.e. streaming is finished,
|
// two conditions exist respectively: There are no more blocks sent (i.e. streaming is finished,
|
||||||
// single commands), or the planner buffer is full and ready to go.
|
// single commands), or the planner buffer is full and ready to go.
|
||||||
void mc_auto_cycle_start()
|
void mc_auto_cycle_start() { if (sys.auto_start) { st_cycle_start(); } }
|
||||||
{
|
|
||||||
if (sys.auto_start) {
|
|
||||||
st_cycle_start();
|
|
||||||
if (bit_isfalse(settings.flags,BITFLAG_AUTO_START)) { sys.auto_start = false; } // Reset auto start per settings.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Method to ready the system to reset by setting the runtime reset command and killing any
|
// Method to ready the system to reset by setting the runtime reset command and killing any
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
motion_control.h - high level interface for issuing motion commands
|
motion_control.h - high level interface for issuing motion commands
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
nuts_bolts.c - Shared functions
|
nuts_bolts.c - Shared functions
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -25,7 +25,6 @@
|
|||||||
#include "planner.h"
|
#include "planner.h"
|
||||||
|
|
||||||
#define MAX_INT_DIGITS 8 // Maximum number of digits in int32 (and float)
|
#define MAX_INT_DIGITS 8 // Maximum number of digits in int32 (and float)
|
||||||
extern float __floatunsisf (unsigned long);
|
|
||||||
|
|
||||||
// Extracts a floating point value from a string. The following code is based loosely on
|
// Extracts a floating point value from a string. The following code is based loosely on
|
||||||
// the avr-libc strtod() function by Michael Stumpf and Dmitry Xmelkov and many freely
|
// the avr-libc strtod() function by Michael Stumpf and Dmitry Xmelkov and many freely
|
||||||
@ -79,7 +78,7 @@ int read_float(char *line, uint8_t *char_counter, float *float_ptr)
|
|||||||
|
|
||||||
// Convert integer into floating point.
|
// Convert integer into floating point.
|
||||||
float fval;
|
float fval;
|
||||||
fval = __floatunsisf(intval);
|
fval = (float)intval;
|
||||||
|
|
||||||
// Apply decimal. Should perform no more than two floating point multiplications for the
|
// Apply decimal. Should perform no more than two floating point multiplications for the
|
||||||
// expected range of E0 to E-4.
|
// expected range of E0 to E-4.
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
nuts_bolts.h - Header file for shared definitions, variables, and functions
|
nuts_bolts.h - Header file for shared definitions, variables, and functions
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
planner.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) 2011-2013 Sungeun K. Jeon
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011 Jens Geisler
|
Copyright (c) 2011 Jens Geisler
|
||||||
|
|
||||||
@ -255,7 +255,8 @@ uint8_t plan_check_full_buffer()
|
|||||||
// during a synchronize call, if it should happen. Also, waits for clean cycle end.
|
// during a synchronize call, if it should happen. Also, waits for clean cycle end.
|
||||||
void plan_synchronize()
|
void plan_synchronize()
|
||||||
{
|
{
|
||||||
sys.auto_start = true; // Set auto start to resume cycle after synchronize and caller completes.
|
// Check and set auto start to resume cycle after synchronize and caller completes.
|
||||||
|
if (sys.state == STATE_CYCLE) { sys.auto_start = true; }
|
||||||
while (plan_get_current_block() || (sys.state == STATE_CYCLE)) {
|
while (plan_get_current_block() || (sys.state == STATE_CYCLE)) {
|
||||||
protocol_execute_runtime(); // Check and execute run-time commands
|
protocol_execute_runtime(); // Check and execute run-time commands
|
||||||
if (sys.abort) { return; } // Check for system abort
|
if (sys.abort) { return; } // Check for system abort
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
planner.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) 2011-2013 Sungeun K. Jeon
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
|
2
print.c
2
print.c
@ -2,8 +2,8 @@
|
|||||||
print.c - Functions for formatting output strings
|
print.c - Functions for formatting output strings
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
print.h
2
print.h
@ -2,8 +2,8 @@
|
|||||||
print.h - Functions for formatting output strings
|
print.h - Functions for formatting output strings
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
protocol.c - the serial protocol master control unit
|
protocol.c - the serial protocol master control unit
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
protocol.h - the serial protocol master control unit
|
protocol.h - the serial protocol master control unit
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
report.c
2
report.c
@ -2,7 +2,7 @@
|
|||||||
report.c - reporting and messaging methods
|
report.c - reporting and messaging methods
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2012-2013 Sungeun K. Jeon
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
report.h
2
report.h
@ -2,7 +2,7 @@
|
|||||||
report.h - reporting and messaging methods
|
report.h - reporting and messaging methods
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2012-2013 Sungeun K. Jeon
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
serial.c
2
serial.c
@ -2,8 +2,8 @@
|
|||||||
serial.c - Low level functions for sending and recieving bytes via the serial port
|
serial.c - Low level functions for sending and recieving bytes via the serial port
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
2
serial.h
2
serial.h
@ -2,8 +2,8 @@
|
|||||||
serial.c - Low level functions for sending and recieving bytes via the serial port
|
serial.c - Low level functions for sending and recieving bytes via the serial port
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
settings.c - eeprom configuration handling
|
settings.c - eeprom configuration handling
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
settings.h - eeprom configuration handling
|
settings.h - eeprom configuration handling
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
spindle_control.c - spindle control methods
|
spindle_control.c - spindle control methods
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
spindle_control.h - spindle control methods
|
spindle_control.h - spindle control methods
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
|
Copyright (c) 2012-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2012 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
93
stepper.c
93
stepper.c
@ -2,7 +2,7 @@
|
|||||||
stepper.c - stepper motor driver: executes motion plans using stepper motors
|
stepper.c - stepper motor driver: executes motion plans using stepper motors
|
||||||
Part of Grbl
|
Part of Grbl
|
||||||
|
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
Copyright (c) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
@ -63,7 +63,11 @@ typedef struct {
|
|||||||
uint16_t n_step; // Number of step events to be executed for this segment
|
uint16_t n_step; // Number of step events to be executed for this segment
|
||||||
uint8_t st_block_index; // Stepper block data index. Uses this information to execute this segment.
|
uint8_t st_block_index; // Stepper block data index. Uses this information to execute this segment.
|
||||||
uint16_t cycles_per_tick; // Step distance traveled per ISR tick, aka step rate.
|
uint16_t cycles_per_tick; // Step distance traveled per ISR tick, aka step rate.
|
||||||
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
uint8_t amass_level;
|
uint8_t amass_level;
|
||||||
|
#else
|
||||||
|
uint8_t prescaler;
|
||||||
|
#endif
|
||||||
} segment_t;
|
} segment_t;
|
||||||
static segment_t segment_buffer[SEGMENT_BUFFER_SIZE];
|
static segment_t segment_buffer[SEGMENT_BUFFER_SIZE];
|
||||||
|
|
||||||
@ -83,7 +87,9 @@ typedef struct {
|
|||||||
uint8_t step_pulse_time; // Step pulse reset time after step rise
|
uint8_t step_pulse_time; // Step pulse reset time after step rise
|
||||||
uint8_t step_outbits; // The next stepping-bits to be output
|
uint8_t step_outbits; // The next stepping-bits to be output
|
||||||
uint8_t dir_outbits;
|
uint8_t dir_outbits;
|
||||||
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
uint32_t steps[N_AXIS];
|
uint32_t steps[N_AXIS];
|
||||||
|
#endif
|
||||||
|
|
||||||
uint16_t step_count; // Steps remaining in line segment motion
|
uint16_t step_count; // Steps remaining in line segment motion
|
||||||
uint8_t exec_block_index; // Tracks the current st_block index. Change indicates new block.
|
uint8_t exec_block_index; // Tracks the current st_block index. Change indicates new block.
|
||||||
@ -278,7 +284,9 @@ ISR(TIMER1_COMPA_vect)
|
|||||||
// Initialize new step segment and load number of steps to execute
|
// Initialize new step segment and load number of steps to execute
|
||||||
st.exec_segment = &segment_buffer[segment_buffer_tail];
|
st.exec_segment = &segment_buffer[segment_buffer_tail];
|
||||||
// Initialize step segment timing per step and load number of steps to execute.
|
// Initialize step segment timing per step and load number of steps to execute.
|
||||||
// TCCR1B = (TCCR1B & ~(0x07<<CS10)) | (st.exec_segment->prescaler<<CS10);
|
#ifndef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
|
TCCR1B = (TCCR1B & ~(0x07<<CS10)) | (st.exec_segment->prescaler<<CS10);
|
||||||
|
#endif
|
||||||
OCR1A = st.exec_segment->cycles_per_tick;
|
OCR1A = st.exec_segment->cycles_per_tick;
|
||||||
st.step_count = st.exec_segment->n_step; // NOTE: Can sometimes be zero when moving slow.
|
st.step_count = st.exec_segment->n_step; // NOTE: Can sometimes be zero when moving slow.
|
||||||
// If the new segment starts a new planner block, initialize stepper variables and counters.
|
// If the new segment starts a new planner block, initialize stepper variables and counters.
|
||||||
@ -292,9 +300,11 @@ ISR(TIMER1_COMPA_vect)
|
|||||||
st.counter_y = st.counter_x;
|
st.counter_y = st.counter_x;
|
||||||
st.counter_z = st.counter_x;
|
st.counter_z = st.counter_x;
|
||||||
}
|
}
|
||||||
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
st.steps[X_AXIS] = st.exec_block->steps[X_AXIS] >> st.exec_segment->amass_level;
|
st.steps[X_AXIS] = st.exec_block->steps[X_AXIS] >> st.exec_segment->amass_level;
|
||||||
st.steps[Y_AXIS] = st.exec_block->steps[Y_AXIS] >> st.exec_segment->amass_level;
|
st.steps[Y_AXIS] = st.exec_block->steps[Y_AXIS] >> st.exec_segment->amass_level;
|
||||||
st.steps[Z_AXIS] = st.exec_block->steps[Z_AXIS] >> st.exec_segment->amass_level;
|
st.steps[Z_AXIS] = st.exec_block->steps[Z_AXIS] >> st.exec_segment->amass_level;
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
// Segment buffer empty. Shutdown.
|
// Segment buffer empty. Shutdown.
|
||||||
st_go_idle();
|
st_go_idle();
|
||||||
@ -307,21 +317,33 @@ ISR(TIMER1_COMPA_vect)
|
|||||||
st.step_outbits = 0;
|
st.step_outbits = 0;
|
||||||
|
|
||||||
// Execute step displacement profile by Bresenham line algorithm
|
// Execute step displacement profile by Bresenham line algorithm
|
||||||
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
st.counter_x += st.steps[X_AXIS];
|
st.counter_x += st.steps[X_AXIS];
|
||||||
|
#else
|
||||||
|
st.counter_x += st.exec_block->steps[X_AXIS];
|
||||||
|
#endif
|
||||||
if (st.counter_x > st.exec_block->step_event_count) {
|
if (st.counter_x > st.exec_block->step_event_count) {
|
||||||
st.step_outbits |= (1<<X_STEP_BIT);
|
st.step_outbits |= (1<<X_STEP_BIT);
|
||||||
st.counter_x -= st.exec_block->step_event_count;
|
st.counter_x -= st.exec_block->step_event_count;
|
||||||
if (st.exec_block->direction_bits & (1<<X_DIRECTION_BIT)) { sys.position[X_AXIS]--; }
|
if (st.exec_block->direction_bits & (1<<X_DIRECTION_BIT)) { sys.position[X_AXIS]--; }
|
||||||
else { sys.position[X_AXIS]++; }
|
else { sys.position[X_AXIS]++; }
|
||||||
}
|
}
|
||||||
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
st.counter_y += st.steps[Y_AXIS];
|
st.counter_y += st.steps[Y_AXIS];
|
||||||
|
#else
|
||||||
|
st.counter_y += st.exec_block->steps[Y_AXIS];
|
||||||
|
#endif
|
||||||
if (st.counter_y > st.exec_block->step_event_count) {
|
if (st.counter_y > st.exec_block->step_event_count) {
|
||||||
st.step_outbits |= (1<<Y_STEP_BIT);
|
st.step_outbits |= (1<<Y_STEP_BIT);
|
||||||
st.counter_y -= st.exec_block->step_event_count;
|
st.counter_y -= st.exec_block->step_event_count;
|
||||||
if (st.exec_block->direction_bits & (1<<Y_DIRECTION_BIT)) { sys.position[Y_AXIS]--; }
|
if (st.exec_block->direction_bits & (1<<Y_DIRECTION_BIT)) { sys.position[Y_AXIS]--; }
|
||||||
else { sys.position[Y_AXIS]++; }
|
else { sys.position[Y_AXIS]++; }
|
||||||
}
|
}
|
||||||
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
st.counter_z += st.steps[Z_AXIS];
|
st.counter_z += st.steps[Z_AXIS];
|
||||||
|
#else
|
||||||
|
st.counter_z += st.exec_block->steps[Z_AXIS];
|
||||||
|
#endif
|
||||||
if (st.counter_z > st.exec_block->step_event_count) {
|
if (st.counter_z > st.exec_block->step_event_count) {
|
||||||
st.step_outbits |= (1<<Z_STEP_BIT);
|
st.step_outbits |= (1<<Z_STEP_BIT);
|
||||||
st.counter_z -= st.exec_block->step_event_count;
|
st.counter_z -= st.exec_block->step_event_count;
|
||||||
@ -433,6 +455,7 @@ void st_cycle_start()
|
|||||||
sys.state = STATE_CYCLE;
|
sys.state = STATE_CYCLE;
|
||||||
st_prep_buffer(); // Initialize step segment buffer before beginning cycle.
|
st_prep_buffer(); // Initialize step segment buffer before beginning cycle.
|
||||||
st_wake_up();
|
st_wake_up();
|
||||||
|
if (bit_isfalse(settings.flags,BITFLAG_AUTO_START)) { sys.auto_start = false; } // Reset auto start per settings.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,8 +523,8 @@ void st_update_plan_block_parameters()
|
|||||||
*/
|
*/
|
||||||
void st_prep_buffer()
|
void st_prep_buffer()
|
||||||
{
|
{
|
||||||
if (sys.state == STATE_QUEUED) { return; } // Block until a motion state is issued
|
|
||||||
while (segment_buffer_tail != segment_next_head) { // Check if we need to fill the buffer.
|
while (segment_buffer_tail != segment_next_head) { // Check if we need to fill the buffer.
|
||||||
|
if (sys.state == STATE_QUEUED) { return; } // Block until a motion state is issued
|
||||||
|
|
||||||
// Determine if we need to load a new planner block or if the block remainder is replanned.
|
// Determine if we need to load a new planner block or if the block remainder is replanned.
|
||||||
if (pl_block == NULL) {
|
if (pl_block == NULL) {
|
||||||
@ -520,16 +543,16 @@ void st_prep_buffer()
|
|||||||
// when the segment buffer completes the planner block, it may be discarded immediately.
|
// when the segment buffer completes the planner block, it may be discarded immediately.
|
||||||
st_prep_block = &st_block_buffer[prep.st_block_index];
|
st_prep_block = &st_block_buffer[prep.st_block_index];
|
||||||
st_prep_block->direction_bits = pl_block->direction_bits;
|
st_prep_block->direction_bits = pl_block->direction_bits;
|
||||||
#ifdef ACTIVE_MULTI_AXIS_STEP_SMOOTHING
|
#ifndef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
st_prep_block->steps[X_AXIS] = pl_block->steps[X_AXIS] << MAX_AMASS_LEVEL;
|
|
||||||
st_prep_block->steps[Y_AXIS] = pl_block->steps[Y_AXIS] << MAX_AMASS_LEVEL;
|
|
||||||
st_prep_block->steps[Z_AXIS] = pl_block->steps[Z_AXIS] << MAX_AMASS_LEVEL;
|
|
||||||
st_prep_block->step_event_count = pl_block->step_event_count << MAX_AMASS_LEVEL;
|
|
||||||
#else
|
|
||||||
st_prep_block->steps[X_AXIS] = pl_block->steps[X_AXIS];
|
st_prep_block->steps[X_AXIS] = pl_block->steps[X_AXIS];
|
||||||
st_prep_block->steps[Y_AXIS] = pl_block->steps[Y_AXIS];
|
st_prep_block->steps[Y_AXIS] = pl_block->steps[Y_AXIS];
|
||||||
st_prep_block->steps[Z_AXIS] = pl_block->steps[Z_AXIS];
|
st_prep_block->steps[Z_AXIS] = pl_block->steps[Z_AXIS];
|
||||||
st_prep_block->step_event_count = pl_block->step_event_count;
|
st_prep_block->step_event_count = pl_block->step_event_count;
|
||||||
|
#else
|
||||||
|
st_prep_block->steps[X_AXIS] = pl_block->steps[X_AXIS] << MAX_AMASS_LEVEL;
|
||||||
|
st_prep_block->steps[Y_AXIS] = pl_block->steps[Y_AXIS] << MAX_AMASS_LEVEL;
|
||||||
|
st_prep_block->steps[Z_AXIS] = pl_block->steps[Z_AXIS] << MAX_AMASS_LEVEL;
|
||||||
|
st_prep_block->step_event_count = pl_block->step_event_count << MAX_AMASS_LEVEL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Initialize segment buffer data for generating the segments.
|
// Initialize segment buffer data for generating the segments.
|
||||||
@ -701,7 +724,7 @@ void st_prep_buffer()
|
|||||||
float inv_rate = dt/(prep.steps_remaining-steps_remaining);
|
float inv_rate = dt/(prep.steps_remaining-steps_remaining);
|
||||||
cycles = ceil( (TICKS_PER_MICROSECOND*1000000*60)*inv_rate ); // (cycles/step)
|
cycles = ceil( (TICKS_PER_MICROSECOND*1000000*60)*inv_rate ); // (cycles/step)
|
||||||
|
|
||||||
#ifdef ACTIVE_MULTI_AXIS_STEP_SMOOTHING
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
// Compute step timing and multi-axis smoothing level.
|
// Compute step timing and multi-axis smoothing level.
|
||||||
// NOTE: Only one prescalar is required with AMASS enabled.
|
// NOTE: Only one prescalar is required with AMASS enabled.
|
||||||
if (cycles > AMASS_LEVEL1) {
|
if (cycles > AMASS_LEVEL1) {
|
||||||
@ -712,8 +735,24 @@ void st_prep_buffer()
|
|||||||
cycles >>= prep_segment->amass_level;
|
cycles >>= prep_segment->amass_level;
|
||||||
prep_segment->n_step <<= prep_segment->amass_level;
|
prep_segment->n_step <<= prep_segment->amass_level;
|
||||||
} else { prep_segment->amass_level = 0; }
|
} else { prep_segment->amass_level = 0; }
|
||||||
if (cycles < (1UL << 16)) { prep_segment->cycles_per_tick = cycles; }
|
if (cycles < (1UL << 16)) { prep_segment->cycles_per_tick = cycles; } // < 65536 (4.1ms @ 16MHz)
|
||||||
else { prep_segment->cycles_per_tick = 0xffff; } // Just set the slowest speed possible. (4.1ms @ 16MHz)
|
else { prep_segment->cycles_per_tick = 0xffff; } // Just set the slowest speed possible.
|
||||||
|
#else
|
||||||
|
// Compute step timing and timer prescalar for normal step generation.
|
||||||
|
if (cycles < (1UL << 16)) { // < 65536 (4.1ms @ 16MHz)
|
||||||
|
prep_segment->prescaler = 1; // prescaler: 0
|
||||||
|
prep_segment->cycles_per_tick = cycles;
|
||||||
|
} else if (cycles < (1UL << 19)) { // < 524288 (32.8ms@16MHz)
|
||||||
|
prep_segment->prescaler = 2; // prescaler: 8
|
||||||
|
prep_segment->cycles_per_tick = cycles >> 3;
|
||||||
|
} else {
|
||||||
|
prep_segment->prescaler = 3; // prescaler: 64
|
||||||
|
if (cycles < (1UL << 22)) { // < 4194304 (262ms@16MHz)
|
||||||
|
prep_segment->cycles_per_tick = cycles >> 6;
|
||||||
|
} else { // Just set the slowest speed possible.
|
||||||
|
prep_segment->cycles_per_tick = 0xffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Determine end of segment conditions. Setup initial conditions for next segment.
|
// Determine end of segment conditions. Setup initial conditions for next segment.
|
||||||
@ -754,8 +793,6 @@ void st_prep_buffer()
|
|||||||
// int32_t blength = segment_buffer_head - segment_buffer_tail;
|
// int32_t blength = segment_buffer_head - segment_buffer_tail;
|
||||||
// if (blength < 0) { blength += SEGMENT_BUFFER_SIZE; }
|
// if (blength < 0) { blength += SEGMENT_BUFFER_SIZE; }
|
||||||
// printInteger(blength);
|
// printInteger(blength);
|
||||||
|
|
||||||
if (sys.state & (STATE_QUEUED | STATE_HOMING)) { return; } // Force exit or one prepped segment.
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -785,31 +822,3 @@ void st_prep_buffer()
|
|||||||
we know when the plan is feasible in the context of what's already in the code and not
|
we know when the plan is feasible in the context of what's already in the code and not
|
||||||
require too much more code?
|
require too much more code?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// static void st_config_step_timer(uint32_t cycles)
|
|
||||||
// {
|
|
||||||
// if (cycles < (1UL << 16)) { // < 65536 (4.1ms @ 16MHz)
|
|
||||||
// prep_segment->prescaler = 1; // prescaler: 0
|
|
||||||
// prep_segment->cycles_per_tick = cycles;
|
|
||||||
// } else {
|
|
||||||
// prep_segment->prescaler = 2; // prescaler: 8
|
|
||||||
// if (cycles < (1UL << 19)) { // < 524288 (32.8ms@16MHz)
|
|
||||||
// prep_segment->cycles_per_tick = cycles >> 3;
|
|
||||||
//
|
|
||||||
// // } else if (cycles < (1UL << 22)) { // < 4194304 (262ms@16MHz)
|
|
||||||
// // prep_segment->prescaler = 3; // prescaler: 64
|
|
||||||
// // prep_segment->cycles_per_tick = cycles >> 6;
|
|
||||||
// // } else if (cycles < (1UL << 24)) { // < 16777216 (1.05sec@16MHz)
|
|
||||||
// // prep_segment->prescaler = 4; // prescaler: 256
|
|
||||||
// // prep_segment->cycles_per_tick = (cycles >> 8);
|
|
||||||
// // } else {
|
|
||||||
// // prep_segment->prescaler = 5; // prescaler: 1024
|
|
||||||
// // if (cycles < (1UL << 26)) { // < 67108864 (4.19sec@16MHz)
|
|
||||||
// // prep_segment->cycles_per_tick = (cycles >> 10);
|
|
||||||
//
|
|
||||||
// } else { // Just set the slowest speed possible.
|
|
||||||
// prep_segment->cycles_per_tick = 0xffff;
|
|
||||||
// }
|
|
||||||
// printString("X");
|
|
||||||
// }
|
|
||||||
// }
|
|
@ -2,8 +2,8 @@
|
|||||||
stepper.h - stepper motor driver: executes motion plans of planner.c using the 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) 2011-2014 Sungeun K. Jeon
|
||||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||||
Copyright (c) 2011-2013 Sungeun K. Jeon
|
|
||||||
|
|
||||||
Grbl is free software: you can redistribute it and/or modify
|
Grbl is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
Loading…
Reference in New Issue
Block a user