Skip to content
This repository has been archived by the owner on Jan 14, 2024. It is now read-only.

Commit

Permalink
Fix for #230, added $LIM command
Browse files Browse the repository at this point in the history
  • Loading branch information
terjeio committed Feb 14, 2021
1 parent e41177b commit e402593
Show file tree
Hide file tree
Showing 129 changed files with 2,216 additions and 624 deletions.
3 changes: 2 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Auto detect text files and perform LF normalization
* text=auto
* text=auto eol=lf


# Custom for Visual Studio
*.cs diff=csharp
Expand Down
2 changes: 1 addition & 1 deletion drivers/ESP32/grbl/grbl.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
#define GRBL_VERSION_BUILD "20210131"
#define GRBL_VERSION_BUILD "20210214"

// The following symbols are set here if not already set by the compiler or in config.h
// Do NOT change here!
Expand Down
51 changes: 31 additions & 20 deletions drivers/ESP32/grbl/limits.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,24 @@ ISR_CODE axes_signals_t limit_signals_merge (limit_signals_t signals)
}

// Merge (bitwise or) home switch inputs (typically aquired from limits.min and limits.min2).
ISR_CODE axes_signals_t homing_signals_merge (limit_signals_t signals)
ISR_CODE static axes_signals_t homing_signals_select (limit_signals_t signals, axes_signals_t auto_square, squaring_mode_t mode)
{
axes_signals_t state;

switch(mode) {

case SquaringMode_A:
signals.min.mask &= ~auto_square.mask;
break;

case SquaringMode_B:
signals.min2.mask &= ~auto_square.mask;
break;

default:
break;
}

state.mask = signals.min.mask | signals.min2.mask;

return state;
Expand Down Expand Up @@ -185,8 +199,8 @@ static bool limits_pull_off (axes_signals_t axis, float distance)
if (rt_exec & EXEC_SAFETY_DOOR)
system_set_exec_alarm(Alarm_HomingFailDoor);

// Homing failure condition: Homing switch still engaged after pull-off motion
if (homing_signals_merge(hal.homing.get_state()).mask & axis.mask)
// Homing failure condition: Homing switch(es) still engaged after pull-off motion
if (homing_signals_select(hal.homing.get_state(), (axes_signals_t){0}, SquaringMode_Both).mask & axis.mask)
system_set_exec_alarm(Alarm_FailPulloff);

if (sys.rt_exec_alarm) {
Expand Down Expand Up @@ -227,8 +241,10 @@ static bool limits_homing_cycle (axes_signals_t cycle, axes_signals_t auto_squar
uint_fast8_t step_pin[N_AXIS], n_active_axis, dual_motor_axis = 0;
float target[N_AXIS];
float max_travel = 0.0f, homing_rate = settings.homing.seek_rate;
bool approach = true, autosquare_check = false, both_motors = !!auto_square.mask;
bool approach = true, autosquare_check = false;
axes_signals_t axislock, homing_state;
limit_signals_t limits_state;
squaring_mode_t squaring_mode = SquaringMode_Both;
plan_line_data_t plan_data;

// Initialize plan data struct for homing motion.
Expand Down Expand Up @@ -313,22 +329,16 @@ static bool limits_homing_cycle (axes_signals_t cycle, axes_signals_t auto_squar
if (approach) {

// Check homing switches state. Lock out cycle axes when they change.
homing_state = homing_signals_merge(hal.homing.get_state());
homing_state = homing_signals_select(limits_state = hal.homing.get_state(), auto_square, squaring_mode);

// Auto squaring check
if(both_motors && (homing_state.mask & auto_square.mask)) {
both_motors = false;
homing_state.mask &= ~auto_square.mask;
hal.stepper.disable_motors(auto_square, SquaringMode_A);
if(hal.homing.get_state().min2.mask & auto_square.mask) {
hal.stepper.disable_motors(auto_square, SquaringMode_B);
if(hal.homing.get_state().min.mask & auto_square.mask) {
homing_state.mask |= auto_square.mask;
hal.stepper.disable_motors((axes_signals_t){0}, SquaringMode_Both);
}
}
if((autosquare_check = (homing_state.mask & auto_square.mask) == 0))
if((homing_state.mask & auto_square.mask) && squaring_mode == SquaringMode_Both) {
if((autosquare_check = (limits_state.min.mask & auto_square.mask) != (limits_state.min2.mask & auto_square.mask))) {
initial_trigger_position = sys.position[dual_motor_axis];
homing_state.mask &= ~auto_square.mask;
squaring_mode = (limits_state.min.mask & auto_square.mask) ? SquaringMode_A : SquaringMode_B;
hal.stepper.disable_motors(auto_square, squaring_mode);
}
}

idx = N_AXIS;
Expand Down Expand Up @@ -371,7 +381,7 @@ static bool limits_homing_cycle (axes_signals_t cycle, axes_signals_t auto_squar
system_set_exec_alarm(Alarm_HomingFailDoor);

// Homing failure condition: Homing switch(es) still engaged after pull-off motion
if (!approach && (homing_signals_merge(hal.homing.get_state()).mask & cycle.mask))
if (!approach && (homing_signals_select(hal.homing.get_state(), (axes_signals_t){0}, SquaringMode_Both).mask & cycle.mask))
system_set_exec_alarm(Alarm_FailPulloff);

// Homing failure condition: Limit switch not found during approach.
Expand Down Expand Up @@ -411,8 +421,9 @@ static bool limits_homing_cycle (axes_signals_t cycle, axes_signals_t auto_squar
homing_rate = settings.homing.seek_rate;
}

if((both_motors = !!auto_square.mask)) {
if(auto_square.mask) {
autosquare_check = false;
squaring_mode = SquaringMode_Both;
hal.stepper.disable_motors((axes_signals_t){0}, SquaringMode_Both);
}

Expand Down Expand Up @@ -472,7 +483,7 @@ bool limits_go_home (axes_signals_t cycle)
if(auto_squared.mask != auto_square.mask)
return false; // Attempt at squaring more than one auto squared axis at the same time.

if((auto_squared.mask & homing_signals_merge(hal.homing.get_state()).mask) && !limits_pull_off(auto_square, settings.homing.pulloff * HOMING_AXIS_LOCATE_SCALAR))
if((auto_squared.mask & homing_signals_select(hal.homing.get_state(), (axes_signals_t){0}, SquaringMode_Both).mask) && !limits_pull_off(auto_square, settings.homing.pulloff * HOMING_AXIS_LOCATE_SCALAR))
return false; // Auto squaring with limit switch asserted is not allowed.
}

Expand Down
2 changes: 2 additions & 0 deletions drivers/ESP32/grbl/motion_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,8 @@ status_code_t mc_homing_cycle (axes_signals_t cycle)
{
bool home_all = cycle.mask == 0;

memset(&sys.last_event.limits, 0, sizeof(limit_signals_t));

if(settings.homing.flags.manual && (home_all ? sys.homing.mask : (cycle.mask & sys.homing.mask)) == 0) {

if(home_all)
Expand Down
36 changes: 29 additions & 7 deletions drivers/ESP32/grbl/report.c
Original file line number Diff line number Diff line change
Expand Up @@ -1775,6 +1775,19 @@ status_code_t report_setting_group_details (bool by_id, char *prefix)
return Status_OK;
}

static char *add_limits (char *buf, limit_signals_t limits)
{
buf = axis_signals_tostring(buf, limits.min);
*buf++ = ',';
buf = axis_signals_tostring(buf, limits.max);
*buf++ = ',';
buf = axis_signals_tostring(buf, limits.min2);
*buf++ = ',';
buf = axis_signals_tostring(buf, limits.max2);

return buf;
}

status_code_t report_last_signals_event (sys_state_t state, char *args)
{
char *append = &buf[12];
Expand All @@ -1783,20 +1796,29 @@ status_code_t report_last_signals_event (sys_state_t state, char *args)

append = control_signals_tostring(append, sys.last_event.control);
*append++ = ',';
append = axis_signals_tostring(append, sys.last_event.limits.min);
*append++ = ',';
append = axis_signals_tostring(append, sys.last_event.limits.max);
*append++ = ',';
append = axis_signals_tostring(append, sys.last_event.limits.min2);
*append++ = ',';
append = axis_signals_tostring(append, sys.last_event.limits.max2);
append = add_limits(append, sys.last_event.limits);

hal.stream.write(buf);
hal.stream.write("]" ASCII_EOL);

return Status_OK;
}

status_code_t report_current_limit_state (sys_state_t state, char *args)
{
char *append = &buf[8];

strcpy(buf, "[LIMITS:");

append = add_limits(append, hal.limits.get_state());

hal.stream.write(buf);
hal.stream.write("]" ASCII_EOL);

return Status_OK;
}


// Prints spindle data (encoder pulse and index count, angular position).
status_code_t report_spindle_data (sys_state_t state, char *args)
{
Expand Down
1 change: 1 addition & 0 deletions drivers/ESP32/grbl/report.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ status_code_t report_setting_group_details (bool by_id, char *prefix);
status_code_t report_settings_details (bool human_readable, setting_id_t setting, setting_group_t group);

status_code_t report_last_signals_event (sys_state_t state, char *args);
status_code_t report_current_limit_state (sys_state_t state, char *args);

// Prints spindle data (encoder pulse and index count, angular position).
status_code_t report_spindle_data (sys_state_t state, char *args);
Expand Down
1 change: 1 addition & 0 deletions drivers/ESP32/grbl/system.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ const sys_command_t sys_commands[] = {
{"E*", true, enumerate_all},
{"RST", false, settings_reset},
{"LEV", true, report_last_signals_event},
{"LIM", true, report_current_limit_state},
{"SD", false, report_spindle_data},
{"SR", false, spindle_reset_data},
#ifdef DEBUGOUT
Expand Down
4 changes: 3 additions & 1 deletion drivers/ESP32/grbl/tool_change.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,9 @@ status_code_t tc_probe_workpiece (void)
if(ok && protocol_buffer_synchronize()) {
sync_position();
block_cycle_start = false;
report_message("Remove any touch plate and press cycle start to continue.", Message_Plain);
report_message(settings.tool_change.mode == ToolChange_Manual_G59_3
? "Press cycle start to continue."
: "Remove any touch plate and press cycle start to continue.", Message_Plain);
}

return ok ? Status_OK : Status_GCodeToolError;
Expand Down
60 changes: 6 additions & 54 deletions drivers/IMXRT1062/grblHAL_Teensy4/src/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -878,21 +878,21 @@ inline static limit_signals_t limitsGetState()
{
limit_signals_t signals = {0};

signals.min.mask = signals.max.mask = settings.limits.invert.mask;
signals.min.mask = signals.min2.mask = settings.limits.invert.mask;

signals.min.x = (LimitX.reg->DR & LimitX.bit) != 0;
#ifdef X2_LIMIT_PIN
signals.max.x = (LimitX2.reg->DR & LimitX2.bit) != 0;
signals.min2.x = (LimitX2.reg->DR & LimitX2.bit) != 0;
#endif

signals.min.y = (LimitY.reg->DR & LimitY.bit) != 0;
#ifdef Y2_LIMIT_PIN
signals.max.y = (LimitY2.reg->DR & LimitY2.bit) != 0;
signals.min2.y = (LimitY2.reg->DR & LimitY2.bit) != 0;
#endif

signals.min.z = (LimitZ.reg->DR & LimitZ.bit) != 0;
#ifdef Z2_LIMIT_PIN
signals.max.z = (LimitZ2.reg->DR & LimitZ2.bit) != 0;
signals.min2.z = (LimitZ2.reg->DR & LimitZ2.bit) != 0;
#endif

#ifdef A_LIMIT_PIN
Expand All @@ -907,7 +907,7 @@ inline static limit_signals_t limitsGetState()

if(settings.limits.invert.mask) {
signals.min.value ^= settings.limits.invert.mask;
signals.max.value ^= settings.limits.invert.mask;
signals.min2.value ^= settings.limits.invert.mask;
}

return signals;
Expand Down Expand Up @@ -972,50 +972,6 @@ static void StepperDisableMotors (axes_signals_t axes, squaring_mode_t mode)
motors_2.mask = (mode == SquaringMode_B || mode == SquaringMode_Both ? axes.mask : 0) ^ AXES_BITMASK;
}

// Returns limit state as an axes_signals_t variable.
// Each bitfield bit indicates an axis limit, where triggered is 1 and not triggered is 0.
static limit_signals_t limitsGetHomeState()
{
limit_signals_t signals = {0};

if(motors_1.mask) {

signals.min.mask = settings.limits.invert.mask;

if(motors_1.x)
signals.min.x = (LimitX.reg->DR & LimitX.bit) != 0;
if(motors_1.y)
signals.min.y = (LimitY.reg->DR & LimitY.bit) != 0;
if(motors_1.z)
signals.min.z = (LimitZ.reg->DR & LimitZ.bit) != 0;

if (settings.limits.invert.mask)
signals.min.mask ^= settings.limits.invert.mask;
}

if(motors_2.mask) {

signals.max.mask = settings.limits.invert.mask;

#ifdef X2_LIMIT_PIN
if(motors_2.x)
signals.max.x = (LimitX2.reg->DR & LimitX2.bit) != 0;
#endif
#ifdef Y2_LIMIT_PIN
if(motors_2.y)
signals.max.y = (LimitY2.reg->DR & LimitY2.bit) != 0;
#endif
#ifdef Z2_LIMIT_PIN
if(motors_2.z)
signals.max.z = (LimitZ2.reg->DR & LimitZ2.bit) != 0;
#endif
if (settings.limits.invert.mask)
signals.max.mask ^= settings.limits.invert.mask;
}

return signals;
}

#endif

// Enable/disable limit pins interrupt.
Expand All @@ -1036,10 +992,6 @@ static void limitsEnable (bool on, bool homing)
inputpin[i].gpio.reg->IMR &= ~inputpin[i].gpio.bit; // Disable interrupt.
}
} while(i);

#ifdef SQUARING_ENABLED
hal.homing.get_state = homing ? limitsGetHomeState : limitsGetState;
#endif
}

// Returns system state as a control_signals_t bitmap variable.
Expand Down Expand Up @@ -2130,7 +2082,7 @@ bool driver_init (void)
options[strlen(options) - 1] = '\0';

hal.info = "iMXRT1062";
hal.driver_version = "210212";
hal.driver_version = "210214";
#ifdef BOARD_NAME
hal.board = BOARD_NAME;
#endif
Expand Down
2 changes: 1 addition & 1 deletion drivers/IMXRT1062/grblHAL_Teensy4/src/grbl/grbl.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
#define GRBL_VERSION_BUILD "20210131"
#define GRBL_VERSION_BUILD "20210214"

// The following symbols are set here if not already set by the compiler or in config.h
// Do NOT change here!
Expand Down
Loading

0 comments on commit e402593

Please sign in to comment.