Library for Trinamic TMC2209 stepper modules to drive bipolar stepper motors. Ported and adapted from https://github.com/teemuatlut/TMCStepper

Dependents:   TMC2209-Test2

Committer:
charly
Date:
Thu Dec 02 20:29:39 2021 +0000
Revision:
2:b34e91b54373
Parent:
0:f4343071c8b1
Changes from Original Project for TMC2209 integrated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charly 0:f4343071c8b1 1 #include "TMCStepper.h"
charly 0:f4343071c8b1 2 #include "TMC_MACROS.h"
charly 0:f4343071c8b1 3
charly 0:f4343071c8b1 4 #define SET_REG(SETTING) GCONF_register.SETTING = B; write(GCONF_register.address, GCONF_register.sr)
charly 0:f4343071c8b1 5
charly 0:f4343071c8b1 6 // GCONF
charly 0:f4343071c8b1 7 /*
charly 0:f4343071c8b1 8 uint32_t TMC2130Stepper::GCONF() {
charly 0:f4343071c8b1 9 return read(GCONF_register.address);
charly 0:f4343071c8b1 10 }
charly 0:f4343071c8b1 11 void TMC2130Stepper::GCONF(uint32_t input) {
charly 0:f4343071c8b1 12 GCONF_register.sr = input;
charly 0:f4343071c8b1 13 write(GCONF_register.address, GCONF_register.sr);
charly 0:f4343071c8b1 14 }
charly 0:f4343071c8b1 15
charly 0:f4343071c8b1 16 void TMC2130Stepper::I_scale_analog(bool B) { SET_REG(i_scale_analog); }
charly 0:f4343071c8b1 17 void TMC2130Stepper::internal_Rsense(bool B) { SET_REG(internal_rsense); }
charly 0:f4343071c8b1 18 void TMC2130Stepper::en_pwm_mode(bool B) { SET_REG(en_pwm_mode); }
charly 0:f4343071c8b1 19 void TMC2130Stepper::enc_commutation(bool B) { SET_REG(enc_commutation); }
charly 0:f4343071c8b1 20 void TMC2130Stepper::shaft(bool B) { SET_REG(shaft); }
charly 0:f4343071c8b1 21 void TMC2130Stepper::diag0_error(bool B) { SET_REG(diag0_error); }
charly 0:f4343071c8b1 22 void TMC2130Stepper::diag0_otpw(bool B) { SET_REG(diag0_otpw); }
charly 0:f4343071c8b1 23 void TMC2130Stepper::diag0_stall(bool B) { SET_REG(diag0_stall); }
charly 0:f4343071c8b1 24 void TMC2130Stepper::diag1_stall(bool B) { SET_REG(diag1_stall); }
charly 0:f4343071c8b1 25 void TMC2130Stepper::diag1_index(bool B) { SET_REG(diag1_index); }
charly 0:f4343071c8b1 26 void TMC2130Stepper::diag1_onstate(bool B) { SET_REG(diag1_onstate); }
charly 0:f4343071c8b1 27 void TMC2130Stepper::diag1_steps_skipped(bool B) { SET_REG(diag1_steps_skipped); }
charly 0:f4343071c8b1 28 void TMC2130Stepper::diag0_int_pushpull(bool B) { SET_REG(diag0_int_pushpull); }
charly 0:f4343071c8b1 29 void TMC2130Stepper::diag1_pushpull(bool B) { SET_REG(diag1_poscomp_pushpull); }
charly 0:f4343071c8b1 30 void TMC2130Stepper::small_hysteresis(bool B) { SET_REG(small_hysteresis); }
charly 0:f4343071c8b1 31 void TMC2130Stepper::stop_enable(bool B) { SET_REG(stop_enable); }
charly 0:f4343071c8b1 32 void TMC2130Stepper::direct_mode(bool B) { SET_REG(direct_mode); }
charly 0:f4343071c8b1 33
charly 0:f4343071c8b1 34 bool TMC2130Stepper::I_scale_analog() { GCONF_t r{0}; r.sr = GCONF(); return r.i_scale_analog; }
charly 0:f4343071c8b1 35 bool TMC2130Stepper::internal_Rsense() { GCONF_t r{0}; r.sr = GCONF(); return r.internal_rsense; }
charly 0:f4343071c8b1 36 bool TMC2130Stepper::en_pwm_mode() { GCONF_t r{0}; r.sr = GCONF(); return r.en_pwm_mode; }
charly 0:f4343071c8b1 37 bool TMC2130Stepper::enc_commutation() { GCONF_t r{0}; r.sr = GCONF(); return r.enc_commutation; }
charly 0:f4343071c8b1 38 bool TMC2130Stepper::shaft() { GCONF_t r{0}; r.sr = GCONF(); return r.shaft; }
charly 0:f4343071c8b1 39 bool TMC2130Stepper::diag0_error() { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_error; }
charly 0:f4343071c8b1 40 bool TMC2130Stepper::diag0_otpw() { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_otpw; }
charly 0:f4343071c8b1 41 bool TMC2130Stepper::diag0_stall() { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_stall; }
charly 0:f4343071c8b1 42 bool TMC2130Stepper::diag1_stall() { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_stall; }
charly 0:f4343071c8b1 43 bool TMC2130Stepper::diag1_index() { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_index; }
charly 0:f4343071c8b1 44 bool TMC2130Stepper::diag1_onstate() { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_onstate; }
charly 0:f4343071c8b1 45 bool TMC2130Stepper::diag1_steps_skipped() { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_steps_skipped; }
charly 0:f4343071c8b1 46 bool TMC2130Stepper::diag0_int_pushpull() { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_int_pushpull; }
charly 0:f4343071c8b1 47 bool TMC2130Stepper::diag1_pushpull() { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_poscomp_pushpull;}
charly 0:f4343071c8b1 48 bool TMC2130Stepper::small_hysteresis() { GCONF_t r{0}; r.sr = GCONF(); return r.small_hysteresis; }
charly 0:f4343071c8b1 49 bool TMC2130Stepper::stop_enable() { GCONF_t r{0}; r.sr = GCONF(); return r.stop_enable; }
charly 0:f4343071c8b1 50 bool TMC2130Stepper::direct_mode() { GCONF_t r{0}; r.sr = GCONF(); return r.direct_mode; }
charly 0:f4343071c8b1 51 */
charly 0:f4343071c8b1 52 /*
charly 0:f4343071c8b1 53 bit 18 not implemented:
charly 0:f4343071c8b1 54 test_mode 0:
charly 0:f4343071c8b1 55 Normal operation 1:
charly 0:f4343071c8b1 56 Enable analog test output on pin DCO. IHOLD[1..0] selects the function of DCO:
charly 0:f4343071c8b1 57 0…2: T120, DAC, VDDH Attention:
charly 0:f4343071c8b1 58 Not for user, set to 0 for normal operation!
charly 0:f4343071c8b1 59 */
charly 0:f4343071c8b1 60 /*
charly 0:f4343071c8b1 61 void TMC5160Stepper::recalibrate(bool B) { SET_REG(recalibrate); }
charly 0:f4343071c8b1 62 void TMC5160Stepper::faststandstill(bool B) { SET_REG(faststandstill); }
charly 0:f4343071c8b1 63 void TMC5160Stepper::multistep_filt(bool B) { SET_REG(multistep_filt); }
charly 0:f4343071c8b1 64 bool TMC5160Stepper::recalibrate() { GCONF_t r{0}; r.sr = GCONF(); return r.recalibrate; }
charly 0:f4343071c8b1 65 bool TMC5160Stepper::faststandstill() { GCONF_t r{0}; r.sr = GCONF(); return r.faststandstill; }
charly 0:f4343071c8b1 66 bool TMC5160Stepper::multistep_filt() { GCONF_t r{0}; r.sr = GCONF(); return r.multistep_filt; }
charly 0:f4343071c8b1 67 */
charly 0:f4343071c8b1 68 uint32_t TMC2208Stepper::GCONF() {
charly 0:f4343071c8b1 69 return read(GCONF_register.address);
charly 0:f4343071c8b1 70 }
charly 0:f4343071c8b1 71 void TMC2208Stepper::GCONF(uint32_t input) {
charly 0:f4343071c8b1 72 GCONF_register.sr = input;
charly 0:f4343071c8b1 73 write(GCONF_register.address, GCONF_register.sr);
charly 0:f4343071c8b1 74 }
charly 0:f4343071c8b1 75
charly 0:f4343071c8b1 76 void TMC2208Stepper::I_scale_analog(bool B) { SET_REG(i_scale_analog); }
charly 0:f4343071c8b1 77 void TMC2208Stepper::internal_Rsense(bool B) { SET_REG(internal_rsense); }
charly 0:f4343071c8b1 78 void TMC2208Stepper::en_spreadCycle(bool B) { SET_REG(en_spreadcycle); }
charly 0:f4343071c8b1 79 void TMC2208Stepper::shaft(bool B) { SET_REG(shaft); }
charly 0:f4343071c8b1 80 void TMC2208Stepper::index_otpw(bool B) { SET_REG(index_otpw); }
charly 0:f4343071c8b1 81 void TMC2208Stepper::index_step(bool B) { SET_REG(index_step); }
charly 0:f4343071c8b1 82 void TMC2208Stepper::pdn_disable(bool B) { SET_REG(pdn_disable); }
charly 0:f4343071c8b1 83 void TMC2208Stepper::mstep_reg_select(bool B) { SET_REG(mstep_reg_select);}
charly 0:f4343071c8b1 84 void TMC2208Stepper::multistep_filt(bool B) { SET_REG(multistep_filt); }
charly 0:f4343071c8b1 85
charly 0:f4343071c8b1 86 bool TMC2208Stepper::I_scale_analog() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.i_scale_analog; }
charly 0:f4343071c8b1 87 bool TMC2208Stepper::internal_Rsense() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.internal_rsense; }
charly 0:f4343071c8b1 88 bool TMC2208Stepper::en_spreadCycle() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.en_spreadcycle; }
charly 0:f4343071c8b1 89 bool TMC2208Stepper::shaft() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.shaft; }
charly 0:f4343071c8b1 90 bool TMC2208Stepper::index_otpw() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.index_otpw; }
charly 0:f4343071c8b1 91 bool TMC2208Stepper::index_step() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.index_step; }
charly 0:f4343071c8b1 92 bool TMC2208Stepper::pdn_disable() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.pdn_disable; }
charly 0:f4343071c8b1 93 bool TMC2208Stepper::mstep_reg_select() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.mstep_reg_select; }
charly 0:f4343071c8b1 94 bool TMC2208Stepper::multistep_filt() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.multistep_filt; }