mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2025-06-26 09:25:18 -06:00
🧑💻 Some TMC2240 updates (#27901)
This commit is contained in:
parent
7ac308fe4d
commit
1e03f696f5
7 changed files with 163 additions and 123 deletions
|
@ -148,9 +148,9 @@
|
|||
* Options: 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,
|
||||
* TMC2240, TMC2660, TMC2660_STANDALONE,
|
||||
* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
|
||||
* :['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']
|
||||
* :['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']
|
||||
*/
|
||||
#define X_DRIVER_TYPE A4988
|
||||
#define Y_DRIVER_TYPE A4988
|
||||
|
|
|
@ -1394,7 +1394,7 @@
|
|||
* Multi-stepping sends steps in bursts to reduce MCU usage for high step-rates.
|
||||
* This allows higher feedrates than the MCU could otherwise support.
|
||||
*/
|
||||
#define MULTISTEPPING_LIMIT 16 //: [1, 2, 4, 8, 16, 32, 64, 128]
|
||||
#define MULTISTEPPING_LIMIT 16 // :[1, 2, 4, 8, 16, 32, 64, 128]
|
||||
|
||||
/**
|
||||
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
|
||||
|
@ -3031,12 +3031,11 @@
|
|||
#define INTERPOLATE true
|
||||
|
||||
#if HAS_DRIVER(TMC2240)
|
||||
#define TMC2240_CURRENT_RANGE 1 // RMS: { 0:'690mA', 1:'1410mA', 2:'2120mA', 3:'2110mA' }
|
||||
// PEAK:{ 0:'1A', 1:'2A', 2:'3A', 3:'3A' }
|
||||
// Determines max current. Lower is more internal current resolution. Higher runs cooler.
|
||||
#define TMC2240_Rref 12000 // ('rref', 12000, minval=12000, maxval=60000)
|
||||
#define TMC2240_SLOPE_CONTROL 0 // :{ 0:'100V/us', 1:'200V/us', 2:'400V/us', 3:'800V/us' }
|
||||
// Lower is more silent. Higher runs cooler.
|
||||
#define TMC2240_RREF 12000 // (Ω) 12000 .. 60000. (FLY TMC2240 = 12300)
|
||||
// Max Current. Lower for more internal resolution. Raise to run cooler.
|
||||
#define TMC2240_CURRENT_RANGE 1 // :{ 0:'RMS=690mA PEAK=1A', 1:'RMS=1410mA PEAK=2A', 2:'RMS=2120mA PEAK=3A', 3:'RMS=2110mA PEAK=3A' }
|
||||
// Slope Control: Lower is more silent. Higher runs cooler.
|
||||
#define TMC2240_SLOPE_CONTROL 0 // :{ 0:'100V/µs', 1:'200V/µs', 2:'400V/µs', 3:'800V/µs' }
|
||||
#endif
|
||||
|
||||
#if AXIS_IS_TMC_CONFIG(X)
|
||||
|
@ -3467,7 +3466,7 @@
|
|||
* X/Y/Z_STALL_SENSITIVITY is the default stall threshold.
|
||||
* Use M914 X Y Z to set the stall threshold at runtime:
|
||||
*
|
||||
* Sensitivity TMC2209/2240 Others
|
||||
* Sensitivity TMC2209 Others
|
||||
* HIGHEST 255 -64 (Too sensitive => False positive)
|
||||
* LOWEST 0 63 (Too insensitive => No trigger)
|
||||
*
|
||||
|
@ -3486,7 +3485,7 @@
|
|||
//#define SENSORLESS_HOMING // StallGuard capable drivers only
|
||||
|
||||
#if ANY(SENSORLESS_HOMING, SENSORLESS_PROBING)
|
||||
// TMC2209/2240: 0...255. TMC2130: -64...63
|
||||
// TMC2209: 0...255. TMC2130: -64...63
|
||||
#define X_STALL_SENSITIVITY 8
|
||||
#define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY
|
||||
#define Y_STALL_SENSITIVITY 8
|
||||
|
@ -3503,6 +3502,7 @@
|
|||
//#define W_STALL_SENSITIVITY 8
|
||||
//#define SPI_ENDSTOPS // TMC2130, TMC2240, and TMC5160
|
||||
//#define IMPROVE_HOMING_RELIABILITY
|
||||
//#define PREFER_STALLGUARD4 // TMC2240
|
||||
#endif
|
||||
|
||||
// @section tmc/config
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#endif
|
||||
#ifndef F
|
||||
class __FlashStringHelper;
|
||||
#define F(str) (reinterpret_cast<const __FlashStringHelper *>(PSTR(str)))
|
||||
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
|
||||
#endif
|
||||
#ifndef _SFR_BYTE
|
||||
#define _SFR_BYTE(n) (n)
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
#define _TMC2209 0x2209A
|
||||
#define _TMC2209_STANDALONE 0x2209B
|
||||
#define _TMC2240 0x2240A
|
||||
#define _TMC2240_STANDALONE 0x2240B
|
||||
#define _TMC2660 0x2660A
|
||||
#define _TMC2660_STANDALONE 0x2660B
|
||||
#define _TMC5130 0x5130A
|
||||
|
@ -108,7 +107,7 @@
|
|||
#if ( HAS_DRIVER(TMC2100) \
|
||||
|| HAS_DRIVER(TMC2130_STANDALONE) || HAS_DRIVER(TMC2160_STANDALONE) \
|
||||
|| HAS_DRIVER(TMC2208_STANDALONE) || HAS_DRIVER(TMC2209_STANDALONE) \
|
||||
|| HAS_DRIVER(TMC2240_STANDALONE) || HAS_DRIVER(TMC2660_STANDALONE) \
|
||||
|| HAS_DRIVER(TMC2660_STANDALONE) \
|
||||
|| HAS_DRIVER(TMC5130_STANDALONE) || HAS_DRIVER(TMC5160_STANDALONE) )
|
||||
#define HAS_TRINAMIC_STANDALONE 1
|
||||
#endif
|
||||
|
|
|
@ -83,9 +83,7 @@
|
|||
|
||||
#if HAS_TMCX1X0
|
||||
|
||||
#if ENABLED(TMC_DEBUG)
|
||||
static uint32_t get_pwm_scale(TMC2130Stepper &st) { return st.PWM_SCALE(); }
|
||||
#endif
|
||||
static uint32_t get_pwm_scale(TMC2130Stepper &st) { return st.PWM_SCALE(); }
|
||||
|
||||
static TMC_driver_data get_driver_data(TMC2130Stepper &st) {
|
||||
constexpr uint8_t OT_bp = 25, OTPW_bp = 26;
|
||||
|
@ -144,9 +142,7 @@
|
|||
|
||||
#if HAS_DRIVER(TMC2240)
|
||||
|
||||
#if ENABLED(TMC_DEBUG)
|
||||
static uint32_t get_pwm_scale(TMC2240Stepper &st) { return st.PWM_SCALE(); }
|
||||
#endif
|
||||
static uint32_t get_pwm_scale(TMC2240Stepper &st) { return st.PWM_SCALE(); }
|
||||
|
||||
static TMC_driver_data get_driver_data(TMC2240Stepper &st) {
|
||||
constexpr uint8_t OT_bp = 25, OTPW_bp = 26;
|
||||
|
@ -205,9 +201,7 @@
|
|||
|
||||
#if HAS_TMC220x
|
||||
|
||||
#if ENABLED(TMC_DEBUG)
|
||||
static uint32_t get_pwm_scale(TMC2208Stepper &st) { return st.pwm_scale_sum(); }
|
||||
#endif
|
||||
static uint32_t get_pwm_scale(TMC2208Stepper &st) { return st.pwm_scale_sum(); }
|
||||
|
||||
static TMC_driver_data get_driver_data(TMC2208Stepper &st) {
|
||||
constexpr uint8_t OTPW_bp = 0, OT_bp = 1;
|
||||
|
@ -242,9 +236,7 @@
|
|||
|
||||
#if HAS_DRIVER(TMC2660)
|
||||
|
||||
#if ENABLED(TMC_DEBUG)
|
||||
static uint32_t get_pwm_scale(TMC2660Stepper) { return 0; }
|
||||
#endif
|
||||
static uint32_t get_pwm_scale(TMC2660Stepper) { return 0; }
|
||||
|
||||
static TMC_driver_data get_driver_data(TMC2660Stepper &st) {
|
||||
constexpr uint8_t OT_bp = 1, OTPW_bp = 2;
|
||||
|
@ -383,9 +375,9 @@
|
|||
else if (st.otpw_count > 0) st.otpw_count = 0;
|
||||
}
|
||||
|
||||
#if ENABLED(TMC_DEBUG)
|
||||
if (need_debug_reporting) report_polled_driver_data(st, data);
|
||||
#endif
|
||||
if (need_debug_reporting) {
|
||||
TERN_(TMC_DEBUG, report_polled_driver_data(st, data));
|
||||
}
|
||||
|
||||
return should_step_down;
|
||||
}
|
||||
|
@ -518,7 +510,7 @@
|
|||
TMC_TSTEP,
|
||||
TMC_TPWMTHRS,
|
||||
TMC_TPWMTHRS_MMS,
|
||||
TMC_OTPW,
|
||||
TMC_DEBUG_OTPW,
|
||||
TMC_OTPW_TRIGGERED,
|
||||
TMC_TOFF,
|
||||
TMC_TBL,
|
||||
|
@ -575,7 +567,9 @@
|
|||
TMC_GET_DRVCTRL,
|
||||
TMC_GET_DRVSTATUS,
|
||||
TMC_GET_SGCSCONF,
|
||||
TMC_GET_SMARTEN
|
||||
TMC_GET_SMARTEN,
|
||||
TMC_GET_SG4_THRS,
|
||||
TMC_GET_SG4_RESULT
|
||||
};
|
||||
|
||||
template<class TMC>
|
||||
|
@ -603,6 +597,7 @@
|
|||
static void print_true_or_false(const bool tf) { SERIAL_ECHO(TRUE_FALSE(tf)); }
|
||||
|
||||
#if HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC5130)
|
||||
// Additional tmc_status fields for 2130/5130 and related drivers
|
||||
static void _tmc_status(TMC2130Stepper &st, const TMC_debug_enum i) {
|
||||
switch (i) {
|
||||
case TMC_PWM_SCALE: SERIAL_ECHO(st.PWM_SCALE()); break;
|
||||
|
@ -614,6 +609,7 @@
|
|||
}
|
||||
#endif
|
||||
#if HAS_TMCX1X0
|
||||
// Additional tmc_parse_drv_status fields for 2130 and related drivers
|
||||
static void _tmc_parse_drv_status(TMC2130Stepper &st, const TMC_drv_status_enum i) {
|
||||
switch (i) {
|
||||
case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('*'); break;
|
||||
|
@ -626,18 +622,17 @@
|
|||
#endif
|
||||
|
||||
#if HAS_DRIVER(TMC2160) || HAS_DRIVER(TMC5160)
|
||||
// Additional tmc_status fields for 2160/5160 and related drivers
|
||||
static void _tmc_status(TMC2160Stepper &st, const TMC_debug_enum i) {
|
||||
switch (i) {
|
||||
case TMC_PWM_SCALE: SERIAL_ECHO(st.PWM_SCALE()); break;
|
||||
case TMC_SGT: SERIAL_ECHO(st.sgt()); break;
|
||||
case TMC_STEALTHCHOP: print_true_or_false(st.en_pwm_mode()); break;
|
||||
case TMC_GLOBAL_SCALER:
|
||||
{
|
||||
const uint16_t value = st.GLOBAL_SCALER();
|
||||
SERIAL_ECHO(value ?: 256);
|
||||
SERIAL_ECHOPGM("/256");
|
||||
}
|
||||
break;
|
||||
case TMC_GLOBAL_SCALER: {
|
||||
const uint16_t value = st.GLOBAL_SCALER();
|
||||
SERIAL_ECHO(value ?: 256);
|
||||
SERIAL_ECHOPGM("/256");
|
||||
} break;
|
||||
case TMC_INTERPOLATE: print_true_or_false(st.intpol()); break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -646,12 +641,16 @@
|
|||
|
||||
#if HAS_TMC220x
|
||||
|
||||
// Additional tmc_status fields for 2208/2224/2209 drivers
|
||||
static void _tmc_status(TMC2208Stepper &st, const TMC_debug_enum i) {
|
||||
switch (i) {
|
||||
// PWM_SCALE
|
||||
case TMC_PWM_SCALE_SUM: SERIAL_ECHO(st.pwm_scale_sum()); break;
|
||||
case TMC_PWM_SCALE_AUTO: SERIAL_ECHO(st.pwm_scale_auto()); break;
|
||||
// PWM_AUTO
|
||||
case TMC_PWM_OFS_AUTO: SERIAL_ECHO(st.pwm_ofs_auto()); break;
|
||||
case TMC_PWM_GRAD_AUTO: SERIAL_ECHO(st.pwm_grad_auto()); break;
|
||||
// CHOPCONF
|
||||
case TMC_STEALTHCHOP: print_true_or_false(st.stealth()); break;
|
||||
case TMC_INTERPOLATE: print_true_or_false(st.intpol()); break;
|
||||
default: break;
|
||||
|
@ -659,19 +658,20 @@
|
|||
}
|
||||
|
||||
#if HAS_DRIVER(TMC2209)
|
||||
// Additional tmc_status fields for 2209 drivers
|
||||
template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
|
||||
static void _tmc_status(TMCMarlin<TMC2209Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> &st, const TMC_debug_enum i) {
|
||||
switch (i) {
|
||||
case TMC_SGT: SERIAL_ECHO(st.SGTHRS()); break;
|
||||
case TMC_UART_ADDR: SERIAL_ECHO(st.get_address()); break;
|
||||
default:
|
||||
TMC2208Stepper *parent = &st;
|
||||
_tmc_status(*parent, i);
|
||||
_tmc_status(static_cast<TMC2208Stepper &>(st), i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Additional tmc_parse_drv_status fields for 2208/2224/2209 drivers
|
||||
static void _tmc_parse_drv_status(TMC2208Stepper &st, const TMC_drv_status_enum i) {
|
||||
switch (i) {
|
||||
case TMC_T157: if (st.t157()) SERIAL_CHAR('*'); break;
|
||||
|
@ -686,10 +686,13 @@
|
|||
}
|
||||
|
||||
#if HAS_DRIVER(TMC2209)
|
||||
// Additional tmc_parse_drv_status fields for 2209 drivers
|
||||
static void _tmc_parse_drv_status(TMC2209Stepper &st, const TMC_drv_status_enum i) {
|
||||
switch (i) {
|
||||
case TMC_SG_RESULT: SERIAL_ECHO(st.SG_RESULT()); break;
|
||||
default: _tmc_parse_drv_status(static_cast<TMC2208Stepper &>(st), i); break;
|
||||
default:
|
||||
_tmc_parse_drv_status(static_cast<TMC2208Stepper &>(st), i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -697,13 +700,38 @@
|
|||
#endif // HAS_TMC220x
|
||||
|
||||
#if HAS_DRIVER(TMC2240)
|
||||
static void _tmc_parse_drv_status(TMC2240Stepper, const TMC_drv_status_enum) { }
|
||||
|
||||
// Additional tmc_parse_drv_status fields for 2240 drivers
|
||||
static void _tmc_parse_drv_status(TMC2240Stepper &st, const TMC_drv_status_enum i) {
|
||||
switch (i) {
|
||||
case TMC_S2VSA: if (st.s2vsa()) SERIAL_CHAR('*'); break;
|
||||
case TMC_S2VSB: if (st.s2vsb()) SERIAL_CHAR('*'); break;
|
||||
case TMC_STEALTHCHOP: print_true_or_false(st.stealth()); break;
|
||||
case TMC_FSACTIVE: if (st.fsactive()) SERIAL_CHAR('*'); break;
|
||||
case TMC_DRV_CS_ACTUAL: if (st.CS_ACTUAL()) SERIAL_CHAR('*'); break;
|
||||
case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('*'); break;
|
||||
//case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
||||
case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
|
||||
//case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
|
||||
//case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
|
||||
//case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
|
||||
//case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
|
||||
case TMC_SG_RESULT: SERIAL_ECHO(st.SG_RESULT()); break;
|
||||
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
|
||||
default: break; // other...
|
||||
}
|
||||
}
|
||||
|
||||
// Additional tmc_status fields for 2240 drivers
|
||||
static void _tmc_status(TMC2240Stepper &st, const TMC_debug_enum i) {
|
||||
switch (i) {
|
||||
// PWM_SCALE
|
||||
case TMC_PWM_SCALE_SUM: SERIAL_ECHO(st.pwm_scale_sum()); break;
|
||||
case TMC_PWM_SCALE_AUTO: SERIAL_ECHO(st.pwm_scale_auto()); break;
|
||||
// PWM_AUTO
|
||||
case TMC_PWM_OFS_AUTO: SERIAL_ECHO(st.pwm_ofs_auto()); break;
|
||||
case TMC_PWM_GRAD_AUTO: SERIAL_ECHO(st.pwm_grad_auto()); break;
|
||||
// CHOPCONF
|
||||
case TMC_STEALTHCHOP: print_true_or_false(st.stealth()); break;
|
||||
case TMC_INTERPOLATE: print_true_or_false(st.intpol()); break;
|
||||
case TMC_VAIN: SERIAL_ECHO(st.get_ain_voltage()); break;
|
||||
|
@ -714,7 +742,8 @@
|
|||
default: break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // TMC2240
|
||||
|
||||
#if HAS_DRIVER(TMC2660)
|
||||
static void _tmc_parse_drv_status(TMC2660Stepper, const TMC_drv_status_enum) { }
|
||||
|
@ -750,14 +779,8 @@
|
|||
case TMC_CURRENT: SERIAL_ECHO(st.getMilliamps()); break;
|
||||
case TMC_RMS_CURRENT: SERIAL_ECHO(st.rms_current()); break;
|
||||
case TMC_MAX_CURRENT: SERIAL_ECHO(p_float_t(st.rms_current() * 1.41, 0)); break;
|
||||
case TMC_IRUN:
|
||||
SERIAL_ECHO(st.irun());
|
||||
SERIAL_ECHOPGM("/31");
|
||||
break;
|
||||
case TMC_IHOLD:
|
||||
SERIAL_ECHO(st.ihold());
|
||||
SERIAL_ECHOPGM("/31");
|
||||
break;
|
||||
case TMC_IRUN: SERIAL_ECHO(st.irun()); SERIAL_ECHOPGM("/31"); break;
|
||||
case TMC_IHOLD: SERIAL_ECHO(st.ihold()); SERIAL_ECHOPGM("/31"); break;
|
||||
case TMC_CS_ACTUAL: print_cs_actual(st); break;
|
||||
case TMC_VSENSE: print_vsense(st); break;
|
||||
case TMC_MICROSTEPS: SERIAL_ECHO(st.microsteps()); break;
|
||||
|
@ -769,7 +792,7 @@
|
|||
if (tpwmthrs_val) SERIAL_ECHO(tpwmthrs_val); else SERIAL_CHAR('-');
|
||||
} break;
|
||||
#endif
|
||||
case TMC_OTPW: print_true_or_false(st.otpw()); break;
|
||||
case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
|
||||
#if ENABLED(MONITOR_DRIVER_STATUS)
|
||||
case TMC_OTPW_TRIGGERED: print_true_or_false(st.getOTPW()); break;
|
||||
#endif
|
||||
|
@ -792,13 +815,10 @@
|
|||
case TMC_CURRENT: SERIAL_ECHO(st.getMilliamps()); break;
|
||||
case TMC_RMS_CURRENT: SERIAL_ECHO(st.rms_current()); break;
|
||||
case TMC_MAX_CURRENT: SERIAL_ECHO(p_float_t(st.rms_current() * 1.41, 0)); break;
|
||||
case TMC_IRUN:
|
||||
SERIAL_ECHO(st.cs());
|
||||
SERIAL_ECHOPGM("/31");
|
||||
break;
|
||||
case TMC_IRUN: SERIAL_ECHO(st.cs()); SERIAL_ECHOPGM("/31"); break;
|
||||
case TMC_VSENSE: SERIAL_ECHO(st.vsense() ? F("1=.165") : F("0=.310")); break;
|
||||
case TMC_MICROSTEPS: SERIAL_ECHO(st.microsteps()); break;
|
||||
//case TMC_OTPW: print_true_or_false(st.otpw()); break;
|
||||
//case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
|
||||
//case TMC_OTPW_TRIGGERED: print_true_or_false(st.getOTPW()); break;
|
||||
case TMC_SGT: SERIAL_ECHO(st.sgt()); break;
|
||||
case TMC_TOFF: SERIAL_ECHO(st.toff()); break;
|
||||
|
@ -808,30 +828,26 @@
|
|||
default: _tmc_status(st, i); break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif // TMC2660
|
||||
|
||||
template <typename TMC>
|
||||
static void tmc_parse_drv_status(TMC &st, const TMC_drv_status_enum i) {
|
||||
SERIAL_CHAR('\t');
|
||||
switch (i) {
|
||||
case TMC_DRV_CODES: st.printLabel(); break;
|
||||
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
|
||||
case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
|
||||
case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
|
||||
case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
|
||||
case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
|
||||
case TMC_DRV_OTPW: if (st.otpw()) SERIAL_CHAR('*'); break;
|
||||
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
||||
case TMC_DRV_CODES: st.printLabel(); break;
|
||||
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
|
||||
case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
|
||||
case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
|
||||
case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
|
||||
case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
|
||||
case TMC_DRV_OTPW: if (st.otpw()) SERIAL_CHAR('*'); break;
|
||||
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
||||
case TMC_DRV_STATUS_HEX: {
|
||||
const uint32_t drv_status = st.DRV_STATUS();
|
||||
SERIAL_CHAR('\t');
|
||||
st.printLabel();
|
||||
SERIAL_CHAR('\t');
|
||||
print_hex_long(drv_status, ':', true);
|
||||
SERIAL_CHAR('\t'); st.printLabel(); SERIAL_CHAR('\t'); print_hex_long(drv_status, ':', true);
|
||||
if (drv_status == 0xFFFFFFFF || drv_status == 0) SERIAL_ECHOPGM("\t Bad response!");
|
||||
SERIAL_EOL();
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
default: _tmc_parse_drv_status(st, i); break;
|
||||
}
|
||||
}
|
||||
|
@ -946,7 +962,7 @@
|
|||
TMC_REPORT("tstep\t", TMC_TSTEP);
|
||||
TMC_REPORT("PWM thresh.", TMC_TPWMTHRS);
|
||||
TMC_REPORT("[mm/s]\t", TMC_TPWMTHRS_MMS);
|
||||
TMC_REPORT("OT prewarn", TMC_OTPW);
|
||||
TMC_REPORT("OT prewarn", TMC_DEBUG_OTPW);
|
||||
#if ENABLED(MONITOR_DRIVER_STATUS)
|
||||
TMC_REPORT("triggered\n OTP\t", TMC_OTPW_TRIGGERED);
|
||||
#endif
|
||||
|
@ -964,6 +980,7 @@
|
|||
TMC_REPORT(" -start\t", TMC_HSTRT);
|
||||
TMC_REPORT("Stallguard thrs", TMC_SGT);
|
||||
TMC_REPORT("uStep count", TMC_MSCNT);
|
||||
|
||||
DRV_REPORT("DRVSTATUS", TMC_DRV_CODES);
|
||||
#if HAS_TMCX1X0_OR_2240 || HAS_TMC220x
|
||||
DRV_REPORT("sg_result", TMC_SG_RESULT);
|
||||
|
@ -984,10 +1001,12 @@
|
|||
DRV_REPORT("150C\t", TMC_T150);
|
||||
DRV_REPORT("143C\t", TMC_T143);
|
||||
DRV_REPORT("120C\t", TMC_T120);
|
||||
#endif
|
||||
#if HAS_TMC220x || HAS_DRIVER(TMC2240)
|
||||
DRV_REPORT("s2vsa\t", TMC_S2VSA);
|
||||
DRV_REPORT("s2vsb\t", TMC_S2VSB);
|
||||
#endif
|
||||
DRV_REPORT("Driver registers:\n",TMC_DRV_STATUS_HEX);
|
||||
DRV_REPORT("Driver registers:\n", TMC_DRV_STATUS_HEX);
|
||||
#if HAS_DRIVER(TMC2240)
|
||||
TMC_REPORT("Analog in (v)", TMC_VAIN);
|
||||
TMC_REPORT("Supply (v)", TMC_VSUPPLY);
|
||||
|
@ -1035,6 +1054,7 @@
|
|||
}
|
||||
SERIAL_CHAR('\t');
|
||||
}
|
||||
|
||||
#endif // HAS_TRINAMIC_CONFIG
|
||||
|
||||
#if HAS_DRIVER(TMC2660)
|
||||
|
|
|
@ -32,9 +32,6 @@
|
|||
#include "trinamic.h"
|
||||
#include "../stepper.h"
|
||||
|
||||
#include <HardwareSerial.h>
|
||||
#include <SPI.h>
|
||||
|
||||
enum StealthIndex : uint8_t {
|
||||
LOGICAL_AXIS_LIST(STEALTH_AXIS_E, STEALTH_AXIS_X, STEALTH_AXIS_Y, STEALTH_AXIS_Z, STEALTH_AXIS_I, STEALTH_AXIS_J, STEALTH_AXIS_K, STEALTH_AXIS_U, STEALTH_AXIS_V, STEALTH_AXIS_W)
|
||||
};
|
||||
|
@ -242,12 +239,12 @@ enum StealthIndex : uint8_t {
|
|||
st.begin();
|
||||
|
||||
CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
|
@ -280,12 +277,12 @@ enum StealthIndex : uint8_t {
|
|||
st.begin();
|
||||
|
||||
CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
|
@ -705,12 +702,12 @@ enum StealthIndex : uint8_t {
|
|||
st.stored.stealthChop_enabled = stealth;
|
||||
|
||||
TMC2208_n::CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01; // blank_time = 24
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.tbl = 0b01; // blank_time = 24
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
|
@ -750,12 +747,12 @@ enum StealthIndex : uint8_t {
|
|||
st.stored.stealthChop_enabled = stealth;
|
||||
|
||||
TMC2208_n::CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01; // blank_time = 24
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.tbl = 0b01; // blank_time = 24
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
|
@ -788,44 +785,68 @@ enum StealthIndex : uint8_t {
|
|||
) {
|
||||
st.begin();
|
||||
|
||||
st.Rref = TMC2240_Rref;
|
||||
st.Rref = TMC2240_RREF; // Minimum: 12000 ; FLY TMC2240: 12300
|
||||
|
||||
TMC2240_n::GCONF_t gconf{0};
|
||||
gconf.en_pwm_mode = !stealth;
|
||||
st.GCONF(gconf.sr);
|
||||
|
||||
TMC2240_n::DRV_CONF_t drv_conf{0};
|
||||
drv_conf.current_range = TMC2240_CURRENT_RANGE;
|
||||
drv_conf.slope_control = TMC2240_SLOPE_CONTROL;
|
||||
st.DRV_CONF(drv_conf.sr);
|
||||
|
||||
CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
// Adjust based on user experience
|
||||
TMC2240_n::CHOPCONF_t chopconf{0};
|
||||
chopconf.toff = chop_init.toff; // 3 (3)
|
||||
chopconf.intpol = interpolate; // true
|
||||
chopconf.hend = chop_init.hend + 3; // 2 (-1)
|
||||
chopconf.hstrt = chop_init.hstrt - 1; // 5 (6)
|
||||
chopconf.TBL = 0b10; // 36 tCLK
|
||||
chopconf.tpfd = 4; // 512 NCLK
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
st.microsteps(microsteps);
|
||||
st.iholddelay(10);
|
||||
st.iholddelay(6);
|
||||
st.irundelay(4);
|
||||
|
||||
// (from Makerbase)
|
||||
//st.TPOWERDOWN(10);
|
||||
|
||||
st.TPOWERDOWN(128); // ~2s until driver lowers to hold current
|
||||
|
||||
st.en_pwm_mode(stealth);
|
||||
st.stored.stealthChop_enabled = stealth;
|
||||
|
||||
// Adjust based on user experience
|
||||
TMC2240_n::PWMCONF_t pwmconf{0};
|
||||
pwmconf.pwm_lim = 12;
|
||||
pwmconf.pwm_reg = 8;
|
||||
pwmconf.pwm_autograd = true;
|
||||
pwmconf.pwm_autoscale = true;
|
||||
pwmconf.pwm_freq = 0b01;
|
||||
pwmconf.pwm_grad = 14;
|
||||
pwmconf.pwm_ofs = 36;
|
||||
pwmconf.pwm_ofs = 29;
|
||||
pwmconf.pwm_grad = 0;
|
||||
pwmconf.pwm_freq = 0b00; // fPWM = 2/1024 fCLK | 16MHz clock -> 31.3kHz PWM
|
||||
pwmconf.pwm_autograd = true;
|
||||
pwmconf.pwm_autoscale = true;
|
||||
pwmconf.freewheel = 0;
|
||||
pwmconf.pwm_meas_sd_enable = false;
|
||||
pwmconf.pwm_dis_reg_stst = false;
|
||||
pwmconf.pwm_reg = 4;
|
||||
pwmconf.pwm_lim = 12;
|
||||
st.PWMCONF(pwmconf.sr);
|
||||
|
||||
TERN(HYBRID_THRESHOLD, st.set_pwm_thrs(hyb_thrs), UNUSED(hyb_thrs));
|
||||
|
||||
// (from Makerbase)
|
||||
//st.GCONF(0x00);
|
||||
//st.IHOLD_IRUN(0x04071f03);
|
||||
//st.GSTAT(0x07);
|
||||
//st.GSTAT(0x00);
|
||||
|
||||
st.diag0_pushpull(true);
|
||||
|
||||
st.GSTAT(); // Clear GSTAT
|
||||
}
|
||||
|
||||
#endif // TMC2240
|
||||
|
||||
#if HAS_DRIVER(TMC2660)
|
||||
|
@ -862,12 +883,12 @@ enum StealthIndex : uint8_t {
|
|||
st.begin();
|
||||
|
||||
CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
|
@ -900,12 +921,12 @@ enum StealthIndex : uint8_t {
|
|||
st.begin();
|
||||
|
||||
CHOPCONF_t chopconf{0};
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.tbl = 0b01;
|
||||
chopconf.toff = chop_init.toff;
|
||||
chopconf.intpol = interpolate;
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
TERN_(EDGE_STEPPING, chopconf.dedge = true);
|
||||
chopconf.hend = chop_init.hend + 3;
|
||||
chopconf.hstrt = chop_init.hstrt - 1;
|
||||
chopconf.dedge = ENABLED(EDGE_STEPPING);
|
||||
st.CHOPCONF(chopconf.sr);
|
||||
|
||||
st.rms_current(mA, hold_multiplier);
|
||||
|
|
BIN
docs/TMC2240_Datasheet.pdf
Normal file
BIN
docs/TMC2240_Datasheet.pdf
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue