Enable Z axis and delta sensorless homing (#9516)

This commit is contained in:
Thomas Moore
2018-02-08 04:20:44 -06:00
committed by Scott Lahteine
parent b2f8b4ada5
commit 1541224a81
50 changed files with 437 additions and 288 deletions

View File

@ -37,7 +37,7 @@
*/
// Change EEPROM version if the structure changes
#define EEPROM_VERSION "V50"
#define EEPROM_VERSION "V51"
#define EEPROM_OFFSET 100
// Check the integrity of data offsets.
@ -216,7 +216,7 @@ typedef struct SettingsDataStruct {
// HAS_TRINAMIC
//
uint16_t tmc_stepper_current[11]; // M906 X Y Z X2 Y2 Z2 E0 E1 E2 E3 E4
int16_t tmc_sgt[2]; // M914 X Y
int16_t tmc_sgt[3]; // M914 X Y Z
//
// LIN_ADVANCE
@ -720,21 +720,27 @@ void MarlinSettings::postprocess() {
//
int16_t thrs;
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130)
#if ENABLED(X_IS_TMC2130) && defined(X_HOMING_SENSITIVITY)
thrs = stepperX.sgt();
#else
thrs = 0;
#endif
EEPROM_WRITE(thrs);
#if ENABLED(Y_IS_TMC2130)
#if ENABLED(Y_IS_TMC2130) && defined(Y_HOMING_SENSITIVITY)
thrs = stepperY.sgt();
#else
thrs = 0;
#endif
EEPROM_WRITE(thrs);
#if ENABLED(Z_IS_TMC2130) && defined(Z_HOMING_SENSITIVITY)
thrs = stepperZ.sgt();
#else
thrs = 0;
#endif
EEPROM_WRITE(thrs);
#else
thrs = 0;
for (uint8_t q = 2; q--;) EEPROM_WRITE(thrs);
for (uint8_t q = 3; q--;) EEPROM_WRITE(thrs);
#endif
//
@ -1251,25 +1257,40 @@ void MarlinSettings::postprocess() {
int16_t thrs;
#if ENABLED(SENSORLESS_HOMING)
EEPROM_READ(thrs);
if (!validating) {
#if ENABLED(X_IS_TMC2130)
stepperX.sgt(thrs);
#endif
#if ENABLED(X2_IS_TMC2130)
stepperX2.sgt(thrs);
#endif
}
#ifdef X_HOMING_SENSITIVITY
if (!validating) {
#if ENABLED(X_IS_TMC2130)
stepperX.sgt(thrs);
#endif
#if ENABLED(X2_IS_TMC2130)
stepperX2.sgt(thrs);
#endif
}
#endif
EEPROM_READ(thrs);
if (!validating) {
#if ENABLED(Y_IS_TMC2130)
stepperY.sgt(thrs);
#endif
#if ENABLED(Y2_IS_TMC2130)
stepperY2.sgt(thrs);
#endif
}
#ifdef Y_HOMING_SENSITIVITY
if (!validating) {
#if ENABLED(Y_IS_TMC2130)
stepperY.sgt(thrs);
#endif
#if ENABLED(Y2_IS_TMC2130)
stepperY2.sgt(thrs);
#endif
}
#endif
EEPROM_READ(thrs);
#ifdef Z_HOMING_SENSITIVITY
if (!validating) {
#if ENABLED(Z_IS_TMC2130)
stepperZ.sgt(thrs);
#endif
#if ENABLED(Z2_IS_TMC2130)
stepperZ2.sgt(thrs);
#endif
}
#endif
#else
for (uint8_t q = 0; q < 2; q++) EEPROM_READ(thrs);
for (uint8_t q = 0; q < 3; q++) EEPROM_READ(thrs);
#endif
//
@ -1780,17 +1801,29 @@ void MarlinSettings::reset(
#endif
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130)
stepperX.sgt(X_HOMING_SENSITIVITY);
#ifdef X_HOMING_SENSITIVITY
#if ENABLED(X_IS_TMC2130)
stepperX.sgt(X_HOMING_SENSITIVITY);
#endif
#if ENABLED(X2_IS_TMC2130)
stepperX2.sgt(X_HOMING_SENSITIVITY);
#endif
#endif
#if ENABLED(X2_IS_TMC2130)
stepperX2.sgt(X_HOMING_SENSITIVITY);
#ifdef Y_HOMING_SENSITIVITY
#if ENABLED(Y_IS_TMC2130)
stepperY.sgt(Y_HOMING_SENSITIVITY);
#endif
#if ENABLED(Y2_IS_TMC2130)
stepperY2.sgt(Y_HOMING_SENSITIVITY);
#endif
#endif
#if ENABLED(Y_IS_TMC2130)
stepperY.sgt(Y_HOMING_SENSITIVITY);
#endif
#if ENABLED(Y2_IS_TMC2130)
stepperY2.sgt(Y_HOMING_SENSITIVITY);
#ifdef Z_HOMING_SENSITIVITY
#if ENABLED(Z_IS_TMC2130)
stepperZ.sgt(Z_HOMING_SENSITIVITY);
#endif
#if ENABLED(Z2_IS_TMC2130)
stepperZ2.sgt(Z_HOMING_SENSITIVITY);
#endif
#endif
#endif
@ -2336,17 +2369,29 @@ void MarlinSettings::reset(
}
CONFIG_ECHO_START;
SERIAL_ECHOPGM_P(port, " M914");
#if ENABLED(X_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " X", stepperX.sgt());
#ifdef X_HOMING_SENSITIVITY
#if ENABLED(X_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " X", stepperX.sgt());
#endif
#if ENABLED(X2_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " X2 ", stepperX2.sgt());
#endif
#endif
#if ENABLED(X2_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " X2 ", stepperX2.sgt());
#ifdef Y_HOMING_SENSITIVITY
#if ENABLED(Y_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " Y", stepperY.sgt());
#endif
#if ENABLED(Y2_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " Y2 ", stepperY2.sgt());
#endif
#endif
#if ENABLED(Y_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " Y", stepperY.sgt());
#endif
#if ENABLED(X2_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " Y2 ", stepperY2.sgt());
#ifdef Z_HOMING_SENSITIVITY
#if ENABLED(Z_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " Z ", stepperZ.sgt());
#endif
#if ENABLED(Z2_IS_TMC2130)
SERIAL_ECHOPAIR_P(port, " Z2 ", stepperZ2.sgt());
#endif
#endif
SERIAL_EOL_P(port);
#endif

View File

@ -37,6 +37,10 @@
#include "../lcd/ultralcd.h"
#include "../Marlin.h"
#if ENABLED(SENSORLESS_HOMING)
#include "../feature/tmc_util.h"
#endif
// Initialized by settings.load()
float delta_height,
delta_endstop_adj[ABC] = { 0 },
@ -226,12 +230,38 @@ bool home_delta() {
ZERO(current_position);
sync_plan_position();
// 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
#endif
// Move all carriages together linearly until an endstop is hit.
current_position[X_AXIS] = current_position[Y_AXIS] = current_position[Z_AXIS] = (delta_height + 10);
feedrate_mm_s = homing_feedrate(X_AXIS);
line_to_current_position();
stepper.synchronize();
// 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
#endif
// If an endstop was not hit, then damage can occur if homing is continued.
// This can occur if the delta height not set correctly.
if (!(Endstops::endstop_hit_bits & (_BV(X_MAX) | _BV(Y_MAX) | _BV(Z_MAX)))) {

View File

@ -990,6 +990,19 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa
if (axis == Z_AXIS) probing_pause(true);
#endif
// 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
#endif
// Tell the planner the axis is at 0
current_position[axis] = 0;
@ -1016,6 +1029,19 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa
endstops.hit_on_purpose();
// 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
#endif
#if ENABLED(DEBUG_LEVELING_FEATURE)
if (DEBUGGING(LEVELING)) {
SERIAL_ECHOPAIR("<<< do_homing_move(", axis_codes[axis]);
@ -1168,16 +1194,6 @@ void homeaxis(const AxisEnum axis) {
if (axis == Z_AXIS) stepper.set_homing_flag_z(true);
#endif
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130)
if (axis == X_AXIS) tmc_sensorless_homing(stepperX);
#endif
#if ENABLED(Y_IS_TMC2130)
if (axis == Y_AXIS) tmc_sensorless_homing(stepperY);
#endif
#endif
// Fast move towards endstop until triggered
#if ENABLED(DEBUG_LEVELING_FEATURE)
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("Home 1 Fast:");
@ -1278,16 +1294,6 @@ void homeaxis(const AxisEnum axis) {
#endif
// Re-enable stealthChop if used. Disable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130)
if (axis == X_AXIS) tmc_sensorless_homing(stepperX, false);
#endif
#if ENABLED(Y_IS_TMC2130)
if (axis == Y_AXIS) tmc_sensorless_homing(stepperY, false);
#endif
#endif
// Put away the Z probe
#if HOMING_Z_WITH_PROBE
if (axis == Z_AXIS && STOW_PROBE()) return;