Browse Source

TMC updates, capture LCD changes (#14074)

teemuatlut 6 years ago
parent
commit
1c86fbc60b

+ 0
- 4
Marlin/src/Marlin.cpp View File

1053
     fanmux_init();
1053
     fanmux_init();
1054
   #endif
1054
   #endif
1055
 
1055
 
1056
-  #if HAS_TRINAMIC && HAS_LCD_MENU
1057
-    init_tmc_section();
1058
-  #endif
1059
-
1060
   #if ENABLED(MIXING_EXTRUDER)
1056
   #if ENABLED(MIXING_EXTRUDER)
1061
     mixer.init();
1057
     mixer.init();
1062
   #endif
1058
   #endif

+ 45
- 107
Marlin/src/feature/tmc_util.cpp View File

313
     #endif
313
     #endif
314
   }
314
   }
315
 
315
 
316
-  #define HAS_HW_COMMS(ST) AXIS_DRIVER_TYPE(ST, TMC2130) || AXIS_DRIVER_TYPE(ST, TMC2160) || AXIS_DRIVER_TYPE(ST, TMC2660) || AXIS_DRIVER_TYPE(ST, TMC5130) || AXIS_DRIVER_TYPE(ST, TMC5160) || (AXIS_DRIVER_TYPE(ST, TMC2208) && defined(ST##_HARDWARE_SERIAL))
317
-
318
   void monitor_tmc_driver() {
316
   void monitor_tmc_driver() {
319
     static millis_t next_poll = 0;
317
     static millis_t next_poll = 0;
320
     const millis_t ms = millis();
318
     const millis_t ms = millis();
330
       }
328
       }
331
     #endif
329
     #endif
