uStepper S
uStepperDriver.h
Go to the documentation of this file.
1/********************************************************************************************
2* File: uStepperDriver.h *
3* Version: 2.3.0 *
4* Date: December 27th, 2021 *
5* Authors: Thomas Hørring Olsen *
6* Emil Jacobsen *
7* *
8*********************************************************************************************
9* (C) 2021 *
10* *
11* uStepper ApS *
12* www.ustepper.com *
13* administration@ustepper.com *
14* *
15* The code contained in this file is released under the following open source license: *
16* *
17* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International *
18* *
19* The code in this file is provided without warranty of any kind - use at own risk! *
20* neither uStepper ApS nor the author, can be held responsible for any damage *
21* caused by the use of the code contained in this file ! *
22* *
23********************************************************************************************/
34#include <Arduino.h>
35#include <uStepperS.h>
36
37/* TMC5130 Register Address Defines */
38
39#define GCONF 0x00
41#define DIRECTION(n) (((n)&0x1)<<4)
42#define EN_PWM_MODE(n) (((n)&0x1)<<2)
43#define I_SCALE_ANALOG(n) (((n)&0x1)<<0)
45#define GSTAT 0x01
46#define X_COMPARE 0x05
47#define IHOLD_IRUN 0x10
48#define TPOWERDOWN 0x11
49#define TSTEP 0x12
50#define TPWMTHRS 0x13
51#define TCOOLTHRS 0x14
52#define THIGH 0x15
53#define RAMPMODE 0x20
54#define XACTUAL 0x21
55#define VACTUAL 0x22
58#define VSTART_REG 0x23
59#define A1_REG 0x24
60#define V1_REG 0x25
61#define AMAX_REG 0x26
62#define VMAX_REG 0x27
63#define DMAX_REG 0x28
64#define D1_REG 0x2A
65#define VSTOP_REG 0x2B
66#define TZEROWAIT 0x2C
67#define XTARGET 0x2D
68#define VDCMIN 0x33
69#define SW_MODE 0x34
70#define SG_STOP(n) (((n)&0x1)<<10)
71#define RAMP_STAT 0x35
72#define XLATCH 0x36
75#define PWMCONF 0x70
77#define FREEWHEEL(n) (((n)&0x3UL)<<20)
78#define PWM_AUTOSCALE(n) (((n)&0x1UL)<<18)
79#define PWM_FREQ(n) (((n)&0x3UL)<<16)
80#define PWM_GRAD(n) (((n)&0xFF)<<8)
81#define PWM_AMPL(n) (((n)&0xFF)<<0)
86#define CHOPCONF 0x6C
88#define DISS2G(n) (((n)&0x1UL)<<30)
89#define DEDGE(n) (((n)&0x1UL)<<29)
90#define INTPOL(n) (((n)&0x1UL)<<28)
91#define MRES(n) (((n)&0xFUL)<<24)
92#define SYNC(n) (((n)&0xFUL)<<20)
93#define VHIGHCHM(n) (((n)&0x1UL)<<19)
94#define VHIGHFS(n) (((n)&0x1UL)<<18)
95#define VSENSE(n) (((n)&0x1UL)<<17)
96#define TBL(n) (((n)&0x3UL)<<15)
97#define CHM(n) (((n)&0x1UL)<<14)
98#define RNDTF(n) (((n)&0x1)<<13)
99#define DISFDCC(n) (((n)&0x1)<<12)
100#define TFD3(n) (((n)&0x1)<<11)
101#define HEND(n) (((n)&0xF)<<7)
102#define HSTRT_TFD(n) (((n)&0x7)<<4)
103#define TOFF(n) (((n)&0xF)<<0)
106/* CoolStep smart current control register and stallGuard2 configuration **/
107
108#define COOLCONF 0x6D
109#define SFILT(n) (((n)&0x1UL)<<24)
110#define SGT(n) (((n)&0x7FUL)<<16)
111#define SEIMIN(n) (((n)&0x1UL)<<15)
112#define SEDN(n) (((n)&0x3)<<13)
113#define SEMAX(n) (((n)&0xF)<<8)
114#define SEUP(n) (((n)&0x3)<<5)
115#define SEMIN(n) (((n)&0xF)<<0)
118#define DCCTRL 0x6E
119#define DC_SG(n) (((n)&0xFFUL)<<16)
120#define DC_TIME(n) (((n)&0x3FF)<<0)
122#define DRV_STATUS 0x6F
124#define IHOLDDELAY(n) (((n)&0xFUL)<<16)
125#define IRUN(n) (((n)&0x1F)<<8)
126#define IHOLD(n) (((n)&0x1F)<<0)
129#define WRITE_ACCESS 0x80
133#define POSITIONING_MODE 0x00
134#define VELOCITY_MODE_POS 0x01
135#define VELOCITY_MODE_NEG 0x02
136#define HOLD_MODE 0x03
138#define DRIVER_STOP 0
139#define DRIVER_VELOCITY 1
140#define DRIVER_POSITION 2
142#define ACCELERATIONCONVERSION 1.0/116.415321827
143#define VELOCITYCONVERSION 1.0/0.953674316
152
153friend class uStepperS;
154 public:
160 uStepperDriver( void );
161
169 void init( uStepperS * _pointer );
170
178 void setPosition( int32_t position );
179
188 void setVelocity( uint32_t velocity );
197 void setAcceleration( uint32_t acceleration );
206 void setDeceleration( uint32_t deceleration );
207
213 void setCurrent( uint8_t current );
214
220 void setHoldCurrent( uint8_t current );
221
232 void setShaftDirection( bool direction );
233
237 void stop( void );
238
249 int32_t getVelocity( void );
250
260 int32_t getPosition( void );
261
267 void setHome(int32_t initialSteps = 0);
268
284 int32_t writeRegister( uint8_t address, uint32_t datagram );
285
297 int32_t readRegister( uint8_t address );
298
302 uint16_t getStallValue( void );
303
305 volatile int32_t xTarget = 0;
306
308 volatile int32_t xActual = 0;
309
310
311 protected:
313 uint8_t status;
314
316 uint8_t mode = DRIVER_STOP;
317
319
320 uint8_t current = 16;
321 uint8_t holdCurrent = 0;
322 uint8_t holdDelay = 0;
323
325 uint32_t VSTART = 0;
326 uint32_t V1 = 0;
327 uint32_t VMAX = 200000;
328 uint32_t VSTOP = 10;
329 uint16_t A1 = 600;
330 uint16_t AMAX = 100;
331 uint16_t DMAX = 600;
332 uint16_t D1 = 600;
333
334
335 void chipSelect(bool state);
336
340 void updateCurrent( void );
341
347 void setRampMode( uint8_t mode );
348
349 void setDirection( bool direction );
350
351 void reset( void );
352
353 void enableStealth( void );
354
355 void enableStallguard( int8_t threshold, bool stopOnStall, float rpm );
356
357 void disableStallguard( void );
358
359 void clearStall( void );
360
361 void readMotorStatus(void);
362
363
364
365};
Prototype of class for the TMC5130 Driver.
void setAcceleration(uint32_t acceleration)
Set motor acceleration.
void setDirection(bool direction)
uint16_t getStallValue(void)
Returns the load measurement used for Stall detection.
void chipSelect(bool state)
void readMotorStatus(void)
volatile int32_t xTarget
void setDeceleration(uint32_t deceleration)
Set motor deceleration.
int32_t getPosition(void)
Returns the current position of the motor driver.
void disableStallguard(void)
void updateCurrent(void)
Writes the current setting registers of the motor driver
void reset(void)
void setShaftDirection(bool direction)
Set motor driver direction.
uStepperDriver(void)
Constructor.
void stop(void)
Stops any ongoing movement with deceleration.
int32_t writeRegister(uint8_t address, uint32_t datagram)
Write a register of the motor driver.
void init(uStepperS *_pointer)
Initiation of the motor driver.
volatile int32_t xActual
void setHoldCurrent(uint8_t current)
Set motor driver hold current.
void enableStealth(void)
void enableStallguard(int8_t threshold, bool stopOnStall, float rpm)
int32_t readRegister(uint8_t address)
Reads a register from the motor driver.
uStepperS * pointer
void setVelocity(uint32_t velocity)
Set motor velocity.
void clearStall(void)
int32_t getVelocity(void)
Returns the current speed of the motor driver.
void setCurrent(uint8_t current)
Set motor driver current.
void setHome(int32_t initialSteps=0)
Resets the internal position counter of the motor driver.
void setRampMode(uint8_t mode)
Set motor driver to position mode or velocity mode.
void setPosition(int32_t position)
Set the motor position.
Prototype of class for accessing all features of the uStepper S in a single object.
Definition: uStepperS.h:279
#define DRIVER_STOP
Function prototypes and definitions for the uStepper S library.