34 GCONF_register.multistep_filt = 1;
36 IHOLD_IRUN_register.iholddelay = 1;
37 TPOWERDOWN_register.sr = 20;
40 CHOPCONF_register.toff = 0;
41 CHOPCONF_register.hstrt = 5;
42 CHOPCONF_register.hend = 2;
43 CHOPCONF_register.fd3 =
false;
44 CHOPCONF_register.disfdcc =
false;
45 CHOPCONF_register.chm =
false;
46 CHOPCONF_register.TBL = 0b10;
47 CHOPCONF_register.vhighfs =
false;
48 CHOPCONF_register.vhighchm =
false;
49 CHOPCONF_register.tpfd = 0;
50 CHOPCONF_register.mres = 0;
51 CHOPCONF_register.intpol =
true;
52 CHOPCONF_register.dedge =
false;
53 CHOPCONF_register.diss2g =
false;
54 CHOPCONF_register.diss2vs =
false;
57 PWMCONF_register.pwm_ofs = 30;
58 PWMCONF_register.pwm_grad = 0;
59 PWMCONF_register.pwm_freq = 0;
60 PWMCONF_register.pwm_autoscale =
true;
61 PWMCONF_register.pwm_autograd =
true;
62 PWMCONF_register.freewheel = 0;
63 PWMCONF_register.pwm_meas_sd_enable =
false;
64 PWMCONF_register.pwm_dis_reg_stst =
false;
65 PWMCONF_register.pwm_reg = 4;
66 PWMCONF_register.pwm_lim = 12;
105 for (uint8_t i = 0; i < n; i++) {
180 GCONF(GCONF_register.sr);
192 GCONF(GCONF_register.sr);
285 return float(CS + 0.5f) * (globalscaler * IFS_current_RMS) / 256 / 32 * 1000;
289 uint32_t Kifs_values[] = { 11750, 24000, 36000, 36000 };
290 uint32_t Kifs = Kifs_values[DRV_CONF_register.current_range];
291 return (
float(Kifs) /
Rref) / 1.414f;
295 uint32_t globalscaler = ((current * 256) / IFS_current_RMS) + 0.5f;
297 if (globalscaler < 32) globalscaler = 32;
298 if (globalscaler >= 256) globalscaler = 0;
305 float mA_float = (float)mA / 1000;
307 int32_t CS = mA_float * globalscaler / 256.0f * IFS_current_RMS * 32 - 1 + 0.5f;
308 if (CS > 31) CS = 31;
325 case 256:
mres(0);
break;
326 case 128:
mres(1);
break;
327 case 64:
mres(2);
break;
328 case 32:
mres(3);
break;
329 case 16:
mres(4);
break;
330 case 8:
mres(5);
break;
331 case 4:
mres(6);
break;
332 case 2:
mres(7);
break;
333 case 0:
mres(8);
break;
364 switch (drv_status) {
365 case 0xFFFFFFFF:
return 1;
374 TPOWERDOWN_register.sr = input;
375 write(TPOWERDOWN_register.address, TPOWERDOWN_register.sr);
381 TPWMTHRS_register.sr = input;
382 write(TPWMTHRS_register.address, TPWMTHRS_register.sr);
396 TCOOLTHRS_register.sr = input;
397 write(TCOOLTHRS_register.address, TCOOLTHRS_register.sr);
403 THIGH_register.sr = input;
404 write(THIGH_register.address, THIGH_register.sr);
410 SG4_THRS_register.sr = input;
411 write(SG4_THRS_register.address, SG4_THRS_register.sr);
415 SG4_THRS_register.sg4_thrs = B;
416 write(SG4_THRS_register.address, SG4_THRS_register.sr);
420 SG4_THRS_register.sg4_filt_en = B;
421 write(SG4_THRS_register.address, SG4_THRS_register.sr);
425 SG4_THRS_register.sg4_angle_offset = B;
426 write(SG4_THRS_register.address, SG4_THRS_register.sr);
449 OTW_OV_VTH_register.sr = input;
450 write(OTW_OV_VTH_register.address, OTW_OV_VTH_register.sr);
471 return (r.
adc_temp - 2038.0f) * (1.0f / 7.7f);
482 uint16_t adc_temp_th = (uint16_t)(tempC * 7.7f + 2038.0f + 0.5f);
497 uint16_t adc_vth = (uint16_t)(volts / 0.009732f + 0.5f);
512 int16_t value = r.
cur_a;
513 if (value > 255) value -= 512;
519 int16_t value = r.
cur_b;
520 if (value > 255) value -= 512;
530 COOLCONF_register.sg4_en = B;
535 return COOLCONF_register.sg4_en;
539 COOLCONF_register.sg4_smin = B;
544 return COOLCONF_register.sg4_smin;
548 COOLCONF_register.sg4_smax = B;
553 return COOLCONF_register.sg4_smax;
557 COOLCONF_register.sg4_filt_en = B;
562 return COOLCONF_register.sg4_filt_en;
566 COOLCONF_register.sg4_angle_offset = B;
571 return COOLCONF_register.sg4_angle_offset;
575 SG4_THRS_register.sg4_thrs = B;
580 return SG4_THRS_register.sg4_thrs;
584void TMC2240Stepper::enableStallGuard4() {
588void TMC2240Stepper::disableStallGuard4() {
592bool TMC2240Stepper::isStallGuard4Active() {
596uint16_t TMC2240Stepper::getStallGuard4Result() {
__attribute__((weak)) void TMC2240Stepper
void beginTransaction(SPISettings settings)
uint8_t transfer(uint8_t)
float get_chip_temperature()
TMC2240Stepper(uint16_t pinCS, int8_t link_index=-1)
void setSPISpeed(uint32_t speed)
void write(uint8_t addressByte, uint32_t config)
uint32_t ADC_VSUPPLY_AIN()
uint8_t transfer(const uint8_t data)
uint8_t hysteresis_start()
void set_overvoltage_threshold_voltage(float volts)
void set_overtemp_prewarn_celsius(float tempC)
uint32_t set_globalscaler(float current, float IFS_current_RMS)
static constexpr uint8_t TMC_WRITE
void switchCSpin(bool state)
float calc_IFS_current_RMS()
void transferEmptyBytes(const uint8_t n)
uint16_t cs2rms(uint8_t CS)
uint32_t read(uint8_t addressByte)
float get_vsupply_voltage()
float get_overtemp_prewarn_celsius()
static int8_t chain_length
float get_overvoltage_threshold_voltage()
uint8_t test_connection()
uint8_t sg4_angle_offset()
static uint32_t spi_speed
#define pinMode(PIN, MODE)
#define digitalWrite(PIN, MODE)
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address
uint16_t overtemp_prewarn_vth
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address