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 #pragma once
charly 0:f4343071c8b1 2 #pragma pack(push, 1)
charly 0:f4343071c8b1 3
charly 0:f4343071c8b1 4 namespace TMC2208_n {
charly 0:f4343071c8b1 5 struct GCONF_t {
charly 0:f4343071c8b1 6 constexpr static uint8_t address = 0x00;
charly 0:f4343071c8b1 7 union {
charly 0:f4343071c8b1 8 uint16_t sr : 10;
charly 0:f4343071c8b1 9 struct {
charly 0:f4343071c8b1 10 bool i_scale_analog : 1,
charly 0:f4343071c8b1 11 internal_rsense : 1,
charly 0:f4343071c8b1 12 en_spreadcycle : 1,
charly 0:f4343071c8b1 13 shaft : 1,
charly 0:f4343071c8b1 14 index_otpw : 1,
charly 0:f4343071c8b1 15 index_step : 1,
charly 0:f4343071c8b1 16 pdn_disable : 1,
charly 0:f4343071c8b1 17 mstep_reg_select : 1,
charly 0:f4343071c8b1 18 multistep_filt : 1,
charly 0:f4343071c8b1 19 test_mode : 1;
charly 0:f4343071c8b1 20 };
charly 0:f4343071c8b1 21 };
charly 0:f4343071c8b1 22 };
charly 0:f4343071c8b1 23 }
charly 0:f4343071c8b1 24
charly 0:f4343071c8b1 25 namespace TMC2208_n {
charly 0:f4343071c8b1 26 struct IOIN_t {
charly 0:f4343071c8b1 27 constexpr static uint8_t address = 0x06;
charly 0:f4343071c8b1 28 union {
charly 0:f4343071c8b1 29 uint32_t sr;
charly 0:f4343071c8b1 30 struct {
charly 0:f4343071c8b1 31 bool enn : 1,
charly 0:f4343071c8b1 32 : 1,
charly 0:f4343071c8b1 33 ms1 : 1,
charly 0:f4343071c8b1 34 ms2 : 1,
charly 0:f4343071c8b1 35 diag : 1,
charly 0:f4343071c8b1 36 : 1,
charly 0:f4343071c8b1 37 pdn_uart : 1,
charly 0:f4343071c8b1 38 step : 1,
charly 0:f4343071c8b1 39 sel_a : 1,
charly 0:f4343071c8b1 40 dir : 1;
charly 0:f4343071c8b1 41 uint16_t : 14;
charly 0:f4343071c8b1 42 uint8_t version : 8;
charly 0:f4343071c8b1 43 };
charly 0:f4343071c8b1 44 };
charly 0:f4343071c8b1 45 };
charly 0:f4343071c8b1 46 }
charly 0:f4343071c8b1 47
charly 0:f4343071c8b1 48 namespace TMC2224_n {
charly 0:f4343071c8b1 49 struct IOIN_t {
charly 0:f4343071c8b1 50 constexpr static uint8_t address = 0x06;
charly 0:f4343071c8b1 51 union {
charly 0:f4343071c8b1 52 uint32_t sr;
charly 0:f4343071c8b1 53 struct {
charly 0:f4343071c8b1 54 bool : 1,
charly 0:f4343071c8b1 55 pdn_uart : 1,
charly 0:f4343071c8b1 56 spread : 1,
charly 0:f4343071c8b1 57 dir : 1,
charly 0:f4343071c8b1 58 enn : 1,
charly 0:f4343071c8b1 59 step : 1,
charly 0:f4343071c8b1 60 ms1 : 1,
charly 0:f4343071c8b1 61 ms2 : 1,
charly 0:f4343071c8b1 62 sel_a : 1;
charly 0:f4343071c8b1 63 uint16_t : 15;
charly 0:f4343071c8b1 64 uint8_t version : 8;
charly 0:f4343071c8b1 65 };
charly 0:f4343071c8b1 66 };
charly 0:f4343071c8b1 67 };
charly 0:f4343071c8b1 68 }
charly 0:f4343071c8b1 69
charly 0:f4343071c8b1 70 struct FACTORY_CONF_t {
charly 0:f4343071c8b1 71 constexpr static uint8_t address = 0x07;
charly 0:f4343071c8b1 72 union {
charly 0:f4343071c8b1 73 uint16_t sr;
charly 0:f4343071c8b1 74 struct {
charly 0:f4343071c8b1 75 uint8_t fclktrim : 5,
charly 0:f4343071c8b1 76 : 3,
charly 0:f4343071c8b1 77 ottrim : 2;
charly 0:f4343071c8b1 78 };
charly 0:f4343071c8b1 79 };
charly 0:f4343071c8b1 80 };
charly 0:f4343071c8b1 81
charly 0:f4343071c8b1 82 namespace TMC2208_n {
charly 0:f4343071c8b1 83 struct VACTUAL_t {
charly 0:f4343071c8b1 84 constexpr static uint8_t address = 0x22;
charly 0:f4343071c8b1 85 uint32_t sr;
charly 0:f4343071c8b1 86 };
charly 0:f4343071c8b1 87 }
charly 0:f4343071c8b1 88
charly 0:f4343071c8b1 89 struct MSCURACT_t {
charly 0:f4343071c8b1 90 constexpr static uint8_t address = 0x6B;
charly 0:f4343071c8b1 91 union {
charly 0:f4343071c8b1 92 uint32_t sr : 25;
charly 0:f4343071c8b1 93 struct {
charly 0:f4343071c8b1 94 int16_t cur_a : 9,
charly 0:f4343071c8b1 95 : 7,
charly 0:f4343071c8b1 96 cur_b : 9;
charly 0:f4343071c8b1 97 };
charly 0:f4343071c8b1 98 };
charly 0:f4343071c8b1 99 };
charly 0:f4343071c8b1 100
charly 0:f4343071c8b1 101 namespace TMC2208_n {
charly 0:f4343071c8b1 102 struct CHOPCONF_t {
charly 0:f4343071c8b1 103 constexpr static uint8_t address = 0x6C;
charly 0:f4343071c8b1 104 union {
charly 0:f4343071c8b1 105 uint32_t sr;
charly 0:f4343071c8b1 106 struct {
charly 0:f4343071c8b1 107 uint8_t toff : 4,
charly 0:f4343071c8b1 108 hstrt : 3,
charly 0:f4343071c8b1 109 hend : 4,
charly 0:f4343071c8b1 110 : 4,
charly 0:f4343071c8b1 111 tbl : 2;
charly 0:f4343071c8b1 112 bool vsense : 1;
charly 0:f4343071c8b1 113 uint8_t : 6,
charly 0:f4343071c8b1 114 mres : 4;
charly 0:f4343071c8b1 115 bool intpol : 1,
charly 0:f4343071c8b1 116 dedge : 1,
charly 0:f4343071c8b1 117 diss2g : 1,
charly 0:f4343071c8b1 118 diss2vs : 1;
charly 0:f4343071c8b1 119 };
charly 0:f4343071c8b1 120 };
charly 0:f4343071c8b1 121 };
charly 0:f4343071c8b1 122
charly 0:f4343071c8b1 123 struct PWMCONF_t {
charly 0:f4343071c8b1 124 constexpr static uint8_t address = 0x70;
charly 0:f4343071c8b1 125 union {
charly 0:f4343071c8b1 126 uint32_t sr;
charly 0:f4343071c8b1 127 struct {
charly 0:f4343071c8b1 128 uint8_t pwm_ofs : 8,
charly 0:f4343071c8b1 129 pwm_grad : 8,
charly 0:f4343071c8b1 130 pwm_freq : 2;
charly 0:f4343071c8b1 131 bool pwm_autoscale : 1,
charly 0:f4343071c8b1 132 pwm_autograd : 1;
charly 0:f4343071c8b1 133 uint8_t freewheel : 2,
charly 0:f4343071c8b1 134 : 2,
charly 0:f4343071c8b1 135 pwm_reg : 4,
charly 0:f4343071c8b1 136 pwm_lim : 4;
charly 0:f4343071c8b1 137 };
charly 0:f4343071c8b1 138 };
charly 0:f4343071c8b1 139 };
charly 0:f4343071c8b1 140
charly 0:f4343071c8b1 141 struct DRV_STATUS_t {
charly 0:f4343071c8b1 142 constexpr static uint8_t address = 0x6F;
charly 0:f4343071c8b1 143 union {
charly 0:f4343071c8b1 144 uint32_t sr;
charly 0:f4343071c8b1 145 struct {
charly 0:f4343071c8b1 146 bool otpw : 1,
charly 0:f4343071c8b1 147 ot : 1,
charly 0:f4343071c8b1 148 s2ga : 1,
charly 0:f4343071c8b1 149 s2gb : 1,
charly 0:f4343071c8b1 150 s2vsa : 1,
charly 0:f4343071c8b1 151 s2vsb : 1,
charly 0:f4343071c8b1 152 ola : 1,
charly 0:f4343071c8b1 153 olb : 1,
charly 0:f4343071c8b1 154 t120 : 1,
charly 0:f4343071c8b1 155 t143 : 1,
charly 0:f4343071c8b1 156 t150 : 1,
charly 0:f4343071c8b1 157 t157 : 1;
charly 0:f4343071c8b1 158 uint8_t : 4,
charly 0:f4343071c8b1 159 cs_actual : 5,
charly 0:f4343071c8b1 160 : 3,
charly 0:f4343071c8b1 161 : 6;
charly 0:f4343071c8b1 162 bool stealth : 1,
charly 0:f4343071c8b1 163 stst : 1;
charly 0:f4343071c8b1 164 };
charly 0:f4343071c8b1 165 };
charly 0:f4343071c8b1 166 };
charly 0:f4343071c8b1 167
charly 0:f4343071c8b1 168 struct PWM_SCALE_t {
charly 0:f4343071c8b1 169 constexpr static uint8_t address = 0x71;
charly 0:f4343071c8b1 170 union {
charly 0:f4343071c8b1 171 uint32_t sr;
charly 0:f4343071c8b1 172 struct {
charly 0:f4343071c8b1 173 uint8_t pwm_scale_sum : 8,
charly 0:f4343071c8b1 174 : 8;
charly 0:f4343071c8b1 175 int16_t pwm_scale_auto : 9;
charly 0:f4343071c8b1 176 };
charly 0:f4343071c8b1 177 };
charly 0:f4343071c8b1 178 };
charly 0:f4343071c8b1 179 }
charly 0:f4343071c8b1 180
charly 0:f4343071c8b1 181 #pragma pack(pop)