Browse Source

🚸 Refine stepper-driver-related G-codes (#23372)

Scott Lahteine 2 years ago
parent
commit
02b4e48c6d
No account linked to committer's email address

+ 6
- 37
Marlin/src/feature/tmc_util.h View File

@@ -45,6 +45,12 @@ constexpr uint16_t _tmc_thrs(const uint16_t msteps, const uint32_t thrs, const u
45 45
   return 12650000UL * msteps / (256 * thrs * spmm);
46 46
 }
47 47
 
48
+typedef struct {
49
+  uint8_t toff;
50
+  int8_t hend;
51
+  uint8_t hstrt;
52
+} chopper_timing_t;
53
+
48 54
 template<char AXIS_LETTER, char DRIVER_ID>
49 55
 class TMCStorage {
50 56
   protected:
@@ -297,43 +303,6 @@ class TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC266
297 303
                             sgt_max =  63;
298 304
 };
299 305
 
300
-template<typename TMC>
301
-void tmc_print_current(TMC &st) {
302
-  st.printLabel();
303
-  SERIAL_ECHOLNPGM(" driver current: ", st.getMilliamps());
304
-}
305
-
306
-#if ENABLED(MONITOR_DRIVER_STATUS)
307
-  template<typename TMC>
308
-  void tmc_report_otpw(TMC &st) {
309
-    st.printLabel();
310
-    SERIAL_ECHOPGM(" temperature prewarn triggered: ");
311
-    serialprint_truefalse(st.getOTPW());
312
-    SERIAL_EOL();
313
-  }
314
-  template<typename TMC>
315
-  void tmc_clear_otpw(TMC &st) {
316
-    st.clear_otpw();
317
-    st.printLabel();
318
-    SERIAL_ECHOLNPGM(" prewarn flag cleared");
319
-  }
320
-#endif
321
-#if ENABLED(HYBRID_THRESHOLD)
322
-  template<typename TMC>
323
-  void tmc_print_pwmthrs(TMC &st) {
324
-    st.printLabel();
325
-    SERIAL_ECHOLNPGM(" stealthChop max speed: ", st.get_pwm_thrs());
326
-  }
327
-#endif
328
-#if USE_SENSORLESS
329
-  template<typename TMC>
330
-  void tmc_print_sgt(TMC &st) {
331
-    st.printLabel();
332
-    SERIAL_ECHOPGM(" homing sensitivity: ");
333
-    SERIAL_PRINTLN(st.homing_threshold(), PrintBase::Dec);
334
-  }
335
-#endif
336
-
337 306
 void monitor_tmc_drivers();
338 307
 void test_tmc_connection(LOGICAL_AXIS_DECL(const bool, true));
339 308
 

+ 42
- 44
Marlin/src/gcode/feature/L6470/M906.cpp View File

@@ -202,12 +202,11 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
202 202
  * On L6474 this sets the TVAL register (same address).
203 203
  *
204 204
  * I - select which driver(s) to change on multi-driver axis
205
- *     0 - (default) all drivers on the axis or E0
206
- *     1 - monitor only X, Y, Z or E1
207
- *     2 - monitor only X2, Y2, Z2 or E2
208
- *     3 - monitor only Z3 or E3
209
- *     4 - monitor only Z4 or E4
210
- *     5 - monitor only E5
205
+ *         (default) all drivers on the axis
206
+ *     0 - monitor only the first XYZ... driver
207
+ *     1 - monitor only X2, Y2, Z2
208
+ *     2 - monitor only Z3
209
+ *     3 - monitor only Z4
211 210
  * Xxxx, Yxxx, Zxxx, Exxx - axis to change (optional)
212 211
  *     L6474 - current in mA (4A max)
213 212
  *     All others - 0-255
@@ -227,8 +226,10 @@ void GcodeSuite::M906() {
227 226
 
228 227
   uint8_t report_current = true;
229 228
 
230
-  #if HAS_L64XX
231
-    const uint8_t index = parser.byteval('I');
229
+  #if AXIS_IS_L64XX(X2) || AXIS_IS_L64XX(Y2) || AXIS_IS_L64XX(Z2) || AXIS_IS_L64XX(Z3) || AXIS_IS_L64XX(Z4)
230
+    const int8_t index = parser.byteval('I', -1);
231
+  #else
232
+    constexpr int8_t index = -1;
232 233
   #endif
233 234
 
234 235
   LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) {
@@ -243,20 +244,20 @@ void GcodeSuite::M906() {
243 244
     switch (i) {
244 245
       case X_AXIS:
245 246
         #if AXIS_IS_L64XX(X)
246
-          if (index == 0) L6470_SET_KVAL_HOLD(X);
247
+          if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(X);
247 248
         #endif
248 249
         #if AXIS_IS_L64XX(X2)
249
-          if (index == 1) L6470_SET_KVAL_HOLD(X2);
250
+          if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(X2);
250 251
         #endif
251 252
         break;
252 253
 
253 254
       #if HAS_Y_AXIS
254 255
         case Y_AXIS:
255 256
           #if AXIS_IS_L64XX(Y)
256
-            if (index == 0) L6470_SET_KVAL_HOLD(Y);
257
+            if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(Y);
257 258
           #endif
258 259
           #if AXIS_IS_L64XX(Y2)
259
-            if (index == 1) L6470_SET_KVAL_HOLD(Y2);
260
+            if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(Y2);
260 261
           #endif
261 262
           break;
262 263
       #endif
@@ -264,50 +265,47 @@ void GcodeSuite::M906() {
264 265
       #if HAS_Z_AXIS
265 266
         case Z_AXIS:
266 267
           #if AXIS_IS_L64XX(Z)
267
-            if (index == 0) L6470_SET_KVAL_HOLD(Z);
268
+            if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(Z);
268 269
           #endif
269 270
           #if AXIS_IS_L64XX(Z2)
270
-            if (index == 1) L6470_SET_KVAL_HOLD(Z2);
271
+            if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(Z2);
271 272
           #endif
272 273
           #if AXIS_IS_L64XX(Z3)
273
-            if (index == 2) L6470_SET_KVAL_HOLD(Z3);
274
+            if (index < 0 || index == 2) L6470_SET_KVAL_HOLD(Z3);
274 275
           #endif
275 276
           #if AXIS_DRIVER_TYPE_Z4(L6470)
276
-            if (index == 3) L6470_SET_KVAL_HOLD(Z4);
277
+            if (index < 0 || index == 3) L6470_SET_KVAL_HOLD(Z4);
277 278
           #endif
278 279
           break;
279 280
       #endif
280 281
 
281 282
       #if E_STEPPERS
282 283
         case E_AXIS: {
283
-          const int8_t target_e_stepper = get_target_e_stepper_from_command(0);
284
-          if (target_e_stepper < 0) return;
285
-          switch (target_e_stepper) {
286
-            #if AXIS_IS_L64XX(E0)
287
-              case 0: L6470_SET_KVAL_HOLD(E0); break;
288
-            #endif
289
-            #if AXIS_IS_L64XX(E1)
290
-              case 1: L6470_SET_KVAL_HOLD(E1); break;
291
-            #endif
292
-            #if AXIS_IS_L64XX(E2)
293
-              case 2: L6470_SET_KVAL_HOLD(E2); break;
294
-            #endif
295
-            #if AXIS_IS_L64XX(E3)
296
-              case 3: L6470_SET_KVAL_HOLD(E3); break;
297
-            #endif
298
-            #if AXIS_IS_L64XX(E4)
299
-              case 4: L6470_SET_KVAL_HOLD(E4); break;
300
-            #endif
301
-            #if AXIS_IS_L64XX(E5)
302
-              case 5: L6470_SET_KVAL_HOLD(E5); break;
303
-            #endif
304
-            #if AXIS_IS_L64XX(E6)
305
-              case 6: L6470_SET_KVAL_HOLD(E6); break;
306
-            #endif
307
-            #if AXIS_IS_L64XX(E7)
308
-              case 7: L6470_SET_KVAL_HOLD(E7); break;
309
-            #endif
310
-          }
284
+          const int8_t eindex = get_target_e_stepper_from_command();
285
+          #if AXIS_IS_L64XX(E0)
286
+            if (eindex < 0 || eindex == 0) L6470_SET_KVAL_HOLD(E0);
287
+          #endif
288
+          #if AXIS_IS_L64XX(E1)
289
+            if (eindex < 0 || eindex == 1) L6470_SET_KVAL_HOLD(E1);
290
+          #endif
291
+          #if AXIS_IS_L64XX(E2)
292
+            if (eindex < 0 || eindex == 2) L6470_SET_KVAL_HOLD(E2);
293
+          #endif
294
+          #if AXIS_IS_L64XX(E3)
295
+            if (eindex < 0 || eindex == 3) L6470_SET_KVAL_HOLD(E3);
296
+          #endif
297
+          #if AXIS_IS_L64XX(E4)
298
+            if (eindex < 0 || eindex == 4) L6470_SET_KVAL_HOLD(E4);
299
+          #endif
300
+          #if AXIS_IS_L64XX(E5)
301
+            if (eindex < 0 || eindex == 5) L6470_SET_KVAL_HOLD(E5);
302
+          #endif
303
+          #if AXIS_IS_L64XX(E6)
304
+            if (eindex < 0 || eindex == 6) L6470_SET_KVAL_HOLD(E6);
305
+          #endif
306
+          #if AXIS_IS_L64XX(E7)
307
+            if (eindex < 0 || eindex == 7) L6470_SET_KVAL_HOLD(E7);
308
+          #endif
311 309
         } break;
312 310
       #endif
313 311
     }

+ 22
- 25
Marlin/src/gcode/feature/trinamic/M569.cpp View File

@@ -40,35 +40,35 @@ void tmc_set_stealthChop(TMC &st, const bool enable) {
40 40
   st.refresh_stepping_mode();
41 41
 }
42 42
 
43
-static void set_stealth_status(const bool enable, const int8_t target_e_stepper) {
43
+static void set_stealth_status(const bool enable, const int8_t eindex) {
44 44
   #define TMC_SET_STEALTH(Q) tmc_set_stealthChop(stepper##Q, enable)
45 45
 
46
-  #if    X_HAS_STEALTHCHOP  || Y_HAS_STEALTHCHOP  || Z_HAS_STEALTHCHOP \
47
-      || I_HAS_STEALTHCHOP  || J_HAS_STEALTHCHOP  || K_HAS_STEALTHCHOP \
48
-      || X2_HAS_STEALTHCHOP || Y2_HAS_STEALTHCHOP || Z2_HAS_STEALTHCHOP || Z3_HAS_STEALTHCHOP || Z4_HAS_STEALTHCHOP
49
-    const uint8_t index = parser.byteval('I');
46
+  #if X2_HAS_STEALTHCHOP || Y2_HAS_STEALTHCHOP || Z2_HAS_STEALTHCHOP || Z3_HAS_STEALTHCHOP || Z4_HAS_STEALTHCHOP
47
+    const int8_t index = parser.byteval('I', -1);
48
+  #else
49
+    constexpr int8_t index = -1;
50 50
   #endif
51 51
 
52 52
   LOOP_LOGICAL_AXES(i) if (parser.seen(axis_codes[i])) {
53 53
     switch (i) {
54 54
       case X_AXIS:
55
-        TERN_(X_HAS_STEALTHCHOP,  if (index == 0) TMC_SET_STEALTH(X));
56
-        TERN_(X2_HAS_STEALTHCHOP, if (index == 1) TMC_SET_STEALTH(X2));
55
+        TERN_(X_HAS_STEALTHCHOP,  if (index < 0 || index == 0) TMC_SET_STEALTH(X));
56
+        TERN_(X2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_STEALTH(X2));
57 57
         break;
58 58
 
59 59
       #if HAS_Y_AXIS
60 60
         case Y_AXIS:
61
-          TERN_(Y_HAS_STEALTHCHOP,  if (index == 0) TMC_SET_STEALTH(Y));
62
-          TERN_(Y2_HAS_STEALTHCHOP, if (index == 1) TMC_SET_STEALTH(Y2));
61
+          TERN_(Y_HAS_STEALTHCHOP,  if (index < 0 || index == 0) TMC_SET_STEALTH(Y));
62
+          TERN_(Y2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_STEALTH(Y2));
63 63
           break;
64 64
       #endif
65 65
 
66 66
       #if HAS_Z_AXIS
67 67
         case Z_AXIS:
68
-          TERN_(Z_HAS_STEALTHCHOP,  if (index == 0) TMC_SET_STEALTH(Z));
69
-          TERN_(Z2_HAS_STEALTHCHOP, if (index == 1) TMC_SET_STEALTH(Z2));
70
-          TERN_(Z3_HAS_STEALTHCHOP, if (index == 2) TMC_SET_STEALTH(Z3));
71
-          TERN_(Z4_HAS_STEALTHCHOP, if (index == 3) TMC_SET_STEALTH(Z4));
68
+          TERN_(Z_HAS_STEALTHCHOP,  if (index < 0 || index == 0) TMC_SET_STEALTH(Z));
69
+          TERN_(Z2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_STEALTH(Z2));
70
+          TERN_(Z3_HAS_STEALTHCHOP, if (index < 0 || index == 2) TMC_SET_STEALTH(Z3));
71
+          TERN_(Z4_HAS_STEALTHCHOP, if (index < 0 || index == 3) TMC_SET_STEALTH(Z4));
72 72
           break;
73 73
       #endif
74 74
 
@@ -84,17 +84,14 @@ static void set_stealth_status(const bool enable, const int8_t target_e_stepper)
84 84
 
85 85
       #if E_STEPPERS
86 86
         case E_AXIS: {
87
-          if (target_e_stepper < 0) return;
88
-          switch (target_e_stepper) {
89
-            TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_STEALTH(E0); break;)
90
-            TERN_(E1_HAS_STEALTHCHOP, case 1: TMC_SET_STEALTH(E1); break;)
91
-            TERN_(E2_HAS_STEALTHCHOP, case 2: TMC_SET_STEALTH(E2); break;)
92
-            TERN_(E3_HAS_STEALTHCHOP, case 3: TMC_SET_STEALTH(E3); break;)
93
-            TERN_(E4_HAS_STEALTHCHOP, case 4: TMC_SET_STEALTH(E4); break;)
94
-            TERN_(E5_HAS_STEALTHCHOP, case 5: TMC_SET_STEALTH(E5); break;)
95
-            TERN_(E6_HAS_STEALTHCHOP, case 6: TMC_SET_STEALTH(E6); break;)
96
-            TERN_(E7_HAS_STEALTHCHOP, case 7: TMC_SET_STEALTH(E7); break;)
97
-          }
87
+          TERN_(E0_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 0) TMC_SET_STEALTH(E0));
88
+          TERN_(E1_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 1) TMC_SET_STEALTH(E1));
89
+          TERN_(E2_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 2) TMC_SET_STEALTH(E2));
90
+          TERN_(E3_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 3) TMC_SET_STEALTH(E3));
91
+          TERN_(E4_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 4) TMC_SET_STEALTH(E4));
92
+          TERN_(E5_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 5) TMC_SET_STEALTH(E5));
93
+          TERN_(E6_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 6) TMC_SET_STEALTH(E6));
94
+          TERN_(E7_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 7) TMC_SET_STEALTH(E7));
98 95
         } break;
