commit
d13f741f7d
137
Grbl/cpu_map/cpu_map_atmega2560.h
Normal file
137
Grbl/cpu_map/cpu_map_atmega2560.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
#define SERIAL_RX USART0_RX_vect
|
||||||
|
#define SERIAL_UDRE USART0_UDRE_vect
|
||||||
|
|
||||||
|
// Increase Buffers to make use of extra SRAM
|
||||||
|
//#define RX_BUFFER_SIZE 256
|
||||||
|
//#define TX_BUFFER_SIZE 128
|
||||||
|
//#define BLOCK_BUFFER_SIZE 36
|
||||||
|
//#define LINE_BUFFER_SIZE 100
|
||||||
|
|
||||||
|
// Define step pulse output pins. NOTE: All step bit pins must be on the same port.
|
||||||
|
#define STEP_DDR DDRA
|
||||||
|
#define STEP_PORT PORTA
|
||||||
|
#define STEP_PIN PINA
|
||||||
|
#define X_STEP_BIT 2 // MEGA2560 Digital Pin 24
|
||||||
|
#define Y_STEP_BIT 3 // MEGA2560 Digital Pin 25
|
||||||
|
#define Z_STEP_BIT 4 // MEGA2560 Digital Pin 26
|
||||||
|
#define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
|
||||||
|
|
||||||
|
// Define step direction output pins. NOTE: All direction pins must be on the same port.
|
||||||
|
#define DIRECTION_DDR DDRC
|
||||||
|
#define DIRECTION_PORT PORTC
|
||||||
|
#define DIRECTION_PIN PINC
|
||||||
|
#define X_DIRECTION_BIT 7 // MEGA2560 Digital Pin 30
|
||||||
|
#define Y_DIRECTION_BIT 6 // MEGA2560 Digital Pin 31
|
||||||
|
#define Z_DIRECTION_BIT 5 // MEGA2560 Digital Pin 32
|
||||||
|
#define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
|
||||||
|
|
||||||
|
// Define stepper driver enable/disable output pin.
|
||||||
|
#define STEPPERS_DISABLE_DDR DDRB
|
||||||
|
#define STEPPERS_DISABLE_PORT PORTB
|
||||||
|
#define STEPPERS_DISABLE_BIT 7 // MEGA2560 Digital Pin 13
|
||||||
|
#define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
|
||||||
|
|
||||||
|
// Define homing/hard limit switch input pins and limit interrupt vectors.
|
||||||
|
// NOTE: All limit bit pins must be on the same port
|
||||||
|
#define LIMIT_DDR DDRB
|
||||||
|
#define LIMIT_PORT PORTB
|
||||||
|
#define LIMIT_PIN PINB
|
||||||
|
#define X_LIMIT_BIT 4 // MEGA2560 Digital Pin 10
|
||||||
|
#define Y_LIMIT_BIT 5 // MEGA2560 Digital Pin 11
|
||||||
|
#define Z_LIMIT_BIT 6 // MEGA2560 Digital Pin 12
|
||||||
|
#define LIMIT_INT PCIE0 // Pin change interrupt enable pin
|
||||||
|
#define LIMIT_INT_vect PCINT0_vect
|
||||||
|
#define LIMIT_PCMSK PCMSK0 // Pin change interrupt register
|
||||||
|
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
|
||||||
|
|
||||||
|
// Define spindle enable and spindle direction output pins.
|
||||||
|
#define SPINDLE_ENABLE_DDR DDRH
|
||||||
|
#define SPINDLE_ENABLE_PORT PORTH
|
||||||
|
#define SPINDLE_ENABLE_BIT 3 // MEGA2560 Digital Pin 6
|
||||||
|
#define SPINDLE_DIRECTION_DDR DDRE
|
||||||
|
#define SPINDLE_DIRECTION_PORT PORTE
|
||||||
|
#define SPINDLE_DIRECTION_BIT 3 // MEGA2560 Digital Pin 5
|
||||||
|
|
||||||
|
// Define flood and mist coolant enable output pins.
|
||||||
|
// NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
|
||||||
|
// a later date if flash and memory space allows.
|
||||||
|
#define COOLANT_FLOOD_DDR DDRH
|
||||||
|
#define COOLANT_FLOOD_PORT PORTH
|
||||||
|
#define COOLANT_FLOOD_BIT 5 // MEGA2560 Digital Pin 8
|
||||||
|
#ifdef ENABLE_M7 // Mist coolant disabled by default. See config.h to enable/disable.
|
||||||
|
#define COOLANT_MIST_DDR DDRH
|
||||||
|
#define COOLANT_MIST_PORT PORTH
|
||||||
|
#define COOLANT_MIST_BIT 6 // MEGA2560 Digital Pin 9
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define user-control CONTROLs (cycle start, reset, feed hold) input pins.
|
||||||
|
// NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
|
||||||
|
#define CONTROL_DDR DDRK
|
||||||
|
#define CONTROL_PIN PINK
|
||||||
|
#define CONTROL_PORT PORTK
|
||||||
|
#define RESET_BIT 0 // MEGA2560 Analog Pin 8
|
||||||
|
#define FEED_HOLD_BIT 1 // MEGA2560 Analog Pin 9
|
||||||
|
#define CYCLE_START_BIT 2 // MEGA2560 Analog Pin 10
|
||||||
|
#define SAFETY_DOOR_BIT 3 // MEGA2560 Analog Pin 11
|
||||||
|
#define CONTROL_INT PCIE2 // Pin change interrupt enable pin
|
||||||
|
#define CONTROL_INT_vect PCINT2_vect
|
||||||
|
#define CONTROL_PCMSK PCMSK2 // Pin change interrupt register
|
||||||
|
#define CONTROL_MASK ((1<<RESET_BIT)|(1<<FEED_HOLD_BIT)|(1<<CYCLE_START_BIT)|(1<<SAFETY_DOOR_BIT))
|
||||||
|
|
||||||
|
// Define probe switch input pin.
|
||||||
|
#define PROBE_DDR DDRK
|
||||||
|
#define PROBE_PIN PINK
|
||||||
|
#define PROBE_PORT PORTK
|
||||||
|
#define PROBE_BIT 7 // MEGA2560 Analog Pin 15
|
||||||
|
#define PROBE_MASK (1<<PROBE_BIT)
|
||||||
|
|
||||||
|
// Start of PWM & Stepper Enabled Spindle
|
||||||
|
#ifdef VARIABLE_SPINDLE
|
||||||
|
// Advanced Configuration Below You should not need to touch these variables
|
||||||
|
// Set Timer up to use TIMER4B which is attached to Digital Pin 7
|
||||||
|
#define PWM_MAX_VALUE 65535.0
|
||||||
|
#define TCCRA_REGISTER TCCR4A
|
||||||
|
#define TCCRB_REGISTER TCCR4B
|
||||||
|
#define OCR_REGISTER OCR4B
|
||||||
|
|
||||||
|
#define COMB_BIT COM4B1
|
||||||
|
#define WAVE0_REGISTER WGM40
|
||||||
|
#define WAVE1_REGISTER WGM41
|
||||||
|
#define WAVE2_REGISTER WGM42
|
||||||
|
#define WAVE3_REGISTER WGM43
|
||||||
|
|
||||||
|
#define SPINDLE_PWM_DDR DDRH
|
||||||
|
#define SPINDLE_PWM_PORT PORTH
|
||||||
|
#define SPINDLE_PWM_BIT 4 // MEGA2560 Digital Pin 97
|
||||||
|
#endif // End of VARIABLE_SPINDLE
|
146
Grbl/cpu_map/cpu_map_atmega328p.h
Normal file
146
Grbl/cpu_map/cpu_map_atmega328p.h
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
// 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<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
|
||||||
|
|
||||||
|
// Define step direction output pins. NOTE: All direction pins must be on the same port.
|
||||||
|
#define DIRECTION_DDR DDRD
|
||||||
|
#define DIRECTION_PORT PORTD
|
||||||
|
#define X_DIRECTION_BIT 5 // Uno Digital Pin 5
|
||||||
|
#define Y_DIRECTION_BIT 6 // Uno Digital Pin 6
|
||||||
|
#define Z_DIRECTION_BIT 7 // Uno Digital Pin 7
|
||||||
|
#define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
|
||||||
|
|
||||||
|
// Define stepper driver enable/disable output pin.
|
||||||
|
#define STEPPERS_DISABLE_DDR DDRB
|
||||||
|
#define STEPPERS_DISABLE_PORT PORTB
|
||||||
|
#define STEPPERS_DISABLE_BIT 0 // Uno Digital Pin 8
|
||||||
|
#define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
|
||||||
|
|
||||||
|
// Define homing/hard limit switch input pins and limit interrupt vectors.
|
||||||
|
// NOTE: All limit bit pins must be on the same port, but not on a port with other input pins (CONTROL).
|
||||||
|
#define LIMIT_DDR DDRB
|
||||||
|
#define LIMIT_PIN PINB
|
||||||
|
#define LIMIT_PORT PORTB
|
||||||
|
#define X_LIMIT_BIT 1 // Uno Digital Pin 9
|
||||||
|
#define Y_LIMIT_BIT 2 // Uno Digital Pin 10
|
||||||
|
#ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
|
||||||
|
#define Z_LIMIT_BIT 4 // Uno Digital Pin 12
|
||||||
|
#else
|
||||||
|
#define Z_LIMIT_BIT 3 // Uno Digital Pin 11
|
||||||
|
#endif
|
||||||
|
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
|
||||||
|
#define LIMIT_INT PCIE0 // Pin change interrupt enable pin
|
||||||
|
#define LIMIT_INT_vect PCINT0_vect
|
||||||
|
#define LIMIT_PCMSK PCMSK0 // Pin change interrupt register
|
||||||
|
|
||||||
|
// Define spindle enable and spindle direction output pins.
|
||||||
|
#define SPINDLE_ENABLE_DDR DDRB
|
||||||
|
#define SPINDLE_ENABLE_PORT PORTB
|
||||||
|
// Z Limit pin and spindle PWM/enable pin swapped to access hardware PWM on Pin 11.
|
||||||
|
#ifdef VARIABLE_SPINDLE
|
||||||
|
#ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
|
||||||
|
// If enabled, spindle direction pin now used as spindle enable, while PWM remains on D11.
|
||||||
|
#define SPINDLE_ENABLE_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
|
||||||
|
#else
|
||||||
|
#define SPINDLE_ENABLE_BIT 3 // Uno Digital Pin 11
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SPINDLE_ENABLE_BIT 4 // Uno Digital Pin 12
|
||||||
|
#endif
|
||||||
|
#ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
|
||||||
|
#define SPINDLE_DIRECTION_DDR DDRB
|
||||||
|
#define SPINDLE_DIRECTION_PORT PORTB
|
||||||
|
#define SPINDLE_DIRECTION_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define flood and mist coolant enable output pins.
|
||||||
|
// NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
|
||||||
|
// a later date if flash and memory space allows.
|
||||||
|
#define COOLANT_FLOOD_DDR DDRC
|
||||||
|
#define COOLANT_FLOOD_PORT PORTC
|
||||||
|
#define COOLANT_FLOOD_BIT 3 // Uno Analog Pin 3
|
||||||
|
#ifdef ENABLE_M7 // Mist coolant disabled by default. See config.h to enable/disable.
|
||||||
|
#define COOLANT_MIST_DDR DDRC
|
||||||
|
#define COOLANT_MIST_PORT PORTC
|
||||||
|
#define COOLANT_MIST_BIT 4 // Uno Analog Pin 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define user-control controls (cycle start, reset, feed hold) input pins.
|
||||||
|
// NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
|
||||||
|
#define CONTROL_DDR DDRC
|
||||||
|
#define CONTROL_PIN PINC
|
||||||
|
#define CONTROL_PORT PORTC
|
||||||
|
#define RESET_BIT 0 // Uno Analog Pin 0
|
||||||
|
#define FEED_HOLD_BIT 1 // Uno Analog Pin 1
|
||||||
|
#define CYCLE_START_BIT 2 // Uno Analog Pin 2
|
||||||
|
#define SAFETY_DOOR_BIT 1 // Uno Analog Pin 1 NOTE: Safety door is shared with feed hold. Enabled by config define.
|
||||||
|
#define CONTROL_INT PCIE1 // Pin change interrupt enable pin
|
||||||
|
#define CONTROL_INT_vect PCINT1_vect
|
||||||
|
#define CONTROL_PCMSK PCMSK1 // Pin change interrupt register
|
||||||
|
#define CONTROL_MASK ((1<<RESET_BIT)|(1<<FEED_HOLD_BIT)|(1<<CYCLE_START_BIT)|(1<<SAFETY_DOOR_BIT))
|
||||||
|
|
||||||
|
// Define probe switch input pin.
|
||||||
|
#define PROBE_DDR DDRC
|
||||||
|
#define PROBE_PIN PINC
|
||||||
|
#define PROBE_PORT PORTC
|
||||||
|
#define PROBE_BIT 5 // Uno Analog Pin 5
|
||||||
|
#define PROBE_MASK (1<<PROBE_BIT)
|
||||||
|
|
||||||
|
// Start of PWM & Stepper Enabled Spindle
|
||||||
|
#ifdef VARIABLE_SPINDLE
|
||||||
|
// Advanced Configuration Below You should not need to touch these variables
|
||||||
|
#define PWM_MAX_VALUE 255.0
|
||||||
|
#define TCCRA_REGISTER TCCR2A
|
||||||
|
#define TCCRB_REGISTER TCCR2B
|
||||||
|
#define OCR_REGISTER OCR2A
|
||||||
|
|
||||||
|
#define COMB_BIT COM2A1
|
||||||
|
#define WAVE0_REGISTER WGM20
|
||||||
|
#define WAVE1_REGISTER WGM21
|
||||||
|
#define WAVE2_REGISTER WGM22
|
||||||
|
#define WAVE3_REGISTER WGM23
|
||||||
|
|
||||||
|
// NOTE: On the 328p, these must be the same as the SPINDLE_ENABLE settings.
|
||||||
|
#define SPINDLE_PWM_DDR DDRB
|
||||||
|
#define SPINDLE_PWM_PORT PORTB
|
||||||
|
#define SPINDLE_PWM_BIT 3 // Uno Digital Pin 11
|
||||||
|
#endif // End of VARIABLE_SPINDLE
|
@ -1,3 +1,129 @@
|
|||||||
|
----------------
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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
|
Date: 2015-03-27
|
||||||
Author: Sungeun Jeon
|
Author: Sungeun Jeon
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
// Number of homing cycles performed after when the machine initially jogs to limit switches.
|
// 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
|
// This help in preventing overshoot and should improve repeatability. This value should be one or
|
||||||
// greater.
|
// 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
|
// 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
|
// for professional CNC machines, regardless of where the limit switches are located. Uncomment this
|
||||||
|
248
grbl/cpu_map.h
248
grbl/cpu_map.h
@ -18,260 +18,30 @@
|
|||||||
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
|
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* The cpu_map.h file serves as a central pin mapping settings 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. Grbl officially supports the Arduino Uno, but the
|
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. */
|
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
|
// NOTE: With new processors, only add the define name and filename to use.
|
||||||
// this file, so your success may vary for other CPUs.
|
|
||||||
|
|
||||||
#ifndef cpu_map_h
|
#ifndef cpu_map_h
|
||||||
#define cpu_map_h
|
#define cpu_map_h
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifdef CPU_MAP_ATMEGA328P // (Arduino Uno) Officially supported by Grbl.
|
#ifdef CPU_MAP_ATMEGA328P // (Arduino Uno) Officially supported by Grbl.
|
||||||
|
#include "cpu_map/cpu_map_atmega328p.h"
|
||||||
// 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<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
|
|
||||||
|
|
||||||
// Define step direction output pins. NOTE: All direction pins must be on the same port.
|
|
||||||
#define DIRECTION_DDR DDRD
|
|
||||||
#define DIRECTION_PORT PORTD
|
|
||||||
#define X_DIRECTION_BIT 5 // Uno Digital Pin 5
|
|
||||||
#define Y_DIRECTION_BIT 6 // Uno Digital Pin 6
|
|
||||||
#define Z_DIRECTION_BIT 7 // Uno Digital Pin 7
|
|
||||||
#define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
|
|
||||||
|
|
||||||
// Define stepper driver enable/disable output pin.
|
|
||||||
#define STEPPERS_DISABLE_DDR DDRB
|
|
||||||
#define STEPPERS_DISABLE_PORT PORTB
|
|
||||||
#define STEPPERS_DISABLE_BIT 0 // Uno Digital Pin 8
|
|
||||||
#define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
|
|
||||||
|
|
||||||
// Define homing/hard limit switch input pins and limit interrupt vectors.
|
|
||||||
// NOTE: All limit bit pins must be on the same port, but not on a port with other input pins (CONTROL).
|
|
||||||
#define LIMIT_DDR DDRB
|
|
||||||
#define LIMIT_PIN PINB
|
|
||||||
#define LIMIT_PORT PORTB
|
|
||||||
#define X_LIMIT_BIT 1 // Uno Digital Pin 9
|
|
||||||
#define Y_LIMIT_BIT 2 // Uno Digital Pin 10
|
|
||||||
#ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
|
|
||||||
#define Z_LIMIT_BIT 4 // Uno Digital Pin 12
|
|
||||||
#else
|
|
||||||
#define Z_LIMIT_BIT 3 // Uno Digital Pin 11
|
|
||||||
#endif
|
|
||||||
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
|
|
||||||
#define LIMIT_INT PCIE0 // Pin change interrupt enable pin
|
|
||||||
#define LIMIT_INT_vect PCINT0_vect
|
|
||||||
#define LIMIT_PCMSK PCMSK0 // Pin change interrupt register
|
|
||||||
|
|
||||||
// Define spindle enable and spindle direction output pins.
|
|
||||||
#define SPINDLE_ENABLE_DDR DDRB
|
|
||||||
#define SPINDLE_ENABLE_PORT PORTB
|
|
||||||
// Z Limit pin and spindle PWM/enable pin swapped to access hardware PWM on Pin 11.
|
|
||||||
#ifdef VARIABLE_SPINDLE
|
|
||||||
#ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
|
|
||||||
// If enabled, spindle direction pin now used as spindle enable, while PWM remains on D11.
|
|
||||||
#define SPINDLE_ENABLE_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
|
|
||||||
#else
|
|
||||||
#define SPINDLE_ENABLE_BIT 3 // Uno Digital Pin 11
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define SPINDLE_ENABLE_BIT 4 // Uno Digital Pin 12
|
|
||||||
#endif
|
|
||||||
#ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
|
|
||||||
#define SPINDLE_DIRECTION_DDR DDRB
|
|
||||||
#define SPINDLE_DIRECTION_PORT PORTB
|
|
||||||
#define SPINDLE_DIRECTION_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define flood and mist coolant enable output pins.
|
|
||||||
// NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
|
|
||||||
// a later date if flash and memory space allows.
|
|
||||||
#define COOLANT_FLOOD_DDR DDRC
|
|
||||||
#define COOLANT_FLOOD_PORT PORTC
|
|
||||||
#define COOLANT_FLOOD_BIT 3 // Uno Analog Pin 3
|
|
||||||
#ifdef ENABLE_M7 // Mist coolant disabled by default. See config.h to enable/disable.
|
|
||||||
#define COOLANT_MIST_DDR DDRC
|
|
||||||
#define COOLANT_MIST_PORT PORTC
|
|
||||||
#define COOLANT_MIST_BIT 4 // Uno Analog Pin 4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define user-control controls (cycle start, reset, feed hold) input pins.
|
|
||||||
// NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
|
|
||||||
#define CONTROL_DDR DDRC
|
|
||||||
#define CONTROL_PIN PINC
|
|
||||||
#define CONTROL_PORT PORTC
|
|
||||||
#define RESET_BIT 0 // Uno Analog Pin 0
|
|
||||||
#define FEED_HOLD_BIT 1 // Uno Analog Pin 1
|
|
||||||
#define CYCLE_START_BIT 2 // Uno Analog Pin 2
|
|
||||||
#define SAFETY_DOOR_BIT 1 // Uno Analog Pin 1 NOTE: Safety door is shared with feed hold. Enabled by config define.
|
|
||||||
#define CONTROL_INT PCIE1 // Pin change interrupt enable pin
|
|
||||||
#define CONTROL_INT_vect PCINT1_vect
|
|
||||||
#define CONTROL_PCMSK PCMSK1 // Pin change interrupt register
|
|
||||||
#define CONTROL_MASK ((1<<RESET_BIT)|(1<<FEED_HOLD_BIT)|(1<<CYCLE_START_BIT)|(1<<SAFETY_DOOR_BIT))
|
|
||||||
|
|
||||||
// Define probe switch input pin.
|
|
||||||
#define PROBE_DDR DDRC
|
|
||||||
#define PROBE_PIN PINC
|
|
||||||
#define PROBE_PORT PORTC
|
|
||||||
#define PROBE_BIT 5 // Uno Analog Pin 5
|
|
||||||
#define PROBE_MASK (1<<PROBE_BIT)
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef VARIABLE_SPINDLE
|
|
||||||
// Advanced Configuration Below You should not need to touch these variables
|
|
||||||
#define PWM_MAX_VALUE 255.0
|
|
||||||
#define TCCRA_REGISTER TCCR2A
|
|
||||||
#define TCCRB_REGISTER TCCR2B
|
|
||||||
#define OCR_REGISTER OCR2A
|
|
||||||
|
|
||||||
#define COMB_BIT COM2A1
|
|
||||||
#define WAVE0_REGISTER WGM20
|
|
||||||
#define WAVE1_REGISTER WGM21
|
|
||||||
#define WAVE2_REGISTER WGM22
|
|
||||||
#define WAVE3_REGISTER WGM23
|
|
||||||
|
|
||||||
// NOTE: On the 328p, these must be the same as the SPINDLE_ENABLE settings.
|
|
||||||
#define SPINDLE_PWM_DDR DDRB
|
|
||||||
#define SPINDLE_PWM_PORT PORTB
|
|
||||||
#define SPINDLE_PWM_BIT 3 // Uno Digital Pin 11
|
|
||||||
#endif // End of VARIABLE_SPINDLE
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifdef CPU_MAP_ATMEGA2560 // (Arduino Mega 2560) Working @EliteEng
|
#ifdef CPU_MAP_ATMEGA2560 // (Arduino Mega 2560) Working @EliteEng
|
||||||
|
#include "cpu_map/cpu_map_atmega2560.h"
|
||||||
// Serial port pins
|
|
||||||
#define SERIAL_RX USART0_RX_vect
|
|
||||||
#define SERIAL_UDRE USART0_UDRE_vect
|
|
||||||
|
|
||||||
// Increase Buffers to make use of extra SRAM
|
|
||||||
//#define RX_BUFFER_SIZE 256
|
|
||||||
//#define TX_BUFFER_SIZE 128
|
|
||||||
//#define BLOCK_BUFFER_SIZE 36
|
|
||||||
//#define LINE_BUFFER_SIZE 100
|
|
||||||
|
|
||||||
// Define step pulse output pins. NOTE: All step bit pins must be on the same port.
|
|
||||||
#define STEP_DDR DDRA
|
|
||||||
#define STEP_PORT PORTA
|
|
||||||
#define STEP_PIN PINA
|
|
||||||
#define X_STEP_BIT 2 // MEGA2560 Digital Pin 24
|
|
||||||
#define Y_STEP_BIT 3 // MEGA2560 Digital Pin 25
|
|
||||||
#define Z_STEP_BIT 4 // MEGA2560 Digital Pin 26
|
|
||||||
#define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
|
|
||||||
|
|
||||||
// Define step direction output pins. NOTE: All direction pins must be on the same port.
|
|
||||||
#define DIRECTION_DDR DDRC
|
|
||||||
#define DIRECTION_PORT PORTC
|
|
||||||
#define DIRECTION_PIN PINC
|
|
||||||
#define X_DIRECTION_BIT 7 // MEGA2560 Digital Pin 30
|
|
||||||
#define Y_DIRECTION_BIT 6 // MEGA2560 Digital Pin 31
|
|
||||||
#define Z_DIRECTION_BIT 5 // MEGA2560 Digital Pin 32
|
|
||||||
#define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
|
|
||||||
|
|
||||||
// Define stepper driver enable/disable output pin.
|
|
||||||
#define STEPPERS_DISABLE_DDR DDRB
|
|
||||||
#define STEPPERS_DISABLE_PORT PORTB
|
|
||||||
#define STEPPERS_DISABLE_BIT 7 // MEGA2560 Digital Pin 13
|
|
||||||
#define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
|
|
||||||
|
|
||||||
// NOTE: All limit bit pins must be on the same port
|
|
||||||
#define LIMIT_DDR DDRB
|
|
||||||
#define LIMIT_PORT PORTB
|
|
||||||
#define LIMIT_PIN PINB
|
|
||||||
#define X_LIMIT_BIT 4 // MEGA2560 Digital Pin 10
|
|
||||||
#define Y_LIMIT_BIT 5 // MEGA2560 Digital Pin 11
|
|
||||||
#define Z_LIMIT_BIT 6 // MEGA2560 Digital Pin 12
|
|
||||||
#define LIMIT_INT PCIE0 // Pin change interrupt enable pin
|
|
||||||
#define LIMIT_INT_vect PCINT0_vect
|
|
||||||
#define LIMIT_PCMSK PCMSK0 // Pin change interrupt register
|
|
||||||
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
|
|
||||||
|
|
||||||
// Define spindle enable and spindle direction output pins.
|
|
||||||
#define SPINDLE_ENABLE_DDR DDRH
|
|
||||||
#define SPINDLE_ENABLE_PORT PORTH
|
|
||||||
#define SPINDLE_ENABLE_BIT 3 // MEGA2560 Digital Pin 6
|
|
||||||
#define SPINDLE_DIRECTION_DDR DDRE
|
|
||||||
#define SPINDLE_DIRECTION_PORT PORTE
|
|
||||||
#define SPINDLE_DIRECTION_BIT 3 // MEGA2560 Digital Pin 5
|
|
||||||
|
|
||||||
// Define flood and mist coolant enable output pins.
|
|
||||||
// NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
|
|
||||||
// a later date if flash and memory space allows.
|
|
||||||
#define COOLANT_FLOOD_DDR DDRH
|
|
||||||
#define COOLANT_FLOOD_PORT PORTH
|
|
||||||
#define COOLANT_FLOOD_BIT 5 // MEGA2560 Digital Pin 8
|
|
||||||
#ifdef ENABLE_M7 // Mist coolant disabled by default. See config.h to enable/disable.
|
|
||||||
#define COOLANT_MIST_DDR DDRH
|
|
||||||
#define COOLANT_MIST_PORT PORTH
|
|
||||||
#define COOLANT_MIST_BIT 6 // MEGA2560 Digital Pin 9
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define user-control CONTROLs (cycle start, reset, feed hold) input pins.
|
|
||||||
// NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
|
|
||||||
#define CONTROL_DDR DDRK
|
|
||||||
#define CONTROL_PIN PINK
|
|
||||||
#define CONTROL_PORT PORTK
|
|
||||||
#define RESET_BIT 0 // MEGA2560 Analog Pin 8
|
|
||||||
#define FEED_HOLD_BIT 1 // MEGA2560 Analog Pin 9
|
|
||||||
#define CYCLE_START_BIT 2 // MEGA2560 Analog Pin 10
|
|
||||||
#define SAFETY_DOOR_BIT 3 // MEGA2560 Analog Pin 11
|
|
||||||
#define CONTROL_INT PCIE2 // Pin change interrupt enable pin
|
|
||||||
#define CONTROL_INT_vect PCINT2_vect
|
|
||||||
#define CONTROL_PCMSK PCMSK2 // Pin change interrupt register
|
|
||||||
#define CONTROL_MASK ((1<<RESET_BIT)|(1<<FEED_HOLD_BIT)|(1<<CYCLE_START_BIT)|(1<<SAFETY_DOOR_BIT))
|
|
||||||
|
|
||||||
// Define probe switch input pin.
|
|
||||||
#define PROBE_DDR DDRK
|
|
||||||
#define PROBE_PIN PINK
|
|
||||||
#define PROBE_PORT PORTK
|
|
||||||
#define PROBE_BIT 7 // MEGA2560 Analog Pin 15
|
|
||||||
#define PROBE_MASK (1<<PROBE_BIT)
|
|
||||||
|
|
||||||
// Start of PWM & Stepper Enabled Spindle
|
|
||||||
#ifdef VARIABLE_SPINDLE
|
|
||||||
// Advanced Configuration Below You should not need to touch these variables
|
|
||||||
// Set Timer up to use TIMER4B which is attached to Digital Pin 7
|
|
||||||
#define PWM_MAX_VALUE 65535.0
|
|
||||||
#define TCCRA_REGISTER TCCR4A
|
|
||||||
#define TCCRB_REGISTER TCCR4B
|
|
||||||
#define OCR_REGISTER OCR4B
|
|
||||||
|
|
||||||
#define COMB_BIT COM4B1
|
|
||||||
#define WAVE0_REGISTER WGM40
|
|
||||||
#define WAVE1_REGISTER WGM41
|
|
||||||
#define WAVE2_REGISTER WGM42
|
|
||||||
#define WAVE3_REGISTER WGM43
|
|
||||||
|
|
||||||
#define SPINDLE_PWM_DDR DDRH
|
|
||||||
#define SPINDLE_PWM_PORT PORTH
|
|
||||||
#define SPINDLE_PWM_BIT 4 // MEGA2560 Digital Pin 97
|
|
||||||
#endif // End of VARIABLE_SPINDLE
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifdef CPU_MAP_CUSTOM_PROC
|
#ifdef CPU_MAP_CUSTOM_PROC
|
||||||
// For a custom pin map or different processor, copy and paste one of the default cpu map
|
// For a custom pin map or different processor, copy and edit one of the available cpu
|
||||||
// settings above and modify it to your needs. Then, make sure the defined name is also
|
// map files and modify it to your needs. Make sure the defined name is also changed in
|
||||||
// changed in the config.h file.
|
// the config.h file.
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
265
grbl/defaults.h
265
grbl/defaults.h
@ -18,285 +18,62 @@
|
|||||||
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
|
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* The defaults.h file serves as a central default settings file for different machine
|
/* 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
|
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
|
files listed here are supplied by users, so your results may vary. However, this should
|
||||||
a good starting point as you get to know your machine and tweak the settings for your
|
give you a good starting point as you get to know your machine and tweak the settings for
|
||||||
our nefarious needs. */
|
your nefarious needs.
|
||||||
|
Ensure one and only one of these DEFAULTS_XXX values is defined in config.h */
|
||||||
|
|
||||||
#ifndef defaults_h
|
#ifndef defaults_h
|
||||||
#define defaults_h
|
|
||||||
|
// 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
|
#ifdef DEFAULTS_GENERIC
|
||||||
// Grbl generic default settings. Should work across different machines.
|
// Grbl generic default settings. Should work across different machines.
|
||||||
#define DEFAULT_X_STEPS_PER_MM 250.0
|
#include "defaults/defaults_generic.h"
|
||||||
#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
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEFAULTS_SHERLINE_5400
|
#ifdef DEFAULTS_SHERLINE_5400
|
||||||
// Description: Sherline 5400 mill with three NEMA 23 Keling KL23H256-21-8B 185 oz-in stepper motors,
|
// 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.
|
// driven by three Pololu A4988 stepper drivers with a 30V, 6A power supply at 1.5A per winding.
|
||||||
#define MICROSTEPS 2
|
#include "defaults/defaults_sherline.h"
|
||||||
#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<<Y_AXIS)|(1<<Z_AXIS))
|
|
||||||
#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 // true
|
|
||||||
#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 50.0 // mm/min
|
|
||||||
#define DEFAULT_HOMING_SEEK_RATE 635.0 // mm/min
|
|
||||||
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
|
||||||
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEFAULTS_SHAPEOKO
|
#ifdef DEFAULTS_SHAPEOKO
|
||||||
// Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos
|
// Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos
|
||||||
// grblShield with a 24V, 4.2A power supply.
|
// grblShield with a 24V, 4.2A power supply.
|
||||||
#define MICROSTEPS_XY 8
|
#include "defaults/defaults_shapeoko.h"
|
||||||
#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<<Y_AXIS)|(1<<Z_AXIS))
|
|
||||||
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // 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.05 // 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 250.0 // mm/min
|
|
||||||
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
|
||||||
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEFAULTS_SHAPEOKO_2
|
#ifdef DEFAULTS_SHAPEOKO_2
|
||||||
// Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos
|
// Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos
|
||||||
// grblShield at 28V.
|
// grblShield at 28V.
|
||||||
#define MICROSTEPS_XY 8
|
#include "defaults/defaults_shapeoko2.h"
|
||||||
#define STEP_REVS_XY 200
|
#endif
|
||||||
#define MM_PER_REV_XY (2.0*20) // 2mm belt pitch, 20 pulley teeth
|
|
||||||
#define MICROSTEPS_Z 2
|
#ifdef DEFAULTS_SHAPEOKO_3
|
||||||
#define STEP_REVS_Z 200
|
// Description: Shapeoko CNC mill with three NEMA 23 stepper motors, driven by CarbideMotion
|
||||||
#define MM_PER_REV_Z 1.250 // 1.25 mm/rev leadscrew
|
#include "defaults/defaults_shapeoko3.h"
|
||||||
#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<<X_AXIS)|(1<<Z_AXIS))
|
|
||||||
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // 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.05 // 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 250.0 // mm/min
|
|
||||||
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
|
||||||
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEFAULTS_ZEN_TOOLWORKS_7x7
|
#ifdef DEFAULTS_ZEN_TOOLWORKS_7x7
|
||||||
// Description: Zen Toolworks 7x7 mill with three Shinano SST43D2121 65oz-in NEMA 17 stepper motors.
|
// 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.
|
// 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.
|
// Driven by 30V, 6A power supply and TI DRV8811 stepper motor drivers.
|
||||||
#define MICROSTEPS 8
|
#include "defaults/defaults_zen_toolworks_7x7.h"
|
||||||
#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<<Y_AXIS))
|
|
||||||
#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 250.0 // mm/min
|
|
||||||
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
|
||||||
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEFAULTS_OXCNC
|
#ifdef DEFAULTS_OXCNC
|
||||||
// Grbl settings for OpenBuilds OX CNC Machine
|
// Grbl settings for OpenBuilds OX CNC Machine
|
||||||
// http://www.openbuilds.com/builds/openbuilds-ox-cnc-machine.341/
|
// http://www.openbuilds.com/builds/openbuilds-ox-cnc-machine.341/
|
||||||
#define DEFAULT_X_STEPS_PER_MM 26.670
|
#include "defaults/defaults_oxcnc.h"
|
||||||
#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
|
#endif
|
||||||
|
|
||||||
#ifdef DEFAULTS_SIMULATOR
|
#ifdef DEFAULTS_SIMULATOR
|
||||||
// Settings only for Grbl Simulator (www.github.com/grbl/grbl-sim)
|
// Settings only for Grbl Simulator (www.github.com/grbl/grbl-sim)
|
||||||
// Grbl generic default settings. Should work across different machines.
|
#include "defaults/defaults_simulator.h"
|
||||||
#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
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
63
grbl/defaults/defaults_generic.h
Normal file
63
grbl/defaults/defaults_generic.h
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
defaults_generic.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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
|
64
grbl/defaults/defaults_oxcnc.h
Normal file
64
grbl/defaults/defaults_oxcnc.h
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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
|
71
grbl/defaults/defaults_shapeoko.h
Normal file
71
grbl/defaults/defaults_shapeoko.h
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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<<Y_AXIS)|(1<<Z_AXIS))
|
||||||
|
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // 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.05 // 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 250.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
||||||
|
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
||||||
|
|
||||||
|
#endif
|
70
grbl/defaults/defaults_shapeoko2.h
Normal file
70
grbl/defaults/defaults_shapeoko2.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
defaults_shapeoko2.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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<<X_AXIS)|(1<<Z_AXIS))
|
||||||
|
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // 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.05 // 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 250.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
||||||
|
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
||||||
|
|
||||||
|
#endif
|
68
grbl/defaults/defaults_shapeoko3.h
Normal file
68
grbl/defaults/defaults_shapeoko3.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
defaults_shapeoko3.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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<<X_AXIS)|(1<<Z_AXIS))
|
||||||
|
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // msec (0-254, 255 keeps steppers enabled)
|
||||||
|
#define DEFAULT_STATUS_REPORT_MASK 255 // All enabled
|
||||||
|
#define DEFAULT_JUNCTION_DEVIATION 0.02 // mm
|
||||||
|
#define DEFAULT_ARC_TOLERANCE 0.01 // 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 100.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_SEEK_RATE 1000.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_DEBOUNCE_DELAY 25 // msec (0-65k)
|
||||||
|
#define DEFAULT_HOMING_PULLOFF 5.0 // mm
|
||||||
|
|
||||||
|
#endif
|
67
grbl/defaults/defaults_sherline.h
Normal file
67
grbl/defaults/defaults_sherline.h
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
defaults_sherline.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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<<Y_AXIS)|(1<<Z_AXIS))
|
||||||
|
#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 // true
|
||||||
|
#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 50.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_SEEK_RATE 635.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
||||||
|
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
||||||
|
|
||||||
|
#endif
|
64
grbl/defaults/defaults_simulator.h
Normal file
64
grbl/defaults/defaults_simulator.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
defaults_simulator.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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
|
69
grbl/defaults/defaults_zen_toolworks_7x7.h
Normal file
69
grbl/defaults/defaults_zen_toolworks_7x7.h
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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<<Y_AXIS))
|
||||||
|
#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 250.0 // mm/min
|
||||||
|
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
|
||||||
|
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
45
grbl/gcode.c
45
grbl/gcode.c
@ -219,7 +219,7 @@ uint8_t gc_execute_line(char *line)
|
|||||||
else { gc_block.modal.distance = DISTANCE_MODE_INCREMENTAL; } // G91
|
else { gc_block.modal.distance = DISTANCE_MODE_INCREMENTAL; } // G91
|
||||||
} else {
|
} else {
|
||||||
word_bit = MODAL_GROUP_G4;
|
word_bit = MODAL_GROUP_G4;
|
||||||
if (mantissa != 10) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G90.1 not supported]
|
if ((mantissa != 10) || (int_value == 90)) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G90.1 not supported]
|
||||||
mantissa = 0; // Set to zero to indicate valid non-integer G command.
|
mantissa = 0; // Set to zero to indicate valid non-integer G command.
|
||||||
// Otherwise, arc IJK incremental mode is default. G91.1 does nothing.
|
// Otherwise, arc IJK incremental mode is default. G91.1 does nothing.
|
||||||
}
|
}
|
||||||
@ -1028,18 +1028,41 @@ uint8_t gc_execute_line(char *line)
|
|||||||
// refill and can only be resumed by the cycle start run-time command.
|
// refill and can only be resumed by the cycle start run-time command.
|
||||||
gc_state.modal.program_flow = gc_block.modal.program_flow;
|
gc_state.modal.program_flow = gc_block.modal.program_flow;
|
||||||
if (gc_state.modal.program_flow) {
|
if (gc_state.modal.program_flow) {
|
||||||
protocol_buffer_synchronize(); // Finish all remaining buffered motions. Program paused when complete.
|
protocol_buffer_synchronize(); // Sync and finish all remaining buffered motions before moving on.
|
||||||
|
if (gc_state.modal.program_flow == PROGRAM_FLOW_PAUSED) {
|
||||||
sys.suspend = true;
|
if (sys.state != STATE_CHECK_MODE) {
|
||||||
protocol_execute_realtime(); // Suspend execution. For both program pause or program end.
|
bit_true_atomic(sys.rt_exec_state, EXEC_FEED_HOLD); // Use feed hold for program pause.
|
||||||
|
protocol_execute_realtime(); // Execute suspend.
|
||||||
// If complete, reset to reload defaults (G92.2,G54,G17,G90,G94,M48,G40,M5,M9). Otherwise,
|
}
|
||||||
// re-enable program flow after pause complete, where cycle start will resume the program.
|
} else { // == PROGRAM_FLOW_COMPLETED
|
||||||
if (gc_state.modal.program_flow == PROGRAM_FLOW_COMPLETED) { mc_reset(); }
|
// Upon program complete, only a subset of g-codes reset to certain defaults, according to
|
||||||
else { gc_state.modal.program_flow = PROGRAM_FLOW_RUNNING; } // Resume from program pause.
|
// LinuxCNC's program end descriptions and testing. Only modal groups [G-code 1,2,3,5,7,12]
|
||||||
|
// and [M-code 7,8,9] reset to [G1,G17,G90,G94,G40,G54,M5,M9,M48]. The remaining modal groups
|
||||||
|
// [G-code 4,6,8,10,13,14,15] and [M-code 4,5,6] and the modal words [F,S,T,H] do not reset.
|
||||||
|
gc_state.modal.motion = MOTION_MODE_LINEAR;
|
||||||
|
gc_state.modal.plane_select = PLANE_SELECT_XY;
|
||||||
|
gc_state.modal.distance = DISTANCE_MODE_ABSOLUTE;
|
||||||
|
gc_state.modal.feed_rate = FEED_RATE_MODE_UNITS_PER_MIN;
|
||||||
|
// gc_state.modal.cutter_comp = CUTTER_COMP_DISABLE; // Not supported.
|
||||||
|
gc_state.modal.coord_select = 0; // G54
|
||||||
|
gc_state.modal.spindle = SPINDLE_DISABLE;
|
||||||
|
gc_state.modal.coolant = COOLANT_DISABLE;
|
||||||
|
// gc_state.modal.override = OVERRIDE_DISABLE; // Not supported.
|
||||||
|
|
||||||
|
// Execute coordinate change and spindle/coolant stop.
|
||||||
|
if (sys.state != STATE_CHECK_MODE) {
|
||||||
|
if (!(settings_read_coord_data(gc_state.modal.coord_select,coordinate_data))) { FAIL(STATUS_SETTING_READ_FAIL); }
|
||||||
|
memcpy(gc_state.coord_system,coordinate_data,sizeof(coordinate_data));
|
||||||
|
spindle_stop();
|
||||||
|
coolant_stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
report_feedback_message(MESSAGE_PROGRAM_END);
|
||||||
|
}
|
||||||
|
gc_state.modal.program_flow = PROGRAM_FLOW_RUNNING; // Reset program flow.
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: % to denote start of program. Sets auto cycle start?
|
// TODO: % to denote start of program.
|
||||||
return(STATUS_OK);
|
return(STATUS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
// Grbl versioning system
|
// Grbl versioning system
|
||||||
#define GRBL_VERSION "0.9i"
|
#define GRBL_VERSION "0.9i"
|
||||||
#define GRBL_VERSION_BUILD "20150329"
|
#define GRBL_VERSION_BUILD "20150523"
|
||||||
|
|
||||||
// Define standard libraries used by Grbl.
|
// Define standard libraries used by Grbl.
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
206
grbl/limits.c
206
grbl/limits.c
@ -22,9 +22,13 @@
|
|||||||
#include "grbl.h"
|
#include "grbl.h"
|
||||||
|
|
||||||
|
|
||||||
// Homing axis search distance multiplier. Computed by this value times the axis max travel.
|
// Homing axis search distance multiplier. Computed by this value times the cycle travel.
|
||||||
#define HOMING_AXIS_SEARCH_SCALAR 1.5 // Must be > 1 to ensure limit switch will be engaged.
|
#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()
|
void limits_init()
|
||||||
{
|
{
|
||||||
@ -51,6 +55,7 @@ void limits_init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Disables hard limits.
|
||||||
void limits_disable()
|
void limits_disable()
|
||||||
{
|
{
|
||||||
LIMIT_PCMSK &= ~LIMIT_MASK; // Disable specific pins of the Pin Change Interrupt
|
LIMIT_PCMSK &= ~LIMIT_MASK; // Disable specific pins of the Pin Change Interrupt
|
||||||
@ -58,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<N_AXIS; idx++) {
|
||||||
|
if (pin & get_limit_pin_mask(idx)) { limit_state |= (1 << idx); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(limit_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// This is the Limit Pin Change Interrupt, which handles the hard limit feature. A bouncing
|
// This is the Limit Pin Change Interrupt, which handles the hard limit feature. A bouncing
|
||||||
// limit switch can cause a lot of problems, like false readings and multiple interrupt calls.
|
// limit switch can cause a lot of problems, like false readings and multiple interrupt calls.
|
||||||
// If a switch is triggered at all, something bad has happened and treat it as such, regardless
|
// If a switch is triggered at all, something bad has happened and treat it as such, regardless
|
||||||
@ -80,10 +103,8 @@ void limits_disable()
|
|||||||
if (sys.state != STATE_ALARM) {
|
if (sys.state != STATE_ALARM) {
|
||||||
if (!(sys.rt_exec_alarm)) {
|
if (!(sys.rt_exec_alarm)) {
|
||||||
#ifdef HARD_LIMIT_FORCE_STATE_CHECK
|
#ifdef HARD_LIMIT_FORCE_STATE_CHECK
|
||||||
uint8_t bits = (LIMIT_PIN & LIMIT_MASK);
|
|
||||||
// Check limit pin state.
|
// Check limit pin state.
|
||||||
if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { bits ^= LIMIT_MASK; }
|
if (limits_get_state()) {
|
||||||
if (bits) {
|
|
||||||
mc_reset(); // Initiate system kill.
|
mc_reset(); // Initiate system kill.
|
||||||
bit_true_atomic(sys.rt_exec_alarm, (EXEC_ALARM_HARD_LIMIT|EXEC_CRITICAL_EVENT)); // Indicate hard limit critical event
|
bit_true_atomic(sys.rt_exec_alarm, (EXEC_ALARM_HARD_LIMIT|EXEC_CRITICAL_EVENT)); // Indicate hard limit critical event
|
||||||
}
|
}
|
||||||
@ -102,10 +123,8 @@ void limits_disable()
|
|||||||
WDTCSR &= ~(1<<WDIE); // Disable watchdog timer.
|
WDTCSR &= ~(1<<WDIE); // Disable watchdog timer.
|
||||||
if (sys.state != STATE_ALARM) { // Ignore if already in alarm state.
|
if (sys.state != STATE_ALARM) { // Ignore if already in alarm state.
|
||||||
if (!(sys.rt_exec_alarm)) {
|
if (!(sys.rt_exec_alarm)) {
|
||||||
uint8_t bits = (LIMIT_PIN & LIMIT_MASK);
|
|
||||||
// Check limit pin state.
|
// Check limit pin state.
|
||||||
if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { bits ^= LIMIT_MASK; }
|
if (limits_get_state()) {
|
||||||
if (bits) {
|
|
||||||
mc_reset(); // Initiate system kill.
|
mc_reset(); // Initiate system kill.
|
||||||
bit_true_atomic(sys.rt_exec_alarm, (EXEC_ALARM_HARD_LIMIT|EXEC_CRITICAL_EVENT)); // Indicate hard limit critical event
|
bit_true_atomic(sys.rt_exec_alarm, (EXEC_ALARM_HARD_LIMIT|EXEC_CRITICAL_EVENT)); // Indicate hard limit critical event
|
||||||
}
|
}
|
||||||
@ -114,7 +133,7 @@ void limits_disable()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Homes the specified cycle axes, sets the machine position, and performs a pull-off motion after
|
// Homes the specified cycle axes, sets the machine position, and performs a pull-off motion after
|
||||||
// completing. Homing is a special motion case, which involves rapid uncontrolled stops to locate
|
// completing. Homing is a special motion case, which involves rapid uncontrolled stops to locate
|
||||||
// the trigger point of the limit switches. The rapid stops are handled by a system level axis lock
|
// the trigger point of the limit switches. The rapid stops are handled by a system level axis lock
|
||||||
@ -126,19 +145,14 @@ void limits_go_home(uint8_t cycle_mask)
|
|||||||
{
|
{
|
||||||
if (sys.abort) { return; } // Block if system reset has been issued.
|
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.
|
// Initialize
|
||||||
bool approach = true;
|
|
||||||
float homing_rate = settings.homing_seek_rate;
|
|
||||||
uint8_t invert_pin, idx;
|
|
||||||
uint8_t n_cycle = (2*N_HOMING_LOCATE_CYCLE+1);
|
uint8_t n_cycle = (2*N_HOMING_LOCATE_CYCLE+1);
|
||||||
|
uint8_t step_pin[N_AXIS];
|
||||||
float target[N_AXIS];
|
float target[N_AXIS];
|
||||||
|
|
||||||
uint8_t limit_pin[N_AXIS], step_pin[N_AXIS];
|
|
||||||
|
|
||||||
float max_travel = 0.0;
|
float max_travel = 0.0;
|
||||||
|
uint8_t idx;
|
||||||
for (idx=0; idx<N_AXIS; idx++) {
|
for (idx=0; idx<N_AXIS; idx++) {
|
||||||
// Initialize limit and step pin masks
|
// Initialize step pin masks
|
||||||
limit_pin[idx] = get_limit_pin_mask(idx);
|
|
||||||
step_pin[idx] = get_step_pin_mask(idx);
|
step_pin[idx] = get_step_pin_mask(idx);
|
||||||
#ifdef COREXY
|
#ifdef COREXY
|
||||||
if ((idx==A_MOTOR)||(idx==B_MOTOR)) { step_pin[idx] = (get_step_pin_mask(X_AXIS)|get_step_pin_mask(Y_AXIS)); }
|
if ((idx==A_MOTOR)||(idx==B_MOTOR)) { step_pin[idx] = (get_step_pin_mask(X_AXIS)|get_step_pin_mask(Y_AXIS)); }
|
||||||
@ -149,32 +163,33 @@ void limits_go_home(uint8_t cycle_mask)
|
|||||||
// NOTE: settings.max_travel[] is stored as a negative value.
|
// NOTE: settings.max_travel[] is stored as a negative value.
|
||||||
max_travel = max(max_travel,(-HOMING_AXIS_SEARCH_SCALAR)*settings.max_travel[idx]);
|
max_travel = max(max_travel,(-HOMING_AXIS_SEARCH_SCALAR)*settings.max_travel[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
plan_reset(); // Reset planner buffer to zero planner current position and to clear previous motions.
|
// Set search mode with approach at seek rate to quickly engage the specified cycle_mask limit switches.
|
||||||
plan_sync_position(); // Sync planner position to current machine position.
|
bool approach = true;
|
||||||
|
float homing_rate = settings.homing_seek_rate;
|
||||||
|
|
||||||
|
uint8_t limit_state, axislock, n_active_axis;
|
||||||
do {
|
do {
|
||||||
// Initialize invert_pin boolean based on approach and invert pin user setting.
|
|
||||||
if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { invert_pin = approach; }
|
system_convert_array_steps_to_mpos(target,sys.position);
|
||||||
else { invert_pin = !approach; }
|
|
||||||
|
|
||||||
// Initialize and declare variables needed for homing routine.
|
// Initialize and declare variables needed for homing routine.
|
||||||
uint8_t axislock = 0;
|
axislock = 0;
|
||||||
uint8_t n_active_axis = 0;
|
n_active_axis = 0;
|
||||||
system_convert_array_steps_to_mpos(target,sys.position);
|
|
||||||
for (idx=0; idx<N_AXIS; idx++) {
|
for (idx=0; idx<N_AXIS; idx++) {
|
||||||
// Set target location for active axes and setup computation for homing rate.
|
// Set target location for active axes and setup computation for homing rate.
|
||||||
if (bit_istrue(cycle_mask,bit(idx))) {
|
if (bit_istrue(cycle_mask,bit(idx))) {
|
||||||
n_active_axis++;
|
n_active_axis++;
|
||||||
|
sys.position[idx] = 0;
|
||||||
// Set target direction based on cycle mask and homing cycle approach state.
|
// Set target direction based on cycle mask and homing cycle approach state.
|
||||||
|
// NOTE: This happens to compile smaller than any other implementation tried.
|
||||||
if (bit_istrue(settings.homing_dir_mask,bit(idx))) {
|
if (bit_istrue(settings.homing_dir_mask,bit(idx))) {
|
||||||
if (approach) { target[idx] -= max_travel; }
|
if (approach) { target[idx] = -max_travel; }
|
||||||
else { target[idx] += max_travel; }
|
else { target[idx] = max_travel; }
|
||||||
} else {
|
} else {
|
||||||
if (approach) { target[idx] += max_travel; }
|
if (approach) { target[idx] = max_travel; }
|
||||||
else { target[idx] -= max_travel; }
|
else { target[idx] = -max_travel; }
|
||||||
}
|
}
|
||||||
// Apply axislock to the step port pins active in this cycle.
|
// Apply axislock to the step port pins active in this cycle.
|
||||||
axislock |= step_pin[idx];
|
axislock |= step_pin[idx];
|
||||||
@ -183,10 +198,10 @@ void limits_go_home(uint8_t cycle_mask)
|
|||||||
}
|
}
|
||||||
homing_rate *= sqrt(n_active_axis); // [sqrt(N_AXIS)] Adjust so individual axes all move at homing rate.
|
homing_rate *= sqrt(n_active_axis); // [sqrt(N_AXIS)] Adjust so individual axes all move at homing rate.
|
||||||
sys.homing_axis_lock = axislock;
|
sys.homing_axis_lock = axislock;
|
||||||
|
|
||||||
// Perform homing cycle. Planner buffer should be empty, as required to initiate the homing cycle.
|
plan_sync_position(); // Sync planner position to current machine position.
|
||||||
uint8_t limit_state;
|
|
||||||
|
|
||||||
|
// Perform homing cycle. Planner buffer should be empty, as required to initiate the homing cycle.
|
||||||
#ifdef USE_LINE_NUMBERS
|
#ifdef USE_LINE_NUMBERS
|
||||||
plan_buffer_line(target, homing_rate, false, HOMING_CYCLE_LINE_NUMBER); // Bypass mc_line(). Directly plan homing motion.
|
plan_buffer_line(target, homing_rate, false, HOMING_CYCLE_LINE_NUMBER); // Bypass mc_line(). Directly plan homing motion.
|
||||||
#else
|
#else
|
||||||
@ -195,39 +210,57 @@ void limits_go_home(uint8_t cycle_mask)
|
|||||||
|
|
||||||
st_prep_buffer(); // Prep and fill segment buffer from newly planned block.
|
st_prep_buffer(); // Prep and fill segment buffer from newly planned block.
|
||||||
st_wake_up(); // Initiate motion
|
st_wake_up(); // Initiate motion
|
||||||
do {
|
do {
|
||||||
// Check limit state. Lock out cycle axes when they change.
|
if (approach) {
|
||||||
limit_state = LIMIT_PIN;
|
// Check limit state. Lock out cycle axes when they change.
|
||||||
if (invert_pin) { limit_state ^= LIMIT_MASK; }
|
limit_state = limits_get_state();
|
||||||
for (idx=0; idx<N_AXIS; idx++) {
|
for (idx=0; idx<N_AXIS; idx++) {
|
||||||
if (axislock & step_pin[idx]) {
|
if (axislock & step_pin[idx]) {
|
||||||
if (limit_state & limit_pin[idx]) { axislock &= ~(step_pin[idx]); }
|
if (limit_state & (1 << idx)) { axislock &= ~(step_pin[idx]); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sys.homing_axis_lock = axislock;
|
sys.homing_axis_lock = axislock;
|
||||||
st_prep_buffer(); // Check and prep segment buffer. NOTE: Should take no longer than 200us.
|
}
|
||||||
|
|
||||||
|
st_prep_buffer(); // Check and prep segment buffer. NOTE: Should take no longer than 200us.
|
||||||
|
|
||||||
|
// Exit routines: No time to run protocol_execute_realtime() in this loop.
|
||||||
|
if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_RESET | EXEC_CYCLE_STOP)) {
|
||||||
|
// Homing failure: Limit switches are still engaged after pull-off motion
|
||||||
|
if ( (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_RESET)) || // Safety door or reset issued
|
||||||
|
(!approach && (limits_get_state() & cycle_mask)) || // Limit switch still engaged after pull-off motion
|
||||||
|
( approach && (sys.rt_exec_state & EXEC_CYCLE_STOP)) ) { // Limit switch not found during approach.
|
||||||
|
mc_reset(); // Stop motors, if they are running.
|
||||||
|
protocol_execute_realtime();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
// Pull-off motion complete. Disable CYCLE_STOP from executing.
|
||||||
|
bit_false_atomic(sys.rt_exec_state,EXEC_CYCLE_STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (STEP_MASK & axislock);
|
||||||
|
|
||||||
// Exit routines: User abort homing and alarm upon safety door or no limit switch found.
|
|
||||||
// No time to run protocol_execute_realtime() in this loop.
|
|
||||||
if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_RESET | EXEC_CYCLE_STOP)) {
|
|
||||||
if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_CYCLE_STOP)) { mc_reset(); }
|
|
||||||
protocol_execute_realtime();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} while (STEP_MASK & axislock);
|
|
||||||
|
|
||||||
st_reset(); // Immediately force kill steppers and reset step segment buffer.
|
st_reset(); // Immediately force kill steppers and reset step segment buffer.
|
||||||
plan_reset(); // Reset planner buffer. Zero planner positions. Ensure homing motion is cleared.
|
plan_reset(); // Reset planner buffer to zero planner current position and to clear previous motions.
|
||||||
plan_sync_position(); // Sync planner position to current machine position
|
|
||||||
|
|
||||||
delay_ms(settings.homing_debounce_delay); // Delay to allow transient dynamics to dissipate.
|
delay_ms(settings.homing_debounce_delay); // Delay to allow transient dynamics to dissipate.
|
||||||
|
|
||||||
// Reverse direction and reset homing rate for locate cycle(s).
|
// Reverse direction and reset homing rate for locate cycle(s).
|
||||||
homing_rate = settings.homing_feed_rate;
|
|
||||||
approach = !approach;
|
approach = !approach;
|
||||||
|
|
||||||
|
// After first cycle, homing enters locating phase. Shorten search to pull-off distance.
|
||||||
|
if (approach) {
|
||||||
|
max_travel = settings.homing_pulloff*HOMING_AXIS_LOCATE_SCALAR;
|
||||||
|
homing_rate = settings.homing_feed_rate;
|
||||||
|
} else {
|
||||||
|
max_travel = settings.homing_pulloff;
|
||||||
|
homing_rate = settings.homing_seek_rate;
|
||||||
|
}
|
||||||
|
|
||||||
} while (n_cycle-- > 0);
|
} while (n_cycle-- > 0);
|
||||||
|
|
||||||
// The active cycle axes should now be homed and machine limits have been located. By
|
// 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
|
// 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,
|
// can be on either side of an axes, check and set axes machine zero appropriately. Also,
|
||||||
@ -242,13 +275,16 @@ void limits_go_home(uint8_t cycle_mask)
|
|||||||
for (idx=0; idx<N_AXIS; idx++) {
|
for (idx=0; idx<N_AXIS; idx++) {
|
||||||
// NOTE: settings.max_travel[] is stored as a negative value.
|
// NOTE: settings.max_travel[] is stored as a negative value.
|
||||||
if (cycle_mask & bit(idx)) {
|
if (cycle_mask & bit(idx)) {
|
||||||
set_axis_position = 0;
|
#ifdef HOMING_FORCE_SET_ORIGIN
|
||||||
#ifndef HOMING_FORCE_SET_ORIGIN
|
set_axis_position = 0;
|
||||||
|
#else
|
||||||
if ( bit_istrue(settings.homing_dir_mask,bit(idx)) ) {
|
if ( bit_istrue(settings.homing_dir_mask,bit(idx)) ) {
|
||||||
set_axis_position = lround(settings.max_travel[idx]*settings.steps_per_mm[idx]);
|
set_axis_position = lround((settings.max_travel[idx]+settings.homing_pulloff)*settings.steps_per_mm[idx]);
|
||||||
|
} else {
|
||||||
|
set_axis_position = lround(-settings.homing_pulloff*settings.steps_per_mm[idx]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef COREXY
|
#ifdef COREXY
|
||||||
if (idx==X_AXIS) {
|
if (idx==X_AXIS) {
|
||||||
off_axis_position = (sys.position[B_MOTOR] - sys.position[A_MOTOR])/2;
|
off_axis_position = (sys.position[B_MOTOR] - sys.position[A_MOTOR])/2;
|
||||||
@ -268,42 +304,8 @@ void limits_go_home(uint8_t cycle_mask)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
plan_sync_position(); // Sync planner position to homed machine position.
|
plan_sync_position(); // Sync planner position to homed machine position.
|
||||||
|
|
||||||
// Set pull-off motion target. Seperated from above loop if target is dependent on sys.position.
|
// sys.state = STATE_HOMING; // Ensure system state set as homing before returning.
|
||||||
if (settings.homing_pulloff > 0.0) {
|
|
||||||
for (idx=0; idx<N_AXIS; idx++) {
|
|
||||||
if (cycle_mask & bit(idx)) {
|
|
||||||
#ifdef HOMING_FORCE_SET_ORIGIN
|
|
||||||
target[idx] = settings.homing_pulloff;
|
|
||||||
if ( bit_isfalse(settings.homing_dir_mask,bit(idx)) ) { target[idx] = -target[idx]; }
|
|
||||||
#else
|
|
||||||
if ( bit_istrue(settings.homing_dir_mask,bit(idx)) ) {
|
|
||||||
target[idx] = settings.homing_pulloff+settings.max_travel[idx];
|
|
||||||
} else {
|
|
||||||
target[idx] = -settings.homing_pulloff;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
// Non-active cycle axis. Set target to not move during pull-off.
|
|
||||||
target[idx] = system_convert_axis_steps_to_mpos(sys.position, idx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef USE_LINE_NUMBERS
|
|
||||||
plan_buffer_line(target, settings.homing_seek_rate, false, HOMING_CYCLE_LINE_NUMBER); // Bypass mc_line(). Directly plan motion.
|
|
||||||
#else
|
|
||||||
plan_buffer_line(target, settings.homing_seek_rate, false); // Bypass mc_line(). Directly plan motion.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Initiate pull-off using main motion control routines.
|
|
||||||
// TODO : Clean up state routines so that this motion still shows homing state.
|
|
||||||
sys.state = STATE_IDLE;
|
|
||||||
bit_true_atomic(sys.rt_exec_state, EXEC_CYCLE_START);
|
|
||||||
protocol_execute_realtime();
|
|
||||||
protocol_buffer_synchronize(); // Complete pull-off motion.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set system state to homing before returning.
|
|
||||||
sys.state = STATE_HOMING;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,8 +26,12 @@
|
|||||||
// Initialize the limits module
|
// Initialize the limits module
|
||||||
void limits_init();
|
void limits_init();
|
||||||
|
|
||||||
|
// Disables hard limits.
|
||||||
void limits_disable();
|
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.
|
// Perform one portion of the homing cycle based on the input settings.
|
||||||
void limits_go_home(uint8_t cycle_mask);
|
void limits_go_home(uint8_t cycle_mask);
|
||||||
|
|
||||||
|
@ -225,9 +225,7 @@ void mc_homing_cycle()
|
|||||||
// with machines with limits wired on both ends of travel to one limit pin.
|
// 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.
|
// TODO: Move the pin-specific LIMIT_PIN call to limits.c as a function.
|
||||||
#ifdef LIMITS_TWO_SWITCHES_ON_AXES
|
#ifdef LIMITS_TWO_SWITCHES_ON_AXES
|
||||||
uint8_t limit_state = (LIMIT_PIN & LIMIT_MASK);
|
if (limits_get_state()) {
|
||||||
if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { limit_state ^= LIMIT_MASK; }
|
|
||||||
if (limit_state) {
|
|
||||||
mc_reset(); // Issue system reset and ensure spindle and coolant are shutdown.
|
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));
|
bit_true_atomic(sys.rt_exec_alarm, (EXEC_ALARM_HARD_LIMIT|EXEC_CRITICAL_EVENT));
|
||||||
return;
|
return;
|
||||||
@ -256,7 +254,7 @@ void mc_homing_cycle()
|
|||||||
|
|
||||||
// Gcode parser position was circumvented by the limits_go_home() routine, so sync position now.
|
// Gcode parser position was circumvented by the limits_go_home() routine, so sync position now.
|
||||||
gc_sync_position();
|
gc_sync_position();
|
||||||
|
|
||||||
// If hard limits feature enabled, re-enable hard limits pin change register after homing cycle.
|
// If hard limits feature enabled, re-enable hard limits pin change register after homing cycle.
|
||||||
limits_init();
|
limits_init();
|
||||||
}
|
}
|
||||||
|
@ -277,8 +277,8 @@ uint8_t plan_check_full_buffer()
|
|||||||
#ifdef COREXY
|
#ifdef COREXY
|
||||||
target_steps[A_MOTOR] = lround(target[A_MOTOR]*settings.steps_per_mm[A_MOTOR]);
|
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]);
|
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[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[B_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (idx=0; idx<N_AXIS; idx++) {
|
for (idx=0; idx<N_AXIS; idx++) {
|
||||||
@ -292,9 +292,9 @@ uint8_t plan_check_full_buffer()
|
|||||||
}
|
}
|
||||||
block->step_event_count = max(block->step_event_count, block->steps[idx]);
|
block->step_event_count = max(block->step_event_count, block->steps[idx]);
|
||||||
if (idx == A_MOTOR) {
|
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];
|
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 {
|
} else {
|
||||||
delta_mm = (target_steps[idx] - pl.position[idx])/settings.steps_per_mm[idx];
|
delta_mm = (target_steps[idx] - pl.position[idx])/settings.steps_per_mm[idx];
|
||||||
}
|
}
|
||||||
|
71
grbl/print.c
71
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];
|
unsigned char buf[digits];
|
||||||
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];
|
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
|
|
||||||
while (n > 0) {
|
for (; i < digits; i++) {
|
||||||
buf[i++] = n % 10 + '0';
|
buf[i] = n % base ;
|
||||||
n /= 10;
|
n /= base;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; i > 0; i--)
|
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) {
|
if (n < 0) {
|
||||||
serial_write('-');
|
serial_write('-');
|
||||||
print_uint32_base10((-n));
|
print_uint32_base10(-n);
|
||||||
} else {
|
} else {
|
||||||
print_uint32_base10(n);
|
print_uint32_base10(n);
|
||||||
}
|
}
|
||||||
@ -194,12 +192,13 @@ void printFloat_RateValue(float n) {
|
|||||||
void printFloat_SettingValue(float n) { printFloat(n,N_DECIMAL_SETTINGVALUE); }
|
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.
|
// Debug tool to print free memory in bytes at the called point.
|
||||||
void printFreeMemory()
|
// 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.
|
// extern int __heap_start, *__brkval;
|
||||||
free = (int) &free - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
|
// uint16_t free; // Up to 64k values.
|
||||||
printInteger((int32_t)free);
|
// free = (int) &free - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
|
||||||
printString(" ");
|
// printInteger((int32_t)free);
|
||||||
}
|
// printString(" ");
|
||||||
|
// }
|
||||||
|
@ -31,8 +31,13 @@ void printInteger(long n);
|
|||||||
|
|
||||||
void print_uint32_base10(uint32_t 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);
|
void print_uint8_base2(uint8_t n);
|
||||||
|
|
||||||
|
// Prints an uint8 variable in base 10.
|
||||||
void print_uint8_base10(uint8_t n);
|
void print_uint8_base10(uint8_t n);
|
||||||
|
|
||||||
void printFloat(float n, uint8_t decimal_places);
|
void printFloat(float n, uint8_t decimal_places);
|
||||||
|
@ -136,6 +136,8 @@ void report_feedback_message(uint8_t message_code)
|
|||||||
printPgmString(PSTR("Disabled")); break;
|
printPgmString(PSTR("Disabled")); break;
|
||||||
case MESSAGE_SAFETY_DOOR_AJAR:
|
case MESSAGE_SAFETY_DOOR_AJAR:
|
||||||
printPgmString(PSTR("Check Door")); break;
|
printPgmString(PSTR("Check Door")); break;
|
||||||
|
case MESSAGE_PROGRAM_END:
|
||||||
|
printPgmString(PSTR("Pgm End")); break;
|
||||||
}
|
}
|
||||||
printPgmString(PSTR("]\r\n"));
|
printPgmString(PSTR("]\r\n"));
|
||||||
}
|
}
|
||||||
@ -420,7 +422,7 @@ void report_realtime_status()
|
|||||||
// the system power on location (0,0,0) and work coordinate position (G54 and G92 applied). Eventually
|
// the system power on location (0,0,0) and work coordinate position (G54 and G92 applied). Eventually
|
||||||
// to be added are distance to go on block, processed block id, and feed rate. Also a settings bitmask
|
// to be added are distance to go on block, processed block id, and feed rate. Also a settings bitmask
|
||||||
// for a user to select the desired real-time data.
|
// for a user to select the desired real-time data.
|
||||||
uint8_t i;
|
uint8_t idx;
|
||||||
int32_t current_position[N_AXIS]; // Copy current state of the system position variable
|
int32_t current_position[N_AXIS]; // Copy current state of the system position variable
|
||||||
memcpy(current_position,sys.position,sizeof(sys.position));
|
memcpy(current_position,sys.position,sizeof(sys.position));
|
||||||
float print_position[N_AXIS];
|
float print_position[N_AXIS];
|
||||||
@ -445,21 +447,21 @@ void report_realtime_status()
|
|||||||
// Report machine position
|
// Report machine position
|
||||||
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_MACHINE_POSITION)) {
|
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_MACHINE_POSITION)) {
|
||||||
printPgmString(PSTR(",MPos:"));
|
printPgmString(PSTR(",MPos:"));
|
||||||
for (i=0; i< N_AXIS; i++) {
|
for (idx=0; idx< N_AXIS; idx++) {
|
||||||
printFloat_CoordValue(print_position[i]);
|
printFloat_CoordValue(print_position[idx]);
|
||||||
if (i < (N_AXIS-1)) { printPgmString(PSTR(",")); }
|
if (idx < (N_AXIS-1)) { printPgmString(PSTR(",")); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Report work position
|
// Report work position
|
||||||
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_WORK_POSITION)) {
|
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_WORK_POSITION)) {
|
||||||
printPgmString(PSTR(",WPos:"));
|
printPgmString(PSTR(",WPos:"));
|
||||||
for (i=0; i< N_AXIS; i++) {
|
for (idx=0; idx< N_AXIS; idx++) {
|
||||||
// Apply work coordinate offsets and tool length offset to current position.
|
// Apply work coordinate offsets and tool length offset to current position.
|
||||||
print_position[i] -= gc_state.coord_system[i]+gc_state.coord_offset[i];
|
print_position[idx] -= gc_state.coord_system[idx]+gc_state.coord_offset[idx];
|
||||||
if (i == TOOL_LENGTH_OFFSET_AXIS) { print_position[i] -= gc_state.tool_length_offset; }
|
if (idx == TOOL_LENGTH_OFFSET_AXIS) { print_position[idx] -= gc_state.tool_length_offset; }
|
||||||
printFloat_CoordValue(print_position[i]);
|
printFloat_CoordValue(print_position[idx]);
|
||||||
if (i < (N_AXIS-1)) { printPgmString(PSTR(",")); }
|
if (idx < (N_AXIS-1)) { printPgmString(PSTR(",")); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,14 +494,10 @@ void report_realtime_status()
|
|||||||
printFloat_RateValue(st_get_realtime_rate());
|
printFloat_RateValue(st_get_realtime_rate());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef REPORT_LIMIT_PIN_STATE
|
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_LIMIT_PINS)) {
|
||||||
printPgmString(PSTR(",Lim:"));
|
printPgmString(PSTR(",Lim:"));
|
||||||
uint8_t idx;
|
print_unsigned_int8(limits_get_state(),2,N_AXIS);
|
||||||
for (idx=0; idx<N_AXIS; idx++) {
|
}
|
||||||
if (LIMIT_PIN & get_limit_pin_mask(idx)) { printPgmString(PSTR("1")); }
|
|
||||||
else { printPgmString(PSTR("0")); }
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef REPORT_CONTROL_PIN_STATE
|
#ifdef REPORT_CONTROL_PIN_STATE
|
||||||
printPgmString(PSTR(",Ctl:"));
|
printPgmString(PSTR(",Ctl:"));
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
#define MESSAGE_ENABLED 4
|
#define MESSAGE_ENABLED 4
|
||||||
#define MESSAGE_DISABLED 5
|
#define MESSAGE_DISABLED 5
|
||||||
#define MESSAGE_SAFETY_DOOR_AJAR 6
|
#define MESSAGE_SAFETY_DOOR_AJAR 6
|
||||||
|
#define MESSAGE_PROGRAM_END 7
|
||||||
|
|
||||||
// Prints system status messages.
|
// Prints system status messages.
|
||||||
void report_status_message(uint8_t status_code);
|
void report_status_message(uint8_t status_code);
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#define BITFLAG_RT_STATUS_WORK_POSITION bit(1)
|
#define BITFLAG_RT_STATUS_WORK_POSITION bit(1)
|
||||||
#define BITFLAG_RT_STATUS_PLANNER_BUFFER bit(2)
|
#define BITFLAG_RT_STATUS_PLANNER_BUFFER bit(2)
|
||||||
#define BITFLAG_RT_STATUS_SERIAL_RX bit(3)
|
#define BITFLAG_RT_STATUS_SERIAL_RX bit(3)
|
||||||
|
#define BITFLAG_RT_STATUS_LIMIT_PINS bit(4)
|
||||||
|
|
||||||
// Define EEPROM memory address location values for Grbl settings and parameters
|
// Define EEPROM memory address location values for Grbl settings and parameters
|
||||||
// NOTE: The Atmega328p has 1KB EEPROM. The upper half is reserved for parameters and
|
// NOTE: The Atmega328p has 1KB EEPROM. The upper half is reserved for parameters and
|
||||||
|
@ -324,11 +324,8 @@ ISR(TIMER1_COMPA_vect)
|
|||||||
st.exec_block = &st_block_buffer[st.exec_block_index];
|
st.exec_block = &st_block_buffer[st.exec_block_index];
|
||||||
|
|
||||||
// Initialize Bresenham line and distance counters
|
// Initialize Bresenham line and distance counters
|
||||||
st.counter_x = (st.exec_block->step_event_count >> 1);
|
st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1);
|
||||||
st.counter_y = st.counter_x;
|
|
||||||
st.counter_z = st.counter_x;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
st.dir_outbits = st.exec_block->direction_bits ^ dir_port_invert_mask;
|
st.dir_outbits = st.exec_block->direction_bits ^ dir_port_invert_mask;
|
||||||
|
|
||||||
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
|
||||||
|
@ -252,8 +252,10 @@ float system_convert_axis_steps_to_mpos(int32_t *steps, uint8_t idx)
|
|||||||
#ifdef COREXY
|
#ifdef COREXY
|
||||||
if (idx==A_MOTOR) {
|
if (idx==A_MOTOR) {
|
||||||
pos = 0.5*((steps[A_MOTOR] + steps[B_MOTOR])/settings.steps_per_mm[idx]);
|
pos = 0.5*((steps[A_MOTOR] + steps[B_MOTOR])/settings.steps_per_mm[idx]);
|
||||||
} else { // (idx==B_MOTOR)
|
} else if (idx==B_MOTOR) {
|
||||||
pos = 0.5*((steps[A_MOTOR] - steps[B_MOTOR])/settings.steps_per_mm[idx]);
|
pos = 0.5*((steps[A_MOTOR] - steps[B_MOTOR])/settings.steps_per_mm[idx]);
|
||||||
|
} else {
|
||||||
|
pos = steps[idx]/settings.steps_per_mm[idx];
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
pos = steps[idx]/settings.steps_per_mm[idx];
|
pos = steps[idx]/settings.steps_per_mm[idx];
|
||||||
|
@ -71,7 +71,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t abort; // System abort flag. Forces exit back to main loop for reset.
|
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 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_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.
|
volatile uint8_t rt_exec_alarm; // Global realtime executor bitflag variable for setting various alarms.
|
||||||
|
Loading…
Reference in New Issue
Block a user