silentstep3  2.1.0.0
silentstep3.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef SILENTSTEP3_H
29 #define SILENTSTEP3_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_spi_master.h"
48 #include "spi_specifics.h"
49 
70 #define SILENTSTEP3_REG_DRVCTRL 0x00
71 #define SILENTSTEP3_REG_CHOPCONF 0x04
72 #define SILENTSTEP3_REG_SMARTEN 0x05
73 #define SILENTSTEP3_REG_SGCSCONF 0x06
74 #define SILENTSTEP3_REG_DRVCONF 0x07
75  // silentstep3_reg
77 
92 #define SILENTSTEP3_DRVCTRL_1_PHA_MASK 0x20000ul
93 #define SILENTSTEP3_DRVCTRL_1_CA_MASK 0x1FE00ul
94 #define SILENTSTEP3_DRVCTRL_1_PHB_MASK 0x00100ul
95 #define SILENTSTEP3_DRVCTRL_1_CB_MASK 0x000FFul
96 
101 #define SILENTSTEP3_DRVCTRL_0_INTPOL_MASK 0x00200ul
102 #define SILENTSTEP3_DRVCTRL_0_DEDGE_MASK 0x00100ul
103 #define SILENTSTEP3_DRVCTRL_0_MRES_256 0x00000ul
104 #define SILENTSTEP3_DRVCTRL_0_MRES_128 0x00001ul
105 #define SILENTSTEP3_DRVCTRL_0_MRES_64 0x00002ul
106 #define SILENTSTEP3_DRVCTRL_0_MRES_32 0x00003ul
107 #define SILENTSTEP3_DRVCTRL_0_MRES_16 0x00004ul
108 #define SILENTSTEP3_DRVCTRL_0_MRES_8 0x00005ul
109 #define SILENTSTEP3_DRVCTRL_0_MRES_4 0x00006ul
110 #define SILENTSTEP3_DRVCTRL_0_MRES_2 0x00007ul
111 #define SILENTSTEP3_DRVCTRL_0_MRES_1 0x00008ul
112 #define SILENTSTEP3_DRVCTRL_0_MRES_MASK 0x0000Ful
113 
118 #define SILENTSTEP3_CHOPCONF_TBL_16 0x00000ul
119 #define SILENTSTEP3_CHOPCONF_TBL_24 0x08000ul
120 #define SILENTSTEP3_CHOPCONF_TBL_32 0x10000ul
121 #define SILENTSTEP3_CHOPCONF_TBL_54 0x18000ul
122 #define SILENTSTEP3_CHOPCONF_TBL_MASK 0x18000ul
123 #define SILENTSTEP3_CHOPCONF_CHM_STANDARD 0x00000ul
124 #define SILENTSTEP3_CHOPCONF_CHM_FAST 0x04000ul
125 #define SILENTSTEP3_CHOPCONF_CHM_MASK 0x04000ul
126 #define SILENTSTEP3_CHOPCONF_RNDTF_DISABLE 0x00000ul
127 #define SILENTSTEP3_CHOPCONF_RNDTF_ENABLE 0x02000ul
128 #define SILENTSTEP3_CHOPCONF_RNDTF_MASK 0x02000ul
129 #define SILENTSTEP3_CHOPCONF_HDEC_16 0x00000ul
130 #define SILENTSTEP3_CHOPCONF_HDEC_32 0x00800ul
131 #define SILENTSTEP3_CHOPCONF_HDEC_48 0x01000ul
132 #define SILENTSTEP3_CHOPCONF_HDEC_64 0x01800ul
133 #define SILENTSTEP3_CHOPCONF_HDEC_MASK 0x01800ul
134 #define SILENTSTEP3_CHOPCONF_HEND_0 0x00180ul
135 #define SILENTSTEP3_CHOPCONF_HEND_MASK 0x00780ul
136 #define SILENTSTEP3_CHOPCONF_HSTRT_4 0x00030ul
137 #define SILENTSTEP3_CHOPCONF_HSTRT_MASK 0x00070ul
138 #define SILENTSTEP3_CHOPCONF_TOFF_4 0x00004ul
139 #define SILENTSTEP3_CHOPCONF_TOFF_MASK 0x0000Ful
140 
145 #define SILENTSTEP3_SMARTEN_SEIMIN_HALF_CS 0x00000ul
146 #define SILENTSTEP3_SMARTEN_SEIMIN_QUARTER_CS 0x08000ul
147 #define SILENTSTEP3_SMARTEN_SEIMIN_MASK 0x08000ul
148 #define SILENTSTEP3_SMARTEN_SEDN_32 0x00000ul
149 #define SILENTSTEP3_SMARTEN_SEDN_8 0x02000ul
150 #define SILENTSTEP3_SMARTEN_SEDN_2 0x04000ul
151 #define SILENTSTEP3_SMARTEN_SEDN_1 0x06000ul
152 #define SILENTSTEP3_SMARTEN_SEDN_MASK 0x06000ul
153 #define SILENTSTEP3_SMARTEN_SEMAX_2 0x00200ul
154 #define SILENTSTEP3_SMARTEN_SEMAX_MASK 0x00F00ul
155 #define SILENTSTEP3_SMARTEN_SEUP_1 0x00000ul
156 #define SILENTSTEP3_SMARTEN_SEUP_2 0x00020ul
157 #define SILENTSTEP3_SMARTEN_SEUP_4 0x00040ul
158 #define SILENTSTEP3_SMARTEN_SEUP_8 0x00060ul
159 #define SILENTSTEP3_SMARTEN_SEUP_MASK 0x00060ul
160 #define SILENTSTEP3_SMARTEN_SEMIN_2 0x00002ul
161 #define SILENTSTEP3_SMARTEN_SEMIN_MASK 0x0000Ful
162 
167 #define SILENTSTEP3_SGCSCONF_SFILT_STANDARD 0x00000ul
168 #define SILENTSTEP3_SGCSCONF_SFILT_FILTERED 0x10000ul
169 #define SILENTSTEP3_SGCSCONF_SFILT_MASK 0x10000ul
170 #define SILENTSTEP3_SGCSCONF_SGT_0 0x00000ul
171 #define SILENTSTEP3_SGCSCONF_SGT_MASK 0x07F00ul
172 #define SILENTSTEP3_SGCSCONF_CS_2_OF_32 0x00002ul
173 #define SILENTSTEP3_SGCSCONF_CS_MASK 0x0001Ful
174 
179 #define SILENTSTEP3_DRVCONF_TST_MASK 0x10000ul
180 #define SILENTSTEP3_DRVCONF_SLPH_MIN 0x00000ul
181 #define SILENTSTEP3_DRVCONF_SLPH_MIN_TEMP 0x04000ul
182 #define SILENTSTEP3_DRVCONF_SLPH_MED_TEMP 0x08000ul
183 #define SILENTSTEP3_DRVCONF_SLPH_MAX 0x0C000ul
184 #define SILENTSTEP3_DRVCONF_SLPH_MASK 0x0C000ul
185 #define SILENTSTEP3_DRVCONF_SLPL_MIN 0x00000ul
186 #define SILENTSTEP3_DRVCONF_SLPL_MIN_TEMP 0x01000ul
187 #define SILENTSTEP3_DRVCONF_SLPL_MED_TEMP 0x02000ul
188 #define SILENTSTEP3_DRVCONF_SLPL_MAX 0x03000ul
189 #define SILENTSTEP3_DRVCONF_SLPL_MASK 0x03000ul
190 #define SILENTSTEP3_DRVCONF_DISS2G_ENABLE 0x00000ul
191 #define SILENTSTEP3_DRVCONF_DISS2G_DISABLE 0x00400ul
192 #define SILENTSTEP3_DRVCONF_DISS2G_MASK 0x00400ul
193 #define SILENTSTEP3_DRVCONF_TS2G_3_2US 0x00000ul
194 #define SILENTSTEP3_DRVCONF_TS2G_1_6US 0x00100ul
195 #define SILENTSTEP3_DRVCONF_TS2G_1_2US 0x00200ul
196 #define SILENTSTEP3_DRVCONF_TS2G_0_8US 0x00300ul
197 #define SILENTSTEP3_DRVCONF_TS2G_MASK 0x00300ul
198 #define SILENTSTEP3_DRVCONF_SDOFF_0 0x00000ul
199 #define SILENTSTEP3_DRVCONF_SDOFF_1 0x00080ul
200 #define SILENTSTEP3_DRVCONF_SDOFF_MASK 0x00080ul
201 #define SILENTSTEP3_DRVCONF_VSENSE_305MV 0x00000ul
202 #define SILENTSTEP3_DRVCONF_VSENSE_165MV 0x00040ul
203 #define SILENTSTEP3_DRVCONF_VSENSE_MASK 0x00040ul
204 #define SILENTSTEP3_DRVCONF_RDSEL_MSTEP 0x00000ul
205 #define SILENTSTEP3_DRVCONF_RDSEL_SG_LEVEL 0x00010ul
206 #define SILENTSTEP3_DRVCONF_RDSEL_SG_CS_LEVEL 0x00020ul
207 #define SILENTSTEP3_DRVCONF_RDSEL_MASK 0x00030ul
208 
213 #define SILENTSTEP3_PIN_STATE_LOW 0
214 #define SILENTSTEP3_PIN_STATE_HIGH 1
215 
220 #define SILENTSTEP3_DIR_CCW 0
221 #define SILENTSTEP3_DIR_CW 1
222 
227 #define SILENTSTEP3_MODE_FULL_STEP 8
228 #define SILENTSTEP3_MODE_HALF_STEP 7
229 #define SILENTSTEP3_MODE_QUARTER_STEP 6
230 #define SILENTSTEP3_MODE_1_OVER_8_STEP 5
231 #define SILENTSTEP3_MODE_1_OVER_16_STEP 4
232 #define SILENTSTEP3_MODE_1_OVER_32_STEP 3
233 #define SILENTSTEP3_MODE_1_OVER_64_STEP 2
234 #define SILENTSTEP3_MODE_1_OVER_128_STEP 1
235 #define SILENTSTEP3_MODE_1_OVER_256_STEP 0
236 
241 #define SILENTSTEP3_SPEED_VERY_SLOW 0
242 #define SILENTSTEP3_SPEED_SLOW 1
243 #define SILENTSTEP3_SPEED_MEDIUM 2
244 #define SILENTSTEP3_SPEED_FAST 3
245 #define SILENTSTEP3_SPEED_VERY_FAST 4
246 
255 #define SILENTSTEP3_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
256 #define SILENTSTEP3_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
257  // silentstep3_set
259 
274 #define SILENTSTEP3_MAP_MIKROBUS( cfg, mikrobus ) \
275  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
276  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
277  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
278  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
279  cfg.en = MIKROBUS( mikrobus, MIKROBUS_AN ); \
280  cfg.sg = MIKROBUS( mikrobus, MIKROBUS_RST ); \
281  cfg.step = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
282  cfg.dir = MIKROBUS( mikrobus, MIKROBUS_INT )
283  // silentstep3_map // silentstep3
286 
291 typedef struct
292 {
293  // Output pins
294  digital_out_t en;
295  digital_out_t step;
296  digital_out_t dir;
298  // Input pins
299  digital_in_t sg;
301  // Modules
302  spi_master_t spi;
304  pin_name_t chip_select;
306  uint32_t drvctrl;
307  uint32_t chopconf;
308  uint32_t smarten;
309  uint32_t sgcsconf;
310  uint32_t drvconf;
312 } silentstep3_t;
313 
318 typedef struct
319 {
320  // Communication gpio pins
321  pin_name_t miso;
322  pin_name_t mosi;
323  pin_name_t sck;
324  pin_name_t cs;
326  // Additional gpio pins
327  pin_name_t en;
328  pin_name_t sg;
329  pin_name_t step;
330  pin_name_t dir;
332  // static variable
333  uint32_t spi_speed;
334  spi_master_mode_t spi_mode;
335  spi_master_chip_select_polarity_t cs_polarity;
338 
343 typedef enum
344 {
346  SILENTSTEP3_ERROR = -1
347 
349 
366 
381 
395 
409 err_t silentstep3_write_register ( silentstep3_t *ctx, uint8_t reg, uint32_t data_in, uint32_t *data_out );
410 
431 err_t silentstep3_set_step_mode ( silentstep3_t *ctx, uint8_t mode );
432 
442 
452 
463 void silentstep3_set_direction ( silentstep3_t *ctx, uint8_t dir );
464 
474 
485 void silentstep3_set_step_pin ( silentstep3_t *ctx, uint8_t state );
486 
496 
512 void silentstep3_drive_motor ( silentstep3_t *ctx, uint32_t steps, uint8_t speed );
513 
514 #ifdef __cplusplus
515 }
516 #endif
517 #endif // SILENTSTEP3_H
518  // silentstep3
520 
521 // ------------------------------------------------------------------------ END
silentstep3_set_step_pin
void silentstep3_set_step_pin(silentstep3_t *ctx, uint8_t state)
Silent Step 3 set step pin function.
silentstep3_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: silentstep3.h:334
silentstep3_return_value_t
silentstep3_return_value_t
Silent Step 3 Click return value data.
Definition: silentstep3.h:344
SILENTSTEP3_OK
@ SILENTSTEP3_OK
Definition: silentstep3.h:345
silentstep3_t::chip_select
pin_name_t chip_select
Definition: silentstep3.h:304
silentstep3_enable_device
void silentstep3_enable_device(silentstep3_t *ctx)
Silent Step 3 enable device function.
silentstep3_t::step
digital_out_t step
Definition: silentstep3.h:295
SILENTSTEP3_ERROR
@ SILENTSTEP3_ERROR
Definition: silentstep3.h:346
silentstep3_cfg_t
Silent Step 3 Click configuration object.
Definition: silentstep3.h:319
spi_specifics.h
This file contains SPI specific macros, functions, etc.
silentstep3_t::en
digital_out_t en
Definition: silentstep3.h:294
silentstep3_cfg_t::sg
pin_name_t sg
Definition: silentstep3.h:328
silentstep3_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: silentstep3.h:335
silentstep3_cfg_t::spi_speed
uint32_t spi_speed
Definition: silentstep3.h:333
silentstep3_t::sgcsconf
uint32_t sgcsconf
Definition: silentstep3.h:309
silentstep3_t::drvconf
uint32_t drvconf
Definition: silentstep3.h:310
silentstep3_t
Silent Step 3 Click context object.
Definition: silentstep3.h:292
silentstep3_cfg_t::miso
pin_name_t miso
Definition: silentstep3.h:321
silentstep3_cfg_t::sck
pin_name_t sck
Definition: silentstep3.h:323
silentstep3_write_register
err_t silentstep3_write_register(silentstep3_t *ctx, uint8_t reg, uint32_t data_in, uint32_t *data_out)
Silent Step 3 write command function.
silentstep3_init
err_t silentstep3_init(silentstep3_t *ctx, silentstep3_cfg_t *cfg)
Silent Step 3 initialization function.
silentstep3_switch_direction
void silentstep3_switch_direction(silentstep3_t *ctx)
Silent Step 3 switch direction function.
silentstep3_t::spi
spi_master_t spi
Definition: silentstep3.h:302
silentstep3_get_sg_pin
uint8_t silentstep3_get_sg_pin(silentstep3_t *ctx)
Silent Step 3 get sg pin function.
silentstep3_cfg_t::mosi
pin_name_t mosi
Definition: silentstep3.h:322
silentstep3_t::chopconf
uint32_t chopconf
Definition: silentstep3.h:307
silentstep3_t::dir
digital_out_t dir
Definition: silentstep3.h:296
silentstep3_t::sg
digital_in_t sg
Definition: silentstep3.h:299
silentstep3_cfg_t::en
pin_name_t en
Definition: silentstep3.h:327
silentstep3_set_step_mode
err_t silentstep3_set_step_mode(silentstep3_t *ctx, uint8_t mode)
Silent Step 3 set step mode function.
silentstep3_set_direction
void silentstep3_set_direction(silentstep3_t *ctx, uint8_t dir)
Silent Step 3 set direction function.
silentstep3_drive_motor
void silentstep3_drive_motor(silentstep3_t *ctx, uint32_t steps, uint8_t speed)
Silent Step 3 driver motor function.
silentstep3_cfg_t::dir
pin_name_t dir
Definition: silentstep3.h:330
silentstep3_default_cfg
err_t silentstep3_default_cfg(silentstep3_t *ctx)
Silent Step 3 default configuration function.
silentstep3_disable_device
void silentstep3_disable_device(silentstep3_t *ctx)
Silent Step 3 disable device function.
silentstep3_cfg_setup
void silentstep3_cfg_setup(silentstep3_cfg_t *cfg)
Silent Step 3 configuration object setup function.
silentstep3_t::smarten
uint32_t smarten
Definition: silentstep3.h:308
silentstep3_cfg_t::step
pin_name_t step
Definition: silentstep3.h:329
silentstep3_t::drvctrl
uint32_t drvctrl
Definition: silentstep3.h:306
silentstep3_cfg_t::cs
pin_name_t cs
Definition: silentstep3.h:324