99 96
       #endif
100 97
     }
@@ -133,7 +130,7 @@ static void say_stealth_status() {
133 130
  */
134 131
 void GcodeSuite::M569() {
135 132
   if (parser.seen('S'))
136
-    set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command(0));
133
+    set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command());
137 134
   else
138 135
     say_stealth_status();
139 136
 }

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

@@ -28,6 +28,12 @@
28 28
 #include "../../../feature/tmc_util.h"
29 29
 #include "../../../module/stepper/indirection.h"
30 30
 
31
+template<typename TMC>
32
+static void tmc_print_current(TMC &st) {
33
+  st.printLabel();
34
+  SERIAL_ECHOLNPGM(" driver current: ", st.getMilliamps());
35
+}
36
+
31 37
 /**
32 38
  * M906: Set motor current in milliamps.
33 39
  *
@@ -48,8 +54,10 @@ void GcodeSuite::M906() {
48 54
 
49 55
   bool report = true;
50 56
 
51
-  #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) || AXIS_IS_TMC(Z4) || AXIS_IS_TMC(I) || AXIS_IS_TMC(J) || AXIS_IS_TMC(K)
52
-    const uint8_t index = parser.byteval('I');
57
+  #if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4)
58
+    const int8_t index = parser.byteval('I', -1);
59
+  #else
60
+    constexpr int8_t index = -1;
53 61
   #endif
54 62
 
55 63
   LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) {
@@ -57,20 +65,20 @@ void GcodeSuite::M906() {
57 65
     switch (i) {
58 66
       case X_AXIS:
59 67
         #if AXIS_IS_TMC(X)
60
-          if (index == 0) TMC_SET_CURRENT(X);
68
+          if (index < 0 || index == 0) TMC_SET_CURRENT(X);
61 69
         #endif
62 70
         #if AXIS_IS_TMC(X2)
63
-          if (index == 1) TMC_SET_CURRENT(X2);
71
+          if (index < 0 || index == 1) TMC_SET_CURRENT(X2);
64 72
         #endif
65 73
         break;
66 74
 
67 75
       #if HAS_Y_AXIS
68 76
         case Y_AXIS:
69 77
           #if AXIS_IS_TMC(Y)
70
-            if (index == 0) TMC_SET_CURRENT(Y);
78
+            if (index < 0 || index == 0) TMC_SET_CURRENT(Y);
71 79
           #endif
72 80
           #if AXIS_IS_TMC(Y2)
73
-            if (index == 1) TMC_SET_CURRENT(Y2);
81
+            if (index < 0 || index == 1) TMC_SET_CURRENT(Y2);
74 82
           #endif
75 83
           break;
76 84
       #endif
@@ -78,16 +86,16 @@ void GcodeSuite::M906() {
78 86
       #if HAS_Z_AXIS
79 87
         case Z_AXIS:
80 88
           #if AXIS_IS_TMC(Z)
81
-            if (index == 0) TMC_SET_CURRENT(Z);
89
+            if (index < 0 || index == 0) TMC_SET_CURRENT(Z);
82 90
           #endif
83 91
           #if AXIS_IS_TMC(Z2)
84
-            if (index == 1) TMC_SET_CURRENT(Z2);
92
+            if (index < 0 || index == 1) TMC_SET_CURRENT(Z2);
85 93
           #endif
86 94
           #if AXIS_IS_TMC(Z3)
87
-            if (index == 2) TMC_SET_CURRENT(Z3);
95
+            if (index < 0 || index == 2) TMC_SET_CURRENT(Z3);
88 96
           #endif
89 97
           #if AXIS_IS_TMC(Z4)
90
-            if (index == 3) TMC_SET_CURRENT(Z4);
98
+            if (index < 0 || index == 3) TMC_SET_CURRENT(Z4);
91 99
           #endif
92 100
           break;
93 101
       #endif
@@ -104,34 +112,31 @@ void GcodeSuite::M906() {
104 112
 
105 113
       #if E_STEPPERS
106 114
         case E_AXIS: {
107
-          const int8_t target_e_stepper = get_target_e_stepper_from_command(0);
108
-          if (target_e_stepper < 0) return;
109
-          switch (target_e_stepper) {
110
-            #if AXIS_IS_TMC(E0)
111
-              case 0: TMC_SET_CURRENT(E0); break;
112
-            #endif
113
-            #if AXIS_IS_TMC(E1)
114
-              case 1: TMC_SET_CURRENT(E1); break;
115
-            #endif
116
-            #if AXIS_IS_TMC(E2)
117
-              case 2: TMC_SET_CURRENT(E2); break;
118
-            #endif
119
-            #if AXIS_IS_TMC(E3)
120
-              case 3: TMC_SET_CURRENT(E3); break;
121
-            #endif
122
-            #if AXIS_IS_TMC(E4)
123
-              case 4: TMC_SET_CURRENT(E4); break;
124
-            #endif
125
-            #if AXIS_IS_TMC(E5)
126
-              case 5: TMC_SET_CURRENT(E5); break;
127
-            #endif
128
-            #if AXIS_IS_TMC(E6)
129
-              case 6: TMC_SET_CURRENT(E6); break;
130
-            #endif
131
-            #if AXIS_IS_TMC(E7)
132
-              case 7: TMC_SET_CURRENT(E7); break;
133
-            #endif
134
-          }
115
+          const int8_t eindex = get_target_e_stepper_from_command();
116
+          #if AXIS_IS_TMC(E0)
117
+            if (eindex < 0 || eindex == 0) TMC_SET_CURRENT(E0);
118
+          #endif
119
+          #if AXIS_IS_TMC(E1)
120
+            if (eindex < 0 || eindex == 1) TMC_SET_CURRENT(E1);
121
+          #endif
122
+          #if AXIS_IS_TMC(E2)
123
+            if (eindex < 0 || eindex == 2) TMC_SET_CURRENT(E2);
124
+          #endif
125
+          #if AXIS_IS_TMC(E3)
126
+            if (eindex < 0 || eindex == 3) TMC_SET_CURRENT(E3);
127
+          #endif
128
+          #if AXIS_IS_TMC(E4)
129
+            if (eindex < 0 || eindex == 4) TMC_SET_CURRENT(E4);
130
+          #endif
131
+          #if AXIS_IS_TMC(E5)
132
+            if (eindex < 0 || eindex == 5) TMC_SET_CURRENT(E5);
133
+          #endif
134
+          #if AXIS_IS_TMC(E6)
135
+            if (eindex < 0 || eindex == 6) TMC_SET_CURRENT(E6);
136
+          #endif
137
+          #if AXIS_IS_TMC(E7)
138
+            if (eindex < 0 || eindex == 7) TMC_SET_CURRENT(E7);
139
+          #endif
135 140
         } break;
136 141
       #endif
137 142
     }

+ 55
- 28
Marlin/src/gcode/feature/trinamic/M911-M914.cpp View File

@@ -62,6 +62,21 @@
62 62
     #error "MONITOR_DRIVER_STATUS requires at least one TMC2130, 2160, 2208, 2209, 2660, 5130, or 5160."
63 63
   #endif
64 64
 
65
+  template<typename TMC>
66
+  static void tmc_report_otpw(TMC &st) {
67
+    st.printLabel();
68
+    SERIAL_ECHOPGM(" temperature prewarn triggered: ");
69
+    serialprint_truefalse(st.getOTPW());
70
+    SERIAL_EOL();
71
+  }
72
+
73
+  template<typename TMC>
74
+  static void tmc_clear_otpw(TMC &st) {
75
+    st.clear_otpw();
76
+    st.printLabel();
77
+    SERIAL_ECHOLNPGM(" prewarn flag cleared");
78
+  }
79
+
65 80
   /**
66 81
    * M911: Report TMC stepper driver overtemperature pre-warn flag
67 82
    *       This flag is held by the library, persisting until cleared by M912
@@ -223,11 +238,17 @@
223 238
 
224 239
 #endif // MONITOR_DRIVER_STATUS
225 240
 
226
-/**
227
- * M913: Set HYBRID_THRESHOLD speed.
228
- */
229 241
 #if ENABLED(HYBRID_THRESHOLD)
