Skip to content

Commit e5e6067

Browse files
committed
Continuing TMC2240 experiments
1 parent cc05123 commit e5e6067

File tree

5 files changed

+160
-108
lines changed

5 files changed

+160
-108
lines changed

Marlin/Configuration.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,9 @@
148148
* Options: A4988, A5984, DRV8825, LV8729, TB6560, TB6600, TMC2100,
149149
* TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
150150
* TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
151-
* TMC2240, TMC2240_STANDALONE, TMC2660, TMC2660_STANDALONE,
151+
* TMC2240, TMC2660, TMC2660_STANDALONE,
152152
* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
153-
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC2240', 'TMC2240_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
153+
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC2240', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
154154
*/
155155
#define X_DRIVER_TYPE A4988
156156
#define Y_DRIVER_TYPE A4988

Marlin/src/core/drivers.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#define _TMC2209 0x2209A
4343
#define _TMC2209_STANDALONE 0x2209B
4444
#define _TMC2240 0x2240A
45-
#define _TMC2240_STANDALONE 0x2240B
4645
#define _TMC2660 0x2660A
4746
#define _TMC2660_STANDALONE 0x2660B
4847
#define _TMC5130 0x5130A
@@ -108,7 +107,7 @@
108107
#if ( HAS_DRIVER(TMC2100) \
109108
|| HAS_DRIVER(TMC2130_STANDALONE) || HAS_DRIVER(TMC2160_STANDALONE) \
110109
|| HAS_DRIVER(TMC2208_STANDALONE) || HAS_DRIVER(TMC2209_STANDALONE) \
111-
|| HAS_DRIVER(TMC2240_STANDALONE) || HAS_DRIVER(TMC2660_STANDALONE) \
110+
|| HAS_DRIVER(TMC2660_STANDALONE) \
112111
|| HAS_DRIVER(TMC5130_STANDALONE) || HAS_DRIVER(TMC5160_STANDALONE) )
113112
#define HAS_TRINAMIC_STANDALONE 1
114113
#endif

Marlin/src/feature/tmc_util.cpp

Lines changed: 80 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@
8383

8484
#if HAS_TMCX1X0
8585

86-
#if ENABLED(TMC_DEBUG)
87-
static uint32_t get_pwm_scale(TMC2130Stepper &st) { return st.PWM_SCALE(); }
88-
#endif
86+
static uint32_t get_pwm_scale(TMC2130Stepper &st) { return st.PWM_SCALE(); }
8987