332
     if (need_update_error_counters || need_debug_reporting) {
330
     if (need_update_error_counters || need_debug_reporting) {
333
-      #if HAS_HW_COMMS(X)
331
+      #if AXIS_IS_TMC(X)
334
         monitor_tmc_driver(stepperX, need_update_error_counters, need_debug_reporting);
332
         monitor_tmc_driver(stepperX, need_update_error_counters, need_debug_reporting);
335
       #endif
333
       #endif
336
-      #if HAS_HW_COMMS(Y)
334
+      #if AXIS_IS_TMC(Y)
337
         monitor_tmc_driver(stepperY, need_update_error_counters, need_debug_reporting);
335
         monitor_tmc_driver(stepperY, need_update_error_counters, need_debug_reporting);
338
       #endif
336
       #endif
339
-      #if HAS_HW_COMMS(Z)
337
+      #if AXIS_IS_TMC(Z)
340
         monitor_tmc_driver(stepperZ, need_update_error_counters, need_debug_reporting);
338
         monitor_tmc_driver(stepperZ, need_update_error_counters, need_debug_reporting);
341
       #endif
339
       #endif
342
-      #if HAS_HW_COMMS(X2)
340
+      #if AXIS_IS_TMC(X2)
343
         monitor_tmc_driver(stepperX2, need_update_error_counters, need_debug_reporting);
341
         monitor_tmc_driver(stepperX2, need_update_error_counters, need_debug_reporting);
344
       #endif
342
       #endif
345
-      #if HAS_HW_COMMS(Y2)
343
+      #if AXIS_IS_TMC(Y2)
346
         monitor_tmc_driver(stepperY2, need_update_error_counters, need_debug_reporting);
344
         monitor_tmc_driver(stepperY2, need_update_error_counters, need_debug_reporting);
347
       #endif
345
       #endif
348
-      #if HAS_HW_COMMS(Z2)
346
+      #if AXIS_IS_TMC(Z2)
349
         monitor_tmc_driver(stepperZ2, need_update_error_counters, need_debug_reporting);
347
         monitor_tmc_driver(stepperZ2, need_update_error_counters, need_debug_reporting);
350
       #endif
348
       #endif
351
-      #if HAS_HW_COMMS(Z3)
349
+      #if AXIS_IS_TMC(Z3)
352
         monitor_tmc_driver(stepperZ3, need_update_error_counters, need_debug_reporting);
350
         monitor_tmc_driver(stepperZ3, need_update_error_counters, need_debug_reporting);
353
       #endif
351
       #endif
354
-      #if HAS_HW_COMMS(E0)
352
+      #if AXIS_IS_TMC(E0)
355
         monitor_tmc_driver(stepperE0, need_update_error_counters, need_debug_reporting);
353
         monitor_tmc_driver(stepperE0, need_update_error_counters, need_debug_reporting);
356
       #endif
354
       #endif
357
-      #if HAS_HW_COMMS(E1)
355
+      #if AXIS_IS_TMC(E1)
358
         monitor_tmc_driver(stepperE1, need_update_error_counters, need_debug_reporting);
356
         monitor_tmc_driver(stepperE1, need_update_error_counters, need_debug_reporting);
359
       #endif
357
       #endif
360
-      #if HAS_HW_COMMS(E2)
358
+      #if AXIS_IS_TMC(E2)
361
         monitor_tmc_driver(stepperE2, need_update_error_counters, need_debug_reporting);
359
         monitor_tmc_driver(stepperE2, need_update_error_counters, need_debug_reporting);
362
       #endif
360
       #endif
363
-      #if HAS_HW_COMMS(E3)
361
+      #if AXIS_IS_TMC(E3)
364
         monitor_tmc_driver(stepperE3, need_update_error_counters, need_debug_reporting);
362
         monitor_tmc_driver(stepperE3, need_update_error_counters, need_debug_reporting);
365
       #endif
363
       #endif
366
-      #if HAS_HW_COMMS(E4)
364
+      #if AXIS_IS_TMC(E4)
367
         monitor_tmc_driver(stepperE4, need_update_error_counters, need_debug_reporting);
365
         monitor_tmc_driver(stepperE4, need_update_error_counters, need_debug_reporting);
368
       #endif
366
       #endif
369
-      #if HAS_HW_COMMS(E5)
367
+      #if AXIS_IS_TMC(E5)
370
         monitor_tmc_driver(stepperE5, need_update_error_counters, need_debug_reporting);
368
         monitor_tmc_driver(stepperE5, need_update_error_counters, need_debug_reporting);
371
       #endif
369
       #endif
372
 
370
 
471
   template<class TMC>
469
   template<class TMC>
472
   static void print_vsense(TMC &st) { serialprintPGM(st.vsense() ? PSTR("1=.18") : PSTR("0=.325")); }
470
   static void print_vsense(TMC &st) { serialprintPGM(st.vsense() ? PSTR("1=.18") : PSTR("0=.325")); }
473
 
471
 
474
-  #if HAS_TMCX1X0
475
-    static void tmc_status(TMC2130Stepper &st, const TMC_debug_enum i) {
472
+  #if HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC5130)
473
+    static void _tmc_status(TMC2130Stepper &st, const TMC_debug_enum i) {
476
       switch (i) {
474
       switch (i) {
477
         case TMC_PWM_SCALE: SERIAL_PRINT(st.PWM_SCALE(), DEC); break;
475
         case TMC_PWM_SCALE: SERIAL_PRINT(st.PWM_SCALE(), DEC); break;
478
         case TMC_SGT: SERIAL_PRINT(st.sgt(), DEC); break;
476
         case TMC_SGT: SERIAL_PRINT(st.sgt(), DEC); break;
480
         default: break;
478
         default: break;
481
       }
479
       }
482
     }
480
     }
481
+  #endif
482
+  #if HAS_TMCX1X0
483
     static void _tmc_parse_drv_status(TMC2130Stepper &st, const TMC_drv_status_enum i) {
483
     static void _tmc_parse_drv_status(TMC2130Stepper &st, const TMC_drv_status_enum i) {
484
       switch (i) {
484
       switch (i) {
485
         case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('X'); break;
485
         case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('X'); break;
492
   #endif
492
   #endif
493
 
493
 
494
   #if HAS_DRIVER(TMC2160) || HAS_DRIVER(TMC5160)
494
   #if HAS_DRIVER(TMC2160) || HAS_DRIVER(TMC5160)
495
-    template<char AXIS_LETTER, char DRIVER_ID> void print_vsense(TMCMarlin<TMC2160Stepper, AXIS_LETTER, DRIVER_ID> &st) { UNUSED(st); }
496
-    template<char AXIS_LETTER, char DRIVER_ID> void print_vsense(TMCMarlin<TMC5160Stepper, AXIS_LETTER, DRIVER_ID> &st) { UNUSED(st); }
495
+    template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
496
+    void print_vsense(TMCMarlin<TMC2160Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &) { }
497
+
498
+    template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
499
+    void print_vsense(TMCMarlin<TMC5160Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &) { }
497
 
500
 
498
-    static void tmc_status(TMC2160Stepper &st, const TMC_debug_enum i) {
501
+    static void _tmc_status(TMC2160Stepper &st, const TMC_debug_enum i) {
499
       switch (i) {
502
       switch (i) {
500
         case TMC_PWM_SCALE: SERIAL_PRINT(st.PWM_SCALE(), DEC); break;
503
         case TMC_PWM_SCALE: SERIAL_PRINT(st.PWM_SCALE(), DEC); break;
501
         case TMC_SGT: SERIAL_PRINT(st.sgt(), DEC); break;
504
         case TMC_SGT: SERIAL_PRINT(st.sgt(), DEC); break;
513
   #endif
516
   #endif
514
 
517
 
515
   #if HAS_DRIVER(TMC2208)
518
   #if HAS_DRIVER(TMC2208)
516
-    static void tmc_status(TMC2208Stepper &st, const TMC_debug_enum i) {
519
+    static void _tmc_status(TMC2208Stepper &st, const TMC_debug_enum i) {
517
       switch (i) {
520
       switch (i) {
518
         case TMC_PWM_SCALE: SERIAL_PRINT(st.pwm_scale_sum(), DEC); break;
521
         case TMC_PWM_SCALE: SERIAL_PRINT(st.pwm_scale_sum(), DEC); break;
519
         case TMC_STEALTHCHOP: serialprint_truefalse(st.stealth()); break;
522
         case TMC_STEALTHCHOP: serialprint_truefalse(st.stealth()); break;
539
   #endif
542
   #endif
540
 
543
 
541
   template <typename TMC>
544
   template <typename TMC>
542
-  static void tmc_status(TMC &st, const TMC_debug_enum i, const float spmm) {
545
+  static void tmc_status(TMC &st, const TMC_debug_enum i) {
543
     SERIAL_CHAR('\t');
546
     SERIAL_CHAR('\t');
544
     switch (i) {
547
     switch (i) {
545
       case TMC_CODES: st.printLabel(); break;
548
       case TMC_CODES: st.printLabel(); break;
573
         }
576
         }
574
         break;
577
         break;
575
       case TMC_TPWMTHRS_MMS: {
578
       case TMC_TPWMTHRS_MMS: {
576
-          uint32_t tpwmthrs_val = st.TPWMTHRS();
579
+          uint32_t tpwmthrs_val = st.get_pwm_thrs();
577
           if (tpwmthrs_val)
580
           if (tpwmthrs_val)
578
-            SERIAL_ECHO(12650000UL * st.microsteps() / (256 * tpwmthrs_val * spmm));
581
+            SERIAL_ECHO(tpwmthrs_val);
579
           else
582
           else
580
             SERIAL_CHAR('-');
583
             SERIAL_CHAR('-');
581
         }
584
         }
588
       case TMC_TBL: SERIAL_PRINT(st.blank_time(), DEC); break;
591
       case TMC_TBL: SERIAL_PRINT(st.blank_time(), DEC); break;
589
       case TMC_HEND: SERIAL_PRINT(st.hysteresis_end(), DEC); break;
592
       case TMC_HEND: SERIAL_PRINT(st.hysteresis_end(), DEC); break;
590
       case TMC_HSTRT: SERIAL_PRINT(st.hysteresis_start(), DEC); break;
593
       case TMC_HSTRT: SERIAL_PRINT(st.hysteresis_start(), DEC); break;
591
-      default: tmc_status(st, i); break;
594
+      default: _tmc_status(st, i); break;
592
     }
595
     }
593
   }
596
   }
594
 
597
 
595
   #if HAS_DRIVER(TMC2660)
598
   #if HAS_DRIVER(TMC2660)
596
-    template<char AXIS_LETTER, char DRIVER_ID>
597
-    void tmc_status(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID> &st, const TMC_debug_enum i, const float) {
599
+    template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
600
+    void tmc_status(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const TMC_debug_enum i) {
598
       SERIAL_CHAR('\t');
601
       SERIAL_CHAR('\t');
599
       switch (i) {
602
       switch (i) {
600
         case TMC_CODES: st.printLabel(); break;
603
         case TMC_CODES: st.printLabel(); break;
649
   static void tmc_debug_loop(const TMC_debug_enum i, const bool print_x, const bool print_y, const bool print_z, const bool print_e) {
652
   static void tmc_debug_loop(const TMC_debug_enum i, const bool print_x, const bool print_y, const bool print_z, const bool print_e) {
650
     if (print_x) {
653
     if (print_x) {
651
       #if AXIS_IS_TMC(X)
654
       #if AXIS_IS_TMC(X)
652
-        tmc_status(stepperX, i, planner.settings.axis_steps_per_mm[X_AXIS]);
655
+        tmc_status(stepperX, i);
653
       #endif
656
       #endif
654
       #if AXIS_IS_TMC(X2)
657
       #if AXIS_IS_TMC(X2)
655
-        tmc_status(stepperX2, i, planner.settings.axis_steps_per_mm[X_AXIS]);
658
+        tmc_status(stepperX2, i);
656
       #endif
659
       #endif
657
     }
660
     }
658
 
661
 
659
     if (print_y) {
662
     if (print_y) {
660
       #if AXIS_IS_TMC(Y)
663
       #if AXIS_IS_TMC(Y)
661
-        tmc_status(stepperY, i, planner.settings.axis_steps_per_mm[Y_AXIS]);
664
+        tmc_status(stepperY, i);
662
       #endif
665
       #endif
663
       #if AXIS_IS_TMC(Y2)
666
       #if AXIS_IS_TMC(Y2)
664
-        tmc_status(stepperY2, i, planner.settings.axis_steps_per_mm[Y_AXIS]);
667
+        tmc_status(stepperY2, i);
665
       #endif
668
       #endif
666
     }
669
     }
667
 
670
 
668
     if (print_z) {
671
     if (print_z) {
669
       #if AXIS_IS_TMC(Z)
672
       #if AXIS_IS_TMC(Z)
670
-        tmc_status(stepperZ, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
673
+        tmc_status(stepperZ, i);
671
       #endif
674
       #endif
672
       #if AXIS_IS_TMC(Z2)
675
       #if AXIS_IS_TMC(Z2)
673
-        tmc_status(stepperZ2, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
676
+        tmc_status(stepperZ2, i);
674
       #endif
677
       #endif
675
       #if AXIS_IS_TMC(Z3)
678
       #if AXIS_IS_TMC(Z3)
676
-        tmc_status(stepperZ3, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
679
+        tmc_status(stepperZ3, i);
677
       #endif
680
       #endif
678
     }
681
     }
679
 
682
 
680
     if (print_e) {
683
     if (print_e) {
681
       #if AXIS_IS_TMC(E0)
684
       #if AXIS_IS_TMC(E0)
682
-        tmc_status(stepperE0, i, planner.settings.axis_steps_per_mm[E_AXIS]);
685
+        tmc_status(stepperE0, i);
683
       #endif
686
       #endif
684
       #if AXIS_IS_TMC(E1)
687
       #if AXIS_IS_TMC(E1)
685
-        tmc_status(stepperE1, i, planner.settings.axis_steps_per_mm[E_AXIS
686
-          #if ENABLED(DISTINCT_E_FACTORS)
687
-            + 1
688
-          #endif
689
-        ]);
688
+        tmc_status(stepperE1, i);
690
       #endif
689
       #endif
691
       #if AXIS_IS_TMC(E2)
690
       #if AXIS_IS_TMC(E2)
692
-        tmc_status(stepperE2, i, planner.settings.axis_steps_per_mm[E_AXIS
693
-          #if ENABLED(DISTINCT_E_FACTORS)
694
-            + 2
695
-          #endif
696
-        ]);
691
+        tmc_status(stepperE2, i);
697
       #endif
692
       #endif
698
       #if AXIS_IS_TMC(E3)
693
       #if AXIS_IS_TMC(E3)
699
-        tmc_status(stepperE3, i, planner.settings.axis_steps_per_mm[E_AXIS
700
-          #if ENABLED(DISTINCT_E_FACTORS)
701
-            + 3
702
-          #endif
703
-        ]);
694
+        tmc_status(stepperE3, i);
704
       #endif
695
       #endif
705
       #if AXIS_IS_TMC(E4)
696
       #if AXIS_IS_TMC(E4)
706
-        tmc_status(stepperE4, i, planner.settings.axis_steps_per_mm[E_AXIS
707
-          #if ENABLED(DISTINCT_E_FACTORS)
708
-            + 4
709
-          #endif
710
-        ]);
697
+        tmc_status(stepperE4, i);
711
       #endif
698
       #endif
712
       #if AXIS_IS_TMC(E5)
699
       #if AXIS_IS_TMC(E5)
713
-        tmc_status(stepperE5, i, planner.settings.axis_steps_per_mm[E_AXIS
714
-          #if ENABLED(DISTINCT_E_FACTORS)
715
-            + 5
716
-          #endif
717
-        ]);
700
+        tmc_status(stepperE5, i);
718
       #endif
701
       #endif
719
     }
702
     }
720
 
703
 
877
     }
860
     }
878
   #endif
861
   #endif
879
   #if HAS_DRIVER(TMC2660)
862
   #if HAS_DRIVER(TMC2660)
880
-    template <char AXIS_LETTER, char DRIVER_ID>
881
-    static void tmc_get_registers(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID> &st, const TMC_get_registers_enum i) {
863
+    template <char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
864
+    static void tmc_get_registers(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const TMC_get_registers_enum i) {
882
       switch (i) {
865
       switch (i) {
883
         case TMC_AXIS_CODES: SERIAL_CHAR('\t'); st.printLabel(); break;
866
         case TMC_AXIS_CODES: SERIAL_CHAR('\t'); st.printLabel(); break;
884
         PRINT_TMC_REGISTER(DRVCONF);
867
         PRINT_TMC_REGISTER(DRVCONF);
1118
   if (axis_connection) ui.set_status_P(PSTR("TMC CONNECTION ERROR"));
1101
   if (axis_connection) ui.set_status_P(PSTR("TMC CONNECTION ERROR"));
1119
 }
1102
 }
1120
 
1103
 
1121
-#if HAS_LCD_MENU
1122
-
1123
-  void init_tmc_section() {
1124
-    #if AXIS_IS_TMC(X)
1125
-      stepperX.init_lcd_variables(X_AXIS);
1126
-    #endif
1127
-    #if AXIS_IS_TMC(Y)
1128
-      stepperY.init_lcd_variables(Y_AXIS);
1129
-    #endif
1130
-    #if AXIS_IS_TMC(Z)
1131
-      stepperZ.init_lcd_variables(Z_AXIS);
1132
-    #endif
1133
-    #if AXIS_IS_TMC(X2)
1134
-      stepperX2.init_lcd_variables(X_AXIS);
1135
-    #endif
1136
-    #if AXIS_IS_TMC(Y2)
1137
-      stepperY2.init_lcd_variables(Y_AXIS);
1138
-    #endif
1139
-    #if AXIS_IS_TMC(Z2)
1140
-      stepperZ2.init_lcd_variables(Z_AXIS);
1141
-    #endif
1142
-    #if AXIS_IS_TMC(Z3)
1143
-      stepperZ3.init_lcd_variables(Z_AXIS);
1144
-    #endif
1145
-    #if AXIS_IS_TMC(E0)
1146
-      stepperE0.init_lcd_variables(E_AXIS);
1147
-    #endif
1148
-    #if AXIS_IS_TMC(E1)
1149
-      stepperE1.init_lcd_variables(E_AXIS_N(1));
1150
-    #endif
1151
-    #if AXIS_IS_TMC(E2)
1152
-      stepperE2.init_lcd_variables(E_AXIS_N(2));
1153
-    #endif
1154
-    #if AXIS_IS_TMC(E3)
1155
-      stepperE3.init_lcd_variables(E_AXIS_N(3));
1156
-    #endif
1157
-    #if AXIS_IS_TMC(E4)
1158
-      stepperE4.init_lcd_variables(E_AXIS_N(4));
1159
-    #endif
1160
-    #if AXIS_IS_TMC(E5)
1161
-      stepperE5.init_lcd_variables(E_AXIS_N(5));
1162
-    #endif
1163
-  }
1164
-#endif
1165
-
1166
 #endif // HAS_TRINAMIC
1104
 #endif // HAS_TRINAMIC

+ 71
- 64
Marlin/src/feature/tmc_util.h View File

23
 
23
 
24
 #include "../inc/MarlinConfig.h"
24
 #include "../inc/MarlinConfig.h"
25
 #include "../lcd/ultralcd.h"
25
 #include "../lcd/ultralcd.h"
26
+
26
 #if HAS_TRINAMIC
27
 #if HAS_TRINAMIC
27
-  #include <TMCStepper.h>
28
-#endif
29
-#if HAS_LCD_MENU
30
-  #include "../module/planner.h"
31
-#endif
28
+
29
+#include <TMCStepper.h>
30
+#include "../module/planner.h"
32
 
31
 
33
 #define TMC_X_LABEL 'X', '0'
32
 #define TMC_X_LABEL 'X', '0'
34
 #define TMC_Y_LABEL 'Y', '0'
33
 #define TMC_Y_LABEL 'Y', '0'
57
   #define MONITOR_DRIVER_STATUS_INTERVAL_MS 500u
56
   #define MONITOR_DRIVER_STATUS_INTERVAL_MS 500u
58
 #endif
57
 #endif
59
 
58
 
60
-constexpr uint16_t _tmc_thrs(const uint16_t msteps, const int32_t thrs, const uint32_t spmm) {
59
+constexpr uint16_t _tmc_thrs(const uint16_t msteps, const uint32_t thrs, const uint32_t spmm) {
61
   return 12650000UL * msteps / (256 * thrs * spmm);
60
   return 12650000UL * msteps / (256 * thrs * spmm);
62
 }
61
 }
63
 
62
 
92
       #if ENABLED(HYBRID_THRESHOLD)
91
       #if ENABLED(HYBRID_THRESHOLD)
93
         uint8_t hybrid_thrs = 0;
92
         uint8_t hybrid_thrs = 0;
94
       #endif
93
       #endif
95
-      #if ENABLED(SENSORLESS_HOMING)
94
+      #if USE_SENSORLESS
96
         int8_t homing_thrs = 0;
95
         int8_t homing_thrs = 0;
97
       #endif
96
       #endif
98
     } stored;
97
     } stored;
99
 };
98
 };
100
 
99
 
101
-template<class TMC, char AXIS_LETTER, char DRIVER_ID>
100
+template<class TMC, char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
102
 class TMCMarlin : public TMC, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
101
 class TMCMarlin : public TMC, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
103
   public:
102
   public:
104
     TMCMarlin(uint16_t cs_pin, float RS) :
103
     TMCMarlin(uint16_t cs_pin, float RS) :
121
       inline void refresh_stepping_mode() { this->en_pwm_mode(this->stored.stealthChop_enabled); }
120
       inline void refresh_stepping_mode() { this->en_pwm_mode(this->stored.stealthChop_enabled); }
122
       inline bool get_stealthChop_status() { return this->en_pwm_mode(); }
121
       inline bool get_stealthChop_status() { return this->en_pwm_mode(); }
123
     #endif
122
     #endif
124
-
125
-    #if HAS_LCD_MENU
126
-
127
-      inline void init_lcd_variables(const AxisEnum spmm_id) {
128
-        #if ENABLED(HYBRID_THRESHOLD)
129
-          this->stored.hybrid_thrs = _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[spmm_id]);
123
+    #if ENABLED(HYBRID_THRESHOLD)
124
+      uint32_t get_pwm_thrs() {
125
+        return _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[AXIS_ID]);
126
+      }
127
+      void set_pwm_thrs(const uint32_t thrs) {
128
+        TMC::TPWMTHRS(_tmc_thrs(this->microsteps(), thrs, planner.settings.axis_steps_per_mm[AXIS_ID]));
129
+        #if HAS_LCD_MENU
130
+          this->stored.hybrid_thrs = thrs;
130
         #endif
131
         #endif
131
-        #if ENABLED(SENSORLESS_HOMING)
132
-          this->stored.homing_thrs = this->sgt();
132
+      }
133
+    #endif
134
+    #if USE_SENSORLESS
135
+      inline int8_t sgt() { return TMC::sgt(); }
136
+      void sgt(const int8_t sgt_val) {
137
+        TMC::sgt(sgt_val);
138
+        #if HAS_LCD_MENU
139
+          this->stored.homing_thrs = sgt_val;
133
         #endif
140
         #endif
134
       }
141
       }
142
+    #endif
135
 
143
 
144
+    #if HAS_LCD_MENU
136
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
145
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
137
 
146
 
138
       #if ENABLED(HYBRID_THRESHOLD)
147
       #if ENABLED(HYBRID_THRESHOLD)
139
-        inline void refresh_hybrid_thrs(float spmm) { this->TPWMTHRS(_tmc_thrs(this->microsteps(), this->stored.hybrid_thrs, spmm)); }
148
+        inline void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); }
140
       #endif
149
       #endif
141
-      #if ENABLED(SENSORLESS_HOMING)
142
-        inline void refresh_homing_thrs() { this->sgt(this->stored.homing_thrs); }
150
+      #if USE_SENSORLESS
151
+        inline void refresh_homing_thrs() { sgt(this->stored.homing_thrs); }
143
       #endif
152
       #endif
144
     #endif
153
     #endif
145
 };
154
 };
146
-template<char AXIS_LETTER, char DRIVER_ID>
147
-class TMCMarlin<TMC2208Stepper, AXIS_LETTER, DRIVER_ID> : public TMC2208Stepper, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
155
+template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
156
+class TMCMarlin<TMC2208Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC2208Stepper, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
148
   public:
157
   public:
149
     TMCMarlin(Stream * SerialPort, float RS, bool has_rx=true) :
158
     TMCMarlin(Stream * SerialPort, float RS, bool has_rx=true) :
150
       TMC2208Stepper(SerialPort, RS, has_rx=true)
159
       TMC2208Stepper(SerialPort, RS, has_rx=true)
166
       inline void refresh_stepping_mode() { en_spreadCycle(!this->stored.stealthChop_enabled); }
175
       inline void refresh_stepping_mode() { en_spreadCycle(!this->stored.stealthChop_enabled); }
167
       inline bool get_stealthChop_status() { return !this->en_spreadCycle(); }
176
       inline bool get_stealthChop_status() { return !this->en_spreadCycle(); }
168
     #endif
177
     #endif
169
-
170
-    #if HAS_LCD_MENU
171
-
172
-      inline void init_lcd_variables(const AxisEnum spmm_id) {
173
-        #if ENABLED(HYBRID_THRESHOLD)
174
-          this->stored.hybrid_thrs = _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[spmm_id]);
178
+    #if ENABLED(HYBRID_THRESHOLD)
179
+      uint32_t get_pwm_thrs() {
180
+        return _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[AXIS_ID]);
181
+      }
182
+      void set_pwm_thrs(const uint32_t thrs) {
183
+        TMC2208Stepper::TPWMTHRS(_tmc_thrs(this->microsteps(), thrs, planner.settings.axis_steps_per_mm[AXIS_ID]));
184
+        #if HAS_LCD_MENU
185
+          this->stored.hybrid_thrs = thrs;
175
         #endif
186
         #endif
176
       }
187
       }
188
+    #endif
177
 
189
 
190
+    #if HAS_LCD_MENU
178
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
191
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
179
 
192
 
180
       #if ENABLED(HYBRID_THRESHOLD)
193
       #if ENABLED(HYBRID_THRESHOLD)
181
-        inline void refresh_hybrid_thrs(float spmm) { this->TPWMTHRS(_tmc_thrs(this->microsteps(), this->stored.hybrid_thrs, spmm)); }
194
+        inline void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); }
182
       #endif
195
       #endif
183
     #endif
196
     #endif
184
 };
197
 };
185
-template<char AXIS_LETTER, char DRIVER_ID>
186
-class TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID> : public TMC2660Stepper, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
198
+template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
199
+class TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC2660Stepper, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
187
   public:
200
   public:
188
     TMCMarlin(uint16_t cs_pin, float RS) :
201
     TMCMarlin(uint16_t cs_pin, float RS) :
189
       TMC2660Stepper(cs_pin, RS)
202
       TMC2660Stepper(cs_pin, RS)
197
       TMC2660Stepper::rms_current(mA);
210
       TMC2660Stepper::rms_current(mA);
198
     }
211
     }
199
 
212
 
200
-    #if HAS_LCD_MENU
201
-      inline void init_lcd_variables(const AxisEnum spmm_id) {
202
-        #if ENABLED(SENSORLESS_HOMING)
203
-          this->stored.homing_thrs = this->sgt();
213
+    #if USE_SENSORLESS
214
+      inline int8_t sgt() { return TMC2660Stepper::sgt(); }
215
+      void sgt(const int8_t sgt_val) {
216
+        TMC2660Stepper::sgt(sgt_val);
217
+        #if HAS_LCD_MENU
218
+          this->stored.homing_thrs = sgt_val;
204
         #endif
219
         #endif
205
       }
220
       }
221
+    #endif
206
 
222
 
223
+    #if HAS_LCD_MENU
207
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
224
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
208
 
225
 
209
-      #if ENABLED(SENSORLESS_HOMING)
210
-        inline void refresh_homing_thrs() { this->sgt(this->stored.homing_thrs); }
226
+      #if USE_SENSORLESS
227
+        inline void refresh_homing_thrs() { sgt(this->stored.homing_thrs); }
211
       #endif
228
       #endif
212
     #endif
229
     #endif
213
 };
230
 };
214
 
231
 
215
 template<typename TMC>
232
 template<typename TMC>
216
-void tmc_get_current(TMC &st) {
233
+void tmc_print_current(TMC &st) {
217
   st.printLabel();
234
   st.printLabel();
218
   SERIAL_ECHOLNPAIR(" driver current: ", st.getMilliamps());
235
   SERIAL_ECHOLNPAIR(" driver current: ", st.getMilliamps());
219
 }
236
 }
220
-template<typename TMC>
221
-void tmc_set_current(TMC &st, const int mA) {
222
-  st.rms_current(mA);
223
-}
224
 
237
 
225
 #if ENABLED(MONITOR_DRIVER_STATUS)
238
 #if ENABLED(MONITOR_DRIVER_STATUS)
226
   template<typename TMC>
239
   template<typename TMC>
237
     SERIAL_ECHOLNPGM(" prewarn flag cleared");
250
     SERIAL_ECHOLNPGM(" prewarn flag cleared");
238
   }