230 242
 
243
+  template<typename TMC>
244
+  static void tmc_print_pwmthrs(TMC &st) {
245
+    st.printLabel();
246
+    SERIAL_ECHOLNPGM(" stealthChop max speed: ", st.get_pwm_thrs());
247
+  }
248
+
249
+  /**
250
+   * M913: Set HYBRID_THRESHOLD speed.
251
+   */
231 252
   void GcodeSuite::M913() {
232 253
     #define TMC_SAY_PWMTHRS(A,Q) tmc_print_pwmthrs(stepper##Q)
233 254
     #define TMC_SET_PWMTHRS(A,Q) stepper##Q.set_pwm_thrs(value)
@@ -235,19 +256,21 @@
235 256
     #define TMC_SET_PWMTHRS_E(E) stepperE##E.set_pwm_thrs(value)
236 257
 
237 258
     bool report = true;
238
-    #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) || AXIS_IS_TMC(Z4) || AXIS_IS_TMC(I) || AXIS_IS_TMC(J) || AXIS_IS_TMC(K)
239
-      const uint8_t index = parser.byteval('I');
259
+    #if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4)
260
+      const int8_t index = parser.byteval('I', -1);
261
+    #else
262
+      constexpr int8_t index = -1;
240 263
     #endif
241 264
     LOOP_LOGICAL_AXES(i) if (int32_t value = parser.longval(axis_codes[i])) {
242 265
       report = false;
243 266
       switch (i) {
244 267
         case X_AXIS:
245
-          TERN_(X_HAS_STEALTHCHOP,  if (index < 2) TMC_SET_PWMTHRS(X,X));
246
-          TERN_(X2_HAS_STEALTHCHOP, if (!(index & 1)) TMC_SET_PWMTHRS(X,X2));
268
+          TERN_(X_HAS_STEALTHCHOP,  if (index < 0 || index == 0) TMC_SET_PWMTHRS(X,X));
269
+          TERN_(X2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(X,X2));
247 270
           break;
248 271
         case Y_AXIS:
249
-          TERN_(Y_HAS_STEALTHCHOP,  if (index < 2) TMC_SET_PWMTHRS(Y,Y));
250
-          TERN_(Y2_HAS_STEALTHCHOP, if (!(index & 1)) TMC_SET_PWMTHRS(Y,Y2));
272
+          TERN_(Y_HAS_STEALTHCHOP,  if (index < 0 || index == 0) TMC_SET_PWMTHRS(Y,Y));
273
+          TERN_(Y2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Y,Y2));
251 274
           break;
252 275
 
253 276
         #if I_HAS_STEALTHCHOP
@@ -261,25 +284,22 @@
261 284
         #endif
262 285
 
263 286
         case Z_AXIS:
264
-          TERN_(Z_HAS_STEALTHCHOP, if (index < 2) TMC_SET_PWMTHRS(Z,Z));
265
-          TERN_(Z2_HAS_STEALTHCHOP, if (index == 0 || index == 2) TMC_SET_PWMTHRS(Z,Z2));
266
-          TERN_(Z3_HAS_STEALTHCHOP, if (index == 0 || index == 3) TMC_SET_PWMTHRS(Z,Z3));
267
-          TERN_(Z4_HAS_STEALTHCHOP, if (index == 0 || index == 4) TMC_SET_PWMTHRS(Z,Z4));
287
+          TERN_(Z_HAS_STEALTHCHOP,  if (index < 0 || index == 0) TMC_SET_PWMTHRS(Z,Z));
288
+          TERN_(Z2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Z,Z2));
289
+          TERN_(Z3_HAS_STEALTHCHOP, if (index < 0 || index == 2) TMC_SET_PWMTHRS(Z,Z3));
290
+          TERN_(Z4_HAS_STEALTHCHOP, if (index < 0 || index == 3) TMC_SET_PWMTHRS(Z,Z4));
268 291
           break;
269 292
         #if E_STEPPERS
270 293
           case E_AXIS: {
271
-            const int8_t target_e_stepper = get_target_e_stepper_from_command(0);
272
-            if (target_e_stepper < 0) return;
273
-            switch (target_e_stepper) {
274
-              TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_PWMTHRS_E(0); break;)
275
-              TERN_(E1_HAS_STEALTHCHOP, case 1: TMC_SET_PWMTHRS_E(1); break;)
276
-              TERN_(E2_HAS_STEALTHCHOP, case 2: TMC_SET_PWMTHRS_E(2); break;)
277
-              TERN_(E3_HAS_STEALTHCHOP, case 3: TMC_SET_PWMTHRS_E(3); break;)
278
-              TERN_(E4_HAS_STEALTHCHOP, case 4: TMC_SET_PWMTHRS_E(4); break;)
279
-              TERN_(E5_HAS_STEALTHCHOP, case 5: TMC_SET_PWMTHRS_E(5); break;)
280
-              TERN_(E6_HAS_STEALTHCHOP, case 6: TMC_SET_PWMTHRS_E(6); break;)
281
-              TERN_(E7_HAS_STEALTHCHOP, case 7: TMC_SET_PWMTHRS_E(7); break;)
282
-            }
294
+            const int8_t eindex = get_target_e_stepper_from_command();
295
+            TERN_(E0_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 0) TMC_SET_PWMTHRS_E(0));
296
+            TERN_(E1_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 1) TMC_SET_PWMTHRS_E(1));
297
+            TERN_(E2_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 2) TMC_SET_PWMTHRS_E(2));
298
+            TERN_(E3_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 3) TMC_SET_PWMTHRS_E(3));
299
+            TERN_(E4_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 4) TMC_SET_PWMTHRS_E(4));
300
+            TERN_(E5_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 5) TMC_SET_PWMTHRS_E(5));
301
+            TERN_(E6_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 6) TMC_SET_PWMTHRS_E(6));
302
+            TERN_(E7_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 7) TMC_SET_PWMTHRS_E(7));
283 303
           } break;
