BigTreeTech GTR V1.0 / Support 8 extruders, heaters, temp sensors, fans (#16595)
This commit is contained in:
committed by
Scott Lahteine
parent
0d166f9c7d
commit
248b7dfa59
@ -278,3 +278,37 @@
|
||||
#define E5_DIR_READ() (stepper##E5.getStatus() & STATUS_DIR);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// E6 Stepper
|
||||
#if AXIS_IS_L64XX(E6)
|
||||
extern L64XX_CLASS(E6) stepperE6;
|
||||
#define E6_ENABLE_INIT() NOOP
|
||||
#define E6_ENABLE_WRITE(STATE) (STATE ? NOOP : stepperE6.free())
|
||||
#define E6_ENABLE_READ() (stepperE6.getStatus() & STATUS_HIZ)
|
||||
#if AXIS_DRIVER_TYPE_E6(L6474)
|
||||
#define E6_DIR_INIT() SET_OUTPUT(E6_DIR_PIN)
|
||||
#define E6_DIR_WRITE(STATE) L6474_DIR_WRITE(E6, STATE)
|
||||
#define E6_DIR_READ() READ(E6_DIR_PIN)
|
||||
#else
|
||||
#define E6_DIR_INIT() NOOP
|
||||
#define E6_DIR_WRITE(STATE) L64XX_DIR_WRITE(E6, STATE)
|
||||
#define E6_DIR_READ() (stepper##E6.getStatus() & STATUS_DIR);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// E7 Stepper
|
||||
#if AXIS_IS_L64XX(E7)
|
||||
extern L64XX_CLASS(E7) stepperE7;
|
||||
#define E7_ENABLE_INIT() NOOP
|
||||
#define E7_ENABLE_WRITE(STATE) (STATE ? NOOP : stepperE7.free())
|
||||
#define E7_ENABLE_READ() (stepperE7.getStatus() & STATUS_HIZ)
|
||||
#if AXIS_DRIVER_TYPE_E7(L6474)
|
||||
#define E7_DIR_INIT() SET_OUTPUT(E7_DIR_PIN)
|
||||
#define E7_DIR_WRITE(STATE) L6474_DIR_WRITE(E7, STATE)
|
||||
#define E7_DIR_READ() READ(E7_DIR_PIN)
|
||||
#else
|
||||
#define E7_DIR_INIT() NOOP
|
||||
#define E7_DIR_WRITE(STATE) L64XX_DIR_WRITE(E7, STATE)
|
||||
#define E7_DIR_READ() (stepper##E7.getStatus() & STATUS_DIR);
|
||||
#endif
|
||||
#endif
|
||||
|
@ -150,3 +150,19 @@ void tmc26x_init_to_defaults();
|
||||
#define E5_ENABLE_WRITE(STATE) stepperE5.setEnabled(STATE)
|
||||
#define E5_ENABLE_READ() stepperE5.isEnabled()
|
||||
#endif
|
||||
|
||||
// E6 Stepper
|
||||
#if AXIS_DRIVER_TYPE_E6(TMC26X)
|
||||
extern TMC26XStepper stepperE6;
|
||||
#define E6_ENABLE_INIT() NOOP
|
||||
#define E6_ENABLE_WRITE(STATE) stepperE6.setEnabled(STATE)
|
||||
#define E6_ENABLE_READ() stepperE6.isEnabled()
|
||||
#endif
|
||||
|
||||
// E7 Stepper
|
||||
#if AXIS_DRIVER_TYPE_E7(TMC26X)
|
||||
extern TMC26XStepper stepperE7;
|
||||
#define E7_ENABLE_INIT() NOOP
|
||||
#define E7_ENABLE_WRITE(STATE) stepperE7.setEnabled(STATE)
|
||||
#define E7_ENABLE_READ() stepperE7.isEnabled()
|
||||
#endif
|
||||
|
@ -303,26 +303,115 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
||||
#endif
|
||||
#define E5_STEP_READ() bool(READ(E5_STEP_PIN))
|
||||
|
||||
// E6 Stepper
|
||||
#ifndef E6_ENABLE_INIT
|
||||
#define E6_ENABLE_INIT() SET_OUTPUT(E6_ENABLE_PIN)
|
||||
#define E6_ENABLE_WRITE(STATE) WRITE(E6_ENABLE_PIN,STATE)
|
||||
#define E6_ENABLE_READ() bool(READ(E6_ENABLE_PIN))
|
||||
#endif
|
||||
#ifndef E6_DIR_INIT
|
||||
#define E6_DIR_INIT() SET_OUTPUT(E6_DIR_PIN)
|
||||
#define E6_DIR_WRITE(STATE) WRITE(E6_DIR_PIN,STATE)
|
||||
#define E6_DIR_READ() bool(READ(E6_DIR_PIN))
|
||||
#endif
|
||||
#define E6_STEP_INIT() SET_OUTPUT(E6_STEP_PIN)
|
||||
#ifndef E6_STEP_WRITE
|
||||
#define E6_STEP_WRITE(STATE) WRITE(E6_STEP_PIN,STATE)
|
||||
#endif
|
||||
#define E6_STEP_READ() bool(READ(E6_STEP_PIN))
|
||||
|
||||
// E7 Stepper
|
||||
#ifndef E7_ENABLE_INIT
|
||||
#define E7_ENABLE_INIT() SET_OUTPUT(E7_ENABLE_PIN)
|
||||
#define E7_ENABLE_WRITE(STATE) WRITE(E7_ENABLE_PIN,STATE)
|
||||
#define E7_ENABLE_READ() bool(READ(E7_ENABLE_PIN))
|
||||
#endif
|
||||
#ifndef E7_DIR_INIT
|
||||
#define E7_DIR_INIT() SET_OUTPUT(E7_DIR_PIN)
|
||||
#define E7_DIR_WRITE(STATE) WRITE(E7_DIR_PIN,STATE)
|
||||
#define E7_DIR_READ() bool(READ(E7_DIR_PIN))
|
||||
#endif
|
||||
#define E7_STEP_INIT() SET_OUTPUT(E7_STEP_PIN)
|
||||
#ifndef E7_STEP_WRITE
|
||||
#define E7_STEP_WRITE(STATE) WRITE(E7_STEP_PIN,STATE)
|
||||
#endif
|
||||
#define E7_STEP_READ() bool(READ(E7_STEP_PIN))
|
||||
|
||||
/**
|
||||
* Extruder indirection for the single E axis
|
||||
*/
|
||||
#if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
|
||||
#if EXTRUDERS > 5
|
||||
#if EXTRUDERS > 7
|
||||
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else if (E < 6) { E2_STEP_WRITE(V); } else { E3_STEP_WRITE(V); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 5: E2_DIR_WRITE( INVERT_E2_DIR); break; \
|
||||
case 6: E3_DIR_WRITE( INVERT_E3_DIR); break; case 7: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
} }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; case 5: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
|
||||
case 6: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 7: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
|
||||
} }while(0)
|
||||
#elif EXTRUDERS > 6
|
||||
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else if (E < 6) { E2_STEP_WRITE(V); } else { E3_STEP_WRITE(V); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 5: E2_DIR_WRITE( INVERT_E2_DIR); break; \
|
||||
case 6: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
} }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; case 5: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
|
||||
case 6: E3_DIR_WRITE(!INVERT_E3_DIR); } }while(0)
|
||||
#elif EXTRUDERS > 5
|
||||
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); case 5: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); case 5: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 5: E2_DIR_WRITE( INVERT_E2_DIR); break; \
|
||||
} }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; case 5: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
|
||||
} }while(0)
|
||||
#elif EXTRUDERS > 4
|
||||
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
|
||||
} }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; \
|
||||
} }while(0)
|
||||
#elif EXTRUDERS > 3
|
||||
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
} }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
} }while(0)
|
||||
#elif EXTRUDERS > 2
|
||||
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
|
||||
#define NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
} }while(0)
|
||||
#define REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
|
||||
case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
} }while(0)
|
||||
#else
|
||||
#define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
|
||||
#define NORM_E_DIR(E) do{ E0_DIR_WRITE(E ? INVERT_E0_DIR : !INVERT_E0_DIR); }while(0)
|
||||
@ -340,23 +429,100 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
||||
|
||||
#elif E_STEPPERS > 1
|
||||
|
||||
#if E_STEPPERS > 5
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); case 5: E5_STEP_WRITE(V); } }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); case 5: E5_DIR_WRITE(!INVERT_E5_DIR); } }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); case 5: E5_DIR_WRITE( INVERT_E5_DIR); } }while(0)
|
||||
#if E_STEPPERS > 7
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { \
|
||||
case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
|
||||
case 4: E4_STEP_WRITE(V); break; case 5: E5_STEP_WRITE(V); break; case 6: E6_STEP_WRITE(V); break; case 7: E7_STEP_WRITE(V); break; \
|
||||
} }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; case 5: E5_DIR_WRITE(!INVERT_E5_DIR); break; \
|
||||
case 6: E6_DIR_WRITE(!INVERT_E6_DIR); break; case 7: E7_DIR_WRITE(!INVERT_E7_DIR); break; \
|
||||
} }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; case 5: E5_DIR_WRITE( INVERT_E5_DIR); break; \
|
||||
case 6: E6_DIR_WRITE( INVERT_E6_DIR); break; case 7: E7_DIR_WRITE( INVERT_E7_DIR); break; \
|
||||
} }while(0)
|
||||
|
||||
#elif E_STEPPERS > 6
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { \
|
||||
case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
|
||||
case 4: E4_STEP_WRITE(V); break; case 5: E5_STEP_WRITE(V); break; case 6: E6_STEP_WRITE(V); break; \
|
||||
} }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; case 5: E5_DIR_WRITE(!INVERT_E5_DIR); break; \
|
||||
case 6: E6_DIR_WRITE(!INVERT_E6_DIR); break; \
|
||||
} }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; case 5: E5_DIR_WRITE( INVERT_E5_DIR); break; \
|
||||
case 6: E6_DIR_WRITE( INVERT_E6_DIR); break; \
|
||||
} }while(0)
|
||||
|
||||
#elif E_STEPPERS > 5
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { \
|
||||
case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
|
||||
case 4: E4_STEP_WRITE(V); break; case 5: E5_STEP_WRITE(V); break; \
|
||||
} }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; case 5: E5_DIR_WRITE(!INVERT_E5_DIR); break; \
|
||||
} }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; case 5: E5_DIR_WRITE( INVERT_E5_DIR); break; \
|
||||
} }while(0)
|
||||
|
||||
#elif E_STEPPERS > 4
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); } }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); } }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); } }while(0)
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { \
|
||||
case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
|
||||
case 4: E4_STEP_WRITE(V); break; \
|
||||
} }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; \
|
||||
} }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; \
|
||||
} }while(0)
|
||||
|
||||
#elif E_STEPPERS > 3
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); } }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); } }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); } }while(0)
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { \
|
||||
case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
|
||||
} }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
|
||||
} }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { \
|
||||
case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
|
||||
case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
|
||||
} }while(0)
|
||||
|
||||
#elif E_STEPPERS > 2
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); } }while(0)
|
||||
#define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
|
||||
#define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
|
||||
|
||||
#else
|
||||
|
||||
#define _E_STEP_WRITE(E,V) do{ if (E == 0) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
|
||||
#define _NORM_E_DIR(E) do{ if (E == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
|
||||
#define _REV_E_DIR(E) do{ if (E == 0) { E0_DIR_WRITE( INVERT_E0_DIR); } else { E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
|
||||
@ -376,7 +542,15 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
||||
#define E_STEP_WRITE(E,V) do{ if (extruder_duplication_enabled) { DUPE(STEP,V); } else _E_STEP_WRITE(E,V); }while(0)
|
||||
|
||||
#if E_STEPPERS > 2
|
||||
#if E_STEPPERS > 5
|
||||
#if E_STEPPERS > 7
|
||||
#define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); _DUPE(6,T,V); _DUPE(7,T,V); }while(0)
|
||||
#define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); NDIR(6); NDIR(7); } else _NORM_E_DIR(E); }while(0)
|
||||
#define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); RDIR(6); RDIR(7); } else _REV_E_DIR(E); }while(0)
|
||||
#elif E_STEPPERS > 6
|
||||
#define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); _DUPE(6,T,V); }while(0)
|
||||
#define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); NDIR(6); } else _NORM_E_DIR(E); }while(0)
|
||||
#define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); RDIR(6); } else _REV_E_DIR(E); }while(0)
|
||||
#elif E_STEPPERS > 5
|
||||
#define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); }while(0)
|
||||
#define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); } else _NORM_E_DIR(E); }while(0)
|
||||
#define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); } else _REV_E_DIR(E); }while(0)
|
||||
@ -604,12 +778,42 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
||||
#define E5_disable() NOOP
|
||||
#endif
|
||||
|
||||
#if AXIS_DRIVER_TYPE_E6(L6470)
|
||||
extern L6470 stepperE6;
|
||||
#define E6_enable() NOOP
|
||||
#define E6_disable() do{ stepperE6.free(); CBI(axis_known_position, E_AXIS); }while(0)
|
||||
#elif E_STEPPERS > 6 && HAS_E6_ENABLE
|
||||
#define E6_enable() E6_ENABLE_WRITE( E_ENABLE_ON)
|
||||
#define E6_disable() E6_ENABLE_WRITE(!E_ENABLE_ON)
|
||||
#else
|
||||
#define E6_enable() NOOP
|
||||
#define E6_disable() NOOP
|
||||
#endif
|
||||
|
||||
#if AXIS_DRIVER_TYPE_E7(L6470)
|
||||
extern L6470 stepperE7;
|
||||
#define E7_enable() NOOP
|
||||
#define E7_disable() do{ stepperE7.free(); CBI(axis_known_position, E_AXIS); }while(0)
|
||||
#elif E_STEPPERS > 7 && HAS_E7_ENABLE
|
||||
#define E7_enable() E7_ENABLE_WRITE( E_ENABLE_ON)
|
||||
#define E7_disable() E7_ENABLE_WRITE(!E_ENABLE_ON)
|
||||
#else
|
||||
#define E7_enable() NOOP
|
||||
#define E7_disable() NOOP
|
||||
#endif
|
||||
|
||||
#if ENABLED(MIXING_EXTRUDER)
|
||||
|
||||
/**
|
||||
* Mixing steppers synchronize their enable (and direction) together
|
||||
*/
|
||||
#if MIXING_STEPPERS > 5
|
||||
#if MIXING_STEPPERS > 7
|
||||
#define enable_E0() { E0_enable(); E1_enable(); E2_enable(); E3_enable(); E4_enable(); E5_enable(); E6_enable(); E7_enable(); }
|
||||
#define disable_E0() { E0_disable(); E1_disable(); E2_disable(); E3_disable(); E4_disable(); E5_disable(); E6_disable(); E7_disable(); }
|
||||
#elif MIXING_STEPPERS > 6
|
||||
#define enable_E0() { E0_enable(); E1_enable(); E2_enable(); E3_enable(); E4_enable(); E5_enable(); E6_enable(); }
|
||||
#define disable_E0() { E0_disable(); E1_disable(); E2_disable(); E3_disable(); E4_disable(); E5_disable(); E6_disable(); }
|
||||
#elif MIXING_STEPPERS > 5
|
||||
#define enable_E0() { E0_enable(); E1_enable(); E2_enable(); E3_enable(); E4_enable(); E5_enable(); }
|
||||
#define disable_E0() { E0_disable(); E1_disable(); E2_disable(); E3_disable(); E4_disable(); E5_disable(); }
|
||||
#elif MIXING_STEPPERS > 4
|
||||
@ -635,6 +839,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
||||
#define disable_E4() NOOP
|
||||
#define enable_E5() NOOP
|
||||
#define disable_E5() NOOP
|
||||
#define enable_E6() NOOP
|
||||
#define disable_E6() NOOP
|
||||
#define enable_E7() NOOP
|
||||
#define disable_E7() NOOP
|
||||
|
||||
#else // !MIXING_EXTRUDER
|
||||
|
||||
@ -686,4 +894,20 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
||||
#define disable_E5() NOOP
|
||||
#endif
|
||||
|
||||
#if E_STEPPERS > 6 && HAS_E6_ENABLE
|
||||
#define enable_E6() E6_enable()
|
||||
#define disable_E6() E6_disable()
|
||||
#else
|
||||
#define enable_E6() NOOP
|
||||
#define disable_E6() NOOP
|
||||
#endif
|
||||
|
||||
#if E_STEPPERS > 7 && HAS_E7_ENABLE
|
||||
#define enable_E7() E7_enable()
|
||||
#define disable_E7() E7_disable()
|
||||
#else
|
||||
#define enable_E7() NOOP
|
||||
#define disable_E7() NOOP
|
||||
#endif
|
||||
|
||||
#endif // !MIXING_EXTRUDER
|
||||
|
@ -301,6 +301,20 @@ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
|
||||
TMC_UART_DEFINE_E(SW, 5);
|
||||
#endif
|
||||
#endif
|
||||
#if AXIS_HAS_UART(E6)
|
||||
#ifdef E6_HARDWARE_SERIAL
|
||||
TMC_UART_DEFINE_E(HW, 6);
|
||||
#else
|
||||
TMC_UART_DEFINE_E(SW, 6);
|
||||
#endif
|
||||
#endif
|
||||
#if AXIS_HAS_UART(E7)
|
||||
#ifdef E7_HARDWARE_SERIAL
|
||||
TMC_UART_DEFINE_E(HW, 7);
|
||||
#else
|
||||
TMC_UART_DEFINE_E(SW, 7);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void tmc_serial_begin() {
|
||||
#if AXIS_HAS_UART(X)
|
||||
@ -401,6 +415,20 @@ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
|
||||
stepperE5.beginSerial(TMC_BAUD_RATE);
|
||||
#endif
|
||||
#endif
|
||||
#if AXIS_HAS_UART(E6)
|
||||
#ifdef E6_HARDWARE_SERIAL
|
||||
E6_HARDWARE_SERIAL.begin(TMC_BAUD_RATE);
|
||||
#else
|
||||
stepperE6.beginSerial(TMC_BAUD_RATE);
|
||||
#endif
|
||||
#endif
|
||||
#if AXIS_HAS_UART(E7)
|
||||
#ifdef E7_HARDWARE_SERIAL
|
||||
E7_HARDWARE_SERIAL.begin(TMC_BAUD_RATE);
|
||||
#else
|
||||
stepperE7.beginSerial(TMC_BAUD_RATE);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -654,6 +682,12 @@ void restore_trinamic_drivers() {
|
||||
#if AXIS_IS_TMC(E5)
|
||||
stepperE5.push();
|
||||
#endif
|
||||
#if AXIS_IS_TMC(E6)
|
||||
stepperE6.push();
|
||||
#endif
|
||||
#if AXIS_IS_TMC(E7)
|
||||
stepperE7.push();
|
||||
#endif
|
||||
}
|
||||
|
||||
void reset_trinamic_drivers() {
|
||||
@ -719,6 +753,12 @@ void reset_trinamic_drivers() {
|
||||
#if AXIS_IS_TMC(E5)
|
||||
_TMC_INIT(E5, STEALTH_AXIS_E);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(E6)
|
||||
_TMC_INIT(E6, STEALTH_AXIS_E);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(E7)
|
||||
_TMC_INIT(E7, STEALTH_AXIS_E);
|
||||
#endif
|
||||
|
||||
#if USE_SENSORLESS
|
||||
#if X_SENSORLESS
|
||||
|
@ -58,6 +58,8 @@
|
||||
#define TMC_E3_LABEL 'E', '3'
|
||||
#define TMC_E4_LABEL 'E', '4'
|
||||
#define TMC_E5_LABEL 'E', '5'
|
||||
#define TMC_E6_LABEL 'E', '6'
|
||||
#define TMC_E7_LABEL 'E', '7'
|
||||
|
||||
#define __TMC_CLASS(TYPE, L, I, A) TMCMarlin<CLASS_##TYPE, L, I, A>
|
||||
#define _TMC_CLASS(TYPE, LandI, A) __TMC_CLASS(TYPE, LandI, A)
|
||||
@ -266,3 +268,29 @@ void reset_trinamic_drivers();
|
||||
#define E5_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E5_STEP_PIN); }while(0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// E6 Stepper
|
||||
#if AXIS_IS_TMC(E6)
|
||||
extern TMC_CLASS_E(6) stepperE6;
|
||||
#if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6)
|
||||
#define E6_ENABLE_INIT() NOOP
|
||||
#define E6_ENABLE_WRITE(STATE) stepperE6.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
||||
#define E6_ENABLE_READ() stepperE6.isEnabled()
|
||||
#endif
|
||||
#if AXIS_HAS_SQUARE_WAVE(E6)
|
||||
#define E6_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E6_STEP_PIN); }while(0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// E7 Stepper
|
||||
#if AXIS_IS_TMC(E7)
|
||||
extern TMC_CLASS_E(7) stepperE7;
|
||||
#if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7)
|
||||
#define E7_ENABLE_INIT() NOOP
|
||||
#define E7_ENABLE_WRITE(STATE) stepperE7.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
||||
#define E7_ENABLE_READ() stepperE7.isEnabled()
|
||||
#endif
|
||||
#if AXIS_HAS_SQUARE_WAVE(E7)
|
||||
#define E7_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E7_STEP_PIN); }while(0)
|
||||
#endif
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user