251
   }
239
 #endif
252
 #endif
240
-template<typename TMC>
241
-void tmc_get_pwmthrs(TMC &st, const uint16_t spmm) {
242
-  st.printLabel();
243
-  SERIAL_ECHOLNPAIR(" stealthChop max speed: ", _tmc_thrs(st.microsteps(), st.TPWMTHRS(), spmm));
244
-}
245
-template<typename TMC>
246
-void tmc_set_pwmthrs(TMC &st, const int32_t thrs, const uint32_t spmm) {
247
-  st.TPWMTHRS(_tmc_thrs(st.microsteps(), thrs, spmm));
248
-}
249
-template<typename TMC>
250
-void tmc_get_sgt(TMC &st) {
251
-  st.printLabel();
252
-  SERIAL_ECHOPGM(" homing sensitivity: ");
253
-  SERIAL_PRINTLN(st.sgt(), DEC);
254
-}
255
-template<typename TMC>
256
-void tmc_set_sgt(TMC &st, const int8_t sgt_val) {
257
-  st.sgt(sgt_val);
258
-}
253
+#if ENABLED(HYBRID_THRESHOLD)
254
+  template<typename TMC>
255
+  void tmc_print_pwmthrs(TMC &st) {
256
+    st.printLabel();
257
+    SERIAL_ECHOLNPAIR(" stealthChop max speed: ", st.get_pwm_thrs());
258
+  }
259
+#endif
260
+#if USE_SENSORLESS
261
+  template<typename TMC>
262
+  void tmc_print_sgt(TMC &st) {
263
+    st.printLabel();
264
+    SERIAL_ECHOPGM(" homing sensitivity: ");
265
+    SERIAL_PRINTLN(st.sgt(), DEC);
266
+  }
267
+#endif
259
 
268
 
260
 void monitor_tmc_driver();
269
 void monitor_tmc_driver();
261
 void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e);
270
 void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e);
268
   void tmc_get_registers(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
277
   void tmc_get_registers(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
269
 #endif
278
 #endif
270
 
279
 
271
-#if HAS_LCD_MENU
272
-  void init_tmc_section();
273
-#endif
274
-
275
 /**
280
 /**
276
  * TMC2130 specific sensorless homing using stallGuard2.
281
  * TMC2130 specific sensorless homing using stallGuard2.
277
  * stallGuard2 only works when in spreadCycle mode.
282
  * stallGuard2 only works when in spreadCycle mode.
295
 #if TMC_HAS_SPI
300
 #if TMC_HAS_SPI
296
   void tmc_init_cs_pins();
301
   void tmc_init_cs_pins();
297
 #endif
302
 #endif
303
+
304
+#endif // HAS_TRINAMIC

+ 2
- 2
Marlin/src/gcode/feature/trinamic/M906.cpp View File

43
  * With no parameters report driver currents.
43
  * With no parameters report driver currents.
44
  */
44
  */
45
 void GcodeSuite::M906() {
45
 void GcodeSuite::M906() {
46
-  #define TMC_SAY_CURRENT(Q) tmc_get_current(stepper##Q)
47
-  #define TMC_SET_CURRENT(Q) tmc_set_current(stepper##Q, value)
46
+  #define TMC_SAY_CURRENT(Q) tmc_print_current(stepper##Q)
47
+  #define TMC_SET_CURRENT(Q) stepper##Q.rms_current(value)
48
 
48
 
49
   bool report = true;
49
   bool report = true;
50
 
50
 

+ 18
- 20
Marlin/src/gcode/feature/trinamic/M911-M914.cpp View File

192
  */
192
  */
193
 #if ENABLED(HYBRID_THRESHOLD)
193
 #if ENABLED(HYBRID_THRESHOLD)
194
   void GcodeSuite::M913() {
194
   void GcodeSuite::M913() {
195
-    #define TMC_SAY_PWMTHRS(A,Q) tmc_get_pwmthrs(stepper##Q, planner.settings.axis_steps_per_mm[_AXIS(A)])
196
-    #define TMC_SET_PWMTHRS(A,Q) tmc_set_pwmthrs(stepper##Q, value, planner.settings.axis_steps_per_mm[_AXIS(A)])
197
-    #define TMC_SAY_PWMTHRS_E(E) tmc_get_pwmthrs(stepperE##E, planner.settings.axis_steps_per_mm[E_AXIS_N(E)])
198
-    #define TMC_SET_PWMTHRS_E(E) tmc_set_pwmthrs(stepperE##E, value, planner.settings.axis_steps_per_mm[E_AXIS_N(E)])
195
+    #define TMC_SAY_PWMTHRS(A,Q) tmc_print_pwmthrs(stepper##Q)
196
+    #define TMC_SET_PWMTHRS(A,Q) stepper##Q.set_pwm_thrs(value)
197
+    #define TMC_SAY_PWMTHRS_E(E) tmc_print_pwmthrs(stepperE##E)
198
+    #define TMC_SET_PWMTHRS_E(E) stepperE##E.set_pwm_thrs(value)
199
 
199
 
200
     bool report = true;
200
     bool report = true;
201
     #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3)
201
     #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3)
309
  */
309
  */
310
 #if USE_SENSORLESS
310
 #if USE_SENSORLESS
311
   void GcodeSuite::M914() {
311
   void GcodeSuite::M914() {
312
-    #define TMC_SAY_SGT(Q) tmc_get_sgt(stepper##Q)
313
-    #define TMC_SET_SGT(Q) tmc_set_sgt(stepper##Q, value)
314
 
312
 
315
     bool report = true;
313
     bool report = true;
316
     const uint8_t index = parser.byteval('I');
314
     const uint8_t index = parser.byteval('I');
321
         #if X_SENSORLESS
319
         #if X_SENSORLESS
322
           case X_AXIS:
320
           case X_AXIS:
323
             #if AXIS_HAS_STALLGUARD(X)
321
             #if AXIS_HAS_STALLGUARD(X)
324
-              if (index < 2) TMC_SET_SGT(X);
322
+              if (index < 2) stepperX.sgt(value);
325
             #endif
323
             #endif
326
             #if AXIS_HAS_STALLGUARD(X2)
324
             #if AXIS_HAS_STALLGUARD(X2)
327
-              if (!(index & 1)) TMC_SET_SGT(X2);
325
+              if (!(index & 1)) stepperX2.sgt(value);
328
             #endif
326
             #endif
329
             break;
327
             break;
330
         #endif
328
         #endif
331
         #if Y_SENSORLESS
329
         #if Y_SENSORLESS
332
           case Y_AXIS:
330
           case Y_AXIS:
333
             #if AXIS_HAS_STALLGUARD(Y)
331
             #if AXIS_HAS_STALLGUARD(Y)
334
-              if (index < 2) TMC_SET_SGT(Y);
332
+              if (index < 2) stepperY.sgt(value);
335
             #endif
333
             #endif
336
             #if AXIS_HAS_STALLGUARD(Y2)
334
             #if AXIS_HAS_STALLGUARD(Y2)
337
-              if (!(index & 1)) TMC_SET_SGT(Y2);
335
+              if (!(index & 1)) stepperY2.sgt(value);
338
             #endif
336
             #endif
339
             break;
337
             break;
340
         #endif
338
         #endif
341
         #if Z_SENSORLESS
339
         #if Z_SENSORLESS
342
           case Z_AXIS:
340
           case Z_AXIS:
343
             #if AXIS_HAS_STALLGUARD(Z)
341
             #if AXIS_HAS_STALLGUARD(Z)
344
-              if (index < 2) TMC_SET_SGT(Z);
342
+              if (index < 2) stepperZ.sgt(value);
345
             #endif
343
             #endif
346
             #if AXIS_HAS_STALLGUARD(Z2)
344
             #if AXIS_HAS_STALLGUARD(Z2)
347
-              if (index == 0 || index == 2) TMC_SET_SGT(Z2);
345
+              if (index == 0 || index == 2) stepperZ2.sgt(value);
348
             #endif
346
             #endif
349
             #if AXIS_HAS_STALLGUARD(Z3)
347
             #if AXIS_HAS_STALLGUARD(Z3)
350
-              if (index == 0 || index == 3) TMC_SET_SGT(Z3);
348
+              if (index == 0 || index == 3) stepperZ3.sgt(value);
351
             #endif
349
             #endif
352
             break;
350
             break;
353
         #endif
351
         #endif
357
     if (report) {
355
     if (report) {
358
       #if X_SENSORLESS
356
       #if X_SENSORLESS
359
         #if AXIS_HAS_STALLGUARD(X)
357
         #if AXIS_HAS_STALLGUARD(X)
360
-          TMC_SAY_SGT(X);
358
+          tmc_print_sgt(stepperX);
361
         #endif
359
         #endif
362
         #if AXIS_HAS_STALLGUARD(X2)
360
         #if AXIS_HAS_STALLGUARD(X2)
363
-          TMC_SAY_SGT(X2);
361
+          tmc_print_sgt(stepperX2);
364
         #endif
362
         #endif
365
       #endif
363
       #endif
366
       #if Y_SENSORLESS
364
       #if Y_SENSORLESS
367
         #if AXIS_HAS_STALLGUARD(Y)
365
         #if AXIS_HAS_STALLGUARD(Y)
368
-          TMC_SAY_SGT(Y);
366
+          tmc_print_sgt(stepperY);
369
         #endif
367
         #endif
370
         #if AXIS_HAS_STALLGUARD(Y2)
368
         #if AXIS_HAS_STALLGUARD(Y2)
371
-          TMC_SAY_SGT(Y2);
369
+          tmc_print_sgt(stepperY2);
372
         #endif
370
         #endif
373
       #endif
371
       #endif
374
       #if Z_SENSORLESS
372
       #if Z_SENSORLESS
375
         #if AXIS_HAS_STALLGUARD(Z)
373
         #if AXIS_HAS_STALLGUARD(Z)
376
-          TMC_SAY_SGT(Z);
374
+          tmc_print_sgt(stepperZ);
377
         #endif
375
         #endif
378
         #if AXIS_HAS_STALLGUARD(Z2)
376
         #if AXIS_HAS_STALLGUARD(Z2)
379
-          TMC_SAY_SGT(Z2);
377
+          tmc_print_sgt(stepperZ2);
380
         #endif
378
         #endif
381
         #if AXIS_HAS_STALLGUARD(Z3)
379
         #if AXIS_HAS_STALLGUARD(Z3)
382
-          TMC_SAY_SGT(Z3);
380
+          tmc_print_sgt(stepperZ3);
383
         #endif
381
         #endif
384
       #endif
382
       #endif
385
     }
383
     }

+ 13
- 13
Marlin/src/lcd/menu/menu_tmc.cpp View File

124
   #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) MENU_ITEM_EDIT_CALLBACK(uint8, MSG, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
124
   #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) MENU_ITEM_EDIT_CALLBACK(uint8, MSG, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
125
 
125
 
126
   #if AXIS_HAS_STEALTHCHOP(X)
126
   #if AXIS_HAS_STEALTHCHOP(X)
127
-    void refresh_hybrid_thrs_X()  {  stepperX.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[X_AXIS]); }
127
+    void refresh_hybrid_thrs_X()  {  stepperX.refresh_hybrid_thrs(); }
128
   #endif
128
   #endif
129
   #if AXIS_HAS_STEALTHCHOP(Y)
129
   #if AXIS_HAS_STEALTHCHOP(Y)
130
-    void refresh_hybrid_thrs_Y()  {  stepperY.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[Y_AXIS]); }
130
+    void refresh_hybrid_thrs_Y()  {  stepperY.refresh_hybrid_thrs(); }
131
   #endif
131
   #endif
132
   #if AXIS_HAS_STEALTHCHOP(Z)
132
   #if AXIS_HAS_STEALTHCHOP(Z)
133
-    void refresh_hybrid_thrs_Z()  {  stepperZ.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[Z_AXIS]); }
133
+    void refresh_hybrid_thrs_Z()  {  stepperZ.refresh_hybrid_thrs(); }
134
   #endif
134
   #endif
135
   #if AXIS_HAS_STEALTHCHOP(X2)
135
   #if AXIS_HAS_STEALTHCHOP(X2)
136
-    void refresh_hybrid_thrs_X2() { stepperX2.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[X_AXIS]); }
136
+    void refresh_hybrid_thrs_X2() { stepperX2.refresh_hybrid_thrs(); }
137
   #endif
137
   #endif
138
   #if AXIS_HAS_STEALTHCHOP(Y2)
138
   #if AXIS_HAS_STEALTHCHOP(Y2)
139
-    void refresh_hybrid_thrs_Y2() { stepperY2.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[Y_AXIS]); }
139
+    void refresh_hybrid_thrs_Y2() { stepperY2.refresh_hybrid_thrs(); }
140
   #endif
140
   #endif
141
   #if AXIS_HAS_STEALTHCHOP(Z2)
141
   #if AXIS_HAS_STEALTHCHOP(Z2)
142
-    void refresh_hybrid_thrs_Z2() { stepperZ2.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[Z_AXIS]); }
142
+    void refresh_hybrid_thrs_Z2() { stepperZ2.refresh_hybrid_thrs(); }
143
   #endif
143
   #endif
144
   #if AXIS_HAS_STEALTHCHOP(Z3)
144
   #if AXIS_HAS_STEALTHCHOP(Z3)
145
-    void refresh_hybrid_thrs_Z3() { stepperZ3.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[Z_AXIS]); }
145
+    void refresh_hybrid_thrs_Z3() { stepperZ3.refresh_hybrid_thrs(); }
146
   #endif
146
   #endif
147
   #if AXIS_HAS_STEALTHCHOP(E0)
147
   #if AXIS_HAS_STEALTHCHOP(E0)
148
-    void refresh_hybrid_thrs_E0() { stepperE0.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[E_AXIS]); }
148
+    void refresh_hybrid_thrs_E0() { stepperE0.refresh_hybrid_thrs(); }
149
   #endif
