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 TMC2209_n {
charly 0:f4343071c8b1 5 struct IOIN_t {
charly 0:f4343071c8b1 6 constexpr static uint8_t address = 0x06;
charly 0:f4343071c8b1 7 union {
charly 0:f4343071c8b1 8 uint32_t sr;
charly 0:f4343071c8b1 9 struct {
charly 0:f4343071c8b1 10 bool enn : 1,
charly 0:f4343071c8b1 11 : 1,
charly 0:f4343071c8b1 12 ms1 : 1,
charly 0:f4343071c8b1 13 ms2 : 1,
charly 0:f4343071c8b1 14 diag : 1,
charly 0:f4343071c8b1 15 : 1,
charly 0:f4343071c8b1 16 pdn_uart : 1,
charly 0:f4343071c8b1 17 step : 1,
charly 0:f4343071c8b1 18 spread_en : 1,
charly 0:f4343071c8b1 19 dir : 1;
charly 0:f4343071c8b1 20 uint16_t : 14;
charly 0:f4343071c8b1 21 uint8_t version : 8;
charly 0:f4343071c8b1 22 };
charly 0:f4343071c8b1 23 };
charly 0:f4343071c8b1 24 };
charly 0:f4343071c8b1 25
charly 0:f4343071c8b1 26 struct SGTHRS_t {
charly 0:f4343071c8b1 27 constexpr static uint8_t address = 0x40;
charly 0:f4343071c8b1 28 uint8_t sr : 8;
charly 0:f4343071c8b1 29 };
charly 0:f4343071c8b1 30
charly 0:f4343071c8b1 31 struct SG_RESULT_t {
charly 0:f4343071c8b1 32 constexpr static uint8_t address = 0x41;
charly 0:f4343071c8b1 33 uint16_t sr : 10;
charly 0:f4343071c8b1 34 };
charly 0:f4343071c8b1 35
charly 0:f4343071c8b1 36 struct COOLCONF_t {
charly 0:f4343071c8b1 37 constexpr static uint8_t address = 0x42;
charly 0:f4343071c8b1 38 union {
charly 0:f4343071c8b1 39 uint16_t sr;
charly 0:f4343071c8b1 40 struct {
charly 0:f4343071c8b1 41 uint8_t semin : 4,
charly 0:f4343071c8b1 42 : 1,
charly 0:f4343071c8b1 43 seup : 2,
charly 0:f4343071c8b1 44 : 1,
charly 0:f4343071c8b1 45 semax : 4,
charly 0:f4343071c8b1 46 : 1,
charly 0:f4343071c8b1 47 sedn : 2;
charly 0:f4343071c8b1 48 bool seimin : 1;
charly 0:f4343071c8b1 49 };
charly 0:f4343071c8b1 50 };
charly 0:f4343071c8b1 51 };
charly 0:f4343071c8b1 52
charly 0:f4343071c8b1 53 } //namespace
charly 0:f4343071c8b1 54 //////////////////////////////////////////////////////
charly 0:f4343071c8b1 55 struct SLAVECONF_t {
charly 0:f4343071c8b1 56 constexpr static uint8_t address = 0x03;
charly 0:f4343071c8b1 57 union {
charly 0:f4343071c8b1 58 uint16_t sr : 12;
charly 0:f4343071c8b1 59 struct {
charly 0:f4343071c8b1 60 uint8_t slaveaddr : 8;
charly 0:f4343071c8b1 61 uint8_t senddelay : 4;
charly 0:f4343071c8b1 62 };
charly 0:f4343071c8b1 63 };
charly 0:f4343071c8b1 64 };
charly 0:f4343071c8b1 65
charly 0:f4343071c8b1 66 struct PWM_AUTO_t {
charly 0:f4343071c8b1 67 constexpr static uint8_t address = 0x72;
charly 0:f4343071c8b1 68 union {
charly 0:f4343071c8b1 69 uint32_t sr : 24;
charly 0:f4343071c8b1 70 struct {
charly 0:f4343071c8b1 71 uint8_t pwm_ofs_auto : 8,
charly 0:f4343071c8b1 72 : 8,
charly 0:f4343071c8b1 73 pwm_grad_auto : 8;
charly 0:f4343071c8b1 74 };
charly 0:f4343071c8b1 75 };
charly 0:f4343071c8b1 76 };
charly 0:f4343071c8b1 77
charly 0:f4343071c8b1 78 struct GCONF_t {
charly 0:f4343071c8b1 79 constexpr static uint8_t address = 0x00;
charly 0:f4343071c8b1 80 union {
charly 0:f4343071c8b1 81 uint32_t sr : 18;
charly 0:f4343071c8b1 82 struct {
charly 0:f4343071c8b1 83 bool i_scale_analog : 1, // 2130, 5130
charly 0:f4343071c8b1 84 internal_rsense : 1, // 2130, 5130
charly 0:f4343071c8b1 85 en_pwm_mode : 1,
charly 0:f4343071c8b1 86 enc_commutation : 1, // 2130, 5130
charly 0:f4343071c8b1 87 shaft : 1,
charly 0:f4343071c8b1 88 diag0_error : 1,
charly 0:f4343071c8b1 89 diag0_otpw : 1,
charly 0:f4343071c8b1 90 diag0_stall : 1,
charly 0:f4343071c8b1 91 diag1_stall : 1,
charly 0:f4343071c8b1 92 diag1_index : 1,
charly 0:f4343071c8b1 93 diag1_onstate : 1,
charly 0:f4343071c8b1 94 diag1_steps_skipped : 1,
charly 0:f4343071c8b1 95 diag0_int_pushpull : 1,
charly 0:f4343071c8b1 96 diag1_pushpull : 1,
charly 0:f4343071c8b1 97 small_hysteresis : 1,
charly 0:f4343071c8b1 98 stop_enable : 1,
charly 0:f4343071c8b1 99 direct_mode : 1;
charly 0:f4343071c8b1 100 };
charly 0:f4343071c8b1 101 struct { // TMC5160
charly 0:f4343071c8b1 102 bool recalibrate : 1,
charly 0:f4343071c8b1 103 faststandstill : 1,
charly 0:f4343071c8b1 104 : 1,
charly 0:f4343071c8b1 105 multistep_filt : 1,
charly 0:f4343071c8b1 106 : 3,
charly 0:f4343071c8b1 107 diag0_step : 1,
charly 0:f4343071c8b1 108 diag1_dir : 1,
charly 0:f4343071c8b1 109 : 4,
charly 0:f4343071c8b1 110 diag1_poscomp_pushpull : 1;
charly 0:f4343071c8b1 111 };
charly 0:f4343071c8b1 112 };
charly 0:f4343071c8b1 113 };
charly 0:f4343071c8b1 114
charly 0:f4343071c8b1 115 struct IHOLD_IRUN_t {
charly 0:f4343071c8b1 116 constexpr static uint8_t address = 0x10;
charly 0:f4343071c8b1 117 union {
charly 0:f4343071c8b1 118 uint32_t sr : 20;
charly 0:f4343071c8b1 119 struct {
charly 0:f4343071c8b1 120 uint8_t ihold : 5,
charly 0:f4343071c8b1 121 : 3,
charly 0:f4343071c8b1 122 irun : 5,
charly 0:f4343071c8b1 123 : 3,
charly 0:f4343071c8b1 124 iholddelay : 4;
charly 0:f4343071c8b1 125 };
charly 0:f4343071c8b1 126 };
charly 0:f4343071c8b1 127 };
charly 0:f4343071c8b1 128
charly 0:f4343071c8b1 129 struct GSTAT_t {
charly 0:f4343071c8b1 130 constexpr static uint8_t address = 0x01;
charly 0:f4343071c8b1 131 union {
charly 0:f4343071c8b1 132 uint8_t sr : 3;
charly 0:f4343071c8b1 133 struct {
charly 0:f4343071c8b1 134 bool reset : 1,
charly 0:f4343071c8b1 135 drv_err : 1,
charly 0:f4343071c8b1 136 uv_cp : 1;
charly 0:f4343071c8b1 137 };
charly 0:f4343071c8b1 138 };
charly 0:f4343071c8b1 139 };
charly 0:f4343071c8b1 140
charly 0:f4343071c8b1 141 struct TPOWERDOWN_t {
charly 0:f4343071c8b1 142 constexpr static uint8_t address = 0x11;
charly 0:f4343071c8b1 143 uint8_t sr : 8;
charly 0:f4343071c8b1 144 };
charly 0:f4343071c8b1 145
charly 0:f4343071c8b1 146 struct TPWMTHRS_t {
charly 0:f4343071c8b1 147 constexpr static uint8_t address = 0x13;
charly 0:f4343071c8b1 148 uint32_t sr : 20;
charly 0:f4343071c8b1 149 };
charly 0:f4343071c8b1 150
charly 0:f4343071c8b1 151 struct TCOOLTHRS_t {
charly 0:f4343071c8b1 152 constexpr static uint8_t address = 0x14;
charly 0:f4343071c8b1 153 uint32_t sr : 20;
charly 0:f4343071c8b1 154 };
charly 0:f4343071c8b1 155
charly 0:f4343071c8b1 156 struct THIGH_t {
charly 0:f4343071c8b1 157 constexpr static uint8_t address = 0x15;
charly 0:f4343071c8b1 158 uint32_t sr : 20;
charly 0:f4343071c8b1 159 };
charly 0:f4343071c8b1 160
charly 0:f4343071c8b1 161 struct XDIRECT_t {
charly 0:f4343071c8b1 162 constexpr static uint8_t address = 0x2D;
charly 0:f4343071c8b1 163 union {
charly 0:f4343071c8b1 164 uint32_t sr : 25;
charly 0:f4343071c8b1 165 struct {
charly 0:f4343071c8b1 166 int16_t coil_A : 9;
charly 0:f4343071c8b1 167 int8_t : 7;
charly 0:f4343071c8b1 168 int16_t coil_B : 9;
charly 0:f4343071c8b1 169 };
charly 0:f4343071c8b1 170 };
charly 0:f4343071c8b1 171 };
charly 0:f4343071c8b1 172
charly 0:f4343071c8b1 173 struct VDCMIN_t {
charly 0:f4343071c8b1 174 constexpr static uint8_t address = 0x33;
charly 0:f4343071c8b1 175 uint32_t sr : 23;
charly 0:f4343071c8b1 176 };
charly 0:f4343071c8b1 177
charly 0:f4343071c8b1 178 struct CHOPCONF_t {
charly 0:f4343071c8b1 179 constexpr static uint8_t address = 0x6C;
charly 0:f4343071c8b1 180 union {
charly 0:f4343071c8b1 181 uint32_t sr : 32;
charly 0:f4343071c8b1 182 struct {
charly 0:f4343071c8b1 183 uint8_t toff : 4,
charly 0:f4343071c8b1 184 hstrt : 3,
charly 0:f4343071c8b1 185 hend : 4,
charly 0:f4343071c8b1 186 : 1;
charly 0:f4343071c8b1 187 bool disfdcc : 1,
charly 0:f4343071c8b1 188 rndtf : 1,
charly 0:f4343071c8b1 189 chm : 1;
charly 0:f4343071c8b1 190 uint8_t tbl : 2;
charly 0:f4343071c8b1 191 bool vsense : 1,
charly 0:f4343071c8b1 192 vhighfs : 1,
charly 0:f4343071c8b1 193 vhighchm : 1;
charly 0:f4343071c8b1 194 uint8_t sync : 4, // 2130, 5130
charly 0:f4343071c8b1 195 mres : 4;
charly 0:f4343071c8b1 196 bool intpol : 1,
charly 0:f4343071c8b1 197 dedge : 1,
charly 0:f4343071c8b1 198 diss2g : 1;
charly 0:f4343071c8b1 199 };
charly 0:f4343071c8b1 200 struct { // TMC5160
charly 0:f4343071c8b1 201 uint32_t : 20;
charly 0:f4343071c8b1 202 uint8_t tpfd : 4; // 5160
charly 0:f4343071c8b1 203 uint16_t : 7;
charly 0:f4343071c8b1 204 bool diss2vs : 1; // TMC5160 only
charly 0:f4343071c8b1 205 };
charly 0:f4343071c8b1 206 };
charly 0:f4343071c8b1 207 };
charly 0:f4343071c8b1 208
charly 0:f4343071c8b1 209 struct DCCTRL_t {
charly 0:f4343071c8b1 210 constexpr static uint8_t address = 0x6E;
charly 0:f4343071c8b1 211 union {
charly 0:f4343071c8b1 212 uint32_t sr : 24;
charly 0:f4343071c8b1 213 struct {
charly 0:f4343071c8b1 214 uint16_t dc_time : 10,
charly 0:f4343071c8b1 215 : 6;
charly 0:f4343071c8b1 216 uint8_t dc_sg : 8;
charly 0:f4343071c8b1 217 };
charly 0:f4343071c8b1 218 };
charly 0:f4343071c8b1 219 };
charly 0:f4343071c8b1 220
charly 0:f4343071c8b1 221 struct PWMCONF_t {
charly 0:f4343071c8b1 222 constexpr static uint8_t address = 0x70;
charly 0:f4343071c8b1 223 union {
charly 0:f4343071c8b1 224 uint32_t sr : 22;
charly 0:f4343071c8b1 225 struct {
charly 0:f4343071c8b1 226 uint8_t pwm_ampl : 8,
charly 0:f4343071c8b1 227 pwm_grad : 8,
charly 0:f4343071c8b1 228 pwm_freq : 2;
charly 0:f4343071c8b1 229 bool pwm_autoscale : 1,
charly 0:f4343071c8b1 230 pwm_symmetric : 1;
charly 0:f4343071c8b1 231 uint8_t freewheel : 2;
charly 0:f4343071c8b1 232 };
charly 0:f4343071c8b1 233 };
charly 0:f4343071c8b1 234 };
charly 0:f4343071c8b1 235
charly 0:f4343071c8b1 236 struct ENCM_CTRL_t {
charly 0:f4343071c8b1 237 constexpr static uint8_t address = 0x72;
charly 0:f4343071c8b1 238 union {
charly 0:f4343071c8b1 239 uint8_t sr : 2;
charly 0:f4343071c8b1 240 struct {
charly 0:f4343071c8b1 241 bool inv : 1,
charly 0:f4343071c8b1 242 maxspeed : 1;
charly 0:f4343071c8b1 243 };
charly 0:f4343071c8b1 244 };
charly 0:f4343071c8b1 245 };
charly 0:f4343071c8b1 246
charly 0:f4343071c8b1 247 #pragma pack(pop)