Fix SENSORLESS_HOMING for Core Kinematics (#9868)

This commit is contained in:
Scott Lahteine
2018-03-01 01:37:31 -06:00
committed by GitHub
parent 2d1233b86c
commit a446433c87
6 changed files with 74 additions and 50 deletions

View File

@ -232,15 +232,9 @@ bool home_delta() {
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130) && defined(X_HOMING_SENSITIVITY)
tmc_sensorless_homing(stepperX);
#endif
#if ENABLED(Y_IS_TMC2130) && defined(Y_HOMING_SENSITIVITY)
tmc_sensorless_homing(stepperY);
#endif
#if ENABLED(Z_IS_TMC2130) && defined(Z_HOMING_SENSITIVITY)
tmc_sensorless_homing(stepperZ);
#endif
sensorless_homing_per_axis(X_AXIS);
sensorless_homing_per_axis(Y_AXIS);
sensorless_homing_per_axis(Z_AXIS);
#endif
// Move all carriages together linearly until an endstop is hit.
@ -251,15 +245,9 @@ bool home_delta() {
// Re-enable stealthChop if used. Disable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130) && defined(X_HOMING_SENSITIVITY)
tmc_sensorless_homing(stepperX, false);
#endif
#if ENABLED(Y_IS_TMC2130) && defined(Y_HOMING_SENSITIVITY)
tmc_sensorless_homing(stepperY, false);
#endif
#if ENABLED(Z_IS_TMC2130) && defined(Z_HOMING_SENSITIVITY)
tmc_sensorless_homing(stepperZ, false);
#endif
sensorless_homing_per_axis(X_AXIS, false);
sensorless_homing_per_axis(Y_AXIS, false);
sensorless_homing_per_axis(Z_AXIS, false);
#endif
// If an endstop was not hit, then damage can occur if homing is continued.

View File

@ -966,6 +966,48 @@ inline float get_homing_bump_feedrate(const AxisEnum axis) {
return homing_feedrate(axis) / hbd;
}
#if ENABLED(SENSORLESS_HOMING)
/**
* Set sensorless homing if the axis has it, accounting for Core Kinematics.
*/
void sensorless_homing_per_axis(const AxisEnum axis, const bool enable/*=true*/) {
switch (axis) {
#if X_SENSORLESS
case X_AXIS:
tmc_sensorless_homing(stepperX, enable);
#if CORE_IS_XY && Y_SENSORLESS
tmc_sensorless_homing(stepperY, enable);
#elif CORE_IS_XZ && Z_SENSORLESS
tmc_sensorless_homing(stepperZ, enable);
#endif
break;
#endif
#if Y_SENSORLESS
case Y_AXIS:
tmc_sensorless_homing(stepperY, enable);
#if CORE_IS_XY && X_SENSORLESS
tmc_sensorless_homing(stepperX, enable);
#elif CORE_IS_YZ && Z_SENSORLESS
tmc_sensorless_homing(stepperZ, enable);
#endif
break;
#endif
#if Z_SENSORLESS
case Z_AXIS:
tmc_sensorless_homing(stepperZ, enable);
#if CORE_IS_XZ && X_SENSORLESS
tmc_sensorless_homing(stepperX, enable);
#elif CORE_IS_YZ && Y_SENSORLESS
tmc_sensorless_homing(stepperY, enable);
#endif
break;
#endif
}
}
#endif // SENSORLESS_HOMING
/**
* Home an individual linear axis
*/
@ -992,15 +1034,7 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130) && defined(X_HOMING_SENSITIVITY)
if (axis == X_AXIS) tmc_sensorless_homing(stepperX);
#endif
#if ENABLED(Y_IS_TMC2130) && defined(Y_HOMING_SENSITIVITY)
if (axis == Y_AXIS) tmc_sensorless_homing(stepperY);
#endif
#if ENABLED(Z_IS_TMC2130) && defined(Z_HOMING_SENSITIVITY)
if (axis == Z_AXIS) tmc_sensorless_homing(stepperZ);
#endif
sensorless_homing_per_axis(axis);
#endif
// Tell the planner the axis is at 0
@ -1031,15 +1065,7 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa
// Re-enable stealthChop if used. Disable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130) && defined(X_HOMING_SENSITIVITY)
if (axis == X_AXIS) tmc_sensorless_homing(stepperX, false);
#endif
#if ENABLED(Y_IS_TMC2130) && defined(Y_HOMING_SENSITIVITY)
if (axis == Y_AXIS) tmc_sensorless_homing(stepperY, false);
#endif
#if ENABLED(Z_IS_TMC2130) && defined(Z_HOMING_SENSITIVITY)
if (axis == Z_AXIS) tmc_sensorless_homing(stepperZ, false);
#endif
sensorless_homing_per_axis(axis, false);
#endif
#if ENABLED(DEBUG_LEVELING_FEATURE)

View File

@ -191,6 +191,10 @@ void set_axis_is_at_home(const AxisEnum axis);
void homeaxis(const AxisEnum axis);
#define HOMEAXIS(LETTER) homeaxis(LETTER##_AXIS)
#if ENABLED(SENSORLESS_HOMING)
void sensorless_homing_per_axis(const AxisEnum axis, const bool enable=true);
#endif
//
// Macros
//