TMCStepper
Library supporting Trinamic Stepper Drivers for Arduino platforms
Loading...
Searching...
No Matches
TMC2240Stepper.h
Go to the documentation of this file.
1
7#pragma once
8
9#define INIT2240_REGISTER(REG) TMC2240_n::REG##_t REG##_register{}
10
12 public:
13 TMC2240Stepper(uint16_t pinCS, int8_t link_index = -1);
14 TMC2240Stepper(uint16_t pinCS, uint16_t pinMOSI, uint16_t pinMISO, uint16_t pinSCK, int8_t link_index = -1);
15
19 uint32_t Rref = 12000;
20 void begin();
21 void defaults();
22 void setSPISpeed(uint32_t speed);
23 void switchCSpin(bool state);
24 bool isEnabled();
25 void push();
26
27 // RW: GCONF
28 void GCONF(uint32_t input);
29 void fast_standstill(bool B);
30 void en_pwm_mode(bool B);
31 void multistep_filt(bool B);
32 void shaft(bool B);
33 void diag0_error(bool B);
34 void diag0_otpw(bool B);
35 void diag0_stall(bool B);
36 void diag1_stall(bool B);
37 void diag1_index(bool B);
38 void diag1_onstate(bool B);
39 void diag0_pushpull(bool B);
40 void diag1_pushpull(bool B);
41 void small_hysteresis(bool B);
42 void stop_enable(bool B);
43 void direct_mode(bool B);
44 uint32_t GCONF();
45 bool fast_standstill();
46 bool en_pwm_mode();
47 bool multistep_filt();
48 bool shaft();
49 bool diag0_error();
50 bool diag0_otpw();
51 bool diag0_stall();
52 bool diag1_stall();
53 bool diag1_index();
54 bool diag1_onstate();
55 bool diag0_pushpull();
56 bool diag1_pushpull();
57 bool small_hysteresis();
58 bool stop_enable();
59 bool direct_mode();
60
61 // R+WC: GSTAT
62 void GSTAT(uint8_t input);
63 uint8_t GSTAT();
64 bool reset();
65 bool drv_err();
66 bool uv_cp();
67 bool register_reset();
68 bool vm_uvlo();
69 // R: IFCNT
70
71 uint8_t IFCNT();
72
73 // W: NODECONF
74 void NODECONF(uint16_t input);
75 uint16_t NODECONF();
76 // Alias for parity with others
77 uint16_t SLAVECONF() { return NODECONF(); }
78 void SLAVECONF(uint16_t input) { NODECONF(input); }
79
80 void senddelay(uint8_t B);
81 uint8_t senddelay();
82 void nodeaddr(uint8_t B);
83 uint8_t nodeaddr();
84 void slaveaddr(uint8_t B) { nodeaddr(B); }
85 uint8_t slaveaddr() { return nodeaddr(); }
86
87 // R: IOIN
88 uint32_t IOIN();
89 bool step();
90 bool dir();
91 bool encb();
92 bool enca();
93 bool drv_enn();
94 bool encn();
95 bool uart_en();
96 bool comp_a();
97 bool comp_b();
98 bool comp_a1_a2();
99 bool comp_b1_b2();
100 bool output();
101 bool ext_res_det();
102 bool ext_clk();
103 bool adc_err();
104 uint8_t silicon_rv();
105 uint8_t version();
106
107 // W: DRV_CONF
108 void DRV_CONF(uint32_t input);
109 void current_range(uint8_t);
110 uint8_t current_range();
111 void slope_control(uint8_t);
112 uint8_t slope_control();
113 uint32_t DRV_CONF();
114
115 void GLOBAL_SCALER(uint8_t input);
116 uint8_t GLOBAL_SCALER();
117
118 // W: IHOLD_IRUN
119 void IHOLD_IRUN(uint32_t input);
120 uint32_t IHOLD_IRUN();
121 void ihold(uint8_t B);
122 void irun(uint8_t B);
123 void iholddelay(uint8_t B);
124 void irundelay(uint8_t B);
125 uint8_t ihold();
126 uint8_t irun();
127 uint8_t iholddelay();
128 uint8_t irundelay();
129
130 // W: TCOOLTHRS
131 uint32_t TCOOLTHRS();
132 void TCOOLTHRS( uint32_t input);
133
134 // W: THIGH
135 uint32_t THIGH();
136 void THIGH( uint32_t input);
137
138 // RW: CHOPCONF
139 void CHOPCONF(uint32_t input);
140 void toff(uint8_t B);
141 void hstrt(uint8_t B);
142 void hend(uint8_t B);
143 void fd3(bool B);
144 void disfdcc(bool B);
145 void chm(bool B);
146 void TBL(uint8_t B);
147 void vhighfs(bool B);
148 void vhighchm(bool B);
149 void tpfd(uint8_t B);
150 void mres(uint8_t B);
151 void intpol(bool B);
152 void dedge(bool B);
153 void diss2g(bool B);
154 void diss2vs(bool B);
155 uint32_t CHOPCONF();
156 uint8_t toff();
157 uint8_t hstrt();
158 uint8_t hend();
159 bool fd3();
160 bool disfdcc();
161 bool chm();
162 uint8_t TBL();
163 bool vhighfs();
164 bool vhighchm();
165 uint8_t tpfd();
166 uint8_t mres();
167 bool intpol();
168 bool dedge();
169 bool diss2g();
170 bool diss2vs();
171
172 // RW: COOLCONF
173 void COOLCONF(uint32_t B);
174 uint32_t COOLCONF();
175 void semin(uint8_t B);
176 void seup(uint8_t B);
177 void semax(uint8_t B);
178 void sedn(uint8_t B);
179 void seimin(bool B);
180 void sgt(int8_t B);
181 void sfilt(bool B);
182 void sg4_en(bool B);
183 void sg4_smin(uint8_t B);
184 void sg4_smax(uint8_t B);
185 void sg4_filt_en(bool B);
186 void sg4_angle_offset(uint8_t B);
187 void sg4_thrs(uint8_t B);
188 uint8_t semin();
189 uint8_t seup();
190 uint8_t semax();
191 uint8_t sedn();
192 bool seimin();
193 int8_t sgt();
194 bool sfilt();
195 bool sg4_en();
196 uint8_t sg4_smin();
197 uint8_t sg4_smax();
198 bool sg4_filt_en();
199 uint8_t sg4_angle_offset();
200 uint8_t sg4_thrs();
201
202 // RW: PWMCONF
203 void PWMCONF(uint32_t input);
204 void pwm_ofs(uint8_t B);
205 void pwm_grad(uint8_t B);
206 void pwm_freq(uint8_t B);
207 void pwm_autoscale(bool B);
208 void pwm_autograd(bool B);
209 void freewheel(uint8_t B);
210 void pwm_meas_sd_enable(bool B);
211 void pwm_dis_reg_stst(bool B);
212 void pwm_reg(uint8_t B);
213 void pwm_lim(uint8_t B);
214 uint32_t PWMCONF();
215 uint8_t pwm_ofs();
216 uint8_t pwm_grad();
217 uint8_t pwm_freq();
218 bool pwm_autoscale();
219 bool pwm_autograd();
220 uint8_t freewheel();
221 bool pwm_meas_sd_enable();
222 bool pwm_dis_reg_stst();
223 uint8_t pwm_reg();
224 uint8_t pwm_lim();
225
226 // R: PWM_SCALE
227 uint32_t PWM_SCALE();
228 uint8_t pwm_scale_sum();
229 int16_t pwm_scale_auto();
230
231 // R: PWM_AUTO
232 uint32_t PWM_AUTO();
233 uint8_t pwm_ofs_auto();
234 uint8_t pwm_grad_auto();
235
236 // R: MSCURACT
237 uint32_t MSCURACT();
238 int16_t cur_a();
239 int16_t cur_b();
240
241 uint32_t DRV_STATUS();
242 uint32_t SG_RESULT();
243 bool s2vsa();
244 bool s2vsb();
245 bool stealth();
246 bool fsactive();
247 uint16_t CS_ACTUAL();
248 bool stallguard();
249 bool sg4();
250 bool ot();
251 bool otpw();
252 bool s2ga();
253 bool s2gb();
254 bool ola();
255 bool olb();
256 bool stst();
257
258 uint16_t bytesWritten = 0;
259 bool CRCerror = false;
260
261 void microsteps(uint16_t ms);
262 uint16_t microsteps();
263
264 uint8_t test_connection();
265 uint16_t MSCNT();
266
267 uint16_t cs2rms(uint8_t CS);
268 void rms_current(uint16_t mA);
269 void rms_current(uint16_t mA, float mult);
270 uint16_t rms_current();
271
272 void hysteresis_end(int8_t value);
273 int8_t hysteresis_end();
274 void hysteresis_start(uint8_t value);
275 uint8_t hysteresis_start();
276
277 uint8_t TPOWERDOWN();
278 void TPOWERDOWN(uint8_t input);
279
280 // RW: TPWMTHRS
281 uint32_t TPWMTHRS();
282 void TPWMTHRS( uint32_t input);
283
284 // R: TSTEP
285 uint32_t TSTEP();
286
287 // RW: SG4_THRS
288 uint32_t SG4_THRS();
289 void SG4_THRS(uint32_t input);
290 uint8_t sg4_thrs();
291 void sg4_thrs(uint8_t B);
293 void sg4_filt_en(bool B);
295 void sg4_angle_offset(uint8_t B);
296 uint8_t sg4_smin();
297 void sg4_smin(uint8_t B);
298 uint8_t sg4_smax();
299 void sg4_smax(uint8_t B);
300 bool sg4_en();
301 void sg4_en(bool B);
302
303 // R: SG4_RESULT
304 uint32_t SG4_RESULT();
305 uint16_t sg4_result();
306
307 // RW: ADC_VSUPPLY_AIN
308 uint32_t ADC_VSUPPLY_AIN();
309
310 // RW: ADC_TEMP
311 uint32_t ADC_TEMP();
312
313 // RW: OTW_OV_VTH
314 uint32_t OTW_OV_VTH();
315 void OTW_OV_VTH(uint32_t input);
316 float get_ain_voltage(); // AIN × 305.2 µV
317 float get_vsupply_voltage(); // VSUPPLY × 9.732 mV
318 float get_chip_temperature(); // (ADC_TEMP - 2038) / 7.7
320 void set_overtemp_prewarn_celsius(float tempC);
322 void set_overvoltage_threshold_voltage(float volts);
323
325
326 protected:
342 // (46 Bytes)
343 /*
344 INIT2240_REGISTER(MSLUT0); // 4
345 INIT2240_REGISTER(MSLUT1); // 4
346 INIT2240_REGISTER(MSLUT2); // 4
347 INIT2240_REGISTER(MSLUT3); // 4
348 INIT2240_REGISTER(MSLUT4); // 4
349 INIT2240_REGISTER(MSLUT5); // 4
350 INIT2240_REGISTER(MSLUT6); // 4
351 INIT2240_REGISTER(MSLUT7); // 4
352 INIT2240_REGISTER(MSLUTSEL); // 4
353 INIT2240_REGISTER(MSLUTSTART); // 4
354 */
355
356 struct IFCNT_t { constexpr static uint8_t address = 0x02; };
357 struct TSTEP_t { constexpr static uint8_t address = 0x12; };
358 struct MSCNT_t { constexpr static uint8_t address = 0x6A; };
359
360 float calc_IFS_current_RMS();
361 uint32_t set_globalscaler(float current, float IFS_current_RMS);
362
365 uint8_t transfer(const uint8_t data);
366 void transferEmptyBytes(const uint8_t n);
367 void write(uint8_t addressByte, uint32_t config);
368 uint32_t read(uint8_t addressByte);
369
370 static constexpr uint8_t TMC_READ = 0x00, TMC_WRITE = 0x80;
371
372 SSwitch *sswitch = nullptr;
373
374 static constexpr uint8_t TMC2240_SYNC = 0x05;
375 static constexpr uint8_t replyDelay = 2;
376 static constexpr uint8_t abort_window = 5;
377 static constexpr uint8_t max_retries = 2;
378
379 uint64_t _sendDatagram(uint8_t [], const uint8_t, uint16_t);
380 float holdMultiplier = 0.5;
381
382 static uint32_t spi_speed; // Default 2MHz
383 const uint16_t _pinCS;
385 static constexpr float default_RS = 0.11;
386
388 static int8_t chain_length;
389};
bool comp_b()
Definition IOIN.cpp:101
uint32_t CHOPCONF()
Definition CHOPCONF.cpp:102
void COOLCONF(uint32_t B)
void semax(uint8_t B)
uint8_t hstrt()
Definition CHOPCONF.cpp:124
INIT2240_REGISTER(TCOOLTHRS)
uint8_t GLOBAL_SCALER()
bool ext_res_det()
Definition IOIN.cpp:105
bool enca()
Definition IOIN.cpp:96
void seup(uint8_t B)
uint8_t iholddelay()
void beginTransaction()
static constexpr float default_RS
bool pwm_dis_reg_stst()
Definition PWMCONF.cpp:126
uint32_t GCONF()
Definition GCONF.cpp:118
bool multistep_filt()
Definition GCONF.cpp:142
void IHOLD_IRUN(uint32_t input)
uint32_t OTW_OV_VTH()
INIT2240_REGISTER(OTW_OV_VTH)
uint8_t tpfd()
Definition CHOPCONF.cpp:132
INIT2240_REGISTER(COOLCONF)
bool uart_en()
Definition IOIN.cpp:99
static constexpr uint8_t max_retries
INIT2240_REGISTER(SG4_THRS)
uint8_t ihold()
uint16_t SLAVECONF()
const uint16_t _pinCS
uint32_t SG4_RESULT()
uint8_t current_range()
Definition DRV_CONF.cpp:45
static constexpr uint8_t abort_window
bool en_pwm_mode()
Definition GCONF.cpp:141
uint64_t _sendDatagram(uint8_t[], const uint8_t, uint16_t)
uint16_t bytesWritten
float get_chip_temperature()
void NODECONF(uint16_t input)
Definition SLAVECONF.cpp:31
bool diag0_error()
Definition GCONF.cpp:144
uint16_t CS_ACTUAL()
TMC2240Stepper(uint16_t pinCS, int8_t link_index=-1)
static constexpr uint8_t TMC_READ
uint8_t irundelay()
INIT2240_REGISTER(NODECONF)
void setSPISpeed(uint32_t speed)
void sg4_smin(uint8_t B)
uint8_t sedn()
SW_SPIClass * TMC_SW_SPI
static constexpr uint8_t TMC2240_SYNC
bool diag0_otpw()
Definition GCONF.cpp:145
uint16_t rms_current()
uint8_t pwm_scale_sum()
static constexpr uint8_t replyDelay
INIT2240_REGISTER(GCONF)
void write(uint8_t addressByte, uint32_t config)
uint8_t slaveaddr()
INIT2240_REGISTER(CHOPCONF)
uint32_t ADC_VSUPPLY_AIN()
bool stop_enable()
Definition GCONF.cpp:153
uint16_t NODECONF()
Definition SLAVECONF.cpp:30
uint32_t SG_RESULT()
bool direct_mode()
Definition GCONF.cpp:154
uint8_t version()
Definition IOIN.cpp:109
void seimin(bool B)
uint8_t transfer(const uint8_t data)
INIT2240_REGISTER(TPOWERDOWN)
bool pwm_autograd()
Definition PWMCONF.cpp:123
uint8_t hysteresis_start()
bool diag1_index()
Definition GCONF.cpp:148
void set_overvoltage_threshold_voltage(float volts)
INIT2240_REGISTER(PWMCONF)
bool encn()
Definition IOIN.cpp:98
void set_overtemp_prewarn_celsius(float tempC)
void sg4_smax(uint8_t B)
uint8_t silicon_rv()
Definition IOIN.cpp:108
bool pwm_autoscale()
Definition PWMCONF.cpp:122
void GLOBAL_SCALER(uint8_t input)
INIT2240_REGISTER(IHOLD_IRUN)
uint32_t set_globalscaler(float current, float IFS_current_RMS)
static constexpr uint8_t TMC_WRITE
void switchCSpin(bool state)
bool drv_enn()
Definition IOIN.cpp:97
uint8_t mres()
Definition CHOPCONF.cpp:133
uint8_t semax()
void semin(uint8_t B)
uint8_t TBL()
Definition CHOPCONF.cpp:129
bool diag0_pushpull()
Definition GCONF.cpp:150
INIT2240_REGISTER(DRV_CONF)
uint8_t pwm_grad()
Definition PWMCONF.cpp:120
uint8_t pwm_freq()
Definition PWMCONF.cpp:121
bool shaft()
Definition GCONF.cpp:143
uint32_t IHOLD_IRUN()
void slaveaddr(uint8_t B)
void sg4_en(bool B)
bool comp_a1_a2()
Definition IOIN.cpp:102
void sfilt(bool B)
bool output()
Definition IOIN.cpp:104
bool diag1_pushpull()
Definition GCONF.cpp:151
float calc_IFS_current_RMS()
bool adc_err()
Definition IOIN.cpp:107
void endTransaction()
uint8_t pwm_ofs()
Definition PWMCONF.cpp:119
void transferEmptyBytes(const uint8_t n)
uint32_t DRV_CONF()
Definition DRV_CONF.cpp:37
bool fast_standstill()
Definition GCONF.cpp:140
uint32_t PWMCONF()
Definition PWMCONF.cpp:102
uint8_t pwm_lim()
Definition PWMCONF.cpp:128
bool dir()
Definition IOIN.cpp:94
uint8_t freewheel()
Definition PWMCONF.cpp:124
void GSTAT(uint8_t input)
void sg4_filt_en(bool B)
uint8_t seup()
uint8_t semin()
void sedn(uint8_t B)
bool pwm_meas_sd_enable()
Definition PWMCONF.cpp:125
uint16_t cs2rms(uint8_t CS)
bool encb()
Definition IOIN.cpp:95
uint32_t read(uint8_t addressByte)
uint8_t hend()
Definition CHOPCONF.cpp:125
float get_vsupply_voltage()
INIT2240_REGISTER(THIGH)
bool small_hysteresis()
Definition GCONF.cpp:152
uint16_t microsteps()
uint8_t status_response
INIT2240_REGISTER(GLOBAL_SCALER)
bool diag1_stall()
Definition GCONF.cpp:147
bool diag1_onstate()
Definition GCONF.cpp:149
float get_overtemp_prewarn_celsius()
uint32_t COOLCONF()
void CHOPCONF(uint32_t input)
Definition CHOPCONF.cpp:103
uint8_t pwm_reg()
Definition PWMCONF.cpp:127
uint8_t irun()
int8_t sgt()
Definition COOLCONF.cpp:69
uint8_t pwm_grad_auto()
static int8_t chain_length
void SLAVECONF(uint16_t input)
INIT2240_REGISTER(TPWMTHRS)
float get_overvoltage_threshold_voltage()
void DRV_CONF(uint32_t input)
Definition DRV_CONF.cpp:38
void PWMCONF(uint32_t input)
Definition PWMCONF.cpp:103
int16_t pwm_scale_auto()
void sg4_thrs(uint8_t B)
uint8_t toff()
Definition CHOPCONF.cpp:123
uint8_t test_connection()
uint8_t sg4_angle_offset()
bool step()
Definition IOIN.cpp:93
uint8_t senddelay()
Definition SLAVECONF.cpp:37
bool diag0_stall()
Definition GCONF.cpp:146
bool comp_b1_b2()
Definition IOIN.cpp:103
uint32_t DRV_STATUS()
uint32_t IOIN()
Definition IOIN.cpp:92
void GCONF(uint32_t input)
Definition GCONF.cpp:119
bool comp_a()
Definition IOIN.cpp:100
static uint32_t spi_speed
bool ext_clk()
Definition IOIN.cpp:106
INIT2240_REGISTER(GSTAT)
void sg4_angle_offset(uint8_t B)
uint8_t slope_control()
Definition DRV_CONF.cpp:46
uint8_t nodeaddr()
Definition SLAVECONF.cpp:35
uint16_t sg4_result()
static constexpr uint8_t address
static constexpr uint8_t address
static constexpr uint8_t address