|
@@ -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
|