149
   #endif
150
   #if AXIS_HAS_STEALTHCHOP(E1)
150
   #if AXIS_HAS_STEALTHCHOP(E1)
151
-    void refresh_hybrid_thrs_E1() { stepperE1.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[E_AXIS_N(1)]); }
151
+    void refresh_hybrid_thrs_E1() { stepperE1.refresh_hybrid_thrs(); }
152
   #endif
152
   #endif
153
   #if AXIS_HAS_STEALTHCHOP(E2)
153
   #if AXIS_HAS_STEALTHCHOP(E2)
154
-    void refresh_hybrid_thrs_E2() { stepperE2.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[E_AXIS_N(2)]); }
154
+    void refresh_hybrid_thrs_E2() { stepperE2.refresh_hybrid_thrs(); }
155
   #endif
155
   #endif
156
   #if AXIS_HAS_STEALTHCHOP(E3)
156
   #if AXIS_HAS_STEALTHCHOP(E3)
157
-    void refresh_hybrid_thrs_E3() { stepperE3.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[E_AXIS_N(3)]); }
157
+    void refresh_hybrid_thrs_E3() { stepperE3.refresh_hybrid_thrs(); }
158
   #endif
158
   #endif
159
   #if AXIS_HAS_STEALTHCHOP(E4)
159
   #if AXIS_HAS_STEALTHCHOP(E4)
160
-    void refresh_hybrid_thrs_E4() { stepperE4.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[E_AXIS_N(4)]); }
160
+    void refresh_hybrid_thrs_E4() { stepperE4.refresh_hybrid_thrs(); }
161
   #endif
161
   #endif
162
   #if AXIS_HAS_STEALTHCHOP(E5)
162
   #if AXIS_HAS_STEALTHCHOP(E5)
163
-    void refresh_hybrid_thrs_E5() { stepperE5.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[E_AXIS_N(5)]); }
163
+    void refresh_hybrid_thrs_E5() { stepperE5.refresh_hybrid_thrs(); }
164
   #endif
164
   #endif
165
 
165
 