9088
static TMC_driver_data get_driver_data(TMC2130Stepper &st) {
9189
constexpr uint8_t OT_bp = 25, OTPW_bp = 26;
@@ -144,9 +142,7 @@
144142

145143
#if HAS_DRIVER(TMC2240)
146144

147-
#if ENABLED(TMC_DEBUG)
148-
static uint32_t get_pwm_scale(TMC2240Stepper &st) { return st.PWM_SCALE(); }
149-
#endif
145+
static uint32_t get_pwm_scale(TMC2240Stepper &st) { return st.PWM_SCALE(); }
150146

151147
static TMC_driver_data get_driver_data(TMC2240Stepper &st) {
152148
constexpr uint8_t OT_bp = 25, OTPW_bp = 26;
@@ -205,9 +201,7 @@
205201

206202
#if HAS_TMC220x
207203

208-
#if ENABLED(TMC_DEBUG)
209-
static uint32_t get_pwm_scale(TMC2208Stepper &st) { return st.pwm_scale_sum(); }
210-
#endif
204+
static uint32_t get_pwm_scale(TMC2208Stepper &st) { return st.pwm_scale_sum(); }
211205

212206
static TMC_driver_data get_driver_data(TMC2208Stepper &st) {
213207
constexpr uint8_t OTPW_bp = 0, OT_bp = 1;
@@ -242,9 +236,7 @@
242236

243237
#if HAS_DRIVER(TMC2660)
244238

245-
#if ENABLED(TMC_DEBUG)
246-
static uint32_t get_pwm_scale(TMC2660Stepper) { return 0; }
247-
#endif
239+
static uint32_t get_pwm_scale(TMC2660Stepper) { return 0; }
248240

249241
static TMC_driver_data get_driver_data(TMC2660Stepper &st) {
250242
constexpr uint8_t OT_bp = 1, OTPW_bp = 2;
@@ -383,9 +375,9 @@
383375
else if (st.otpw_count > 0) st.otpw_count = 0;
384376
}
385377

386-
#if ENABLED(TMC_DEBUG)
387-
if (need_debug_reporting) report_polled_driver_data(st, data);
388-
#endif
378+
if (need_debug_reporting) {
379+
TERN_(TMC_DEBUG, report_polled_driver_data(st, data));
380+
}
389381

390382
return should_step_down;
391383
}
@@ -518,7 +510,7 @@
518510
TMC_TSTEP,
519511
TMC_TPWMTHRS,
520512
TMC_TPWMTHRS_MMS,
521-
TMC_OTPW,
513+
TMC_DEBUG_OTPW,
522514
TMC_OTPW_TRIGGERED,
523515
TMC_TOFF,
524516
TMC_TBL,
@@ -570,7 +562,9 @@
570562
TMC_GET_DRVCTRL,
571563
TMC_GET_DRVSTATUS,
572564
TMC_GET_SGCSCONF,
573-
TMC_GET_SMARTEN
565+
TMC_GET_SMARTEN,
566+
TMC_GET_SG4_THRS,
567+
TMC_GET_SG4_RESULT
574568
};
575569

576570
template<class TMC>
@@ -598,6 +592,7 @@
598592
static void print_true_or_false(const bool tf) { SERIAL_ECHO(TRUE_FALSE(tf)); }
599593

600594
#if HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC5130)
595+
// Additional tmc_status fields for 2130/5130 and related drivers
601596
static void _tmc_status(TMC2130Stepper &st, const TMC_debug_enum i) {
602597
switch (i) {
603598
case TMC_PWM_SCALE: SERIAL_ECHO(st.PWM_SCALE()); break;
@@ -609,6 +604,7 @@
609604
}
610605
#endif
611606
#if HAS_TMCX1X0
607+
// Additional tmc_parse_drv_status fields for 2130 and related drivers
612608
static void _tmc_parse_drv_status(TMC2130Stepper &st, const TMC_drv_status_enum i) {
613609
switch (i) {
614610
case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('*'); break;
@@ -621,18 +617,17 @@
621617
#endif
622618

623619
#if HAS_DRIVER(TMC2160) || HAS_DRIVER(TMC5160)
620+
// Additional tmc_status fields for 2160/5160 and related drivers
624621
static void _tmc_status(TMC2160Stepper &st, const TMC_debug_enum i) {
625622
switch (i) {
626623
case TMC_PWM_SCALE: SERIAL_ECHO(st.PWM_SCALE()); break;
627624
case TMC_SGT: SERIAL_ECHO(st.sgt()); break;
628625
case TMC_STEALTHCHOP: print_true_or_false(st.en_pwm_mode()); break;
629-
case TMC_GLOBAL_SCALER:
630-
{
631-
const uint16_t value = st.GLOBAL_SCALER();
632-
SERIAL_ECHO(value ?: 256);
633-
SERIAL_ECHOPGM("/256");
634-
}
635-
break;
626+
case TMC_GLOBAL_SCALER: {
627+
const uint16_t value = st.GLOBAL_SCALER();
628+
SERIAL_ECHO(value ?: 256);
629+
SERIAL_ECHOPGM("/256");
630+
} break;
636631
case TMC_INTERPOLATE: print_true_or_false(st.intpol()); break;
637632
default: break;
638633
}
@@ -641,32 +636,37 @@
641636

642637
#if HAS_TMC220x
643638

639+
// Additional tmc_status fields for 2208/2224/2209 drivers
644640
static void _tmc_status(TMC2208Stepper &st, const TMC_debug_enum i) {
645641
switch (i) {
642+
// PWM_SCALE
646643
case TMC_PWM_SCALE_SUM: SERIAL_ECHO(st.pwm_scale_sum()); break;
647644
case TMC_PWM_SCALE_AUTO: SERIAL_ECHO(st.pwm_scale_auto()); break;
645+
// PWM_AUTO
648646
case TMC_PWM_OFS_AUTO: SERIAL_ECHO(st.pwm_ofs_auto()); break;
649647
case TMC_PWM_GRAD_AUTO: SERIAL_ECHO(st.pwm_grad_auto()); break;
648+
// CHOPCONF
650649
case TMC_STEALTHCHOP: print_true_or_false(st.stealth()); break;
651650
case TMC_INTERPOLATE: print_true_or_false(st.intpol()); break;
652651
default: break;
653652
}
654653
}
655654

656655
#if HAS_DRIVER(TMC2209)
656+
// Additional tmc_status fields for 2209 drivers
657657
template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
658658
static void _tmc_status(TMCMarlin<TMC2209Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const TMC_debug_enum i) {
659659
switch (i) {
660660
case TMC_SGT: SERIAL_ECHO(st.SGTHRS()); break;
661661
case TMC_UART_ADDR: SERIAL_ECHO(st.get_address()); break;
662662
default:
663-
TMC2208Stepper *parent = &st;
664-
_tmc_status(*parent, i);
663+
_tmc_status(static_cast<TMC2208Stepper &>(st), i);
665664
break;
666665
}
667666
}
668667
#endif
669668

669+
// Additional tmc_parse_drv_status fields for 2208/2224/2209 drivers
670670
static void _tmc_parse_drv_status(TMC2208Stepper &st, const TMC_drv_status_enum i) {
671671
switch (i) {
672672
case TMC_T157: if (st.t157()) SERIAL_CHAR('*'); break;
@@ -681,30 +681,59 @@
681681
}
682682

683683
#if HAS_DRIVER(TMC2209)
684+
// Additional tmc_parse_drv_status fields for 2209 drivers
684685
static void _tmc_parse_drv_status(TMC2209Stepper &st, const TMC_drv_status_enum i) {
685686
switch (i) {
686687
case TMC_SG_RESULT: SERIAL_ECHO(st.SG_RESULT()); break;
687-
default: _tmc_parse_drv_status(static_cast<TMC2208Stepper &>(st), i); break;
688+
default:
689+
_tmc_parse_drv_status(static_cast<TMC2208Stepper &>(st), i);
690+
break;
688691
}
689692
}
690693
#endif
691694

692695
#endif // HAS_TMC220x
693696

694697
#if HAS_DRIVER(TMC2240)
695-
static void _tmc_parse_drv_status(TMC2240Stepper, const TMC_drv_status_enum) { }
698+
699+
// Additional tmc_parse_drv_status fields for 2240 drivers
700+
static void _tmc_parse_drv_status(TMC2240Stepper &st, const TMC_drv_status_enum i) {
701+
switch (i) {
702+
case TMC_S2VSA: if (st.s2vsa()) SERIAL_CHAR('*'); break;
703+
case TMC_S2VSB: if (st.s2vsb()) SERIAL_CHAR('*'); break;
704+
case TMC_STEALTHCHOP: print_true_or_false(st.stealth()); break;
705+
case TMC_FSACTIVE: if (st.fsactive()) SERIAL_CHAR('*'); break;
706+
case TMC_DRV_CS_ACTUAL: if (st.CS_ACTUAL()) SERIAL_CHAR('*'); break;
707+
case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('*'); break;
708+
//case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
709+
case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
710+
//case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
711+
//case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
712+
//case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
713+
//case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
714+
case TMC_SG_RESULT: SERIAL_ECHO(st.SG_RESULT()); break;
715+
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
716+
default: break; // other...
717+
}
718+
}
719+
720+
// Additional tmc_status fields for 2240 drivers
696721
static void _tmc_status(TMC2240Stepper &st, const TMC_debug_enum i) {
697722
switch (i) {
723+
// PWM_SCALE
698724
case TMC_PWM_SCALE_SUM: SERIAL_ECHO(st.pwm_scale_sum()); break;
699725
case TMC_PWM_SCALE_AUTO: SERIAL_ECHO(st.pwm_scale_auto()); break;
726+
// PWM_AUTO
700727
case TMC_PWM_OFS_AUTO: SERIAL_ECHO(st.pwm_ofs_auto()); break;
701728
case TMC_PWM_GRAD_AUTO: SERIAL_ECHO(st.pwm_grad_auto()); break;
729+
// CHOPCONF
702730
case TMC_STEALTHCHOP: print_true_or_false(st.stealth()); break;
703731
case TMC_INTERPOLATE: print_true_or_false(st.intpol()); break;
704732
default: break;
705733
}
706734
}
707-
#endif
735+
736+
#endif // TMC2240
708737

709738
#if HAS_DRIVER(TMC2660)
710739
static void _tmc_parse_drv_status(TMC2660Stepper, const TMC_drv_status_enum) { }
@@ -740,14 +769,8 @@
740769
case TMC_CURRENT: SERIAL_ECHO(st.getMilliamps()); break;
741770
case TMC_RMS_CURRENT: SERIAL_ECHO(st.rms_current()); break;
742771
case TMC_MAX_CURRENT: SERIAL_ECHO(p_float_t(st.rms_current() * 1.41, 0)); break;
743-
case TMC_IRUN:
744-
SERIAL_ECHO(st.irun());
745-
SERIAL_ECHOPGM("/31");
746-
break;
747-
case TMC_IHOLD:
748-
SERIAL_ECHO(st.ihold());
749-
SERIAL_ECHOPGM("/31");
750-
break;
772+
case TMC_IRUN: SERIAL_ECHO(st.irun()); SERIAL_ECHOPGM("/31"); break;
773+
case TMC_IHOLD: SERIAL_ECHO(st.ihold()); SERIAL_ECHOPGM("/31"); break;
751774
case TMC_CS_ACTUAL: print_cs_actual(st); break;
752775
case TMC_VSENSE: print_vsense(st); break;
753776
case TMC_MICROSTEPS: SERIAL_ECHO(st.microsteps()); break;
@@ -759,7 +782,7 @@
759782
if (tpwmthrs_val) SERIAL_ECHO(tpwmthrs_val); else SERIAL_CHAR('-');
760783
} break;
761784
#endif
762-
case TMC_OTPW: print_true_or_false(st.otpw()); break;
785+
case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
763786
#if ENABLED(MONITOR_DRIVER_STATUS)
764787
case TMC_OTPW_TRIGGERED: print_true_or_false(st.getOTPW()); break;
765788
#endif
@@ -782,13 +805,10 @@
782805
case TMC_CURRENT: SERIAL_ECHO(st.getMilliamps()); break;
783806
case TMC_RMS_CURRENT: SERIAL_ECHO(st.rms_current()); break;
784807
case TMC_MAX_CURRENT: SERIAL_ECHO(p_float_t(st.rms_current() * 1.41, 0)); break;
785-
case TMC_IRUN:
786-
SERIAL_ECHO(st.cs());
787-
SERIAL_ECHOPGM("/31");
788-
break;
808+
case TMC_IRUN: SERIAL_ECHO(st.cs()); SERIAL_ECHOPGM("/31"); break;
789809
case TMC_VSENSE: SERIAL_ECHO(st.vsense() ? F("1=.165") : F("0=.310")); break;
790810
case TMC_MICROSTEPS: SERIAL_ECHO(st.microsteps()); break;
791-
//case TMC_OTPW: print_true_or_false(st.otpw()); break;
811+
//case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
792812
//case TMC_OTPW_TRIGGERED: print_true_or_false(st.getOTPW()); break;
793813
case TMC_SGT: SERIAL_ECHO(st.sgt()); break;
794814
case TMC_TOFF: SERIAL_ECHO(st.toff()); break;
@@ -798,30 +818,26 @@
798818
default: _tmc_status(st, i); break;
799819
}
800820
}
801-
#endif
821+
#endif // TMC2660
802822

803823
template <typename TMC>
804824
static void tmc_parse_drv_status(TMC &st, const TMC_drv_status_enum i) {
805825
SERIAL_CHAR('\t');
806826
switch (i) {
807-
case TMC_DRV_CODES: st.printLabel(); break;
808-
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
809-
case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
810-
case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
811-
case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
812-
case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
813-
case TMC_DRV_OTPW: if (st.otpw()) SERIAL_CHAR('*'); break;
814-
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
827+
case TMC_DRV_CODES: st.printLabel(); break;
828+
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
829+
case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
830+
case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
831+
case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
832+
case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
833+
case TMC_DRV_OTPW: if (st.otpw()) SERIAL_CHAR('*'); break;
834+
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
815835
case TMC_DRV_STATUS_HEX: {
816836
const uint32_t drv_status = st.DRV_STATUS();
817-
SERIAL_CHAR('\t');
818-
st.printLabel();
819-
SERIAL_CHAR('\t');
820-
print_hex_long(drv_status, ':', true);
837+
SERIAL_CHAR('\t'); st.printLabel(); SERIAL_CHAR('\t'); print_hex_long(drv_status, ':', true);
821838
if (drv_status == 0xFFFFFFFF || drv_status == 0) SERIAL_ECHOPGM("\t Bad response!");
822839
SERIAL_EOL();
823-
break;
824-
}
840+
} break;
825841
default: _tmc_parse_drv_status(st, i); break;
826842
}
827843
}
@@ -936,7 +952,7 @@
936952
TMC_REPORT("tstep\t", TMC_TSTEP);
937953
TMC_REPORT("PWM thresh.", TMC_TPWMTHRS);
938954
TMC_REPORT("[mm/s]\t", TMC_TPWMTHRS_MMS);
939-
TMC_REPORT("OT prewarn", TMC_OTPW);
955+
TMC_REPORT("OT prewarn", TMC_DEBUG_OTPW);
940956
#if ENABLED(MONITOR_DRIVER_STATUS)
941957
TMC_REPORT("triggered\n OTP\t", TMC_OTPW_TRIGGERED);
942958
#endif
@@ -954,6 +970,7 @@
954970
TMC_REPORT(" -start\t", TMC_HSTRT);
955971
TMC_REPORT("Stallguard thrs", TMC_SGT);
956972
TMC_REPORT("uStep count", TMC_MSCNT);
973+
957974
DRV_REPORT("DRVSTATUS", TMC_DRV_CODES);
958975
#if HAS_TMCX1X0_OR_2240 || HAS_TMC220x
959976
DRV_REPORT("sg_result", TMC_SG_RESULT);
@@ -974,10 +991,12 @@
974991
DRV_REPORT("150C\t", TMC_T150);
975992
DRV_REPORT("143C\t", TMC_T143);
976993
DRV_REPORT("120C\t", TMC_T120);
994+
#endif
995+
#if HAS_TMC220x || HAS_DRIVER(TMC2240)
977996
DRV_REPORT("s2vsa\t", TMC_S2VSA);
978997
DRV_REPORT("s2vsb\t", TMC_S2VSB);
979998
#endif
980-
DRV_REPORT("Driver registers:\n",TMC_DRV_STATUS_HEX);
999+
DRV_REPORT("Driver registers:\n", TMC_DRV_STATUS_HEX);
9811000
SERIAL_EOL();
9821001
}
9831002

@@ -1018,6 +1037,7 @@
10181037
}
10191038
SERIAL_CHAR('\t');
10201039
}
1040+
10211041
#endif // HAS_TRINAMIC_CONFIG
10221042

10231043
#if HAS_DRIVER(TMC2660)

0 commit comments

Comments
 (0)