From 664854b9dfc50da847b73cd96e64450b4bfee518 Mon Sep 17 00:00:00 2001 From: Sonny Jeon Date: Sun, 17 May 2015 13:25:36 -0600 Subject: [PATCH 1/7] Critical M0/2/30 fix. Homing updates. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Critical fix for M0 program pause. Due to its recent change, it would cause Grbl to suspend but wouldn’t notify the user of why Grbl was not doing anything. The state would show IDLE and a cycle start would resume it. Grbl now enters a HOLD state to better indicate the state change. - Critical fix for M2 and M30 program end. As with M0, the state previously would show IDLE while suspended. Grbl now does not suspend upon program end and leaves job control to the GUI. Grbl simply reports a `[Pgm End]` as a feedback message and resets certain g-code modes. - M2/30 g-code reseting fix. Previously Grbl would soft-reset after an M2/30, but this was not complaint to the (linuxcnc) g-code standard. It simply resets [G1,G17,G90,G94,G40,G54,M5,M9,M48] and keeps all other modes the same. - M0/M2/M30 check-mode fix. It now does not suspend the machine during check-mode. - Minor bug fix related to commands similar to G90.1, but not G90.1, not reporting an unsupported command. - Homing cycle refactoring. To help reduce the chance of users misunderstanding their limit switch wiring, Grbl only moves a short distance for the locate cycles only. In addition, the homing cycle pulls-off the limit switch by the pull-off distance to re-engage and locate home. This should improve its accuracy. - HOMING_FORCE_ORIGIN now sets the origin to the pull-off location, rather than where the limit switch was triggered. - Updated default junction deviation to 0.01mm. Recent tests showed that this improves Grbl’s cornering behavior a bit. - Added the ShapeOko3 defaults. - Added new feedback message `[Pgm End]` for M2/30 notification. - Limit pin reporting is now a $10 status report option. Requested by OEMs to help simplify support troubleshooting. --- doc/log/commit_log_v0.9i.txt | 26 ++++++ grbl/config.h | 2 +- grbl/defaults.h | 53 ++++++++--- grbl/gcode.c | 45 +++++++--- grbl/grbl.h | 2 +- grbl/limits.c | 166 ++++++++++++++++------------------- grbl/report.c | 29 +++--- grbl/report.h | 1 + grbl/settings.h | 1 + grbl/stepper.c | 5 +- grbl/system.h | 2 +- 11 files changed, 201 insertions(+), 131 deletions(-) diff --git a/doc/log/commit_log_v0.9i.txt b/doc/log/commit_log_v0.9i.txt index 49aba2c..db7df62 100644 --- a/doc/log/commit_log_v0.9i.txt +++ b/doc/log/commit_log_v0.9i.txt @@ -1,3 +1,29 @@ +---------------- +Date: 2015-03-29 +Author: Sonny Jeon +Subject: Fix for limit pin reporting compile-option + +- The limit pin reporting wasn’t working correctly due to calling the +wrong similarly-named function. Verified to be working now. + + +---------------- +Date: 2015-03-29 +Author: Sonny Jeon +Subject: Commit history, logo license, full-arc fix. + +- Commit history added to repo, as an easier way for people to see view +the changes over time. + +- Grbl logo copyright license added. All rights reserved with regards +to the Grbl logo. + +- G2/3 full circles would sometime not execute. The problem was due to +numerical round-off of a trig calculation. Added a machine epsilon +define to help detect and correct for this problem. Tested and should +not effect general operation of arcs. + + ---------------- Date: 2015-03-27 Author: Sungeun Jeon diff --git a/grbl/config.h b/grbl/config.h index 878b341..3375e5c 100644 --- a/grbl/config.h +++ b/grbl/config.h @@ -79,7 +79,7 @@ // Number of homing cycles performed after when the machine initially jogs to limit switches. // This help in preventing overshoot and should improve repeatability. This value should be one or // greater. -#define N_HOMING_LOCATE_CYCLE 2 // Integer (1-128) +#define N_HOMING_LOCATE_CYCLE 1 // Integer (1-128) // After homing, Grbl will set by default the entire machine space into negative space, as is typical // for professional CNC machines, regardless of where the limit switches are located. Uncomment this diff --git a/grbl/defaults.h b/grbl/defaults.h index f21b31e..41bcf0f 100644 --- a/grbl/defaults.h +++ b/grbl/defaults.h @@ -49,7 +49,6 @@ #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm #define DEFAULT_ARC_TOLERANCE 0.002 // mm #define DEFAULT_REPORT_INCHES 0 // false - #define DEFAULT_AUTO_START 1 // true #define DEFAULT_INVERT_ST_ENABLE 0 // false #define DEFAULT_INVERT_LIMIT_PINS 0 // false #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false @@ -87,10 +86,9 @@ #define DEFAULT_DIRECTION_INVERT_MASK ((1< diff --git a/grbl/limits.c b/grbl/limits.c index 83d93d9..4df6f1e 100644 --- a/grbl/limits.c +++ b/grbl/limits.c @@ -22,9 +22,13 @@ #include "grbl.h" -// Homing axis search distance multiplier. Computed by this value times the axis max travel. -#define HOMING_AXIS_SEARCH_SCALAR 1.5 // Must be > 1 to ensure limit switch will be engaged. - +// Homing axis search distance multiplier. Computed by this value times the cycle travel. +#ifndef HOMING_AXIS_SEARCH_SCALAR + #define HOMING_AXIS_SEARCH_SCALAR 1.5 // Must be > 1 to ensure limit switch will be engaged. +#endif +#ifndef HOMING_AXIS_LOCATE_SCALAR + #define HOMING_AXIS_LOCATE_SCALAR 5.0 // Must be > 1 to ensure limit switch is cleared. +#endif void limits_init() { @@ -126,16 +130,12 @@ void limits_go_home(uint8_t cycle_mask) { if (sys.abort) { return; } // Block if system reset has been issued. - // Initialize homing in search mode to quickly engage the specified cycle_mask limit switches. - bool approach = true; - float homing_rate = settings.homing_seek_rate; - uint8_t invert_pin, idx; + // Initialize uint8_t n_cycle = (2*N_HOMING_LOCATE_CYCLE+1); - float target[N_AXIS]; - uint8_t limit_pin[N_AXIS], step_pin[N_AXIS]; - + float target[N_AXIS]; float max_travel = 0.0; + uint8_t idx; for (idx=0; idx 0); @@ -242,13 +260,16 @@ void limits_go_home(uint8_t cycle_mask) for (idx=0; idx 0.0) { - for (idx=0; idxstep_event_count >> 1); - st.counter_y = st.counter_x; - st.counter_z = st.counter_x; + st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1); } - st.dir_outbits = st.exec_block->direction_bits ^ dir_port_invert_mask; #ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING diff --git a/grbl/system.h b/grbl/system.h index a74f029..94f2143 100644 --- a/grbl/system.h +++ b/grbl/system.h @@ -71,7 +71,7 @@ typedef struct { uint8_t abort; // System abort flag. Forces exit back to main loop for reset. uint8_t state; // Tracks the current state of Grbl. - uint8_t suspend; // System suspend flag. Allows only realtime commands. Used primarily for holds. + uint8_t suspend; // System suspend bitflag variable that manages holds, cancels, and safety door. volatile uint8_t rt_exec_state; // Global realtime executor bitflag variable for state management. See EXEC bitmasks. volatile uint8_t rt_exec_alarm; // Global realtime executor bitflag variable for setting various alarms. From 25cdeb830b5e52d90ae9e34aa4696be58338c193 Mon Sep 17 00:00:00 2001 From: ashelly Date: Fri, 22 May 2015 10:24:48 -0400 Subject: [PATCH 2/7] Splitting Cpu map into separate files. Makes comparison, addition of new ones easier --- grbl/cpu_map.h | 228 +------------------------------------- grbl/cpu_map_atmega2560.h | 114 +++++++++++++++++++ grbl/cpu_map_atmega328p.h | 122 ++++++++++++++++++++ 3 files changed, 241 insertions(+), 223 deletions(-) create mode 100644 grbl/cpu_map_atmega2560.h create mode 100644 grbl/cpu_map_atmega328p.h diff --git a/grbl/cpu_map.h b/grbl/cpu_map.h index 872e0bf..8623fdc 100644 --- a/grbl/cpu_map.h +++ b/grbl/cpu_map.h @@ -33,121 +33,7 @@ #ifdef CPU_MAP_ATMEGA328P // (Arduino Uno) Officially supported by Grbl. - // Define serial port pins and interrupt vectors. - #define SERIAL_RX USART_RX_vect - #define SERIAL_UDRE USART_UDRE_vect - - // Define step pulse output pins. NOTE: All step bit pins must be on the same port. - #define STEP_DDR DDRD - #define STEP_PORT PORTD - #define X_STEP_BIT 2 // Uno Digital Pin 2 - #define Y_STEP_BIT 3 // Uno Digital Pin 3 - #define Z_STEP_BIT 4 // Uno Digital Pin 4 - #define STEP_MASK ((1< Date: Fri, 22 May 2015 10:48:25 -0400 Subject: [PATCH 3/7] Fixing up comment blocks in headers --- grbl/cpu_map.h | 5 +++-- grbl/cpu_map_atmega2560.h | 22 ++++++++++++++++++++++ grbl/cpu_map_atmega328p.h | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/grbl/cpu_map.h b/grbl/cpu_map.h index 8623fdc..1781795 100644 --- a/grbl/cpu_map.h +++ b/grbl/cpu_map.h @@ -18,8 +18,9 @@ along with Grbl. If not, see . */ -/* The cpu_map.h file serves as a central pin mapping settings file for different processor - types, i.e. AVR 328p or AVR Mega 2560. Grbl officially supports the Arduino Uno, but the +/* The cpu_map.h file serves as a central pin mapping selection file for different processor + types, i.e. AVR 328p or AVR Mega 2560. Each processor has its own pin mapping file. + (i.e. cpu_map_atmega328p.h) Grbl officially supports the Arduino Uno, but the other supplied pin mappings are supplied by users, so your results may vary. */ // NOTE: This is still a work in progress. We are still centralizing the configurations to diff --git a/grbl/cpu_map_atmega2560.h b/grbl/cpu_map_atmega2560.h index 1c1ef39..b8a0aa2 100644 --- a/grbl/cpu_map_atmega2560.h +++ b/grbl/cpu_map_atmega2560.h @@ -1,3 +1,25 @@ +/* + cpu_map_atmega2560.h - CPU and pin mapping configuration file + Part of Grbl + + Copyright (c) 2012-2015 Sungeun K. Jeon + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +/* This cpu_map file serves as a central pin mapping settings file for AVR Mega 2560 */ + #ifdef GRBL_PLATFORM #error "cpu_map already defined: GRBL_PLATFORM=" GRBL_PLATFORM #endif diff --git a/grbl/cpu_map_atmega328p.h b/grbl/cpu_map_atmega328p.h index 5d38011..8bb071d 100644 --- a/grbl/cpu_map_atmega328p.h +++ b/grbl/cpu_map_atmega328p.h @@ -1,3 +1,27 @@ +/* + cpu_map_atmega328p.h - CPU and pin mapping configuration file + Part of Grbl + + Copyright (c) 2012-2015 Sungeun K. Jeon + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +/* This cpu_map file serves as a central pin mapping settings file for AVR 328p + used on the Arduino Uno */ + + #ifdef GRBL_PLATFORM #error "cpu_map already defined: GRBL_PLATFORM=" GRBL_PLATFORM #endif From b58e8455c94649ccc58f35093f167b9324a2d238 Mon Sep 17 00:00:00 2001 From: ashelly Date: Fri, 22 May 2015 10:26:46 -0400 Subject: [PATCH 4/7] Moving defaults to individual files in subdirectory --- grbl/defaults.h | 288 ++------------------- grbl/defaults/defaults_generic.h | 63 +++++ grbl/defaults/defaults_oxcnc.h | 64 +++++ grbl/defaults/defaults_shapeoko.h | 71 +++++ grbl/defaults/defaults_shapeoko2.h | 70 +++++ grbl/defaults/defaults_shapeoko3.h | 68 +++++ grbl/defaults/defaults_sherline.h | 67 +++++ grbl/defaults/defaults_simulator.h | 64 +++++ grbl/defaults/defaults_zen_toolworks_7x7.h | 69 +++++ 9 files changed, 551 insertions(+), 273 deletions(-) create mode 100644 grbl/defaults/defaults_generic.h create mode 100644 grbl/defaults/defaults_oxcnc.h create mode 100644 grbl/defaults/defaults_shapeoko.h create mode 100644 grbl/defaults/defaults_shapeoko2.h create mode 100644 grbl/defaults/defaults_shapeoko3.h create mode 100644 grbl/defaults/defaults_sherline.h create mode 100644 grbl/defaults/defaults_simulator.h create mode 100644 grbl/defaults/defaults_zen_toolworks_7x7.h diff --git a/grbl/defaults.h b/grbl/defaults.h index 41bcf0f..e66b170 100644 --- a/grbl/defaults.h +++ b/grbl/defaults.h @@ -18,318 +18,60 @@ along with Grbl. If not, see . */ -/* The defaults.h file serves as a central default settings file for different machine - types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings - here are supplied by users, so your results may vary. However, this should give you - a good starting point as you get to know your machine and tweak the settings for your - our nefarious needs. */ +/* The defaults.h file serves as a central default settings selector for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + files listed here are supplied by users, so your results may vary. However, this should + give you a good starting point as you get to know your machine and tweak the settings for + your nefarious needs. + Ensure one and only one of these DEFAULTS_XXX values is defined in config.h */ #ifndef defaults_h -#define defaults_h +// Don't #define defaults_h here, let the selected file do it. Prevents incuding more than one. #ifdef DEFAULTS_GENERIC // Grbl generic default settings. Should work across different machines. - #define DEFAULT_X_STEPS_PER_MM 250.0 - #define DEFAULT_Y_STEPS_PER_MM 250.0 - #define DEFAULT_Z_STEPS_PER_MM 250.0 - #define DEFAULT_X_MAX_RATE 500.0 // mm/min - #define DEFAULT_Y_MAX_RATE 500.0 // mm/min - #define DEFAULT_Z_MAX_RATE 500.0 // mm/min - #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 - #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 - #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 - #define DEFAULT_X_MAX_TRAVEL 200.0 // mm - #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm - #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm - #define DEFAULT_STEP_PULSE_MICROSECONDS 10 - #define DEFAULT_STEPPING_INVERT_MASK 0 - #define DEFAULT_DIRECTION_INVERT_MASK 0 - #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled) - #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION)) - #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm - #define DEFAULT_ARC_TOLERANCE 0.002 // mm - #define DEFAULT_REPORT_INCHES 0 // false - #define DEFAULT_INVERT_ST_ENABLE 0 // false - #define DEFAULT_INVERT_LIMIT_PINS 0 // false - #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false - #define DEFAULT_HARD_LIMIT_ENABLE 0 // false - #define DEFAULT_HOMING_ENABLE 0 // false - #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir - #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min - #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min - #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k) - #define DEFAULT_HOMING_PULLOFF 1.0 // mm + #include "defaults/defaults_generic.h" #endif - - #ifdef DEFAULTS_SHERLINE_5400 // Description: Sherline 5400 mill with three NEMA 23 Keling KL23H256-21-8B 185 oz-in stepper motors, // driven by three Pololu A4988 stepper drivers with a 30V, 6A power supply at 1.5A per winding. - #define MICROSTEPS 2 - #define STEPS_PER_REV 200.0 - #define MM_PER_REV (0.050*MM_PER_INCH) // 0.050 inch/rev leadscrew - #define DEFAULT_X_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) - #define DEFAULT_Y_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) - #define DEFAULT_Z_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) - #define DEFAULT_X_MAX_RATE 635.0 // mm/min (25 ipm) - #define DEFAULT_Y_MAX_RATE 635.0 // mm/min - #define DEFAULT_Z_MAX_RATE 635.0 // mm/min - #define DEFAULT_X_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2 - #define DEFAULT_Y_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2 - #define DEFAULT_Z_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2 - #define DEFAULT_X_MAX_TRAVEL 225.0 // mm - #define DEFAULT_Y_MAX_TRAVEL 125.0 // mm - #define DEFAULT_Z_MAX_TRAVEL 170.0 // mm - #define DEFAULT_STEP_PULSE_MICROSECONDS 10 - #define DEFAULT_STEPPING_INVERT_MASK 0 - #define DEFAULT_DIRECTION_INVERT_MASK ((1<. +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Grbl generic default settings. Should work across different machines. + #define DEFAULT_X_STEPS_PER_MM 250.0 + #define DEFAULT_Y_STEPS_PER_MM 250.0 + #define DEFAULT_Z_STEPS_PER_MM 250.0 + #define DEFAULT_X_MAX_RATE 500.0 // mm/min + #define DEFAULT_Y_MAX_RATE 500.0 // mm/min + #define DEFAULT_Z_MAX_RATE 500.0 // mm/min + #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 200.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK 0 + #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled) + #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION)) + #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm + #define DEFAULT_ARC_TOLERANCE 0.002 // mm + #define DEFAULT_REPORT_INCHES 0 // false + #define DEFAULT_AUTO_START 1 // true + #define DEFAULT_INVERT_ST_ENABLE 0 // false + #define DEFAULT_INVERT_LIMIT_PINS 0 // false + #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false + #define DEFAULT_HARD_LIMIT_ENABLE 0 // false + #define DEFAULT_HOMING_ENABLE 0 // false + #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir + #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min + #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min + #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k) + #define DEFAULT_HOMING_PULLOFF 1.0 // mm + +#endif diff --git a/grbl/defaults/defaults_oxcnc.h b/grbl/defaults/defaults_oxcnc.h new file mode 100644 index 0000000..4e7d56f --- /dev/null +++ b/grbl/defaults/defaults_oxcnc.h @@ -0,0 +1,64 @@ +/* + defaults_oxcnc.h - defaults settings configuration file + Part of Grbl + + Copyright (c) 2012-2015 Sungeun K. Jeon + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Grbl settings for OpenBuilds OX CNC Machine + // http://www.openbuilds.com/builds/openbuilds-ox-cnc-machine.341/ + #define DEFAULT_X_STEPS_PER_MM 26.670 + #define DEFAULT_Y_STEPS_PER_MM 26.670 + #define DEFAULT_Z_STEPS_PER_MM 50 + #define DEFAULT_X_MAX_RATE 500.0 // mm/min + #define DEFAULT_Y_MAX_RATE 500.0 // mm/min + #define DEFAULT_Z_MAX_RATE 500.0 // mm/min + #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 500.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 750.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 80.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK 0 + #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled) + #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION)) + #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm + #define DEFAULT_ARC_TOLERANCE 0.002 // mm + #define DEFAULT_REPORT_INCHES 0 // false + #define DEFAULT_AUTO_START 1 // true + #define DEFAULT_INVERT_ST_ENABLE 0 // false + #define DEFAULT_INVERT_LIMIT_PINS 0 // false + #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false + #define DEFAULT_HARD_LIMIT_ENABLE 0 // false + #define DEFAULT_HOMING_ENABLE 0 // false + #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir + #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min + #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min + #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k) + #define DEFAULT_HOMING_PULLOFF 1.0 // mm + +#endif diff --git a/grbl/defaults/defaults_shapeoko.h b/grbl/defaults/defaults_shapeoko.h new file mode 100644 index 0000000..aaa9834 --- /dev/null +++ b/grbl/defaults/defaults_shapeoko.h @@ -0,0 +1,71 @@ +/* + defaults_shapeoko.h - defaults settings configuration file + Part of Grbl + + Copyright (c) 2012-2015 Sungeun K. Jeon + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + + // Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos + // grblShield with a 24V, 4.2A power supply. + #define MICROSTEPS_XY 8 + #define STEP_REVS_XY 400 + #define MM_PER_REV_XY (0.08*18*MM_PER_INCH) // 0.08 in belt pitch, 18 pulley teeth + #define MICROSTEPS_Z 2 + #define STEP_REVS_Z 400 + #define MM_PER_REV_Z 1.250 // 1.25 mm/rev leadscrew + #define DEFAULT_X_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY) + #define DEFAULT_Y_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY) + #define DEFAULT_Z_STEPS_PER_MM (MICROSTEPS_Z*STEP_REVS_Z/MM_PER_REV_Z) + #define DEFAULT_X_MAX_RATE 1000.0 // mm/min + #define DEFAULT_Y_MAX_RATE 1000.0 // mm/min + #define DEFAULT_Z_MAX_RATE 1000.0 // mm/min + #define DEFAULT_X_ACCELERATION (15.0*60*60) // 15*60*60 mm/min^2 = 15 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (15.0*60*60) // 15*60*60 mm/min^2 = 15 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (15.0*60*60) // 15*60*60 mm/min^2 = 15 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 200.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK ((1<. +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos + // grblShield at 28V. + #define MICROSTEPS_XY 8 + #define STEP_REVS_XY 200 + #define MM_PER_REV_XY (2.0*20) // 2mm belt pitch, 20 pulley teeth + #define MICROSTEPS_Z 2 + #define STEP_REVS_Z 200 + #define MM_PER_REV_Z 1.250 // 1.25 mm/rev leadscrew + #define DEFAULT_X_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY) + #define DEFAULT_Y_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY) + #define DEFAULT_Z_STEPS_PER_MM (MICROSTEPS_Z*STEP_REVS_Z/MM_PER_REV_Z) + #define DEFAULT_X_MAX_RATE 5000.0 // mm/min + #define DEFAULT_Y_MAX_RATE 5000.0 // mm/min + #define DEFAULT_Z_MAX_RATE 500.0 // mm/min + #define DEFAULT_X_ACCELERATION (250.0*60*60) // 25*60*60 mm/min^2 = 25 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (250.0*60*60) // 25*60*60 mm/min^2 = 25 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (50.0*60*60) // 25*60*60 mm/min^2 = 25 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 290.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 290.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 100.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK ((1<. +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Description: Shapeoko CNC mill with three NEMA 23 stepper motors, driven by CarbideMotion + #define MICROSTEPS_XY 8 + #define STEP_REVS_XY 200 + #define MM_PER_REV_XY (2.0*20) // 2mm belt pitch, 20 pulley teeth + #define MICROSTEPS_Z 8 + #define STEP_REVS_Z 200 + #define MM_PER_REV_Z (2.0*20) // 2mm belt pitch, 20 pulley teeth + #define DEFAULT_X_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY) + #define DEFAULT_Y_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY) + #define DEFAULT_Z_STEPS_PER_MM (MICROSTEPS_Z*STEP_REVS_Z/MM_PER_REV_Z) + #define DEFAULT_X_MAX_RATE 5000.0 // mm/min + #define DEFAULT_Y_MAX_RATE 5000.0 // mm/min + #define DEFAULT_Z_MAX_RATE 5000.0 // mm/min + #define DEFAULT_X_ACCELERATION (400.0*60*60) // 400*60*60 mm/min^2 = 400 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (400.0*60*60) // 400*60*60 mm/min^2 = 400 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (400.0*60*60) // 400*60*60 mm/min^2 = 400 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 425.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 465.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 80.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK ((1<. +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Description: Sherline 5400 mill with three NEMA 23 Keling KL23H256-21-8B 185 oz-in stepper motors, + // driven by three Pololu A4988 stepper drivers with a 30V, 6A power supply at 1.5A per winding. + #define MICROSTEPS 2 + #define STEPS_PER_REV 200.0 + #define MM_PER_REV (0.050*MM_PER_INCH) // 0.050 inch/rev leadscrew + #define DEFAULT_X_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) + #define DEFAULT_Y_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) + #define DEFAULT_Z_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) + #define DEFAULT_X_MAX_RATE 635.0 // mm/min (25 ipm) + #define DEFAULT_Y_MAX_RATE 635.0 // mm/min + #define DEFAULT_Z_MAX_RATE 635.0 // mm/min + #define DEFAULT_X_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 225.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 125.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 170.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK ((1<. +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Settings only for Grbl Simulator (www.github.com/grbl/grbl-sim) + // Grbl generic default settings. Should work across different machines. + #define DEFAULT_X_STEPS_PER_MM 1000.0 + #define DEFAULT_Y_STEPS_PER_MM 1000.0 + #define DEFAULT_Z_STEPS_PER_MM 1000.0 + #define DEFAULT_X_MAX_RATE 1000.0 // mm/min + #define DEFAULT_Y_MAX_RATE 1000.0 // mm/min + #define DEFAULT_Z_MAX_RATE 1000.0 // mm/min + #define DEFAULT_X_ACCELERATION (100.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (100.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (100.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 1000.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 1000.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 1000.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK 0 + #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled) + #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION)) + #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm + #define DEFAULT_ARC_TOLERANCE 0.002 // mm + #define DEFAULT_REPORT_INCHES 0 // false + #define DEFAULT_AUTO_START 1 // true + #define DEFAULT_INVERT_ST_ENABLE 0 // false + #define DEFAULT_INVERT_LIMIT_PINS 0 // false + #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false + #define DEFAULT_HARD_LIMIT_ENABLE 0 // false + #define DEFAULT_HOMING_ENABLE 0 // false + #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir + #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min + #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min + #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k) + #define DEFAULT_HOMING_PULLOFF 1.0 // mm + +#endif diff --git a/grbl/defaults/defaults_zen_toolworks_7x7.h b/grbl/defaults/defaults_zen_toolworks_7x7.h new file mode 100644 index 0000000..a6e8787 --- /dev/null +++ b/grbl/defaults/defaults_zen_toolworks_7x7.h @@ -0,0 +1,69 @@ +/* + defaults_zen_toolworks_7x7.h - defaults settings configuration file + Part of Grbl + + Copyright (c) 2012-2015 Sungeun K. Jeon + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +/* The defaults.h file serves as a central default settings file for different machine + types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings + here are supplied by users, so your results may vary. However, this should give you + a good starting point as you get to know your machine and tweak the settings for your + nefarious needs. */ + +#ifndef defaults_h +#define defaults_h + + // Description: Zen Toolworks 7x7 mill with three Shinano SST43D2121 65oz-in NEMA 17 stepper motors. + // Leadscrew is different from some ZTW kits, where most are 1.25mm/rev rather than 8.0mm/rev here. + // Driven by 30V, 6A power supply and TI DRV8811 stepper motor drivers. + #define MICROSTEPS 8 + #define STEPS_PER_REV 200.0 + #define MM_PER_REV 8.0 // 8 mm/rev leadscrew + #define DEFAULT_X_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) + #define DEFAULT_Y_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) + #define DEFAULT_Z_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV) + #define DEFAULT_X_MAX_RATE 6000.0 // mm/min + #define DEFAULT_Y_MAX_RATE 6000.0 // mm/min + #define DEFAULT_Z_MAX_RATE 6000.0 // mm/min + #define DEFAULT_X_ACCELERATION (600.0*60*60) // 600*60*60 mm/min^2 = 600 mm/sec^2 + #define DEFAULT_Y_ACCELERATION (600.0*60*60) // 600*60*60 mm/min^2 = 600 mm/sec^2 + #define DEFAULT_Z_ACCELERATION (600.0*60*60) // 600*60*60 mm/min^2 = 600 mm/sec^2 + #define DEFAULT_X_MAX_TRAVEL 190.0 // mm + #define DEFAULT_Y_MAX_TRAVEL 180.0 // mm + #define DEFAULT_Z_MAX_TRAVEL 150.0 // mm + #define DEFAULT_STEP_PULSE_MICROSECONDS 10 + #define DEFAULT_STEPPING_INVERT_MASK 0 + #define DEFAULT_DIRECTION_INVERT_MASK ((1< Date: Sat, 23 May 2015 11:57:30 -0600 Subject: [PATCH 5/7] Homing and limit updates. Minor bug fixes. - Updated new homing cycle to error out when a pull-off motion detects the limit is still active. - Created a limits_get_state() function to centralize it. It reports state as a bit-wise booleans according to axis numbering. - Updated the print uint8 functions. Generalized it to allow both base2 and base10 printouts, while allowing base2 prints with N_AXIS digits for limit state status reports. Doing this saved about 100bytes of flash as well. - Applied CoreXY status reporting bug fix by @phd0. Thanks! --- doc/log/commit_log_v0.9i.txt | 81 ++++++++++++++++++++++++++++++++++++ grbl/defaults.h | 4 +- grbl/grbl.h | 2 +- grbl/limits.c | 60 ++++++++++++++++---------- grbl/limits.h | 4 ++ grbl/motion_control.c | 6 +-- grbl/print.c | 71 ++++++++++++++++--------------- grbl/print.h | 5 +++ grbl/report.c | 5 +-- grbl/system.c | 4 +- 10 files changed, 172 insertions(+), 70 deletions(-) diff --git a/doc/log/commit_log_v0.9i.txt b/doc/log/commit_log_v0.9i.txt index db7df62..de40f68 100644 --- a/doc/log/commit_log_v0.9i.txt +++ b/doc/log/commit_log_v0.9i.txt @@ -1,3 +1,84 @@ +---------------- +Date: 2015-05-22 +Author: Sonny Jeon +Subject: Merge pull request #702 from ashelly/default-split + +Moving defaults to individual files in subdirectory + +---------------- +Date: 2015-05-22 +Author: ashelly +Subject: Moving defaults to individual files in subdirectory + + +---------------- +Date: 2015-05-22 +Author: Sonny Jeon +Subject: Merge pull request #700 from ashelly/header-split + +Header split + +---------------- +Date: 2015-05-22 +Author: ashelly +Subject: Fixing up comment blocks in headers + + +---------------- +Date: 2015-05-22 +Author: ashelly +Subject: Splitting Cpu map into separate files. + +Makes comparison, addition of new ones easier + + +---------------- +Date: 2015-05-17 +Author: Sonny Jeon +Subject: Critical M0/2/30 fix. Homing updates. + +- Critical fix for M0 program pause. Due to its recent change, it would +cause Grbl to suspend but wouldn’t notify the user of why Grbl was not +doing anything. The state would show IDLE and a cycle start would +resume it. Grbl now enters a HOLD state to better indicate the state +change. + +- Critical fix for M2 and M30 program end. As with M0, the state +previously would show IDLE while suspended. Grbl now does not suspend +upon program end and leaves job control to the GUI. Grbl simply reports +a `[Pgm End]` as a feedback message and resets certain g-code modes. + +- M2/30 g-code reseting fix. Previously Grbl would soft-reset after an +M2/30, but this was not complaint to the (linuxcnc) g-code standard. It +simply resets [G1,G17,G90,G94,G40,G54,M5,M9,M48] and keeps all other +modes the same. + +- M0/M2/M30 check-mode fix. It now does not suspend the machine during +check-mode. + +- Minor bug fix related to commands similar to G90.1, but not G90.1, +not reporting an unsupported command. + +- Homing cycle refactoring. To help reduce the chance of users +misunderstanding their limit switch wiring, Grbl only moves a short +distance for the locate cycles only. In addition, the homing cycle +pulls-off the limit switch by the pull-off distance to re-engage and +locate home. This should improve its accuracy. + +- HOMING_FORCE_ORIGIN now sets the origin to the pull-off location, +rather than where the limit switch was triggered. + +- Updated default junction deviation to 0.01mm. Recent tests showed +that this improves Grbl’s cornering behavior a bit. + +- Added the ShapeOko3 defaults. + +- Added new feedback message `[Pgm End]` for M2/30 notification. + +- Limit pin reporting is now a $10 status report option. Requested by +OEMs to help simplify support troubleshooting. + + ---------------- Date: 2015-03-29 Author: Sonny Jeon diff --git a/grbl/defaults.h b/grbl/defaults.h index e66b170..ae8c725 100644 --- a/grbl/defaults.h +++ b/grbl/defaults.h @@ -26,7 +26,9 @@ Ensure one and only one of these DEFAULTS_XXX values is defined in config.h */ #ifndef defaults_h -// Don't #define defaults_h here, let the selected file do it. Prevents incuding more than one. + +// Only define the DEFAULT_XXX with where to find the corresponding default_XXX.h file. +// Don't #define defaults_h here, let the selected file do it. Prevents including more than one. #ifdef DEFAULTS_GENERIC // Grbl generic default settings. Should work across different machines. diff --git a/grbl/grbl.h b/grbl/grbl.h index eb361d0..00c3ba4 100644 --- a/grbl/grbl.h +++ b/grbl/grbl.h @@ -23,7 +23,7 @@ // Grbl versioning system #define GRBL_VERSION "0.9i" -#define GRBL_VERSION_BUILD "20150516" +#define GRBL_VERSION_BUILD "20150523" // Define standard libraries used by Grbl. #include diff --git a/grbl/limits.c b/grbl/limits.c index 4df6f1e..65869d1 100644 --- a/grbl/limits.c +++ b/grbl/limits.c @@ -55,6 +55,7 @@ void limits_init() } +// Disables hard limits. void limits_disable() { LIMIT_PCMSK &= ~LIMIT_MASK; // Disable specific pins of the Pin Change Interrupt @@ -62,6 +63,24 @@ void limits_disable() } +// Returns limit state as a bit-wise uint8 variable. Each bit indicates an axis limit, where +// triggered is 1 and not triggered is 0. Invert mask is applied. Axes are defined by their +// number in bit position, i.e. Z_AXIS is (1<<2) or bit 2, and Y_AXIS is (1<<1) or bit 1. +uint8_t limits_get_state() +{ + uint8_t limit_state = 0; + uint8_t pin = (LIMIT_PIN & LIMIT_MASK); + if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { pin ^= LIMIT_MASK; } + if (pin) { + uint8_t idx; + for (idx=0; idx 0); - + // The active cycle axes should now be homed and machine limits have been located. By // default, Grbl defines machine space as all negative, as do most CNCs. Since limit switches // can be on either side of an axes, check and set axes machine zero appropriately. Also, @@ -289,9 +304,8 @@ void limits_go_home(uint8_t cycle_mask) } } plan_sync_position(); // Sync planner position to homed machine position. - - // Set system state to homing before returning. - sys.state = STATE_HOMING; + + // sys.state = STATE_HOMING; // Ensure system state set as homing before returning. } diff --git a/grbl/limits.h b/grbl/limits.h index 0a5084a..74512ce 100644 --- a/grbl/limits.h +++ b/grbl/limits.h @@ -26,8 +26,12 @@ // Initialize the limits module void limits_init(); +// Disables hard limits. void limits_disable(); +// Returns limit state as a bit-wise uint8 variable. +uint8_t limits_get_state(); + // Perform one portion of the homing cycle based on the input settings. void limits_go_home(uint8_t cycle_mask); diff --git a/grbl/motion_control.c b/grbl/motion_control.c index ad10a74..0785200 100644 --- a/grbl/motion_control.c +++ b/grbl/motion_control.c @@ -225,9 +225,7 @@ void mc_homing_cycle() // with machines with limits wired on both ends of travel to one limit pin. // TODO: Move the pin-specific LIMIT_PIN call to limits.c as a function. #ifdef LIMITS_TWO_SWITCHES_ON_AXES - uint8_t limit_state = (LIMIT_PIN & LIMIT_MASK); - if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { limit_state ^= LIMIT_MASK; } - if (limit_state) { + if (limits_get_state()) { mc_reset(); // Issue system reset and ensure spindle and coolant are shutdown. bit_true_atomic(sys.rt_exec_alarm, (EXEC_ALARM_HARD_LIMIT|EXEC_CRITICAL_EVENT)); return; @@ -256,7 +254,7 @@ void mc_homing_cycle() // Gcode parser position was circumvented by the limits_go_home() routine, so sync position now. gc_sync_position(); - + // If hard limits feature enabled, re-enable hard limits pin change register after homing cycle. limits_init(); } diff --git a/grbl/print.c b/grbl/print.c index 1dd8d7b..f029c4f 100644 --- a/grbl/print.c +++ b/grbl/print.c @@ -60,38 +60,36 @@ void printPgmString(const char *s) // } -void print_uint8_base2(uint8_t n) +// Prints an uint8 variable with base and number of desired digits. +void print_unsigned_int8(uint8_t n, uint8_t base, uint8_t digits) { - unsigned char buf[8]; - uint8_t i = 0; - - for (; i < 8; i++) { - buf[i] = n & 1; - n >>= 1; - } - - for (; i > 0; i--) - serial_write('0' + buf[i - 1]); -} - - -void print_uint8_base10(uint8_t n) -{ - if (n == 0) { - serial_write('0'); - return; - } - - unsigned char buf[3]; + unsigned char buf[digits]; uint8_t i = 0; - while (n > 0) { - buf[i++] = n % 10 + '0'; - n /= 10; + for (; i < digits; i++) { + buf[i] = n % base ; + n /= base; } for (; i > 0; i--) - serial_write(buf[i - 1]); + serial_write('0' + buf[i - 1]); +} + + +// Prints an uint8 variable in base 2. +void print_uint8_base2(uint8_t n) { + print_unsigned_int8(n,2,8); +} + + +// Prints an uint8 variable in base 10. +void print_uint8_base10(uint8_t n) +{ + uint8_t digits; + if (n < 10) { digits = 1; } + else if (n < 100) { digits = 2; } + else { digits = 3; } + print_unsigned_int8(n,10,digits); } @@ -119,7 +117,7 @@ void printInteger(long n) { if (n < 0) { serial_write('-'); - print_uint32_base10((-n)); + print_uint32_base10(-n); } else { print_uint32_base10(n); } @@ -194,12 +192,13 @@ void printFloat_RateValue(float n) { void printFloat_SettingValue(float n) { printFloat(n,N_DECIMAL_SETTINGVALUE); } -// Debug tool to print free memory in bytes at the called point. Not used otherwise. -void printFreeMemory() -{ - extern int __heap_start, *__brkval; - uint16_t free; // Up to 64k values. - free = (int) &free - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); - printInteger((int32_t)free); - printString(" "); -} +// Debug tool to print free memory in bytes at the called point. +// NOTE: Keep commented unless using. Part of this function always gets compiled in. +// void printFreeMemory() +// { +// extern int __heap_start, *__brkval; +// uint16_t free; // Up to 64k values. +// free = (int) &free - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); +// printInteger((int32_t)free); +// printString(" "); +// } diff --git a/grbl/print.h b/grbl/print.h index 658e892..e6399aa 100644 --- a/grbl/print.h +++ b/grbl/print.h @@ -31,8 +31,13 @@ void printInteger(long n); void print_uint32_base10(uint32_t n); +// Prints uint8 variable with base and number of desired digits. +void print_unsigned_int8(uint8_t n, uint8_t base, uint8_t digits); + +// Prints an uint8 variable in base 2. void print_uint8_base2(uint8_t n); +// Prints an uint8 variable in base 10. void print_uint8_base10(uint8_t n); void printFloat(float n, uint8_t decimal_places); diff --git a/grbl/report.c b/grbl/report.c index f32203a..09ff1b8 100644 --- a/grbl/report.c +++ b/grbl/report.c @@ -496,10 +496,7 @@ void report_realtime_status() if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_LIMIT_PINS)) { printPgmString(PSTR(",Lim:")); - for (idx=0; idx Date: Sat, 23 May 2015 12:43:52 -0600 Subject: [PATCH 6/7] Moved cpu_map. - Moved cpu_map files to a cpu_map directory, like the defaults file organization. --- {grbl => Grbl/cpu_map}/cpu_map_atmega2560.h | 3 ++- {grbl => Grbl/cpu_map}/cpu_map_atmega328p.h | 10 ++++---- doc/log/commit_log_v0.9i.txt | 19 +++++++++++++++ grbl/cpu_map.h | 27 ++++++--------------- 4 files changed, 33 insertions(+), 26 deletions(-) rename {grbl => Grbl/cpu_map}/cpu_map_atmega2560.h (99%) rename {grbl => Grbl/cpu_map}/cpu_map_atmega328p.h (96%) diff --git a/grbl/cpu_map_atmega2560.h b/Grbl/cpu_map/cpu_map_atmega2560.h similarity index 99% rename from grbl/cpu_map_atmega2560.h rename to Grbl/cpu_map/cpu_map_atmega2560.h index b8a0aa2..8c2cebc 100644 --- a/grbl/cpu_map_atmega2560.h +++ b/Grbl/cpu_map/cpu_map_atmega2560.h @@ -20,10 +20,12 @@ /* This cpu_map file serves as a central pin mapping settings file for AVR Mega 2560 */ + #ifdef GRBL_PLATFORM #error "cpu_map already defined: GRBL_PLATFORM=" GRBL_PLATFORM #endif + #define GRBL_PLATFORM "Atmega2560" // Serial port pins @@ -133,4 +135,3 @@ #define SPINDLE_PWM_PORT PORTH #define SPINDLE_PWM_BIT 4 // MEGA2560 Digital Pin 97 #endif // End of VARIABLE_SPINDLE - diff --git a/grbl/cpu_map_atmega328p.h b/Grbl/cpu_map/cpu_map_atmega328p.h similarity index 96% rename from grbl/cpu_map_atmega328p.h rename to Grbl/cpu_map/cpu_map_atmega328p.h index 8bb071d..ea233f9 100644 --- a/grbl/cpu_map_atmega328p.h +++ b/Grbl/cpu_map/cpu_map_atmega328p.h @@ -18,16 +18,17 @@ along with Grbl. If not, see . */ -/* This cpu_map file serves as a central pin mapping settings file for AVR 328p - used on the Arduino Uno */ - - +/* Grbl officially supports the Arduino Uno, but the other supplied pin mappings are + supplied by users, so your results may vary. This cpu_map file serves as a central + pin mapping settings file for AVR 328p used on the Arduino Uno. */ + #ifdef GRBL_PLATFORM #error "cpu_map already defined: GRBL_PLATFORM=" GRBL_PLATFORM #endif #define GRBL_PLATFORM "Atmega328p" + // Define serial port pins and interrupt vectors. #define SERIAL_RX USART_RX_vect #define SERIAL_UDRE USART_UDRE_vect @@ -143,4 +144,3 @@ #define SPINDLE_PWM_PORT PORTB #define SPINDLE_PWM_BIT 3 // Uno Digital Pin 11 #endif // End of VARIABLE_SPINDLE - diff --git a/doc/log/commit_log_v0.9i.txt b/doc/log/commit_log_v0.9i.txt index de40f68..4cd5b97 100644 --- a/doc/log/commit_log_v0.9i.txt +++ b/doc/log/commit_log_v0.9i.txt @@ -1,3 +1,22 @@ +---------------- +Date: 2015-05-23 +Author: Sonny Jeon +Subject: Homing and limit updates. Minor bug fixes. + +- Updated new homing cycle to error out when a pull-off motion detects +the limit is still active. + +- Created a limits_get_state() function to centralize it. It reports +state as a bit-wise booleans according to axis numbering. + +- Updated the print uint8 functions. Generalized it to allow both base2 +and base10 printouts, while allowing base2 prints with N_AXIS digits +for limit state status reports. Doing this saved about 100bytes of +flash as well. + +- Applied CoreXY status reporting bug fix by @phd0. Thanks! + + ---------------- Date: 2015-05-22 Author: Sonny Jeon diff --git a/grbl/cpu_map.h b/grbl/cpu_map.h index 1781795..1804d25 100644 --- a/grbl/cpu_map.h +++ b/grbl/cpu_map.h @@ -18,43 +18,30 @@ along with Grbl. If not, see . */ -/* The cpu_map.h file serves as a central pin mapping selection file for different processor +/* The cpu_map.h files serve as a central pin mapping selection file for different processor types, i.e. AVR 328p or AVR Mega 2560. Each processor has its own pin mapping file. (i.e. cpu_map_atmega328p.h) Grbl officially supports the Arduino Uno, but the other supplied pin mappings are supplied by users, so your results may vary. */ -// NOTE: This is still a work in progress. We are still centralizing the configurations to -// this file, so your success may vary for other CPUs. +// NOTE: With new processors, only add the define name and filename to use. #ifndef cpu_map_h #define cpu_map_h -//---------------------------------------------------------------------------------------- - #ifdef CPU_MAP_ATMEGA328P // (Arduino Uno) Officially supported by Grbl. - - #include "cpu_map_atmega328p.h" - + #include "cpu_map/cpu_map_atmega328p.h" #endif - -//---------------------------------------------------------------------------------------- - #ifdef CPU_MAP_ATMEGA2560 // (Arduino Mega 2560) Working @EliteEng - - #include "cpu_map_atmega2560.h" - + #include "cpu_map/cpu_map_atmega2560.h" #endif -//---------------------------------------------------------------------------------------- - /* #ifdef CPU_MAP_CUSTOM_PROC - // For a custom pin map or different processor, copy and edit ne of the default cpu map - // files above and modify it to your needs. Then, copy and paste one of the sections above - // and change the #defined name and included file. Make sure the defined name is also - // changed in the config.h file. + // For a custom pin map or different processor, copy and edit one of the available cpu + // map files and modify it to your needs. Make sure the defined name is also changed in + // the config.h file. #endif */ From 0eb8bca3d9920ae7a08ace6f9fdceec432617620 Mon Sep 17 00:00:00 2001 From: Sonny Jeon Date: Sat, 23 May 2015 16:40:20 -0600 Subject: [PATCH 7/7] CoreXY planner bug fix. - CoreXY motions were moving to the negative value of the intended target. Now fixed. --- grbl/planner.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/grbl/planner.c b/grbl/planner.c index 7989e00..1e0bd35 100644 --- a/grbl/planner.c +++ b/grbl/planner.c @@ -277,8 +277,8 @@ uint8_t plan_check_full_buffer() #ifdef COREXY target_steps[A_MOTOR] = lround(target[A_MOTOR]*settings.steps_per_mm[A_MOTOR]); target_steps[B_MOTOR] = lround(target[B_MOTOR]*settings.steps_per_mm[B_MOTOR]); - block->steps[A_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS])); - block->steps[B_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) + (target_steps[Y_AXIS]-pl.position[Y_AXIS])); + block->steps[A_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) + (target_steps[Y_AXIS]-pl.position[Y_AXIS])); + block->steps[B_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS])); #endif for (idx=0; idxstep_event_count = max(block->step_event_count, block->steps[idx]); if (idx == A_MOTOR) { - delta_mm = ((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[idx]; - } else if (idx == B_MOTOR) { delta_mm = ((target_steps[X_AXIS]-pl.position[X_AXIS]) + (target_steps[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[idx]; + } else if (idx == B_MOTOR) { + delta_mm = ((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[idx]; } else { delta_mm = (target_steps[idx] - pl.position[idx])/settings.steps_per_mm[idx]; }