Browse Source

TMC updates, capture LCD changes (#14074)

teemuatlut 6 years ago
parent
commit
1c86fbc60b

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

@@ -1053,10 +1053,6 @@ void setup() {
1053 1053
     fanmux_init();
1054 1054
   #endif
1055 1055
 
1056
-  #if HAS_TRINAMIC && HAS_LCD_MENU
1057
-    init_tmc_section();
1058
-  #endif
1059
-
1060 1056
   #if ENABLED(MIXING_EXTRUDER)
1061 1057
     mixer.init();
1062 1058
   #endif

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

@@ -313,8 +313,6 @@
313 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 316
   void monitor_tmc_driver() {
319 317
     static millis_t next_poll = 0;
320 318
     const millis_t ms = millis();
@@ -330,43 +328,43 @@
330 328
       }
331 329
     #endif
332 330
     if (need_update_error_counters || need_debug_reporting) {
333
-      #if HAS_HW_COMMS(X)
331
+      #if AXIS_IS_TMC(X)
334 332
         monitor_tmc_driver(stepperX, need_update_error_counters, need_debug_reporting);
335 333
       #endif
336
-      #if HAS_HW_COMMS(Y)
334
+      #if AXIS_IS_TMC(Y)
337 335
         monitor_tmc_driver(stepperY, need_update_error_counters, need_debug_reporting);
338 336
       #endif
339
-      #if HAS_HW_COMMS(Z)
337
+      #if AXIS_IS_TMC(Z)
340 338
         monitor_tmc_driver(stepperZ, need_update_error_counters, need_debug_reporting);
341 339
       #endif
342
-      #if HAS_HW_COMMS(X2)
340
+      #if AXIS_IS_TMC(X2)
343 341
         monitor_tmc_driver(stepperX2, need_update_error_counters, need_debug_reporting);
344 342
       #endif
345
-      #if HAS_HW_COMMS(Y2)
343
+      #if AXIS_IS_TMC(Y2)
346 344
         monitor_tmc_driver(stepperY2, need_update_error_counters, need_debug_reporting);
347 345
       #endif
348
-      #if HAS_HW_COMMS(Z2)
346
+      #if AXIS_IS_TMC(Z2)
349 347
         monitor_tmc_driver(stepperZ2, need_update_error_counters, need_debug_reporting);
350 348
       #endif
351
-      #if HAS_HW_COMMS(Z3)
349
+      #if AXIS_IS_TMC(Z3)
352 350
         monitor_tmc_driver(stepperZ3, need_update_error_counters, need_debug_reporting);
353 351
       #endif
354
-      #if HAS_HW_COMMS(E0)
352
+      #if AXIS_IS_TMC(E0)
355 353
         monitor_tmc_driver(stepperE0, need_update_error_counters, need_debug_reporting);
356 354
       #endif
357
-      #if HAS_HW_COMMS(E1)
355
+      #if AXIS_IS_TMC(E1)
358 356
         monitor_tmc_driver(stepperE1, need_update_error_counters, need_debug_reporting);
359 357
       #endif
360
-      #if HAS_HW_COMMS(E2)
358
+      #if AXIS_IS_TMC(E2)
361 359
         monitor_tmc_driver(stepperE2, need_update_error_counters, need_debug_reporting);
362 360
       #endif
363
-      #if HAS_HW_COMMS(E3)
361
+      #if AXIS_IS_TMC(E3)
364 362
         monitor_tmc_driver(stepperE3, need_update_error_counters, need_debug_reporting);
365 363
       #endif
366
-      #if HAS_HW_COMMS(E4)
364
+      #if AXIS_IS_TMC(E4)
367 365
         monitor_tmc_driver(stepperE4, need_update_error_counters, need_debug_reporting);
368 366
       #endif
369
-      #if HAS_HW_COMMS(E5)
367
+      #if AXIS_IS_TMC(E5)
370 368
         monitor_tmc_driver(stepperE5, need_update_error_counters, need_debug_reporting);
371 369
       #endif
372 370
 
@@ -471,8 +469,8 @@
471 469
   template<class TMC>
472 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 474
       switch (i) {
477 475
         case TMC_PWM_SCALE: SERIAL_PRINT(st.PWM_SCALE(), DEC); break;
478 476
         case TMC_SGT: SERIAL_PRINT(st.sgt(), DEC); break;
@@ -480,6 +478,8 @@
480 478
         default: break;
481 479
       }
482 480
     }
481
+  #endif
482
+  #if HAS_TMCX1X0
483 483
     static void _tmc_parse_drv_status(TMC2130Stepper &st, const TMC_drv_status_enum i) {
484 484
       switch (i) {
485 485
         case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('X'); break;
@@ -492,10 +492,13 @@
492 492
   #endif
493 493
 
494 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 502
       switch (i) {
500 503
         case TMC_PWM_SCALE: SERIAL_PRINT(st.PWM_SCALE(), DEC); break;
501 504
         case TMC_SGT: SERIAL_PRINT(st.sgt(), DEC); break;
@@ -513,7 +516,7 @@
513 516
   #endif
514 517
 
515 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 520
       switch (i) {
518 521
         case TMC_PWM_SCALE: SERIAL_PRINT(st.pwm_scale_sum(), DEC); break;
519 522
         case TMC_STEALTHCHOP: serialprint_truefalse(st.stealth()); break;
@@ -539,7 +542,7 @@
539 542
   #endif
540 543
 
541 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 546
     SERIAL_CHAR('\t');
544 547
     switch (i) {
545 548
       case TMC_CODES: st.printLabel(); break;
@@ -573,9 +576,9 @@
573 576
         }
574 577
         break;
575 578
       case TMC_TPWMTHRS_MMS: {
576
-          uint32_t tpwmthrs_val = st.TPWMTHRS();
579
+          uint32_t tpwmthrs_val = st.get_pwm_thrs();
577 580
           if (tpwmthrs_val)
578
-            SERIAL_ECHO(12650000UL * st.microsteps() / (256 * tpwmthrs_val * spmm));
581
+            SERIAL_ECHO(tpwmthrs_val);
579 582
           else
580 583
             SERIAL_CHAR('-');
581 584
         }
@@ -588,13 +591,13 @@
588 591
       case TMC_TBL: SERIAL_PRINT(st.blank_time(), DEC); break;
589 592
       case TMC_HEND: SERIAL_PRINT(st.hysteresis_end(), DEC); break;
590 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 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 601
       SERIAL_CHAR('\t');
599 602
       switch (i) {
600 603
         case TMC_CODES: st.printLabel(); break;
@@ -649,72 +652,52 @@
649 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 653
     if (print_x) {
651 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 656
       #endif
654 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 659
       #endif
657 660
     }
658 661
 
659 662
     if (print_y) {
660 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 665
       #endif
663 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 668
       #endif
666 669
     }
667 670
 
668 671
     if (print_z) {
669 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 674
       #endif
672 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 677
       #endif
675 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 680
       #endif
678 681
     }
679 682
 
680 683
     if (print_e) {
681 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 686
       #endif
684 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 689
       #endif
691 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 692
       #endif
698 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 695
       #endif
705 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 698
       #endif
712 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 701
       #endif
719 702
     }
720 703
 
@@ -877,8 +860,8 @@
877 860
     }
878 861
   #endif
879 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 865
       switch (i) {
883 866
         case TMC_AXIS_CODES: SERIAL_CHAR('\t'); st.printLabel(); break;
884 867
         PRINT_TMC_REGISTER(DRVCONF);
@@ -1118,49 +1101,4 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
1118 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 1104
 #endif // HAS_TRINAMIC

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

@@ -23,12 +23,11 @@
23 23
 
24 24
 #include "../inc/MarlinConfig.h"
25 25
 #include "../lcd/ultralcd.h"
26
+
26 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 32
 #define TMC_X_LABEL 'X', '0'
34 33
 #define TMC_Y_LABEL 'Y', '0'
@@ -57,7 +56,7 @@
57 56
   #define MONITOR_DRIVER_STATUS_INTERVAL_MS 500u
58 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 60
   return 12650000UL * msteps / (256 * thrs * spmm);
62 61
 }
63 62
 
@@ -92,13 +91,13 @@ class TMCStorage {
92 91
       #if ENABLED(HYBRID_THRESHOLD)
93 92
         uint8_t hybrid_thrs = 0;
94 93
       #endif
95
-      #if ENABLED(SENSORLESS_HOMING)
94
+      #if USE_SENSORLESS
96 95
         int8_t homing_thrs = 0;
97 96
       #endif
98 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 101
 class TMCMarlin : public TMC, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
103 102
   public:
104 103
     TMCMarlin(uint16_t cs_pin, float RS) :
@@ -121,30 +120,40 @@ class TMCMarlin : public TMC, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
121 120
       inline void refresh_stepping_mode() { this->en_pwm_mode(this->stored.stealthChop_enabled); }
122 121
       inline bool get_stealthChop_status() { return this->en_pwm_mode(); }
123 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 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 140
         #endif
134 141
       }
142
+    #endif
135 143
 
144
+    #if HAS_LCD_MENU
136 145
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
137 146
 
138 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 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 152
       #endif
144 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 157
   public:
149 158
     TMCMarlin(Stream * SerialPort, float RS, bool has_rx=true) :
150 159
       TMC2208Stepper(SerialPort, RS, has_rx=true)
@@ -166,24 +175,28 @@ class TMCMarlin<TMC2208Stepper, AXIS_LETTER, DRIVER_ID> : public TMC2208Stepper,
166 175
       inline void refresh_stepping_mode() { en_spreadCycle(!this->stored.stealthChop_enabled); }
167 176
       inline bool get_stealthChop_status() { return !this->en_spreadCycle(); }
168 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 186
         #endif
176 187
       }
188
+    #endif
177 189
 
190
+    #if HAS_LCD_MENU
178 191
       inline void refresh_stepper_current() { rms_current(this->val_mA); }
179 192
 
180 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 195
       #endif
183 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 200
   public:
188 201
     TMCMarlin(uint16_t cs_pin, float RS) :
189 202
       TMC2660Stepper(cs_pin, RS)
@@ -197,30 +210,30 @@ class TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID> : public TMC2660Stepper,
197 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 219
         #endif
205 220
       }
221
+    #endif
206 222
 
223
+    #if HAS_LCD_MENU
207 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 228
       #endif
212 229
     #endif
213 230
 };
214 231
 
215 232
 template<typename TMC>
216
-void tmc_get_current(TMC &st) {
233
+void tmc_print_current(TMC &st) {
217 234
   st.printLabel();
218 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 238
 #if ENABLED(MONITOR_DRIVER_STATUS)
226 239
   template<typename TMC>
@@ -237,25 +250,21 @@ void tmc_set_current(TMC &st, const int mA) {
237 250
     SERIAL_ECHOLNPGM(" prewarn flag cleared");
238 251
   }
239 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 269
 void monitor_tmc_driver();
261 270
 void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e);
@@ -268,10 +277,6 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
268 277
   void tmc_get_registers(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
269 278
 #endif
270 279
 
271
-#if HAS_LCD_MENU
272
-  void init_tmc_section();
273
-#endif
274
-
275 280
 /**
276 281
  * TMC2130 specific sensorless homing using stallGuard2.
277 282
  * stallGuard2 only works when in spreadCycle mode.
@@ -295,3 +300,5 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
295 300
 #if TMC_HAS_SPI
296 301
   void tmc_init_cs_pins();
297 302
 #endif
303
+
304
+#endif // HAS_TRINAMIC

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

@@ -43,8 +43,8 @@
43 43
  * With no parameters report driver currents.
44 44
  */
45 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 49
   bool report = true;
50 50
 

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

@@ -192,10 +192,10 @@
192 192
  */
193 193
 #if ENABLED(HYBRID_THRESHOLD)
194 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 200
     bool report = true;
201 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,8 +309,6 @@
309 309
  */
310 310
 #if USE_SENSORLESS
311 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 313
     bool report = true;
316 314
     const uint8_t index = parser.byteval('I');
@@ -321,33 +319,33 @@
321 319
         #if X_SENSORLESS
322 320
           case X_AXIS:
323 321
             #if AXIS_HAS_STALLGUARD(X)
324
-              if (index < 2) TMC_SET_SGT(X);
322
+              if (index < 2) stepperX.sgt(value);
325 323
             #endif
326 324
             #if AXIS_HAS_STALLGUARD(X2)
327
-              if (!(index & 1)) TMC_SET_SGT(X2);
325
+              if (!(index & 1)) stepperX2.sgt(value);
328 326
             #endif
329 327
             break;
330 328
         #endif
331 329
         #if Y_SENSORLESS
332 330
           case Y_AXIS:
333 331
             #if AXIS_HAS_STALLGUARD(Y)
334
-              if (index < 2) TMC_SET_SGT(Y);
332
+              if (index < 2) stepperY.sgt(value);
335 333
             #endif
336 334
             #if AXIS_HAS_STALLGUARD(Y2)
337
-              if (!(index & 1)) TMC_SET_SGT(Y2);
335
+              if (!(index & 1)) stepperY2.sgt(value);
338 336
             #endif
339 337
             break;
340 338
         #endif
341 339
         #if Z_SENSORLESS
342 340
           case Z_AXIS:
343 341
             #if AXIS_HAS_STALLGUARD(Z)
344
-              if (index < 2) TMC_SET_SGT(Z);
342
+              if (index < 2) stepperZ.sgt(value);
345 343
             #endif
346 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 346
             #endif
349 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 349
             #endif
352 350
             break;
353 351
         #endif
@@ -357,29 +355,29 @@
357 355
     if (report) {
358 356
       #if X_SENSORLESS
359 357
         #if AXIS_HAS_STALLGUARD(X)
360
-          TMC_SAY_SGT(X);
358
+          tmc_print_sgt(stepperX);
361 359
         #endif
362 360
         #if AXIS_HAS_STALLGUARD(X2)
363
-          TMC_SAY_SGT(X2);
361
+          tmc_print_sgt(stepperX2);
364 362
         #endif
365 363
       #endif
366 364
       #if Y_SENSORLESS
367 365
         #if AXIS_HAS_STALLGUARD(Y)
368
-          TMC_SAY_SGT(Y);
366
+          tmc_print_sgt(stepperY);
369 367
         #endif
370 368
         #if AXIS_HAS_STALLGUARD(Y2)
371
-          TMC_SAY_SGT(Y2);
369
+          tmc_print_sgt(stepperY2);
372 370
         #endif
373 371
       #endif
374 372
       #if Z_SENSORLESS
375 373
         #if AXIS_HAS_STALLGUARD(Z)
376
-          TMC_SAY_SGT(Z);
374
+          tmc_print_sgt(stepperZ);
377 375
         #endif
378 376
         #if AXIS_HAS_STALLGUARD(Z2)
379
-          TMC_SAY_SGT(Z2);
377
+          tmc_print_sgt(stepperZ2);
380 378
         #endif
381 379
         #if AXIS_HAS_STALLGUARD(Z3)
382
-          TMC_SAY_SGT(Z3);
380
+          tmc_print_sgt(stepperZ3);
383 381
         #endif
384 382
       #endif
385 383
     }

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

@@ -124,43 +124,43 @@ void menu_tmc_current() {
124 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 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 128
   #endif
129 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 131
   #endif
132 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 134
   #endif
135 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 137
   #endif
138 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 140
   #endif
141 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 143
   #endif
144 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 146
   #endif
147 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 149
   #endif
150 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 152
   #endif
153 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 155
   #endif
156 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 158
   #endif
159 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 161
   #endif
162 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 164
   #endif
165 165
 
166 166
   void menu_tmc_hybrid_thrs() {

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

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

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

@@ -144,69 +144,88 @@
144 144
 #endif // TMC26X
145 145
 
146 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 148
   #include <SPI.h>
157 149
   #include "planner.h"
158 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 229
     st.begin();
211 230
 
212 231
     CHOPCONF_t chopconf{0};
@@ -233,75 +252,18 @@
233 252
     st.PWMCONF(pwmconf.sr);
234 253
 
235 254
     #if ENABLED(HYBRID_THRESHOLD)
236
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
255
+      st.set_pwm_thrs(thrs);
237 256
     #else
238 257
       UNUSED(thrs);
239
-      UNUSED(spmm);
240 258
     #endif
241 259
 
242 260
     st.GSTAT(); // Clear GSTAT
243 261
   }
244 262
 #endif // TMC2130
245 263
 
246
-//
247
-// TMC2160 Driver objects and inits
248
-//
249 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 267
     st.begin();
306 268
 
307 269
     static constexpr int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
@@ -337,10 +299,9 @@
337 299
     st.PWMCONF(pwmconf.sr);
338 300
 
339 301
     #if ENABLED(HYBRID_THRESHOLD)
340
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
302
+      st.set_pwm_thrs(thrs);
341 303
     #else
342 304
       UNUSED(thrs);
343
-      UNUSED(spmm);
344 305
     #endif
345 306
 
346 307
     st.GSTAT(); // Clear GSTAT
@@ -351,105 +312,96 @@
351 312
 // TMC2208 Driver objects and inits
352 313
 //
353 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 315
   // Stepper objects of TMC2208 steppers used
364 316
   #if AXIS_DRIVER_TYPE_X(TMC2208)
365 317
     #ifdef X_HARDWARE_SERIAL
366
-      TMC2208_DEFINE_HARDWARE(X);
318
+      TMC_UART_DEFINE(HW, X, X);
367 319
     #else
368
-      TMC2208_DEFINE_SOFTWARE(X);
320
+      TMC_UART_DEFINE(SW, X, X);
369 321
     #endif
370 322
   #endif
371 323
   #if AXIS_DRIVER_TYPE_X2(TMC2208)
372 324
     #ifdef X2_HARDWARE_SERIAL
373
-      TMC2208_DEFINE_HARDWARE(X2);
325
+      TMC_UART_DEFINE(HW, X2, X);
374 326
     #else
375
-      TMC2208_DEFINE_SOFTWARE(X2);
327
+      TMC_UART_DEFINE(SW, X2, X);
376 328
     #endif
377 329
   #endif
378 330
   #if AXIS_DRIVER_TYPE_Y(TMC2208)
379 331
     #ifdef Y_HARDWARE_SERIAL
380
-      TMC2208_DEFINE_HARDWARE(Y);
332
+      TMC_UART_DEFINE(HW, Y, Y);
381 333
     #else
382
-      TMC2208_DEFINE_SOFTWARE(Y);
334
+      TMC_UART_DEFINE(SW, Y, Y);
383 335
     #endif
384 336
   #endif
385 337
   #if AXIS_DRIVER_TYPE_Y2(TMC2208)
386 338
     #ifdef Y2_HARDWARE_SERIAL
387
-      TMC2208_DEFINE_HARDWARE(Y2);
339
+      TMC_UART_DEFINE(HW, Y2, Y);
388 340
     #else
389
-      TMC2208_DEFINE_SOFTWARE(Y2);
341
+      TMC_UART_DEFINE(SW, Y2, Y);
390 342
     #endif
391 343
   #endif
392 344
   #if AXIS_DRIVER_TYPE_Z(TMC2208)
393 345
     #ifdef Z_HARDWARE_SERIAL
394
-      TMC2208_DEFINE_HARDWARE(Z);
346
+      TMC_UART_DEFINE(HW, Z, Z);
395 347
     #else
396
-      TMC2208_DEFINE_SOFTWARE(Z);
348
+      TMC_UART_DEFINE(SW, Z, Z);
397 349
     #endif
398 350
   #endif
399 351
   #if AXIS_DRIVER_TYPE_Z2(TMC2208)
400 352
     #ifdef Z2_HARDWARE_SERIAL
401
-      TMC2208_DEFINE_HARDWARE(Z2);
353
+      TMC_UART_DEFINE(HW, Z2, Z);
402 354
     #else
403
-      TMC2208_DEFINE_SOFTWARE(Z2);
355
+      TMC_UART_DEFINE(SW, Z2, Z);
404 356
     #endif
405 357
   #endif
406 358
   #if AXIS_DRIVER_TYPE_Z3(TMC2208)
407 359
     #ifdef Z3_HARDWARE_SERIAL
408
-      TMC2208_DEFINE_HARDWARE(Z3);
360
+      TMC_UART_DEFINE(HW, Z3, Z);
409 361
     #else
410
-      TMC2208_DEFINE_SOFTWARE(Z3);
362
+      TMC_UART_DEFINE(SW, Z3, Z);
411 363
     #endif
412 364
   #endif
413 365
   #if AXIS_DRIVER_TYPE_E0(TMC2208)
414 366
     #ifdef E0_HARDWARE_SERIAL
415
-      TMC2208_DEFINE_HARDWARE(E0);
367
+      TMC_UART_DEFINE_E(HW, 0);
416 368
     #else
417
-      TMC2208_DEFINE_SOFTWARE(E0);
369
+      TMC_UART_DEFINE_E(SW, 0);
418 370
     #endif
419 371
   #endif
420 372
   #if AXIS_DRIVER_TYPE_E1(TMC2208)
421 373
     #ifdef E1_HARDWARE_SERIAL
422
-      TMC2208_DEFINE_HARDWARE(E1);
374
+      TMC_UART_DEFINE_E(HW, 1);
423 375
     #else
424
-      TMC2208_DEFINE_SOFTWARE(E1);
376
+      TMC_UART_DEFINE_E(SW, 1);
425 377
     #endif
426 378
   #endif
427 379
   #if AXIS_DRIVER_TYPE_E2(TMC2208)
428 380
     #ifdef E2_HARDWARE_SERIAL
429
-      TMC2208_DEFINE_HARDWARE(E2);
381
+      TMC_UART_DEFINE_E(HW, 2);
430 382
     #else
431
-      TMC2208_DEFINE_SOFTWARE(E2);
383
+      TMC_UART_DEFINE_E(SW, 2);
432 384
     #endif
433 385
   #endif
434 386
   #if AXIS_DRIVER_TYPE_E3(TMC2208)
435 387
     #ifdef E3_HARDWARE_SERIAL
436
-      TMC2208_DEFINE_HARDWARE(E3);
388
+      TMC_UART_DEFINE_E(HW, 3);
437 389
     #else
438
-      TMC2208_DEFINE_SOFTWARE(E3);
390
+      TMC_UART_DEFINE_E(SW, 3);
439 391
     #endif
440 392
   #endif
441 393
   #if AXIS_DRIVER_TYPE_E4(TMC2208)
442 394
     #ifdef E4_HARDWARE_SERIAL
443
-      TMC2208_DEFINE_HARDWARE(E4);
395
+      TMC_UART_DEFINE_E(HW, 4);
444 396
     #else
445
-      TMC2208_DEFINE_SOFTWARE(E4);
397
+      TMC_UART_DEFINE_E(SW, 4);
446 398
     #endif
447 399
   #endif
448 400
   #if AXIS_DRIVER_TYPE_E5(TMC2208)
449 401
     #ifdef E5_HARDWARE_SERIAL
450
-      TMC2208_DEFINE_HARDWARE(E5);
402
+      TMC_UART_DEFINE_E(HW, 5);
451 403
     #else
452
-      TMC2208_DEFINE_SOFTWARE(E5);
404
+      TMC_UART_DEFINE_E(SW, 5);
453 405
     #endif
454 406
   #endif
455 407
 
@@ -547,8 +499,8 @@
547 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 504
     TMC2208_n::GCONF_t gconf{0};
553 505
     gconf.pdn_disable = true; // Use UART
554 506
     gconf.mstep_reg_select = true; // Select microsteps with UART
@@ -581,10 +533,9 @@
581 533
     st.PWMCONF(pwmconf.sr);
582 534
 
583 535
     #if ENABLED(HYBRID_THRESHOLD)
584
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
536
+      st.set_pwm_thrs(thrs);
585 537
     #else
586 538
       UNUSED(thrs);
587
-      UNUSED(spmm);
588 539
     #endif
589 540
 
590 541
     st.GSTAT(0b111); // Clear
@@ -592,63 +543,9 @@
592 543
   }
593 544
 #endif // TMC2208
594 545
 
595
-//
596
-// TMC2660 Driver objects and inits
597
-//
598 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 549
     st.begin();
653 550
 
654 551
     TMC2660_n::CHOPCONF_t chopconf{0};
@@ -669,65 +566,9 @@
669 566
   }
670 567
 #endif // TMC2660
671 568
 
672
-//
673
-// TMC5130 Driver objects and inits
674
-//
675 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 572
     st.begin();
732 573
 
733 574
     CHOPCONF_t chopconf{0};
@@ -754,75 +595,18 @@
754 595
     st.PWMCONF(pwmconf.sr);
755 596
 
756 597
     #if ENABLED(HYBRID_THRESHOLD)
757
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
598
+      st.set_pwm_thrs(thrs);
758 599
     #else
759 600
       UNUSED(thrs);
760
-      UNUSED(spmm);
761 601
     #endif
762 602
 
763 603
     st.GSTAT(); // Clear GSTAT
764 604
   }
765 605
 #endif // TMC5130
766 606
 
767
-//
768
-// TMC5160 Driver objects and inits
769
-//
770 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 610
     st.begin();
827 611
 
828 612
     int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
@@ -857,10 +641,9 @@
857 641
     st.PWMCONF(pwmconf.sr);
858 642
 
859 643
     #if ENABLED(HYBRID_THRESHOLD)
860
-      st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
644
+      st.set_pwm_thrs(thrs);
861 645
     #else
862 646
       UNUSED(thrs);
863
-      UNUSED(spmm);
864 647
     #endif
865 648
     st.GSTAT(); // Clear GSTAT
866 649
   }
@@ -941,43 +724,43 @@ void reset_stepper_drivers() {
941 724
   #endif
942 725
 
943 726
   #if AXIS_IS_TMC(X)
944
-    _TMC_INIT(X, X_AXIS, STEALTH_AXIS_XY);
727
+    _TMC_INIT(X, STEALTH_AXIS_XY);
945 728
   #endif
946 729
   #if AXIS_IS_TMC(X2)
947
-    _TMC_INIT(X2, X_AXIS, STEALTH_AXIS_XY);
730
+    _TMC_INIT(X2, STEALTH_AXIS_XY);
948 731
   #endif
949 732
   #if AXIS_IS_TMC(Y)
950
-    _TMC_INIT(Y, Y_AXIS, STEALTH_AXIS_XY);
733
+    _TMC_INIT(Y, STEALTH_AXIS_XY);
951 734
   #endif
952 735
   #if AXIS_IS_TMC(Y2)
953
-    _TMC_INIT(Y2, Y_AXIS, STEALTH_AXIS_XY);
736
+    _TMC_INIT(Y2, STEALTH_AXIS_XY);
954 737
   #endif
955 738
   #if AXIS_IS_TMC(Z)
956
-    _TMC_INIT(Z, Z_AXIS, STEALTH_AXIS_Z);
739
+    _TMC_INIT(Z, STEALTH_AXIS_Z);
957 740
   #endif
958 741
   #if AXIS_IS_TMC(Z2)
959
-    _TMC_INIT(Z2, Z_AXIS, STEALTH_AXIS_Z);
742
+    _TMC_INIT(Z2, STEALTH_AXIS_Z);
960 743
   #endif
961 744
   #if AXIS_IS_TMC(Z3)
962
-    _TMC_INIT(Z3, Z_AXIS, STEALTH_AXIS_Z);
745
+    _TMC_INIT(Z3, STEALTH_AXIS_Z);
963 746
   #endif
964 747
   #if AXIS_IS_TMC(E0)
965
-    _TMC_INIT(E0, E_AXIS, STEALTH_AXIS_E);
748
+    _TMC_INIT(E0, STEALTH_AXIS_E);
966 749
   #endif
967 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 752
   #endif
970 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 755
   #endif
973 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 758
   #endif
976 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 761
   #endif
979 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 764
   #endif
982 765
 
983 766
   #if USE_SENSORLESS

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

@@ -62,11 +62,11 @@
62 62
     #error "Update TMCStepper library to 0.2.2 or newer."
63 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 71
   typedef struct {
72 72
     uint8_t toff;

Loading…
Cancel
Save