Add support for TMC2660 (#11998)

This commit is contained in:
teemuatlut
2018-10-07 01:18:10 +03:00
committed by Scott Lahteine
parent cf0b9eb37c
commit c447d75916
11 changed files with 278 additions and 62 deletions

View File

@ -487,6 +487,74 @@
}
#endif // TMC2208
//
// TMC2660 Driver objects and inits
//
#if HAS_DRIVER(TMC2660)
#include <SPI.h>
#include "planner.h"
#include "../core/enum.h"
#if ENABLED(TMC_USE_SW_SPI)
#define _TMC2660_DEFINE(ST, L) TMCMarlin<TMC2660Stepper, L> stepper##ST(ST##_CS_PIN, R_SENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
#define TMC2660_DEFINE(ST) _TMC2660_DEFINE(ST, TMC_##ST##_LABEL)
#else
#define _TMC2660_DEFINE(ST, L) TMCMarlin<TMC2660Stepper, L> stepper##ST(ST##_CS_PIN, R_SENSE)
#define TMC2660_DEFINE(ST) _TMC2660_DEFINE(ST, TMC_##ST##_LABEL)
#endif
// Stepper objects of TMC2660 steppers used
#if AXIS_DRIVER_TYPE(X, TMC2660)
TMC2660_DEFINE(X);
#endif
#if AXIS_DRIVER_TYPE(X2, TMC2660)
TMC2660_DEFINE(X2);
#endif
#if AXIS_DRIVER_TYPE(Y, TMC2660)
TMC2660_DEFINE(Y);
#endif
#if AXIS_DRIVER_TYPE(Y2, TMC2660)
TMC2660_DEFINE(Y2);
#endif
#if AXIS_DRIVER_TYPE(Z, TMC2660)
TMC2660_DEFINE(Z);
#endif
#if AXIS_DRIVER_TYPE(Z2, TMC2660)
TMC2660_DEFINE(Z2);
#endif
#if AXIS_DRIVER_TYPE(E0, TMC2660)
TMC2660_DEFINE(E0);
#endif
#if AXIS_DRIVER_TYPE(E1, TMC2660)
TMC2660_DEFINE(E1);
#endif
#if AXIS_DRIVER_TYPE(E2, TMC2660)
TMC2660_DEFINE(E2);
#endif
#if AXIS_DRIVER_TYPE(E3, TMC2660)
TMC2660_DEFINE(E3);
#endif
#if AXIS_DRIVER_TYPE(E4, TMC2660)
TMC2660_DEFINE(E4);
#endif
#if AXIS_DRIVER_TYPE(E5, TMC2660)
TMC2660_DEFINE(E5);
#endif
template<char AXIS_LETTER, char DRIVER_ID>
void tmc_init(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const float) {
st.begin();
st.rms_current(mA);
st.microsteps(microsteps);
st.blank_time(24);
st.toff(5); // Only enables the driver if used with stealthChop
st.intpol(INTERPOLATE);
//st.hysteresis_start(3);
//st.hysteresis_end(2);
}
#endif // TMC2660
void restore_stepper_drivers() {
#if AXIS_IS_TMC(X)
stepperX.push();

View File

@ -101,6 +101,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define X_ENABLE_INIT NOOP
#define X_ENABLE_WRITE(STATE) stepperX.setEnabled(STATE)
#define X_ENABLE_READ stepperX.isEnabled()
#elif AXIS_DRIVER_TYPE(X, TMC2660)
#define X_ENABLE_INIT NOOP
#define X_ENABLE_WRITE(STATE) stepperX.toff((STATE)==X_ENABLE_ON ? stepperX.savedToff() : 0)
#define X_ENABLE_READ stepperX.isEnabled()
#else
#define X_ENABLE_INIT SET_OUTPUT(X_ENABLE_PIN)
#define X_ENABLE_WRITE(STATE) WRITE(X_ENABLE_PIN,STATE)
@ -132,6 +136,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define Y_ENABLE_INIT NOOP
#define Y_ENABLE_WRITE(STATE) stepperY.setEnabled(STATE)
#define Y_ENABLE_READ stepperY.isEnabled()
#elif AXIS_DRIVER_TYPE(Y, TMC2660)
#define Y_ENABLE_INIT NOOP
#define Y_ENABLE_WRITE(STATE) stepperY.toff((STATE)==Y_ENABLE_ON ? stepperY.savedToff() : 0)
#define Y_ENABLE_READ stepperY.isEnabled()
#else
#define Y_ENABLE_INIT SET_OUTPUT(Y_ENABLE_PIN)
#define Y_ENABLE_WRITE(STATE) WRITE(Y_ENABLE_PIN,STATE)
@ -163,6 +171,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define Z_ENABLE_INIT NOOP
#define Z_ENABLE_WRITE(STATE) stepperZ.setEnabled(STATE)
#define Z_ENABLE_READ stepperZ.isEnabled()
#elif AXIS_DRIVER_TYPE(Z, TMC2660)
#define Z_ENABLE_INIT NOOP
#define Z_ENABLE_WRITE(STATE) stepperZ.toff((STATE)==Z_ENABLE_ON ? stepperZ.savedToff() : 0)
#define Z_ENABLE_READ stepperZ.isEnabled()
#else
#define Z_ENABLE_INIT SET_OUTPUT(Z_ENABLE_PIN)
#define Z_ENABLE_WRITE(STATE) WRITE(Z_ENABLE_PIN,STATE)
@ -195,6 +207,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define X2_ENABLE_INIT NOOP
#define X2_ENABLE_WRITE(STATE) stepperX2.setEnabled(STATE)
#define X2_ENABLE_READ stepperX2.isEnabled()
#elif AXIS_DRIVER_TYPE(X2, TMC2660)
#define X2_ENABLE_INIT NOOP
#define X2_ENABLE_WRITE(STATE) stepperX2.toff((STATE)==X_ENABLE_ON ? stepperX2.savedToff() : 0)
#define X2_ENABLE_READ stepperX2.isEnabled()
#else
#define X2_ENABLE_INIT SET_OUTPUT(X2_ENABLE_PIN)
#define X2_ENABLE_WRITE(STATE) WRITE(X2_ENABLE_PIN,STATE)
@ -228,6 +244,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define Y2_ENABLE_INIT NOOP
#define Y2_ENABLE_WRITE(STATE) stepperY2.setEnabled(STATE)
#define Y2_ENABLE_READ stepperY2.isEnabled()
#elif AXIS_DRIVER_TYPE(Y2, TMC2660)
#define Y2_ENABLE_INIT NOOP
#define Y2_ENABLE_WRITE(STATE) stepperY2.toff((STATE)==Y_ENABLE_ON ? stepperY2.savedToff() : 0)
#define Y2_ENABLE_READ stepperY2.isEnabled()
#else
#define Y2_ENABLE_INIT SET_OUTPUT(Y2_ENABLE_PIN)
#define Y2_ENABLE_WRITE(STATE) WRITE(Y2_ENABLE_PIN,STATE)
@ -261,6 +281,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define Z2_ENABLE_INIT NOOP
#define Z2_ENABLE_WRITE(STATE) stepperZ2.setEnabled(STATE)
#define Z2_ENABLE_READ stepperZ2.isEnabled()
#elif AXIS_DRIVER_TYPE(Z2, TMC2660)
#define Z2_ENABLE_INIT NOOP
#define Z2_ENABLE_WRITE(STATE) stepperZ2.toff((STATE)==Z_ENABLE_ON ? stepperZ2.savedToff() : 0)
#define Z2_ENABLE_READ stepperZ2.isEnabled()
#else
#define Z2_ENABLE_INIT SET_OUTPUT(Z2_ENABLE_PIN)
#define Z2_ENABLE_WRITE(STATE) WRITE(Z2_ENABLE_PIN,STATE)
@ -294,6 +318,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define Z3_ENABLE_INIT NOOP
#define Z3_ENABLE_WRITE(STATE) stepperZ3.setEnabled(STATE)
#define Z3_ENABLE_READ stepperZ3.isEnabled()
#elif AXIS_DRIVER_TYPE(Z3, TMC2660)
#define Z3_ENABLE_INIT NOOP
#define Z3_ENABLE_WRITE(STATE) stepperZ3.toff((STATE)==Z_ENABLE_ON ? stepperZ3.savedToff() : 0)
#define Z3_ENABLE_READ stepperZ3.isEnabled()
#else
#define Z3_ENABLE_INIT SET_OUTPUT(Z3_ENABLE_PIN)
#define Z3_ENABLE_WRITE(STATE) WRITE(Z3_ENABLE_PIN,STATE)
@ -326,6 +354,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define E0_ENABLE_INIT NOOP
#define E0_ENABLE_WRITE(STATE) stepperE0.setEnabled(STATE)
#define E0_ENABLE_READ stepperE0.isEnabled()
#elif AXIS_DRIVER_TYPE(E0, TMC2660)
#define E0_ENABLE_INIT NOOP
#define E0_ENABLE_WRITE(STATE) stepperE0.toff((STATE)==E_ENABLE_ON ? stepperE0.savedToff() : 0)
#define E0_ENABLE_READ stepperE0.isEnabled()
#else
#define E0_ENABLE_INIT SET_OUTPUT(E0_ENABLE_PIN)
#define E0_ENABLE_WRITE(STATE) WRITE(E0_ENABLE_PIN,STATE)
@ -357,6 +389,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define E1_ENABLE_INIT NOOP
#define E1_ENABLE_WRITE(STATE) stepperE1.setEnabled(STATE)
#define E1_ENABLE_READ stepperE1.isEnabled()
#elif AXIS_DRIVER_TYPE(E1, TMC2660)
#define E1_ENABLE_INIT NOOP
#define E1_ENABLE_WRITE(STATE) stepperE1.toff((STATE)==E_ENABLE_ON ? stepperE1.savedToff() : 0)
#define E1_ENABLE_READ stepperE1.isEnabled()
#else
#define E1_ENABLE_INIT SET_OUTPUT(E1_ENABLE_PIN)
#define E1_ENABLE_WRITE(STATE) WRITE(E1_ENABLE_PIN,STATE)
@ -388,6 +424,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define E2_ENABLE_INIT NOOP
#define E2_ENABLE_WRITE(STATE) stepperE2.setEnabled(STATE)
#define E2_ENABLE_READ stepperE2.isEnabled()
#elif AXIS_DRIVER_TYPE(E2, TMC2660)
#define E2_ENABLE_INIT NOOP
#define E2_ENABLE_WRITE(STATE) stepperE2.toff((STATE)==E_ENABLE_ON ? stepperE2.savedToff() : 0)
#define E2_ENABLE_READ stepperE2.isEnabled()
#else
#define E2_ENABLE_INIT SET_OUTPUT(E2_ENABLE_PIN)
#define E2_ENABLE_WRITE(STATE) WRITE(E2_ENABLE_PIN,STATE)
@ -419,6 +459,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define E3_ENABLE_INIT NOOP
#define E3_ENABLE_WRITE(STATE) stepperE3.setEnabled(STATE)
#define E3_ENABLE_READ stepperE3.isEnabled()
#elif AXIS_DRIVER_TYPE(E3, TMC2660)
#define E3_ENABLE_INIT NOOP
#define E3_ENABLE_WRITE(STATE) stepperE3.toff((STATE)==E_ENABLE_ON ? stepperE3.savedToff() : 0)
#define E3_ENABLE_READ stepperE3.isEnabled()
#else
#define E3_ENABLE_INIT SET_OUTPUT(E3_ENABLE_PIN)
#define E3_ENABLE_WRITE(STATE) WRITE(E3_ENABLE_PIN,STATE)
@ -450,6 +494,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define E4_ENABLE_INIT NOOP
#define E4_ENABLE_WRITE(STATE) stepperE4.setEnabled(STATE)
#define E4_ENABLE_READ stepperE4.isEnabled()
#elif AXIS_DRIVER_TYPE(E4, TMC2660)
#define E4_ENABLE_INIT NOOP
#define E4_ENABLE_WRITE(STATE) stepperE4.toff((STATE)==E_ENABLE_ON ? stepperE4.savedToff() : 0)
#define E4_ENABLE_READ stepperE4.isEnabled()
#else
#define E4_ENABLE_INIT SET_OUTPUT(E4_ENABLE_PIN)
#define E4_ENABLE_WRITE(STATE) WRITE(E4_ENABLE_PIN,STATE)
@ -481,6 +529,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#define E5_ENABLE_INIT NOOP
#define E5_ENABLE_WRITE(STATE) stepperE5.setEnabled(STATE)
#define E5_ENABLE_READ stepperE5.isEnabled()
#elif AXIS_DRIVER_TYPE(E5, TMC2660)
#define E5_ENABLE_INIT NOOP
#define E5_ENABLE_WRITE(STATE) stepperE5.toff((STATE)==E_ENABLE_ON ? stepperE5.savedToff() : 0)
#define E5_ENABLE_READ stepperE5.isEnabled()
#else
#define E5_ENABLE_INIT SET_OUTPUT(E5_ENABLE_PIN)
#define E5_ENABLE_WRITE(STATE) WRITE(E5_ENABLE_PIN,STATE)