Trinamic: Split stealthChop, improve driver monitoring, etc. (#12582)

This commit is contained in:
teemuatlut
2018-12-07 23:34:21 +02:00
committed by Scott Lahteine
parent 055cb2b956
commit 50b2fbd031
77 changed files with 1671 additions and 290 deletions

View File

@ -1046,40 +1046,78 @@ inline float get_homing_bump_feedrate(const AxisEnum axis) {
}
#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*/) {
sensorless_t start_sensorless_homing_per_axis(const AxisEnum axis) {
sensorless_t stealth_states { false, false, false };
switch (axis) {
default: break;
#if X_SENSORLESS
case X_AXIS:
tmc_stallguard(stepperX, enable);
stealth_states.x = tmc_enable_stallguard(stepperX);
#if CORE_IS_XY && Y_SENSORLESS
tmc_stallguard(stepperY, enable);
stealth_states.y = tmc_enable_stallguard(stepperY);
#elif CORE_IS_XZ && Z_SENSORLESS
tmc_stallguard(stepperZ, enable);
stealth_states.z = tmc_enable_stallguard(stepperZ);
#endif
break;
#endif
#if Y_SENSORLESS
case Y_AXIS:
tmc_stallguard(stepperY, enable);
stealth_states.y = tmc_enable_stallguard(stepperY);
#if CORE_IS_XY && X_SENSORLESS
tmc_stallguard(stepperX, enable);
stealth_states.x = tmc_enable_stallguard(stepperX);
#elif CORE_IS_YZ && Z_SENSORLESS
tmc_stallguard(stepperZ, enable);
stealth_states.z = tmc_enable_stallguard(stepperZ);
#endif
break;
#endif
#if Z_SENSORLESS
case Z_AXIS:
tmc_stallguard(stepperZ, enable);
stealth_states.z = tmc_enable_stallguard(stepperZ);
#if CORE_IS_XZ && X_SENSORLESS
tmc_stallguard(stepperX, enable);
stealth_states.x = tmc_enable_stallguard(stepperX);
#elif CORE_IS_YZ && Y_SENSORLESS
tmc_stallguard(stepperY, enable);
stealth_states.y = tmc_enable_stallguard(stepperY);
#endif
break;
#endif
}
return stealth_states;
}
void end_sensorless_homing_per_axis(const AxisEnum axis, sensorless_t enable_stealth) {
switch (axis) {
default: break;
#if X_SENSORLESS
case X_AXIS:
tmc_disable_stallguard(stepperX, enable_stealth.x);
#if CORE_IS_XY && Y_SENSORLESS
tmc_disable_stallguard(stepperY, enable_stealth.y);
#elif CORE_IS_XZ && Z_SENSORLESS
tmc_disable_stallguard(stepperZ, enable_stealth.z);
#endif
break;
#endif
#if Y_SENSORLESS
case Y_AXIS:
tmc_disable_stallguard(stepperY, enable_stealth.y);
#if CORE_IS_XY && X_SENSORLESS
tmc_disable_stallguard(stepperX, enable_stealth.x);
#elif CORE_IS_YZ && Z_SENSORLESS
tmc_disable_stallguard(stepperZ, enable_stealth.z);
#endif
break;
#endif
#if Z_SENSORLESS
case Z_AXIS:
tmc_disable_stallguard(stepperZ, enable_stealth.z);
#if CORE_IS_XZ && X_SENSORLESS
tmc_disable_stallguard(stepperX, enable_stealth.x);
#elif CORE_IS_YZ && Y_SENSORLESS
tmc_disable_stallguard(stepperY, enable_stealth.y);
#endif
break;
#endif
@ -1126,6 +1164,10 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm
home_dir(axis);
const bool is_home_dir = (axis_home_dir > 0) == (distance > 0);
#if ENABLED(SENSORLESS_HOMING)
sensorless_t stealth_states;
#endif
if (is_home_dir) {
#if HOMING_Z_WITH_PROBE && QUIET_PROBING
@ -1134,7 +1176,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
sensorless_homing_per_axis(axis);
stealth_states = start_sensorless_homing_per_axis(axis);
#endif
}
@ -1175,7 +1217,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm
// Re-enable stealthChop if used. Disable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
sensorless_homing_per_axis(axis, false);
end_sensorless_homing_per_axis(axis, stealth_states);
#endif
}