284 304
         #endif // E_STEPPERS
285 305
       }
@@ -407,11 +427,18 @@
407 427
 
408 428
 #endif // HYBRID_THRESHOLD
409 429
 
410
-/**
411
- * M914: Set StallGuard sensitivity.
412
- */
413 430
 #if USE_SENSORLESS
414 431
 
432
+  template<typename TMC>
433
+  static void tmc_print_sgt(TMC &st) {
434
+    st.printLabel();
435
+    SERIAL_ECHOPGM(" homing sensitivity: ");
436
+    SERIAL_PRINTLN(st.homing_threshold(), PrintBase::Dec);
437
+  }
438
+
439
+  /**
440
+   * M914: Set StallGuard sensitivity.
441
+   */
415 442
   void GcodeSuite::M914() {
416 443
 
417 444
     bool report = true;

+ 1
- 1
Marlin/src/gcode/gcode.cpp View File

@@ -159,7 +159,7 @@ int8_t GcodeSuite::get_target_e_stepper_from_command(const int8_t dval/*=-1*/) {
159 159
 }
160 160
 
161 161
 /**
162
- * Set XYZIJKE destination and feedrate from the current GCode command
162
+ * Set XYZ...E destination and feedrate from the current GCode command
163 163
  *
164 164
  *  - Set destination from included axis codes
165 165
  *  - Set to current for missing axis codes

+ 1
- 1
Marlin/src/gcode/gcode.h View File

@@ -284,7 +284,7 @@
284 284
  * M871 - Print/reset/clear first layer temperature offset values. (Requires PTC_PROBE, PTC_BED, or PTC_HOTEND)
285 285
  * M876 - Handle Prompt Response. (Requires HOST_PROMPT_SUPPORT and not EMERGENCY_PARSER)
286 286
  * M900 - Get or Set Linear Advance K-factor. (Requires LIN_ADVANCE)
287
- * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470)
287
+ * M906 - Set or get motor current in milliamps using axis codes XYZE, etc. Report values if no axis codes given. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470)
288 288
  * M907 - Set digital trimpot motor current using axis codes. (Requires a board with digital trimpots)
289 289
  * M908 - Control digital trimpot directly. (Requires HAS_MOTOR_CURRENT_DAC or DIGIPOTSS_PIN)
290 290
  * M909 - Print digipot/DAC current value. (Requires HAS_MOTOR_CURRENT_DAC)

+ 0
- 6
Marlin/src/module/stepper/trinamic.h View File

@@ -74,12 +74,6 @@
74 74
   #define TMC_CLASS_E(N) TMC_CLASS(E##N, E)
75 75
 #endif
76 76
 
77
-typedef struct {
78
-  uint8_t toff;
79
-  int8_t hend;
80
-  uint8_t hstrt;
81
-} chopper_timing_t;
82
-
83 77
 #ifndef CHOPPER_TIMING_X
84 78
   #define CHOPPER_TIMING_X CHOPPER_TIMING
85 79
 #endif

Loading…
Cancel
Save