diff --git a/Libraries/Encoder/Encoder.c b/Libraries/Encoder/Encoder.c index 030767b..4741578 100644 --- a/Libraries/Encoder/Encoder.c +++ b/Libraries/Encoder/Encoder.c @@ -18,9 +18,16 @@ along with Grbl-Advanced. If not, see . */ #include "Encoder.h" +#include "Config.h" #include "TIM.h" +#ifndef PULSES_PER_REV + #define PULSES_PER_REV 360 + #pragma message("Using 360 pulses/rev for encoder") +#endif + + static uint32_t OvfCnt = 0; static uint32_t CntValue = 0; diff --git a/Libraries/Encoder/Encoder.h b/Libraries/Encoder/Encoder.h index 18ee22a..51ffa46 100644 --- a/Libraries/Encoder/Encoder.h +++ b/Libraries/Encoder/Encoder.h @@ -5,9 +5,6 @@ #include -#define PULSES_PER_REV 360 - - #ifdef __cplusplus extern "C" { #endif diff --git a/README.md b/README.md index af4bfa8..c691c9b 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ make all flash List of Supported G-Codes in Grbl-Advanced: - Non-Modal Commands: G4, G10L2, G10L20, G28, G30, G28.1, G30.1, G53, G92, G92.1 - Motion Modes: G0, G1, G2, G3, G33, G38.2, G38.3, G38.4, G38.5, G80 - - Canned Cycles: G76, G81, G82, G83 + - Canned Cycles: G73, G76, G81, G82, G83 - Feed Rate Modes: G93, G94 - Unit Modes: G20, G21 - Distance Modes: G90, G91 diff --git a/grbl/Config.h b/grbl/Config.h index f1cacce..e71a1c1 100644 --- a/grbl/Config.h +++ b/grbl/Config.h @@ -51,6 +51,8 @@ // Uncomment for lathe mode //#define LATHE_MODE +// Pulses/revolutions of spindle encoder +#define PULSES_PER_REV 360 // Define realtime command special characters. These characters are 'picked-off' directly from the diff --git a/grbl/GCode.c b/grbl/GCode.c index 36a6e54..c38eb7c 100644 --- a/grbl/GCode.c +++ b/grbl/GCode.c @@ -332,9 +332,11 @@ uint8_t GC_ExecuteLine(char *line) } break; + case 73: case 81: case 82: - case 83: // Canned drilling cycles + case 83: + // Canned drilling cycles word_bit = MODAL_GROUP_G1; gc_block.modal.motion = int_value; axis_command = AXIS_COMMAND_MOTION_MODE; @@ -907,7 +909,7 @@ uint8_t GC_ExecuteLine(char *line) } // [10.1 Canned drilling cycle]: R/P/Q value missing. - if(gc_block.modal.motion == MOTION_MODE_DRILL || gc_block.modal.motion == MOTION_MODE_DRILL_DWELL || gc_block.modal.motion == MOTION_MODE_DRILL_PECK) + if (gc_block.modal.motion == MOTION_MODE_DRILL || gc_block.modal.motion == MOTION_MODE_DRILL_DWELL || gc_block.modal.motion == MOTION_MODE_DRILL_PECK || gc_block.modal.motion == MOTION_MODE_DRILL_BREAK) { if(BIT_IS_FALSE(value_words, BIT(WORD_R))) { @@ -926,7 +928,7 @@ uint8_t GC_ExecuteLine(char *line) // TODO: Check validity of P BIT_FALSE(value_words, BIT(WORD_P)); } - if(gc_block.modal.motion == MOTION_MODE_DRILL_PECK) + if (gc_block.modal.motion == MOTION_MODE_DRILL_PECK || gc_block.modal.motion == MOTION_MODE_DRILL_BREAK) { if(BIT_IS_FALSE(value_words, BIT(WORD_Q))) { @@ -1581,6 +1583,7 @@ uint8_t GC_ExecuteLine(char *line) case MOTION_MODE_DRILL: case MOTION_MODE_DRILL_DWELL: case MOTION_MODE_DRILL_PECK: + case MOTION_MODE_DRILL_BREAK: if(BIT_TRUE(value_words, (BIT(WORD_L)))) { } @@ -1763,9 +1766,6 @@ uint8_t GC_ExecuteLine(char *line) } // else { pl_data->spindle_speed = 0.0; } // Initialized as zero already. - // [5. Select tool ]: Only tracks tool value. - gc_state.tool = gc_block.values.t; - // [6. Change tool ]: M6 if(change_tool && (settings.tool_change > 0)) { @@ -1947,7 +1947,7 @@ uint8_t GC_ExecuteLine(char *line) MC_Arc(gc_block.values.xyz, pl_data, gc_state.position, gc_block.values.ijk, gc_block.values.r, axis_0, axis_1, axis_linear, BIT_IS_TRUE(gc_parser_flags, GC_PARSER_ARC_IS_CLOCKWISE)); } - else if(gc_state.modal.motion == MOTION_MODE_DRILL || gc_state.modal.motion == MOTION_MODE_DRILL_DWELL || gc_state.modal.motion == MOTION_MODE_DRILL_PECK) + else if (gc_state.modal.motion == MOTION_MODE_DRILL || gc_state.modal.motion == MOTION_MODE_DRILL_DWELL || gc_state.modal.motion == MOTION_MODE_DRILL_PECK || gc_state.modal.motion == MOTION_MODE_DRILL_BREAK) { float xyz[N_AXIS] = {0.0}; float clear_z = gc_block.values.r + gc_state.coord_system[Z_AXIS] + gc_state.coord_offset[Z_AXIS]; @@ -2010,7 +2010,7 @@ uint8_t GC_ExecuteLine(char *line) pl_data->condition |= PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag. MC_Line(xyz, pl_data); - if(gc_state.modal.motion != MOTION_MODE_DRILL_PECK) + if (gc_state.modal.motion == MOTION_MODE_DRILL || gc_state.modal.motion == MOTION_MODE_DRILL_DWELL) { //-- G81 -- G82 --// // 3. Move the Z-axis at the current feed rate to the Z position. @@ -2018,10 +2018,10 @@ uint8_t GC_ExecuteLine(char *line) xyz[Z_AXIS] = gc_block.values.xyz[Z_AXIS]; MC_Line(xyz, pl_data); } - else + else // Peck / Chip break { uint8_t exit = 0; - //-- G83 --// + //-- G83/73 --// for(float curr_z = clear_z - gc_block.values.q; exit == 0; curr_z -= gc_block.values.q) { // Check if target depth exceeds final depth @@ -2036,10 +2036,20 @@ uint8_t GC_ExecuteLine(char *line) xyz[Z_AXIS] = curr_z; MC_Line(xyz, pl_data); - // Rapid move to R - xyz[Z_AXIS] = clear_z; - pl_data->condition |= PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag. - MC_Line(xyz, pl_data); + if(gc_state.modal.motion == MOTION_MODE_DRILL_PECK) + { + // Rapid move to R + xyz[Z_AXIS] = clear_z; + pl_data->condition |= PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag. + MC_Line(xyz, pl_data); + } + else + { + // Back off a bit + xyz[Z_AXIS] += 2; + pl_data->condition |= PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag. + MC_Line(xyz, pl_data); + } if(exit == 0) { diff --git a/grbl/GCode.h b/grbl/GCode.h index b5d487b..258227b 100644 --- a/grbl/GCode.h +++ b/grbl/GCode.h @@ -76,18 +76,19 @@ // Modal Group G1: Motion modes -#define MOTION_MODE_SEEK 0 // G0 (Default: Must be zero) -#define MOTION_MODE_LINEAR 1 // G1 (Do not alter value) -#define MOTION_MODE_CW_ARC 2 // G2 (Do not alter value) -#define MOTION_MODE_CCW_ARC 3 // G3 (Do not alter value) +#define MOTION_MODE_SEEK 0 // G0 (Default: Must be zero) +#define MOTION_MODE_LINEAR 1 // G1 (Do not alter value) +#define MOTION_MODE_CW_ARC 2 // G2 (Do not alter value) +#define MOTION_MODE_CCW_ARC 3 // G3 (Do not alter value) #define MOTION_MODE_PROBE_TOWARD 140 // G38.2 (Do not alter value) #define MOTION_MODE_PROBE_TOWARD_NO_ERROR 141 // G38.3 (Do not alter value) #define MOTION_MODE_PROBE_AWAY 142 // G38.4 (Do not alter value) #define MOTION_MODE_PROBE_AWAY_NO_ERROR 143 // G38.5 (Do not alter value) -#define MOTION_MODE_NONE 80 // G80 (Do not alter value) +#define MOTION_MODE_NONE 80 // G80 (Do not alter value) #define MOTION_MODE_DRILL 81 // G81 #define MOTION_MODE_DRILL_DWELL 82 // G82 #define MOTION_MODE_DRILL_PECK 83 // G83 +#define MOTION_MODE_DRILL_BREAK 73 // G73 #define MOTION_MODE_SPINDLE_SYNC 33 // G33 #define MOTION_MODE_THREADING 76 // G76 diff --git a/grbl/Protocol.c b/grbl/Protocol.c index 9bf0dda..8c982a7 100644 --- a/grbl/Protocol.c +++ b/grbl/Protocol.c @@ -577,7 +577,6 @@ void Protocol_ExecRtSystem(void) sys.state = STATE_IDLE; } } - System_ClearExecStateFlag(EXEC_CYCLE_STOP); } }