166
   void menu_tmc_hybrid_thrs() {
166
   void menu_tmc_hybrid_thrs() {

+ 39
- 41
Marlin/src/module/configuration_store.cpp View File

112
 #if HAS_TRINAMIC
112
 #if HAS_TRINAMIC
113
   #include "stepper_indirection.h"
113
   #include "stepper_indirection.h"
114
   #include "../feature/tmc_util.h"
114
   #include "../feature/tmc_util.h"
115
-  #define TMC_GET_PWMTHRS(A,Q) _tmc_thrs(stepper##Q.microsteps(), stepper##Q.TPWMTHRS(), planner.settings.axis_steps_per_mm[_AXIS(A)])
116
 #endif
115
 #endif
117
 
116
 
118
 #pragma pack(push, 1) // No padding between variables
117
 #pragma pack(push, 1) // No padding between variables
962
       #if ENABLED(HYBRID_THRESHOLD)
961
       #if ENABLED(HYBRID_THRESHOLD)
963
        tmc_hybrid_threshold_t tmc_hybrid_threshold = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
962
        tmc_hybrid_threshold_t tmc_hybrid_threshold = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
964
         #if AXIS_HAS_STEALTHCHOP(X)
963
         #if AXIS_HAS_STEALTHCHOP(X)
965
-          tmc_hybrid_threshold.X = TMC_GET_PWMTHRS(X, X);
964
+          tmc_hybrid_threshold.X = stepperX.get_pwm_thrs();
966
         #endif
965
         #endif
967
         #if AXIS_HAS_STEALTHCHOP(Y)
966
         #if AXIS_HAS_STEALTHCHOP(Y)
968
-          tmc_hybrid_threshold.Y = TMC_GET_PWMTHRS(Y, Y);
967
+          tmc_hybrid_threshold.Y = stepperY.get_pwm_thrs();
969
         #endif
968
         #endif
970
         #if AXIS_HAS_STEALTHCHOP(Z)
969
         #if AXIS_HAS_STEALTHCHOP(Z)
971
-          tmc_hybrid_threshold.Z = TMC_GET_PWMTHRS(Z, Z);
970
+          tmc_hybrid_threshold.Z = stepperZ.get_pwm_thrs();
972
         #endif
971
         #endif
973
         #if AXIS_HAS_STEALTHCHOP(X2)
972
         #if AXIS_HAS_STEALTHCHOP(X2)
974
-          tmc_hybrid_threshold.X2 = TMC_GET_PWMTHRS(X, X2);
973
+          tmc_hybrid_threshold.X2 = stepperX2.get_pwm_thrs();
975
         #endif
974
         #endif
976
         #if AXIS_HAS_STEALTHCHOP(Y2)
975
         #if AXIS_HAS_STEALTHCHOP(Y2)
977
-          tmc_hybrid_threshold.Y2 = TMC_GET_PWMTHRS(Y, Y2);
976
+          tmc_hybrid_threshold.Y2 = stepperY2.get_pwm_thrs();
978
         #endif
977
         #endif
979
         #if AXIS_HAS_STEALTHCHOP(Z2)
978
         #if AXIS_HAS_STEALTHCHOP(Z2)
980
-          tmc_hybrid_threshold.Z2 = TMC_GET_PWMTHRS(Z, Z2);
979
+          tmc_hybrid_threshold.Z2 = stepperZ2.get_pwm_thrs();
981
         #endif
980
         #endif
982
         #if AXIS_HAS_STEALTHCHOP(Z3)
981
         #if AXIS_HAS_STEALTHCHOP(Z3)
983
-          tmc_hybrid_threshold.Z3 = TMC_GET_PWMTHRS(Z, Z3);
982
+          tmc_hybrid_threshold.Z3 = stepperZ3.get_pwm_thrs();
984
         #endif
983
         #endif
985
         #if MAX_EXTRUDERS
984
         #if MAX_EXTRUDERS
986
           #if AXIS_HAS_STEALTHCHOP(E0)
985
           #if AXIS_HAS_STEALTHCHOP(E0)
987
-            tmc_hybrid_threshold.E0 = TMC_GET_PWMTHRS(E, E0);
986
+            tmc_hybrid_threshold.E0 = stepperE0.get_pwm_thrs();
988
           #endif
987
           #endif
989
           #if MAX_EXTRUDERS > 1
988
           #if MAX_EXTRUDERS > 1
990
             #if AXIS_HAS_STEALTHCHOP(E1)
989
             #if AXIS_HAS_STEALTHCHOP(E1)
991
-              tmc_hybrid_threshold.E1 = TMC_GET_PWMTHRS(E, E1);
990
+              tmc_hybrid_threshold.E1 = stepperE1.get_pwm_thrs();
992
             #endif
991
             #endif
993
             #if MAX_EXTRUDERS > 2
992
             #if MAX_EXTRUDERS > 2
994
               #if AXIS_HAS_STEALTHCHOP(E2)
993
               #if AXIS_HAS_STEALTHCHOP(E2)
995
-                tmc_hybrid_threshold.E2 = TMC_GET_PWMTHRS(E, E2);
994
+                tmc_hybrid_threshold.E2 = stepperE2.get_pwm_thrs();
996
               #endif
995
               #endif
997
               #if MAX_EXTRUDERS > 3
996
               #if MAX_EXTRUDERS > 3
998
                 #if AXIS_HAS_STEALTHCHOP(E3)
997
                 #if AXIS_HAS_STEALTHCHOP(E3)
999
-                  tmc_hybrid_threshold.E3 = TMC_GET_PWMTHRS(E, E3);
998
+                  tmc_hybrid_threshold.E3 = stepperE3.get_pwm_thrs();
1000
                 #endif
999
                 #endif
1001
                 #if MAX_EXTRUDERS > 4
1000
                 #if MAX_EXTRUDERS > 4
1002
                   #if AXIS_HAS_STEALTHCHOP(E4)
1001
                   #if AXIS_HAS_STEALTHCHOP(E4)
1003
-                    tmc_hybrid_threshold.E4 = TMC_GET_PWMTHRS(E, E4);
1002
+                    tmc_hybrid_threshold.E4 = stepperE4.get_pwm_thrs();
1004
                   #endif
1003
                   #endif
1005
                   #if MAX_EXTRUDERS > 5
1004
                   #if MAX_EXTRUDERS > 5
1006
                     #if AXIS_HAS_STEALTHCHOP(E5)
1005
                     #if AXIS_HAS_STEALTHCHOP(E5)
1007
-                      tmc_hybrid_threshold.E5 = TMC_GET_PWMTHRS(E, E5);
1006
+                      tmc_hybrid_threshold.E5 = stepperE5.get_pwm_thrs();
1008
                     #endif
1007
                     #endif
1009
                   #endif // MAX_EXTRUDERS > 5
1008
                   #endif // MAX_EXTRUDERS > 5
1010
                 #endif // MAX_EXTRUDERS > 4
1009
                 #endif // MAX_EXTRUDERS > 4
1742
         EEPROM_READ(tmc_hybrid_threshold);
1741
         EEPROM_READ(tmc_hybrid_threshold);
1743
 
1742
 
1744
         #if ENABLED(HYBRID_THRESHOLD)
1743
         #if ENABLED(HYBRID_THRESHOLD)
1745
-          #define TMC_SET_PWMTHRS(A,Q) tmc_set_pwmthrs(stepper##Q, tmc_hybrid_threshold.Q, planner.settings.axis_steps_per_mm[_AXIS(A)])
1746
           if (!validating) {
1744
           if (!validating) {
1747
             #if AXIS_HAS_STEALTHCHOP(X)
1745
             #if AXIS_HAS_STEALTHCHOP(X)
1748
-              TMC_SET_PWMTHRS(X, X);
1746
+              stepperX.set_pwm_thrs(tmc_hybrid_threshold.X);
1749
             #endif
1747
             #endif
1750
             #if AXIS_HAS_STEALTHCHOP(Y)
1748
             #if AXIS_HAS_STEALTHCHOP(Y)
1751
-              TMC_SET_PWMTHRS(Y, Y);
1749
+              stepperY.set_pwm_thrs(tmc_hybrid_threshold.Y);
1752
             #endif
1750
             #endif
1753
             #if AXIS_HAS_STEALTHCHOP(Z)
1751
             #if AXIS_HAS_STEALTHCHOP(Z)
1754
-              TMC_SET_PWMTHRS(Z, Z);
1752
+              stepperZ.set_pwm_thrs(tmc_hybrid_threshold.Z);
1755
             #endif
1753
             #endif
1756
             #if AXIS_HAS_STEALTHCHOP(X2)
1754
             #if AXIS_HAS_STEALTHCHOP(X2)
1757
-              TMC_SET_PWMTHRS(X, X2);
1755
+              stepperX2.set_pwm_thrs(tmc_hybrid_threshold.X2);
1758
             #endif
1756
             #endif
1759
             #if AXIS_HAS_STEALTHCHOP(Y2)
1757
             #if AXIS_HAS_STEALTHCHOP(Y2)
1760
-              TMC_SET_PWMTHRS(Y, Y2);
1758
+              stepperY2.set_pwm_thrs(tmc_hybrid_threshold.Y2);
1761
             #endif
1759
             #endif
1762
             #if AXIS_HAS_STEALTHCHOP(Z2)
1760
             #if AXIS_HAS_STEALTHCHOP(Z2)
1763
-              TMC_SET_PWMTHRS(Z, Z2);
1761
+              stepperZ2.set_pwm_thrs(tmc_hybrid_threshold.Z2);
1764
             #endif
1762
             #endif
1765
             #if AXIS_HAS_STEALTHCHOP(Z3)
1763
             #if AXIS_HAS_STEALTHCHOP(Z3)
1766
-              TMC_SET_PWMTHRS(Z, Z3);
1764
+              stepperZ3.set_pwm_thrs(tmc_hybrid_threshold.Z3);
1767
             #endif
1765
             #endif
1768
             #if AXIS_HAS_STEALTHCHOP(E0)
1766
             #if AXIS_HAS_STEALTHCHOP(E0)
1769
-              TMC_SET_PWMTHRS(E, E0);
1767
+              stepperE0.set_pwm_thrs(tmc_hybrid_threshold.E0);
1770
             #endif
1768
             #endif
1771
             #if AXIS_HAS_STEALTHCHOP(E1)
1769
             #if AXIS_HAS_STEALTHCHOP(E1)
1772
-              TMC_SET_PWMTHRS(E, E1);
1770
+              stepperE1.set_pwm_thrs(tmc_hybrid_threshold.E1);
1773
             #endif
1771
             #endif
1774
             #if AXIS_HAS_STEALTHCHOP(E2)
1772
             #if AXIS_HAS_STEALTHCHOP(E2)
1775
-              TMC_SET_PWMTHRS(E, E2);
1773
+              stepperE2.set_pwm_thrs(tmc_hybrid_threshold.E2);
1776
             #endif
1774
             #endif
1777
             #if AXIS_HAS_STEALTHCHOP(E3)
1775
             #if AXIS_HAS_STEALTHCHOP(E3)
1778
-              TMC_SET_PWMTHRS(E, E3);
1776
+              stepperE3.set_pwm_thrs(tmc_hybrid_threshold.E3);
1779
             #endif
1777
             #endif
1780
             #if AXIS_HAS_STEALTHCHOP(E4)
1778
             #if AXIS_HAS_STEALTHCHOP(E4)
1781
-              TMC_SET_PWMTHRS(E, E4);
1779
+              stepperE4.set_pwm_thrs(tmc_hybrid_threshold.E4);
1782
             #endif
1780
             #endif
1783
             #if AXIS_HAS_STEALTHCHOP(E5)
1781
             #if AXIS_HAS_STEALTHCHOP(E5)
1784
-              TMC_SET_PWMTHRS(E, E5);
1782
+              stepperE5.set_pwm_thrs(tmc_hybrid_threshold.E5);
1785
             #endif
1783
             #endif
1786
           }
1784
           }
1787
         #endif
1785
         #endif
3149
           say_M913();
3147
           say_M913();
3150
         #endif
3148
         #endif
3151
         #if AXIS_HAS_STEALTHCHOP(X)
3149
         #if AXIS_HAS_STEALTHCHOP(X)
3152
-          SERIAL_ECHOPAIR(" X", TMC_GET_PWMTHRS(X, X));
3150
+          SERIAL_ECHOPAIR(" X", stepperX.get_pwm_thrs());
3153
         #endif
3151
         #endif
3154
         #if AXIS_HAS_STEALTHCHOP(Y)
3152
         #if AXIS_HAS_STEALTHCHOP(Y)
3155
-          SERIAL_ECHOPAIR(" Y", TMC_GET_PWMTHRS(Y, Y));
3153
+          SERIAL_ECHOPAIR(" Y", stepperY.get_pwm_thrs());
3156
         #endif
3154
         #endif
3157
         #if AXIS_HAS_STEALTHCHOP(Z)
3155
         #if AXIS_HAS_STEALTHCHOP(Z)
3158
-          SERIAL_ECHOPAIR(" Z", TMC_GET_PWMTHRS(Z, Z));
3156
+          SERIAL_ECHOPAIR(" Z", stepperZ.get_pwm_thrs());
3159
         #endif
3157
         #endif
3160
         #if AXIS_HAS_STEALTHCHOP(X) || AXIS_HAS_STEALTHCHOP(Y) || AXIS_HAS_STEALTHCHOP(Z)
3158
         #if AXIS_HAS_STEALTHCHOP(X) || AXIS_HAS_STEALTHCHOP(Y) || AXIS_HAS_STEALTHCHOP(Z)
3161
           SERIAL_EOL();
3159
           SERIAL_EOL();
3166
           SERIAL_ECHOPGM(" I1");
3164
           SERIAL_ECHOPGM(" I1");
3167
         #endif
3165
         #endif
3168
         #if AXIS_HAS_STEALTHCHOP(X2)
3166
         #if AXIS_HAS_STEALTHCHOP(X2)
3169
-          SERIAL_ECHOPAIR(" X", TMC_GET_PWMTHRS(X, X2));
3167
+          SERIAL_ECHOPAIR(" X", stepperX2.get_pwm_thrs());
3170
         #endif
3168
         #endif
3171
         #if AXIS_HAS_STEALTHCHOP(Y2)
3169
         #if AXIS_HAS_STEALTHCHOP(Y2)
3172
-          SERIAL_ECHOPAIR(" Y", TMC_GET_PWMTHRS(Y, Y2));
3170
+          SERIAL_ECHOPAIR(" Y", stepperY2.get_pwm_thrs());
3173
         #endif
3171
         #endif
3174
         #if AXIS_HAS_STEALTHCHOP(Z2)
3172
         #if AXIS_HAS_STEALTHCHOP(Z2)
3175
-          SERIAL_ECHOPAIR(" Z", TMC_GET_PWMTHRS(Z, Z2));
3173
+          SERIAL_ECHOPAIR(" Z", stepperZ2.get_pwm_thrs());
3176
         #endif
3174
         #endif
3177
         #if AXIS_HAS_STEALTHCHOP(X2) || AXIS_HAS_STEALTHCHOP(Y2) || AXIS_HAS_STEALTHCHOP(Z2)
3175
         #if AXIS_HAS_STEALTHCHOP(X2) || AXIS_HAS_STEALTHCHOP(Y2) || AXIS_HAS_STEALTHCHOP(Z2)
3178
           SERIAL_EOL();
3176
           SERIAL_EOL();
3180
 
3178
 
3181
         #if AXIS_HAS_STEALTHCHOP(Z3)
3179
         #if AXIS_HAS_STEALTHCHOP(Z3)
3182
           say_M913();
3180
           say_M913();
3183
-          SERIAL_ECHOLNPAIR(" I2 Z", TMC_GET_PWMTHRS(Z, Z3));
3181
+          SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.get_pwm_thrs());
3184
         #endif
3182
         #endif
3185
 
3183
 
3186
         #if AXIS_HAS_STEALTHCHOP(E0)
3184
         #if AXIS_HAS_STEALTHCHOP(E0)
3187
           say_M913();
3185
           say_M913();
3188
-          SERIAL_ECHOLNPAIR(" T0 E", TMC_GET_PWMTHRS(E, E0));
3186
+          SERIAL_ECHOLNPAIR(" T0 E", stepperE0.get_pwm_thrs());
3189
         #endif
3187
         #endif
3190
         #if AXIS_HAS_STEALTHCHOP(E1)
3188
         #if AXIS_HAS_STEALTHCHOP(E1)
3191
           say_M913();
3189
           say_M913();
3192
-          SERIAL_ECHOLNPAIR(" T1 E", TMC_GET_PWMTHRS(E, E1));
3190
+          SERIAL_ECHOLNPAIR(" T1 E", stepperE1.get_pwm_thrs());
3193
         #endif
3191
         #endif
3194
         #if AXIS_HAS_STEALTHCHOP(E2)
3192
         #if AXIS_HAS_STEALTHCHOP(E2)
3195
           say_M913();
3193
           say_M913();
3196
-          SERIAL_ECHOLNPAIR(" T2 E", TMC_GET_PWMTHRS(E, E2));
3194
+          SERIAL_ECHOLNPAIR(" T2 E", stepperE2.get_pwm_thrs());
3197
         #endif
3195
         #endif
3198
         #if AXIS_HAS_STEALTHCHOP(E3)
3196
         #if AXIS_HAS_STEALTHCHOP(E3)
3199
           say_M913();
3197
           say_M913();
3200
-          SERIAL_ECHOLNPAIR(" T3 E", TMC_GET_PWMTHRS(E, E3));
3198
+          SERIAL_ECHOLNPAIR(" T3 E", stepperE3.get_pwm_thrs());
3201
         #endif
3199
         #endif
3202
         #if AXIS_HAS_STEALTHCHOP(E4)
3200
         #if AXIS_HAS_STEALTHCHOP(E4)
3203
           say_M913();
3201
           say_M913();
3204
-          SERIAL_ECHOLNPAIR(" T4 E", TMC_GET_PWMTHRS(E, E4));
3202
+          SERIAL_ECHOLNPAIR(" T4 E", stepperE4.get_pwm_thrs());
3205
         #endif
3203
         #endif
3206
         #if AXIS_HAS_STEALTHCHOP(E5)
3204
         #if AXIS_HAS_STEALTHCHOP(E5)
3207
           say_M913();
3205
           say_M913();
3208
-          SERIAL_ECHOLNPAIR(" T5 E", TMC_GET_PWMTHRS(E, E5));
3206
+          SERIAL_ECHOLNPAIR(" T5 E", stepperE5.get_pwm_thrs());
3209
         #endif
3207
         #endif
3210
         SERIAL_EOL();
3208
         SERIAL_EOL();
3211
       #endif // HYBRID_THRESHOLD
3209
       #endif // HYBRID_THRESHOLD

+ 115
- 332
Marlin/src/module/stepper_indirection.cpp View File

144
 #endif // TMC26X
144
 #endif // TMC26X
145
 
145
 
146
 #if HAS_TRINAMIC
146
 #if HAS_TRINAMIC
147
-  enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
148
-  #define _TMC_INIT(ST, SPMM_INDEX, STEALTH_INDEX) tmc_init(stepper##ST, ST##_CURRENT, ST##_MICROSTEPS, ST##_HYBRID_THRESHOLD, planner.settings.axis_steps_per_mm[SPMM_INDEX], stealthchop_by_axis[STEALTH_INDEX])
149
-#endif
150
-
151
-//
152
-// TMC2130 Driver objects and inits
153
-//
154
-#if HAS_DRIVER(TMC2130)
155
-
147
+  #include <HardwareSerial.h>
156
   #include <SPI.h>
148
   #include <SPI.h>
157
   #include "planner.h"
149
   #include "planner.h"
158
   #include "../core/enum.h"
150
   #include "../core/enum.h"
159
 
151
 
152
+  enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
153
+  #define _TMC_INIT(ST, STEALTH_INDEX) tmc_init(stepper##ST, ST##_CURRENT, ST##_MICROSTEPS, ST##_HYBRID_THRESHOLD, stealthchop_by_axis[STEALTH_INDEX])
154
+
155
+  //   IC = TMC model number
156
+  //   ST = Stepper object letter
157
+  //   L  = Label characters
158
+  //   AI = Axis Enum Index
159
+  // SWHW = SW/SH UART selection
160
   #if ENABLED(TMC_USE_SW_SPI)
160
   #if ENABLED(TMC_USE_SW_SPI)
161
-    #define _TMC2130_DEFINE(ST, L) TMCMarlin<TMC2130Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
162
-    #define TMC2130_DEFINE(ST) _TMC2130_DEFINE(ST, TMC_##ST##_LABEL)
161
+    #define __TMC_SPI_DEFINE(IC, ST, L, AI) TMCMarlin<IC##Stepper, L, AI> stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
163
   #else
162
   #else
164
-    #define _TMC2130_DEFINE(ST, L) TMCMarlin<TMC2130Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE)
165
-    #define TMC2130_DEFINE(ST) _TMC2130_DEFINE(ST, TMC_##ST##_LABEL)
163
+    #define __TMC_SPI_DEFINE(IC, ST, L, AI) TMCMarlin<IC##Stepper, L, AI> stepper##ST(ST##_CS_PIN, ST##_RSENSE)
166
   #endif
164
   #endif
167
-  // Stepper objects of TMC2130 steppers used
168
-  #if AXIS_DRIVER_TYPE_X(TMC2130)
169
-    TMC2130_DEFINE(X);
165
+
166
+  #define TMC_UART_HW_DEFINE(IC, ST, L, AI) TMCMarlin<IC##Stepper, L, AI> stepper##ST(&ST##_HARDWARE_SERIAL, ST##_RSENSE)
167
+  #define TMC_UART_SW_DEFINE(IC, ST, L, AI) TMCMarlin<IC##Stepper, L, AI> stepper##ST(ST##_SERIAL_RX_PIN, ST##_SERIAL_TX_PIN, ST##_RSENSE, ST##_SERIAL_RX_PIN > -1)
168
+
169
+  #define _TMC_SPI_DEFINE(IC, ST, AI) __TMC_SPI_DEFINE(IC, ST, TMC_##ST##_LABEL, AI)
170
+  #define TMC_SPI_DEFINE(ST, AI) _TMC_SPI_DEFINE(ST##_DRIVER_TYPE, ST, AI##_AXIS)
171
+
172
+  #define _TMC_UART_DEFINE(SWHW, IC, ST, AI) TMC_UART_##SWHW##_DEFINE(IC, ST, TMC_##ST##_LABEL, AI)
173
+  #define TMC_UART_DEFINE(SWHW, ST, AI) _TMC_UART_DEFINE(SWHW, ST##_DRIVER_TYPE, ST, AI##_AXIS)
174
+
175
+  #if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
176
+    #define TMC_SPI_DEFINE_E(AI) TMC_SPI_DEFINE(E##AI, E##AI)
177
+    #define TMC_UART_DEFINE_E(SWHW, AI) TMC_UART_DEFINE(SWHW, E##AI, E##AI)
178
+  #else
179
+    #define TMC_SPI_DEFINE_E(AI) TMC_SPI_DEFINE(E##AI, E)
180
+    #define TMC_UART_DEFINE_E(SWHW, AI) TMC_UART_DEFINE(SWHW, E##AI, E)
170
   #endif
181
   #endif
171
-  #if AXIS_DRIVER_TYPE_X2(TMC2130)
172
-    TMC2130_DEFINE(X2);
182
+
183
+  // Stepper objects of TMC2130/TMC2160/TMC2660/TMC5130/TMC5160 steppers used
184
+  #if AXIS_HAS_SPI(X)
185
+    TMC_SPI_DEFINE(X, X);
173
   #endif
186
   #endif
174
-  #if AXIS_DRIVER_TYPE_Y(TMC2130)
175
-    TMC2130_DEFINE(Y);
187
+  #if AXIS_HAS_SPI(X2)
188
+    TMC_SPI_DEFINE(X2, X);
176
   #endif
189
   #endif
177
-  #if AXIS_DRIVER_TYPE_Y2(TMC2130)
178
-    TMC2130_DEFINE(Y2);
190
+  #if AXIS_HAS_SPI(Y)
191
+    TMC_SPI_DEFINE(Y, Y);
179
   #endif
192
   #endif
180
-  #if AXIS_DRIVER_TYPE_Z(TMC2130)
181
-    TMC2130_DEFINE(Z);
193
+  #if AXIS_HAS_SPI(Y2)
194
+    TMC_SPI_DEFINE(Y2, Y);
182
   #endif
195
   #endif
183
-  #if AXIS_DRIVER_TYPE_Z2(TMC2130)
184
-    TMC2130_DEFINE(Z2);
196
+  #if AXIS_HAS_SPI(Z)
197
+    TMC_SPI_DEFINE(Z, Z);
185
   #endif
198
   #endif
186
-  #if AXIS_DRIVER_TYPE_Z3(TMC2130)
187
-    TMC2130_DEFINE(Z3);
199
+  #if AXIS_HAS_SPI(Z2)
200
+    TMC_SPI_DEFINE(Z2, Z);
188
   #endif
201
   #endif
189
-  #if AXIS_DRIVER_TYPE_E0(TMC2130)
190
-    TMC2130_DEFINE(E0);
202
+  #if AXIS_HAS_SPI(Z3)
203
+    TMC_SPI_DEFINE(Z3, Z);
191
   #endif
204
   #endif
192
-  #if AXIS_DRIVER_TYPE_E1(TMC2130)
193
-    TMC2130_DEFINE(E1);
205
+  #if AXIS_HAS_SPI(E0)
206
+    TMC_SPI_DEFINE_E(0);
194
   #endif
207
   #endif
195
-  #if AXIS_DRIVER_TYPE_E2(TMC2130)
196
-    TMC2130_DEFINE(E2);
208
+  #if AXIS_HAS_SPI(E1)
209
+    TMC_SPI_DEFINE_E(1);
197
   #endif
210
   #endif
198
-  #if AXIS_DRIVER_TYPE_E3(TMC2130)
199
-    TMC2130_DEFINE(E3);
211
+  #if AXIS_HAS_SPI(E2)
212
+    TMC_SPI_DEFINE_E(2);
200
   #endif
213
   #endif
201
-  #if AXIS_DRIVER_TYPE_E4(TMC2130)
202
-    TMC2130_DEFINE(E4);
214
+  #if AXIS_HAS_SPI(E3)
215
+    TMC_SPI_DEFINE_E(3);
203
   #endif
216
   #endif
204
-  #if AXIS_DRIVER_TYPE_E5(TMC2130)
205
-    TMC2130_DEFINE(E5);
217
+  #if AXIS_HAS_SPI(E4)
218
+    TMC_SPI_DEFINE_E(4);
206
   #endif
219
   #endif
220
+  #if AXIS_HAS_SPI(E5)
221
+    TMC_SPI_DEFINE_E(5);
222
+  #endif
223
+
224
+#endif
207
 
225
 
208
-  template<char AXIS_LETTER, char DRIVER_ID>
209
-  void tmc_init(TMCMarlin<TMC2130Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
226
+#if HAS_DRIVER(TMC2130)
227
+  template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
228
+  void tmc_init(TMCMarlin<TMC2130Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const bool stealth) {
210
     st.begin();
229
     st.begin();
211
 
230
 
212
     CHOPCONF_t chopconf{0};
231
     CHOPCONF_t chopconf{0};
233
     st.PWMCONF(pwmconf.sr);
252
     st.PWMCONF(pwmconf.sr);
234
 
253
 
235
     #if ENABLED(HYBRID_THRESHOLD)
254
     #if ENABLED(HYBRID_THRESHOLD)
236
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
255
+      st.set_pwm_thrs(thrs);
237
     #else
256
     #else
238
       UNUSED(thrs);
257
       UNUSED(thrs);
239
-      UNUSED(spmm);
240
     #endif
258
     #endif
241
 
259
 
242
     st.GSTAT(); // Clear GSTAT
260
     st.GSTAT(); // Clear GSTAT
243
   }
261
   }
244
 #endif // TMC2130
262
 #endif // TMC2130
245
 
263
 
246
-//
247
-// TMC2160 Driver objects and inits
248
-//
249
 #if HAS_DRIVER(TMC2160)
264
 #if HAS_DRIVER(TMC2160)
250
-
251
-  #include <SPI.h>
252
-  #include "planner.h"
253
-  #include "../core/enum.h"
254
-
255
-  #if ENABLED(TMC_USE_SW_SPI)
256
-    #define _TMC2160_DEFINE(ST, L) TMCMarlin<TMC2160Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
257
-    #define TMC2160_DEFINE(ST) _TMC2160_DEFINE(ST, TMC_##ST##_LABEL)
258
-  #else
259
-    #define _TMC2160_DEFINE(ST, L) TMCMarlin<TMC2160Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE)
260
-    #define TMC2160_DEFINE(ST) _TMC2160_DEFINE(ST, TMC_##ST##_LABEL)
261
-  #endif
262
-  // Stepper objects of TMC2160 steppers used
263
-  #if AXIS_DRIVER_TYPE(X, TMC2160)
264
-    TMC2160_DEFINE(X);
265
-  #endif
266
-  #if AXIS_DRIVER_TYPE(X2, TMC2160)
267
-    TMC2160_DEFINE(X2);
268
-  #endif
269
-  #if AXIS_DRIVER_TYPE(Y, TMC2160)
270
-    TMC2160_DEFINE(Y);
271
-  #endif
272
-  #if AXIS_DRIVER_TYPE(Y2, TMC2160)
273
-    TMC2160_DEFINE(Y2);
274
-  #endif
275
-  #if AXIS_DRIVER_TYPE(Z, TMC2160)
276
-    TMC2160_DEFINE(Z);
277
-  #endif
278
-  #if AXIS_DRIVER_TYPE(Z2, TMC2160)
279
-    TMC2160_DEFINE(Z2);
280
-  #endif
281
-  #if AXIS_DRIVER_TYPE(Z3, TMC2160)
282
-    TMC2160_DEFINE(Z3);
283
-  #endif
284
-  #if AXIS_DRIVER_TYPE(E0, TMC2160)
285
-    TMC2160_DEFINE(E0);
286
-  #endif
287
-  #if AXIS_DRIVER_TYPE(E1, TMC2160)
288
-    TMC2160_DEFINE(E1);
289
-  #endif
290
-  #if AXIS_DRIVER_TYPE(E2, TMC2160)
291
-    TMC2160_DEFINE(E2);
292
-  #endif
293
-  #if AXIS_DRIVER_TYPE(E3, TMC2160)
294
-    TMC2160_DEFINE(E3);
295
-  #endif
296
-  #if AXIS_DRIVER_TYPE(E4, TMC2160)
297
-    TMC2160_DEFINE(E4);
298
-  #endif
299
-  #if AXIS_DRIVER_TYPE(E5, TMC2160)
300
-    TMC2160_DEFINE(E5);
301
-  #endif
302
-
303
-  template<char AXIS_LETTER, char DRIVER_ID>
304
-  void tmc_init(TMCMarlin<TMC2160Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
265
+  template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
266
+  void tmc_init(TMCMarlin<TMC2160Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const bool stealth) {
305
     st.begin();
267
     st.begin();
306
 
268
 
307
     static constexpr int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
269
     static constexpr int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
337
     st.PWMCONF(pwmconf.sr);
299
     st.PWMCONF(pwmconf.sr);
338
 
300
 
339
     #if ENABLED(HYBRID_THRESHOLD)
301
     #if ENABLED(HYBRID_THRESHOLD)
340
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
302
+      st.set_pwm_thrs(thrs);
341
     #else
303
     #else
342
       UNUSED(thrs);
304
       UNUSED(thrs);
343
-      UNUSED(spmm);
344
     #endif
305
     #endif
345
 
306
 
346
     st.GSTAT(); // Clear GSTAT
307
     st.GSTAT(); // Clear GSTAT
351
 // TMC2208 Driver objects and inits
312
 // TMC2208 Driver objects and inits
352
 //
313
 //
353
 #if HAS_DRIVER(TMC2208)
314
 #if HAS_DRIVER(TMC2208)
354
-  #include <HardwareSerial.h>
355
-  #include "planner.h"
356
-
357
-  #define _TMC2208_DEFINE_HARDWARE(ST, L) TMCMarlin<TMC2208Stepper, L> stepper##ST(&ST##_HARDWARE_SERIAL, ST##_RSENSE)
358
-  #define TMC2208_DEFINE_HARDWARE(ST) _TMC2208_DEFINE_HARDWARE(ST, TMC_##ST##_LABEL)
359
-
360
-  #define _TMC2208_DEFINE_SOFTWARE(ST, L) TMCMarlin<TMC2208Stepper, L> stepper##ST(ST##_SERIAL_RX_PIN, ST##_SERIAL_TX_PIN, ST##_RSENSE, ST##_SERIAL_RX_PIN > -1)
361
-  #define TMC2208_DEFINE_SOFTWARE(ST) _TMC2208_DEFINE_SOFTWARE(ST, TMC_##ST##_LABEL)
362
-
363
   // Stepper objects of TMC2208 steppers used
315
   // Stepper objects of TMC2208 steppers used
364
   #if AXIS_DRIVER_TYPE_X(TMC2208)
316
   #if AXIS_DRIVER_TYPE_X(TMC2208)
365
     #ifdef X_HARDWARE_SERIAL
317
     #ifdef X_HARDWARE_SERIAL
366
-      TMC2208_DEFINE_HARDWARE(X);
318
+      TMC_UART_DEFINE(HW, X, X);
367
     #else
319
     #else
368
-      TMC2208_DEFINE_SOFTWARE(X);
320
+      TMC_UART_DEFINE(SW, X, X);
369
     #endif
321
     #endif
370
   #endif
322
   #endif
371
   #if AXIS_DRIVER_TYPE_X2(TMC2208)
323
   #if AXIS_DRIVER_TYPE_X2(TMC2208)
372
     #ifdef X2_HARDWARE_SERIAL
324
     #ifdef X2_HARDWARE_SERIAL
373
-      TMC2208_DEFINE_HARDWARE(X2);
325
+      TMC_UART_DEFINE(HW, X2, X);
374
     #else
326
     #else
375
-      TMC2208_DEFINE_SOFTWARE(X2);
327
+      TMC_UART_DEFINE(SW, X2, X);
376
     #endif
328
     #endif
377
   #endif
329
   #endif
378
   #if AXIS_DRIVER_TYPE_Y(TMC2208)
330
   #if AXIS_DRIVER_TYPE_Y(TMC2208)
379
     #ifdef Y_HARDWARE_SERIAL
331
     #ifdef Y_HARDWARE_SERIAL
380
-      TMC2208_DEFINE_HARDWARE(Y);
332
+      TMC_UART_DEFINE(HW, Y, Y);
381
     #else
333
     #else
382
-      TMC2208_DEFINE_SOFTWARE(Y);
334
+      TMC_UART_DEFINE(SW, Y, Y);
383
     #endif
335
     #endif
384
   #endif
336
   #endif
385
   #if AXIS_DRIVER_TYPE_Y2(TMC2208)
337
   #if AXIS_DRIVER_TYPE_Y2(TMC2208)
386
     #ifdef Y2_HARDWARE_SERIAL
338
     #ifdef Y2_HARDWARE_SERIAL
387
-      TMC2208_DEFINE_HARDWARE(Y2);
339
+      TMC_UART_DEFINE(HW, Y2, Y);
388
     #else
340
     #else
389
-      TMC2208_DEFINE_SOFTWARE(Y2);
341
+      TMC_UART_DEFINE(SW, Y2, Y);
390
     #endif
342
     #endif
391
   #endif
343
   #endif
392
   #if AXIS_DRIVER_TYPE_Z(TMC2208)
344
   #if AXIS_DRIVER_TYPE_Z(TMC2208)
393
     #ifdef Z_HARDWARE_SERIAL
345
     #ifdef Z_HARDWARE_SERIAL
394
-      TMC2208_DEFINE_HARDWARE(Z);
346
+      TMC_UART_DEFINE(HW, Z, Z);
395
     #else
347
     #else
396
-      TMC2208_DEFINE_SOFTWARE(Z);
348
+      TMC_UART_DEFINE(SW, Z, Z);
397
     #endif
349
     #endif
398
   #endif
350
   #endif
399
   #if AXIS_DRIVER_TYPE_Z2(TMC2208)
351
   #if AXIS_DRIVER_TYPE_Z2(TMC2208)
400
     #ifdef Z2_HARDWARE_SERIAL
352
     #ifdef Z2_HARDWARE_SERIAL
401
-      TMC2208_DEFINE_HARDWARE(Z2);
353
+      TMC_UART_DEFINE(HW, Z2, Z);
402
     #else
354
     #else
403
-      TMC2208_DEFINE_SOFTWARE(Z2);
355
+      TMC_UART_DEFINE(SW, Z2, Z);
404
     #endif
356
     #endif
405
   #endif
357
   #endif
406
   #if AXIS_DRIVER_TYPE_Z3(TMC2208)
358
   #if AXIS_DRIVER_TYPE_Z3(TMC2208)
407
     #ifdef Z3_HARDWARE_SERIAL
359
     #ifdef Z3_HARDWARE_SERIAL
408
-      TMC2208_DEFINE_HARDWARE(Z3);
360
+      TMC_UART_DEFINE(HW, Z3, Z);
409
     #else
361
     #else
410
-      TMC2208_DEFINE_SOFTWARE(Z3);
362
+      TMC_UART_DEFINE(SW, Z3, Z);
411
     #endif
363
     #endif
412
   #endif
364
   #endif
413
   #if AXIS_DRIVER_TYPE_E0(TMC2208)
365
   #if AXIS_DRIVER_TYPE_E0(TMC2208)
414
     #ifdef E0_HARDWARE_SERIAL
366
     #ifdef E0_HARDWARE_SERIAL
415
-      TMC2208_DEFINE_HARDWARE(E0);
367
+      TMC_UART_DEFINE_E(HW, 0);
416
     #else
368
     #else
417
-      TMC2208_DEFINE_SOFTWARE(E0);
369
+      TMC_UART_DEFINE_E(SW, 0);
418
     #endif
370
     #endif
419
   #endif
371
   #endif
420
   #if AXIS_DRIVER_TYPE_E1(TMC2208)
372
   #if AXIS_DRIVER_TYPE_E1(TMC2208)
421
     #ifdef E1_HARDWARE_SERIAL
373
     #ifdef E1_HARDWARE_SERIAL
422
-      TMC2208_DEFINE_HARDWARE(E1);
374
+      TMC_UART_DEFINE_E(HW, 1);
423
     #else
375
     #else
424
-      TMC2208_DEFINE_SOFTWARE(E1);
376
+      TMC_UART_DEFINE_E(SW, 1);
425
     #endif
377
     #endif
426
   #endif
378
   #endif
427
   #if AXIS_DRIVER_TYPE_E2(TMC2208)
379
   #if AXIS_DRIVER_TYPE_E2(TMC2208)
428
     #ifdef E2_HARDWARE_SERIAL
380
     #ifdef E2_HARDWARE_SERIAL
429
-      TMC2208_DEFINE_HARDWARE(E2);
381
+      TMC_UART_DEFINE_E(HW, 2);
430
     #else
382
     #else
431
-      TMC2208_DEFINE_SOFTWARE(E2);
383
+      TMC_UART_DEFINE_E(SW, 2);
432
     #endif
384
     #endif
433
   #endif
385
   #endif
434
   #if AXIS_DRIVER_TYPE_E3(TMC2208)
386
   #if AXIS_DRIVER_TYPE_E3(TMC2208)
435
     #ifdef E3_HARDWARE_SERIAL
387
     #ifdef E3_HARDWARE_SERIAL
436
-      TMC2208_DEFINE_HARDWARE(E3);
388
+      TMC_UART_DEFINE_E(HW, 3);
437
     #else
389
     #else
438
-      TMC2208_DEFINE_SOFTWARE(E3);
390
+      TMC_UART_DEFINE_E(SW, 3);
439
     #endif
391
     #endif
440
   #endif
392
   #endif
441
   #if AXIS_DRIVER_TYPE_E4(TMC2208)
393
   #if AXIS_DRIVER_TYPE_E4(TMC2208)
442
     #ifdef E4_HARDWARE_SERIAL
394
     #ifdef E4_HARDWARE_SERIAL
443
-      TMC2208_DEFINE_HARDWARE(E4);
395
+      TMC_UART_DEFINE_E(HW, 4);
444
     #else
396
     #else
445
-      TMC2208_DEFINE_SOFTWARE(E4);
397
+      TMC_UART_DEFINE_E(SW, 4);
446
     #endif
398
     #endif
447
   #endif
399
   #endif
448
   #if AXIS_DRIVER_TYPE_E5(TMC2208)
400
   #if AXIS_DRIVER_TYPE_E5(TMC2208)
449
     #ifdef E5_HARDWARE_SERIAL
401
     #ifdef E5_HARDWARE_SERIAL
450
-      TMC2208_DEFINE_HARDWARE(E5);
402
+      TMC_UART_DEFINE_E(HW, 5);
451
     #else
403
     #else
452
-      TMC2208_DEFINE_SOFTWARE(E5);
404
+      TMC_UART_DEFINE_E(SW, 5);
453
     #endif
405
     #endif
454
   #endif
406
   #endif
455
 
407
 
547
     #endif
499
     #endif
548
   }
500
   }
549
 
501
 
550
-  template<char AXIS_LETTER, char DRIVER_ID>
551
-  void tmc_init(TMCMarlin<TMC2208Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
502
+  template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
503
+  void tmc_init(TMCMarlin<TMC2208Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const bool stealth) {
552
     TMC2208_n::GCONF_t gconf{0};
504
     TMC2208_n::GCONF_t gconf{0};
553
     gconf.pdn_disable = true; // Use UART
505
     gconf.pdn_disable = true; // Use UART
554
     gconf.mstep_reg_select = true; // Select microsteps with UART
506
     gconf.mstep_reg_select = true; // Select microsteps with UART
581
     st.PWMCONF(pwmconf.sr);
533
     st.PWMCONF(pwmconf.sr);
582
 
534
 
583
     #if ENABLED(HYBRID_THRESHOLD)
535
     #if ENABLED(HYBRID_THRESHOLD)
584
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
536
+      st.set_pwm_thrs(thrs);
585
     #else
537
     #else
586
       UNUSED(thrs);
538
       UNUSED(thrs);
587
-      UNUSED(spmm);
588
     #endif
539
     #endif
589
 
540
 
590
     st.GSTAT(0b111); // Clear
541
     st.GSTAT(0b111); // Clear
592
   }
543
   }
593
 #endif // TMC2208
544
 #endif // TMC2208
594
 
545
 
595
-//
596
-// TMC2660 Driver objects and inits
597
-//
598
 #if HAS_DRIVER(TMC2660)
546
 #if HAS_DRIVER(TMC2660)
599
-
600
-  #include <SPI.h>
601
-  #include "planner.h"
602
-  #include "../core/enum.h"
603
-
604
-  #if ENABLED(TMC_USE_SW_SPI)
605
-    #define _TMC2660_DEFINE(ST, L) TMCMarlin<TMC2660Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
606
-    #define TMC2660_DEFINE(ST) _TMC2660_DEFINE(ST, TMC_##ST##_LABEL)
607
-  #else
608
-    #define _TMC2660_DEFINE(ST, L) TMCMarlin<TMC2660Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE)
609
-    #define TMC2660_DEFINE(ST) _TMC2660_DEFINE(ST, TMC_##ST##_LABEL)
610
-  #endif
611
-
612
-  // Stepper objects of TMC2660 steppers used
613
-  #if AXIS_DRIVER_TYPE_X(TMC2660)
614
-    TMC2660_DEFINE(X);
615
-  #endif
616
-  #if AXIS_DRIVER_TYPE_X2(TMC2660)
617
-    TMC2660_DEFINE(X2);
618
-  #endif
619
-  #if AXIS_DRIVER_TYPE_Y(TMC2660)
620
-    TMC2660_DEFINE(Y);
621
-  #endif
622
-  #if AXIS_DRIVER_TYPE_Y2(TMC2660)
623
-    TMC2660_DEFINE(Y2);
624
-  #endif
625
-  #if AXIS_DRIVER_TYPE_Z(TMC2660)
626
-    TMC2660_DEFINE(Z);
627
-  #endif
628
-  #if AXIS_DRIVER_TYPE_Z2(TMC2660)
629
-    TMC2660_DEFINE(Z2);
630
-  #endif
631
-  #if AXIS_DRIVER_TYPE_E0(TMC2660)
632
-    TMC2660_DEFINE(E0);
633
-  #endif
634
-  #if AXIS_DRIVER_TYPE_E1(TMC2660)
635
-    TMC2660_DEFINE(E1);
636
-  #endif
637
-  #if AXIS_DRIVER_TYPE_E2(TMC2660)
638
-    TMC2660_DEFINE(E2);
639
-  #endif
640
-  #if AXIS_DRIVER_TYPE_E3(TMC2660)
641
-    TMC2660_DEFINE(E3);
642
-  #endif
643
-  #if AXIS_DRIVER_TYPE_E4(TMC2660)
644
-    TMC2660_DEFINE(E4);
645
-  #endif
646
-  #if AXIS_DRIVER_TYPE_E5(TMC2660)
647
-    TMC2660_DEFINE(E5);
648
-  #endif
649
-
650
-  template<char AXIS_LETTER, char DRIVER_ID>
651
-  void tmc_init(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const float, const bool) {
547
+  template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
548
+  void tmc_init(TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const bool) {
652
     st.begin();
549
     st.begin();
653
 
550
 
654
     TMC2660_n::CHOPCONF_t chopconf{0};
551
     TMC2660_n::CHOPCONF_t chopconf{0};
669
   }
566
   }
670
 #endif // TMC2660
567
 #endif // TMC2660
671
 
568
 
672
-//
673
-// TMC5130 Driver objects and inits
674
-//
675
 #if HAS_DRIVER(TMC5130)
569
 #if HAS_DRIVER(TMC5130)
676
-
677
-  #include <SPI.h>
678
-  #include "planner.h"
679
-  #include "../core/enum.h"
680
-
681
-  #if ENABLED(TMC_USE_SW_SPI)
682
-    #define _TMC5130_DEFINE(ST, L) TMCMarlin<TMC5130Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
683
-    #define TMC5130_DEFINE(ST) _TMC5130_DEFINE(ST, TMC_##ST##_LABEL)
684
-  #else
685
-    #define _TMC5130_DEFINE(ST, L) TMCMarlin<TMC5130Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE)
686
-    #define TMC5130_DEFINE(ST) _TMC5130_DEFINE(ST, TMC_##ST##_LABEL)
687
-  #endif
688
-  // Stepper objects of TMC5130 steppers used
689
-  #if AXIS_DRIVER_TYPE_X(TMC5130)
690
-    TMC5130_DEFINE(X);
691
-  #endif
692
-  #if AXIS_DRIVER_TYPE_X2(TMC5130)
693
-    TMC5130_DEFINE(X2);
694
-  #endif
695
-  #if AXIS_DRIVER_TYPE_Y(TMC5130)
696
-    TMC5130_DEFINE(Y);
697
-  #endif
698
-  #if AXIS_DRIVER_TYPE_Y2(TMC5130)
699
-    TMC5130_DEFINE(Y2);
700
-  #endif
701
-  #if AXIS_DRIVER_TYPE_Z(TMC5130)
702
-    TMC5130_DEFINE(Z);
703
-  #endif
704
-  #if AXIS_DRIVER_TYPE_Z2(TMC5130)
705
-    TMC5130_DEFINE(Z2);
706
-  #endif
707
-  #if AXIS_DRIVER_TYPE_Z3(TMC5130)
708
-    TMC5130_DEFINE(Z3);
709
-  #endif
710
-  #if AXIS_DRIVER_TYPE_E0(TMC5130)
711
-    TMC5130_DEFINE(E0);
712
-  #endif
713
-  #if AXIS_DRIVER_TYPE_E1(TMC5130)
714
-    TMC5130_DEFINE(E1);
715
-  #endif
716
-  #if AXIS_DRIVER_TYPE_E2(TMC5130)
717
-    TMC5130_DEFINE(E2);
718
-  #endif
719
-  #if AXIS_DRIVER_TYPE_E3(TMC5130)
720
-    TMC5130_DEFINE(E3);
721
-  #endif
722
-  #if AXIS_DRIVER_TYPE_E4(TMC5130)
723
-    TMC5130_DEFINE(E4);
724
-  #endif
725
-  #if AXIS_DRIVER_TYPE_E5(TMC5130)
726
-    TMC5130_DEFINE(E5);
727
-  #endif
728
-
729
-  template<char AXIS_LETTER, char DRIVER_ID>
730
-  void tmc_init(TMCMarlin<TMC5130Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
570
+  template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
571
+  void tmc_init(TMCMarlin<TMC5130Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const bool stealth) {
731
     st.begin();
572
     st.begin();
732
 
573
 
733
     CHOPCONF_t chopconf{0};
574
     CHOPCONF_t chopconf{0};
754
     st.PWMCONF(pwmconf.sr);
595
     st.PWMCONF(pwmconf.sr);
755
 
596
 
756
     #if ENABLED(HYBRID_THRESHOLD)
597
     #if ENABLED(HYBRID_THRESHOLD)
757
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
598
+      st.set_pwm_thrs(thrs);
758
     #else
599
     #else
759
       UNUSED(thrs);
600
       UNUSED(thrs);
760
-      UNUSED(spmm);
761
     #endif
601
     #endif
762
 
602
 
763
     st.GSTAT(); // Clear GSTAT
603
     st.GSTAT(); // Clear GSTAT
764
   }
604
   }
765
 #endif // TMC5130
605
 #endif // TMC5130
766
 
606
 
767
-//
768
-// TMC5160 Driver objects and inits
769
-//
770
 #if HAS_DRIVER(TMC5160)
607
 #if HAS_DRIVER(TMC5160)
771
-
772
-  #include <SPI.h>
773
-  #include "planner.h"
774
-  #include "../core/enum.h"
775
-
776
-  #if ENABLED(TMC_USE_SW_SPI)
777
-    #define _TMC5160_DEFINE(ST, L) TMCMarlin<TMC5160Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK)
778
-    #define TMC5160_DEFINE(ST) _TMC5160_DEFINE(ST, TMC_##ST##_LABEL)
779
-  #else
780
-    #define _TMC5160_DEFINE(ST, L) TMCMarlin<TMC5160Stepper, L> stepper##ST(ST##_CS_PIN, ST##_RSENSE)
781
-    #define TMC5160_DEFINE(ST) _TMC5160_DEFINE(ST, TMC_##ST##_LABEL)
782
-  #endif
783
-  // Stepper objects of TMC5160 steppers used
784
-  #if AXIS_DRIVER_TYPE(X, TMC5160)
785
-    TMC5160_DEFINE(X);
786
-  #endif
787
-  #if AXIS_DRIVER_TYPE(X2, TMC5160)
788
-    TMC5160_DEFINE(X2);
789
-  #endif
790
-  #if AXIS_DRIVER_TYPE(Y, TMC5160)
791
-    TMC5160_DEFINE(Y);
792
-  #endif
793
-  #if AXIS_DRIVER_TYPE(Y2, TMC5160)
794
-    TMC5160_DEFINE(Y2);
795
-  #endif
796
-  #if AXIS_DRIVER_TYPE(Z, TMC5160)
797
-    TMC5160_DEFINE(Z);
798
-  #endif
799
-  #if AXIS_DRIVER_TYPE(Z2, TMC5160)
800
-    TMC5160_DEFINE(Z2);
801
-  #endif
802
-  #if AXIS_DRIVER_TYPE(Z3, TMC5160)
803
-    TMC5160_DEFINE(Z3);
804
-  #endif
805
-  #if AXIS_DRIVER_TYPE(E0, TMC5160)
806
-    TMC5160_DEFINE(E0);
807
-  #endif
808
-  #if AXIS_DRIVER_TYPE(E1, TMC5160)
809
-    TMC5160_DEFINE(E1);
810
-  #endif
811
-  #if AXIS_DRIVER_TYPE(E2, TMC5160)
812
-    TMC5160_DEFINE(E2);
813
-  #endif
814
-  #if AXIS_DRIVER_TYPE(E3, TMC5160)
815
-    TMC5160_DEFINE(E3);
816
-  #endif
817
-  #if AXIS_DRIVER_TYPE(E4, TMC5160)
818
-    TMC5160_DEFINE(E4);
819
-  #endif
820
-  #if AXIS_DRIVER_TYPE(E5, TMC5160)
821
-    TMC5160_DEFINE(E5);
822
-  #endif
823
-
824
-  template<char AXIS_LETTER, char DRIVER_ID>
825
-  void tmc_init(TMCMarlin<TMC5160Stepper, AXIS_LETTER, DRIVER_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
608
+  template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
609
+  void tmc_init(TMCMarlin<TMC5160Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const bool stealth) {
826
     st.begin();
610
     st.begin();
827
 
611
 
828
     int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
612
     int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
857
     st.PWMCONF(pwmconf.sr);
641
     st.PWMCONF(pwmconf.sr);
858
 
642
 
859
     #if ENABLED(HYBRID_THRESHOLD)
643
     #if ENABLED(HYBRID_THRESHOLD)
860
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
644
+      st.set_pwm_thrs(thrs);
861
     #else
645
     #else
862
       UNUSED(thrs);
646
       UNUSED(thrs);
863
-      UNUSED(spmm);
864
     #endif
647
     #endif
865
     st.GSTAT(); // Clear GSTAT
648
     st.GSTAT(); // Clear GSTAT
866
   }
649
   }
941
   #endif
724
   #endif
942
 
725
 
943
   #if AXIS_IS_TMC(X)
726
   #if AXIS_IS_TMC(X)
944
-    _TMC_INIT(X, X_AXIS, STEALTH_AXIS_XY);
727
+    _TMC_INIT(X, STEALTH_AXIS_XY);
945
   #endif
728
   #endif
946
   #if AXIS_IS_TMC(X2)
729
   #if AXIS_IS_TMC(X2)
947
-    _TMC_INIT(X2, X_AXIS, STEALTH_AXIS_XY);
730
+    _TMC_INIT(X2, STEALTH_AXIS_XY);
948
   #endif
731
   #endif
949
   #if AXIS_IS_TMC(Y)
732
   #if AXIS_IS_TMC(Y)
950
-    _TMC_INIT(Y, Y_AXIS, STEALTH_AXIS_XY);
733
+    _TMC_INIT(Y, STEALTH_AXIS_XY);
951
   #endif
734
   #endif
952
   #if AXIS_IS_TMC(Y2)
735
   #if AXIS_IS_TMC(Y2)
953
-    _TMC_INIT(Y2, Y_AXIS, STEALTH_AXIS_XY);
736
+    _TMC_INIT(Y2, STEALTH_AXIS_XY);
954
   #endif
737
   #endif
955
   #if AXIS_IS_TMC(Z)
738
   #if AXIS_IS_TMC(Z)
956
-    _TMC_INIT(Z, Z_AXIS, STEALTH_AXIS_Z);
739
+    _TMC_INIT(Z, STEALTH_AXIS_Z);
957
   #endif
740
   #endif
958
   #if AXIS_IS_TMC(Z2)
741
   #if AXIS_IS_TMC(Z2)
959
-    _TMC_INIT(Z2, Z_AXIS, STEALTH_AXIS_Z);
742
+    _TMC_INIT(Z2, STEALTH_AXIS_Z);
960
   #endif
743
   #endif
961
   #if AXIS_IS_TMC(Z3)
744
   #if AXIS_IS_TMC(Z3)
962
-    _TMC_INIT(Z3, Z_AXIS, STEALTH_AXIS_Z);
745
+    _TMC_INIT(Z3, STEALTH_AXIS_Z);
963
   #endif
746
   #endif
964
   #if AXIS_IS_TMC(E0)
747
   #if AXIS_IS_TMC(E0)
965
-    _TMC_INIT(E0, E_AXIS, STEALTH_AXIS_E);
748
+    _TMC_INIT(E0, STEALTH_AXIS_E);
966
   #endif
749
   #endif
967
   #if AXIS_IS_TMC(E1)
750
   #if AXIS_IS_TMC(E1)
968
-    _TMC_INIT(E1, E_AXIS_N(1), STEALTH_AXIS_E);
751
+    _TMC_INIT(E1, STEALTH_AXIS_E);
969
   #endif
752
   #endif
970
   #if AXIS_IS_TMC(E2)
753
   #if AXIS_IS_TMC(E2)
971
-    _TMC_INIT(E2, E_AXIS_N(2), STEALTH_AXIS_E);
754
+    _TMC_INIT(E2, STEALTH_AXIS_E);
972
   #endif
755
   #endif
973
   #if AXIS_IS_TMC(E3)
756
   #if AXIS_IS_TMC(E3)
974
-    _TMC_INIT(E3, E_AXIS_N(3), STEALTH_AXIS_E);
757
+    _TMC_INIT(E3, STEALTH_AXIS_E);
975
   #endif
758
   #endif
976
   #if AXIS_IS_TMC(E4)
759
   #if AXIS_IS_TMC(E4)
977
-    _TMC_INIT(E4, E_AXIS_N(4), STEALTH_AXIS_E);
760
+    _TMC_INIT(E4, STEALTH_AXIS_E);
978
   #endif
761
   #endif
979
   #if AXIS_IS_TMC(E5)
762
   #if AXIS_IS_TMC(E5)
980
-    _TMC_INIT(E5, E_AXIS_N(5), STEALTH_AXIS_E);
763
+    _TMC_INIT(E5, STEALTH_AXIS_E);
981
   #endif
764
   #endif
982
 
765
 
983
   #if USE_SENSORLESS
766
   #if USE_SENSORLESS

+ 5
- 5
Marlin/src/module/stepper_indirection.h View File

62
     #error "Update TMCStepper library to 0.2.2 or newer."
62
     #error "Update TMCStepper library to 0.2.2 or newer."
63
   #endif
63
   #endif
64
 
64
 
65
-  #define ____TMC_CLASS(MODEL, A, I) TMCMarlin<TMC##MODEL##Stepper, A, I>
66
-  #define ___TMC_CLASS(MODEL, A, I) ____TMC_CLASS(MODEL, A, I)
67
-  #define __TMC_CLASS(MODEL, A, I) ___TMC_CLASS(_##MODEL, A, I)
68
-  #define _TMC_CLASS(MODEL, L) __TMC_CLASS(MODEL, L)
69
-  #define TMC_CLASS(ST) _TMC_CLASS(ST##_DRIVER_TYPE, TMC_##ST##_LABEL)
65
+  #define ____TMC_CLASS(MODEL, A, I, E) TMCMarlin<TMC##MODEL##Stepper, A, I, E>
66
+  #define ___TMC_CLASS(MODEL, A, I, E) ____TMC_CLASS(MODEL, A, I, E)
67
+  #define __TMC_CLASS(MODEL, A, I, E) ___TMC_CLASS(_##MODEL, A, I, E)
68
+  #define _TMC_CLASS(MODEL, L, E) __TMC_CLASS(MODEL, L, E)
69
+  #define TMC_CLASS(ST) _TMC_CLASS(ST##_DRIVER_TYPE, TMC_##ST##_LABEL, ST##_AXIS)
70
 
70
 
71
   typedef struct {
71
   typedef struct {
72
     uint8_t toff;
72
     uint8_t toff;

Loading…
Cancel
Save