silentstep4  2.1.0.0
silentstep4.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 SILENTSTEP4_H
29 #define SILENTSTEP4_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_i2c_master.h"
48 #include "drv_spi_master.h"
49 #include "spi_specifics.h"
50 
71 #define SILENTSTEP4_REG_GCONF 0x00
72 #define SILENTSTEP4_REG_GSTAT 0x01
73 #define SILENTSTEP4_REG_IFCNT 0x02
74 #define SILENTSTEP4_REG_NODECONF 0x03
75 #define SILENTSTEP4_REG_IOIN 0x04
76 #define SILENTSTEP4_REG_DRV_CONF 0x0A
77 #define SILENTSTEP4_REG_GLOBAL_SCALER 0x0B
78 #define SILENTSTEP4_REG_IHOLD_IRUN 0x10
79 #define SILENTSTEP4_REG_TPOWERDOWN 0x11
80 #define SILENTSTEP4_REG_TSTEP 0x12
81 #define SILENTSTEP4_REG_TPWMTHRS 0x13
82 #define SILENTSTEP4_REG_TCOOLTHRS 0x14
83 #define SILENTSTEP4_REG_THIGH 0x15
84 #define SILENTSTEP4_REG_DIRECT_MODE 0x2D
85 #define SILENTSTEP4_REG_ENCMODE 0x38
86 #define SILENTSTEP4_REG_X_ENC 0x39
87 #define SILENTSTEP4_REG_ENC_CONST 0x3A
88 #define SILENTSTEP4_REG_ENC_STATUS 0x3B
89 #define SILENTSTEP4_REG_ENC_LATCH 0x3C
90 #define SILENTSTEP4_REG_ADC_VSUPPLY_AIN 0x50
91 #define SILENTSTEP4_REG_ADC_TEMP 0x51
92 #define SILENTSTEP4_REG_OTW_OV_VTH 0x52
93 #define SILENTSTEP4_REG_MSLUT_0 0x60
94 #define SILENTSTEP4_REG_MSLUT_1 0x61
95 #define SILENTSTEP4_REG_MSLUT_2 0x62
96 #define SILENTSTEP4_REG_MSLUT_3 0x63
97 #define SILENTSTEP4_REG_MSLUT_4 0x64
98 #define SILENTSTEP4_REG_MSLUT_5 0x65
99 #define SILENTSTEP4_REG_MSLUT_6 0x66
100 #define SILENTSTEP4_REG_MSLUT_7 0x67
101 #define SILENTSTEP4_REG_MSLUTSEL 0x68
102 #define SILENTSTEP4_REG_MSLUTSTART 0x69
103 #define SILENTSTEP4_REG_MSCNT 0x6A
104 #define SILENTSTEP4_REG_MSCURACT 0x6B
105 #define SILENTSTEP4_REG_CHOPCONF 0x6C
106 #define SILENTSTEP4_REG_COOLCONF 0x6D
107 #define SILENTSTEP4_REG_DRV_STATUS 0x6F
108 #define SILENTSTEP4_REG_PWMCONF 0x70
109 #define SILENTSTEP4_REG_PWM_SCALE 0x71
110 #define SILENTSTEP4_REG_PWM_AUTO 0x72
111 #define SILENTSTEP4_REG_SG4_THRS 0x74
112 #define SILENTSTEP4_REG_SG4_RESULT 0x75
113 #define SILENTSTEP4_REG_SG4_IND 0x76
114 
119 #define SILENTSTEP4_PCA9538A_REG_INPUT 0x00
120 #define SILENTSTEP4_PCA9538A_REG_OUTPUT 0x01
121 #define SILENTSTEP4_PCA9538A_REG_POLARITY 0x02
122 #define SILENTSTEP4_PCA9538A_REG_CONFIG 0x03
123 
138 #define SILENTSTEP4_IOIN_VERSION_MASK 0xFF000000ul
139 #define SILENTSTEP4_IOIN_VERSION_DEFAULT 0x40000000ul
140 
145 #define SILENTSTEP4_PIN_EN 0x01
146 #define SILENTSTEP4_PIN_SLEEP 0x02
147 #define SILENTSTEP4_PIN_DIAG0 0x04
148 #define SILENTSTEP4_PIN_DIAG1 0x08
149 #define SILENTSTEP4_PIN_OV 0x10
150 
155 #define SILENTSTEP4_PCA9538A_DEFAULT_CONFIG 0xFC
156 
161 #define SILENTSTEP4_DIR_CW 0
162 #define SILENTSTEP4_DIR_CCW 1
163 
168 #define SILENTSTEP4_PIN_STATE_LOW 0
169 #define SILENTSTEP4_PIN_STATE_HIGH 1
170 
175 #define SILENTSTEP4_SPEED_VERY_SLOW 0
176 #define SILENTSTEP4_SPEED_SLOW 1
177 #define SILENTSTEP4_SPEED_MEDIUM 2
178 #define SILENTSTEP4_SPEED_FAST 3
179 #define SILENTSTEP4_SPEED_VERY_FAST 4
180 
185 #define SILENTSTEP4_TOFF_MASK 0x0000000Ful
186 #define SILENTSTEP4_TOFF_SHIFT 0
187 #define SILENTSTEP4_TOFF_DRIVER_DISABLE 0
188 #define SILENTSTEP4_TOFF_MIN 1
189 #define SILENTSTEP4_TOFF_DEFAULT 4
190 #define SILENTSTEP4_TOFF_MAX 15
191 
196 #define SILENTSTEP4_MRES_MASK 0x0F000000ul
197 #define SILENTSTEP4_MRES_SHIFT 24
198 #define SILENTSTEP4_MRES_256 0
199 #define SILENTSTEP4_MRES_128 1
200 #define SILENTSTEP4_MRES_64 2
201 #define SILENTSTEP4_MRES_32 3
202 #define SILENTSTEP4_MRES_16 4
203 #define SILENTSTEP4_MRES_8 5
204 #define SILENTSTEP4_MRES_4 6
205 #define SILENTSTEP4_MRES_2 7
206 #define SILENTSTEP4_MRES_FULLSTEP 8
207 
212 #define SILENTSTEP4_IRUN_MASK 0x00000F00ul
213 #define SILENTSTEP4_IRUN_SHIFT 8
214 #define SILENTSTEP4_IRUN_MIN 0
215 #define SILENTSTEP4_IRUN_DEFAULT 16
216 #define SILENTSTEP4_IRUN_MAX 31
217 
223 #define SILENTSTEP4_DEVICE_ADDRESS_A1A0_00 0x70
224 #define SILENTSTEP4_DEVICE_ADDRESS_A1A0_01 0x71
225 #define SILENTSTEP4_DEVICE_ADDRESS_A1A0_10 0x72
226 #define SILENTSTEP4_DEVICE_ADDRESS_A1A0_11 0x73
227 
236 #define SILENTSTEP4_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
237 #define SILENTSTEP4_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
238  // silentstep4_set
240 
255 #define SILENTSTEP4_MAP_MIKROBUS( cfg, mikrobus ) \
256  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
257  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
258  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
259  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
260  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
261  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
262  cfg.dir = MIKROBUS( mikrobus, MIKROBUS_AN ); \
263  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
264  cfg.step = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
265  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
266  // silentstep4_map // silentstep4
269 
274 typedef struct silentstep4_s
275 {
276  digital_out_t dir;
277  digital_out_t rst;
278  digital_out_t step;
280  digital_in_t int_pin;
282  i2c_master_t i2c;
283  spi_master_t spi;
285  uint8_t slave_address;
286  pin_name_t chip_select;
289 
294 typedef struct
295 {
296  pin_name_t scl;
297  pin_name_t sda;
298  pin_name_t miso;
299  pin_name_t mosi;
300  pin_name_t sck;
301  pin_name_t cs;
302  pin_name_t dir;
303  pin_name_t rst;
304  pin_name_t step;
305  pin_name_t int_pin;
307  uint32_t i2c_speed;
308  uint8_t i2c_address;
310  uint32_t spi_speed;
311  spi_master_mode_t spi_mode;
312  spi_master_chip_select_polarity_t cs_polarity;
315 
320 typedef enum
321 {
323  SILENTSTEP4_ERROR = -1
324 
326 
343 
358 
372 
386 err_t silentstep4_write_reg ( silentstep4_t *ctx, uint8_t reg, uint32_t data_in );
387 
400 err_t silentstep4_read_reg ( silentstep4_t *ctx, uint8_t reg, uint32_t *data_out );
401 
415 err_t silentstep4_pca_write_reg ( silentstep4_t *ctx, uint8_t reg, uint8_t data_in );
416 
429 err_t silentstep4_pca_read_reg ( silentstep4_t *ctx, uint8_t reg, uint8_t *data_out );
430 
442 
455 err_t silentstep4_get_en_pin ( silentstep4_t *ctx, uint8_t *state );
456 
469 err_t silentstep4_set_en_pin ( silentstep4_t *ctx, uint8_t state );
470 
483 err_t silentstep4_get_sleep_pin ( silentstep4_t *ctx, uint8_t *state );
484 
497 err_t silentstep4_set_sleep_pin ( silentstep4_t *ctx, uint8_t state );
498 
511 err_t silentstep4_get_diag0_pin ( silentstep4_t *ctx, uint8_t *state );
512 
525 err_t silentstep4_get_diag1_pin ( silentstep4_t *ctx, uint8_t *state );
526 
539 err_t silentstep4_get_ov_pin ( silentstep4_t *ctx, uint8_t *state );
540 
552 
564 
575 void silentstep4_set_direction ( silentstep4_t *ctx, uint8_t dir );
576 
586 
596 
607 void silentstep4_set_rst_pin ( silentstep4_t *ctx, uint8_t state );
608 
618 
629 void silentstep4_set_step_pin ( silentstep4_t *ctx, uint8_t state );
630 
642 err_t silentstep4_set_toff ( silentstep4_t *ctx, uint8_t toff );
643 
664 err_t silentstep4_set_step_res ( silentstep4_t *ctx, uint8_t mres );
665 
677 err_t silentstep4_set_run_current ( silentstep4_t *ctx, uint8_t irun );
678 
694 void silentstep4_drive_motor ( silentstep4_t *ctx, uint32_t steps, uint8_t speed );
695 
696 #ifdef __cplusplus
697 }
698 #endif
699 #endif // SILENTSTEP4_H
700  // silentstep4
702 
703 // ------------------------------------------------------------------------ END
silentstep4_s::chip_select
pin_name_t chip_select
Definition: silentstep4.h:286
silentstep4_cfg_t::spi_speed
uint32_t spi_speed
Definition: silentstep4.h:310
SILENTSTEP4_OK
@ SILENTSTEP4_OK
Definition: silentstep4.h:322
silentstep4_set_step_pin
void silentstep4_set_step_pin(silentstep4_t *ctx, uint8_t state)
Silent Step 4 set step pin function.
silentstep4_drive_motor
void silentstep4_drive_motor(silentstep4_t *ctx, uint32_t steps, uint8_t speed)
Silent Step 4 driver motor function.
silentstep4_return_value_t
silentstep4_return_value_t
Silent Step 4 Click return value data.
Definition: silentstep4.h:321
silentstep4_s::int_pin
digital_in_t int_pin
Definition: silentstep4.h:280
silentstep4_s::spi
spi_master_t spi
Definition: silentstep4.h:283
silentstep4_cfg_setup
void silentstep4_cfg_setup(silentstep4_cfg_t *cfg)
Silent Step 4 configuration object setup function.
silentstep4_cfg_t::rst
pin_name_t rst
Definition: silentstep4.h:303
silentstep4_cfg_t::dir
pin_name_t dir
Definition: silentstep4.h:302
silentstep4_cfg_t::sda
pin_name_t sda
Definition: silentstep4.h:297
silentstep4_check_com
err_t silentstep4_check_com(silentstep4_t *ctx)
Silent Step 4 check com function.
silentstep4_get_diag0_pin
err_t silentstep4_get_diag0_pin(silentstep4_t *ctx, uint8_t *state)
Silent Step 4 get diag0 pin function.
silentstep4_cfg_t
Silent Step 4 Click configuration object.
Definition: silentstep4.h:295
spi_specifics.h
This file contains SPI specific macros, functions, etc.
silentstep4_write_reg
err_t silentstep4_write_reg(silentstep4_t *ctx, uint8_t reg, uint32_t data_in)
Silent Step 4 write reg function.
silentstep4_set_step_res
err_t silentstep4_set_step_res(silentstep4_t *ctx, uint8_t mres)
Silent Step 4 set step res function.
silentstep4_cfg_t::int_pin
pin_name_t int_pin
Definition: silentstep4.h:305
silentstep4_get_int_pin
uint8_t silentstep4_get_int_pin(silentstep4_t *ctx)
Silent Step 4 get int pin function.
silentstep4_s
Silent Step 4 Click context object.
Definition: silentstep4.h:275
silentstep4_get_en_pin
err_t silentstep4_get_en_pin(silentstep4_t *ctx, uint8_t *state)
Silent Step 4 get en pin function.
silentstep4_set_sleep_pin
err_t silentstep4_set_sleep_pin(silentstep4_t *ctx, uint8_t state)
Silent Step 4 set sleep pin function.
silentstep4_cfg_t::mosi
pin_name_t mosi
Definition: silentstep4.h:299
SILENTSTEP4_ERROR
@ SILENTSTEP4_ERROR
Definition: silentstep4.h:323
silentstep4_cfg_t::i2c_address
uint8_t i2c_address
Definition: silentstep4.h:308
silentstep4_default_cfg
err_t silentstep4_default_cfg(silentstep4_t *ctx)
Silent Step 4 default configuration function.
silentstep4_reset_pca
void silentstep4_reset_pca(silentstep4_t *ctx)
Silent Step 4 reset device function.
silentstep4_cfg_t::cs
pin_name_t cs
Definition: silentstep4.h:301
silentstep4_set_run_current
err_t silentstep4_set_run_current(silentstep4_t *ctx, uint8_t irun)
Silent Step 4 set run current function.
silentstep4_get_sleep_pin
err_t silentstep4_get_sleep_pin(silentstep4_t *ctx, uint8_t *state)
Silent Step 4 get sleep pin function.
silentstep4_s::step
digital_out_t step
Definition: silentstep4.h:278
silentstep4_pca_write_reg
err_t silentstep4_pca_write_reg(silentstep4_t *ctx, uint8_t reg, uint8_t data_in)
Silent Step 4 pca write reg function.
silentstep4_cfg_t::step
pin_name_t step
Definition: silentstep4.h:304
silentstep4_init
err_t silentstep4_init(silentstep4_t *ctx, silentstep4_cfg_t *cfg)
Silent Step 4 initialization function.
silentstep4_t
struct silentstep4_s silentstep4_t
Silent Step 4 Click context object.
silentstep4_cfg_t::sck
pin_name_t sck
Definition: silentstep4.h:300
silentstep4_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: silentstep4.h:312
silentstep4_read_reg
err_t silentstep4_read_reg(silentstep4_t *ctx, uint8_t reg, uint32_t *data_out)
Silent Step 4 read reg function.
silentstep4_set_en_pin
err_t silentstep4_set_en_pin(silentstep4_t *ctx, uint8_t state)
Silent Step 4 set en pin function.
silentstep4_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: silentstep4.h:307
silentstep4_enable_device
err_t silentstep4_enable_device(silentstep4_t *ctx)
Silent Step 4 enable device function.
silentstep4_cfg_t::scl
pin_name_t scl
Definition: silentstep4.h:296
silentstep4_s::rst
digital_out_t rst
Definition: silentstep4.h:277
silentstep4_get_ov_pin
err_t silentstep4_get_ov_pin(silentstep4_t *ctx, uint8_t *state)
Silent Step 4 get ov pin function.
silentstep4_set_rst_pin
void silentstep4_set_rst_pin(silentstep4_t *ctx, uint8_t state)
Silent Step 4 set rst pin function.
silentstep4_set_direction
void silentstep4_set_direction(silentstep4_t *ctx, uint8_t dir)
Silent Step 4 set direction function.
silentstep4_s::slave_address
uint8_t slave_address
Definition: silentstep4.h:285
silentstep4_disable_device
err_t silentstep4_disable_device(silentstep4_t *ctx)
Silent Step 4 disable device function.
silentstep4_switch_direction
void silentstep4_switch_direction(silentstep4_t *ctx)
Silent Step 4 switch direction function.
silentstep4_cfg_t::miso
pin_name_t miso
Definition: silentstep4.h:298
silentstep4_pca_read_reg
err_t silentstep4_pca_read_reg(silentstep4_t *ctx, uint8_t reg, uint8_t *data_out)
Silent Step 4 pca read reg function.
silentstep4_get_diag1_pin
err_t silentstep4_get_diag1_pin(silentstep4_t *ctx, uint8_t *state)
Silent Step 4 get diag1 pin function.
silentstep4_s::i2c
i2c_master_t i2c
Definition: silentstep4.h:282
silentstep4_set_toff
err_t silentstep4_set_toff(silentstep4_t *ctx, uint8_t toff)
Silent Step 4 set toff function.
silentstep4_s::dir
digital_out_t dir
Definition: silentstep4.h:276
silentstep4_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: silentstep4.h:311