stepper10  2.1.0.0
stepper10.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 STEPPER10_H
29 #define STEPPER10_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 STEPPER10_TCA9534A_REG_INPUT 0x00
72 #define STEPPER10_TCA9534A_REG_OUTPUT 0x01
73 #define STEPPER10_TCA9534A_REG_POLARITY 0x02
74 #define STEPPER10_TCA9534A_REG_CONFIG 0x03
75  // stepper10_reg
77 
92 #define STEPPER10_PIN0_MS0 0x01
93 #define STEPPER10_PIN0_MS1 0x02
94 #define STEPPER10_PIN0_MS2 0x04
95 #define STEPPER10_PIN0_MS_MASK 0x07
96 #define STEPPER10_PIN0_SLEEP 0x08
97 #define STEPPER10_PIN0_MDT0 0x10
98 #define STEPPER10_PIN0_MDT1 0x20
99 #define STEPPER10_PIN0_MDT_MASK 0x30
100 #define STEPPER10_PIN0_AGC 0x40
101 #define STEPPER10_PIN0_IF_SEL 0x80
102 #define STEPPER10_PIN1_TORQUE0 0x01
103 #define STEPPER10_PIN1_TORQUE1 0x02
104 #define STEPPER10_PIN1_TORQUE2 0x04
105 #define STEPPER10_PIN1_TORQUE_MASK 0x07
106 #define STEPPER10_PIN1_CLIM0 0x08
107 #define STEPPER10_PIN1_EDG_SEL 0x10
108 #define STEPPER10_PIN1_MO 0x20
109 #define STEPPER10_PIN1_LO0 0x40
110 #define STEPPER10_PIN1_LO1 0x80
111 #define STEPPER10_PIN1_LO_MASK 0xC0
112 
117 #define STEPPER10_TCA9534A_0_DEFAULT_CONFIG 0x00
118 #define STEPPER10_TCA9534A_1_DEFAULT_CONFIG 0xE0
119 
124 #define STEPPER10_DIR_CW 0
125 #define STEPPER10_DIR_CCW 1
126 
131 #define STEPPER10_PIN_STATE_LOW 0
132 #define STEPPER10_PIN_STATE_HIGH 1
133 
138 #define STEPPER10_SPEED_VERY_SLOW 0
139 #define STEPPER10_SPEED_SLOW 1
140 #define STEPPER10_SPEED_MEDIUM 2
141 #define STEPPER10_SPEED_FAST 3
142 #define STEPPER10_SPEED_VERY_FAST 4
143 
148 #define STEPPER10_MODE_FULL_STEP 0
149 #define STEPPER10_MODE_HALF_STEP 1
150 #define STEPPER10_MODE_QUARTER_STEP 2
151 #define STEPPER10_MODE_1_OVER_8 3
152 #define STEPPER10_MODE_1_OVER_16 4
153 #define STEPPER10_MODE_1_OVER_32 5
154 #define STEPPER10_MODE_1_OVER_64 6
155 #define STEPPER10_MODE_1_OVER_128 7
156 
161 #define STEPPER10_MIXED_DECAY_FAST_37_5 0
162 #define STEPPER10_MIXED_DECAY_FAST_50 1
163 #define STEPPER10_MIXED_DECAY_FAST_ONLY 2
164 #define STEPPER10_MIXED_DECAY_ADMD 3
165 
170 #define STEPPER10_TORQUE_100 0
171 #define STEPPER10_TORQUE_85 1
172 #define STEPPER10_TORQUE_70 2
173 #define STEPPER10_TORQUE_60 3
174 #define STEPPER10_TORQUE_50 4
175 #define STEPPER10_TORQUE_40 5
176 #define STEPPER10_TORQUE_25 6
177 #define STEPPER10_TORQUE_10 7
178 
183 #define STEPPER10_LO_THERMAL_SHUTDOWN 0
184 #define STEPPER10_LO_MOTOR_LOAD_OPEN 1
185 #define STEPPER10_LO_OVER_CURRENT 2
186 #define STEPPER10_LO_NORMAL 3
187 
193 #define STEPPER10_DEVICE0_ADDRESS_A2A1_00 0x38
194 #define STEPPER10_DEVICE0_ADDRESS_A2A1_01 0x3A
195 #define STEPPER10_DEVICE0_ADDRESS_A2A1_10 0x3C
196 #define STEPPER10_DEVICE0_ADDRESS_A2A1_11 0x3E
197 #define STEPPER10_DEVICE1_ADDRESS_A2A1_00 0x39
198 #define STEPPER10_DEVICE1_ADDRESS_A2A1_01 0x3B
199 #define STEPPER10_DEVICE1_ADDRESS_A2A1_10 0x3D
200 #define STEPPER10_DEVICE1_ADDRESS_A2A1_11 0x3F
201 
210 #define STEPPER10_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
211 #define STEPPER10_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
212  // stepper10_set
214 
229 #define STEPPER10_MAP_MIKROBUS( cfg, mikrobus ) \
230  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
231  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
232  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
233  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
234  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
235  cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS ); \
236  cfg.dir = MIKROBUS( mikrobus, MIKROBUS_AN ); \
237  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
238  cfg.step = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
239  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
240  // stepper10_map // stepper10
243 
248 typedef struct stepper10_s
249 {
250  digital_out_t dir;
251  digital_out_t rst;
252  digital_out_t step;
253  digital_out_t en;
255  digital_in_t int_pin;
257  i2c_master_t i2c;
258  spi_master_t spi;
260  uint8_t slave_address;
261  pin_name_t chip_select;
264 
269 typedef struct
270 {
271  pin_name_t scl;
272  pin_name_t sda;
273  pin_name_t miso;
274  pin_name_t mosi;
275  pin_name_t sck;
276  pin_name_t en;
277  pin_name_t dir;
278  pin_name_t rst;
279  pin_name_t step;
280  pin_name_t int_pin;
282  uint32_t i2c_speed;
283  uint8_t i2c_address;
285  uint32_t spi_speed;
286  spi_master_mode_t spi_mode;
289 
294 typedef enum
295 {
297  STEPPER10_ERROR = -1
298 
300 
317 
332 
346 
358 err_t stepper10_write_spi_bank0 ( stepper10_t *ctx, uint32_t data_in );
359 
371 err_t stepper10_write_spi_bank1 ( stepper10_t *ctx, uint32_t data_in );
372 
386 err_t stepper10_tca_write_reg ( stepper10_t *ctx, uint8_t reg, uint8_t data_in );
387 
400 err_t stepper10_tca_read_reg ( stepper10_t *ctx, uint8_t reg, uint8_t *data_out );
401 
421 err_t stepper10_get_step_mode ( stepper10_t *ctx, uint8_t *mode );
422 
442 err_t stepper10_set_step_mode ( stepper10_t *ctx, uint8_t mode );
443 
456 err_t stepper10_get_sleep_pin ( stepper10_t *ctx, uint8_t *state );
457 
470 err_t stepper10_set_sleep_pin ( stepper10_t *ctx, uint8_t state );
471 
487 err_t stepper10_get_mixed_decay ( stepper10_t *ctx, uint8_t *mode );
488 
504 err_t stepper10_set_mixed_decay ( stepper10_t *ctx, uint8_t mode );
505 
518 err_t stepper10_get_agc_pin ( stepper10_t *ctx, uint8_t *state );
519 
532 err_t stepper10_set_agc_pin ( stepper10_t *ctx, uint8_t state );
533 
545 
557 
577 err_t stepper10_get_torque ( stepper10_t *ctx, uint8_t *mode );
578 
598 err_t stepper10_set_torque ( stepper10_t *ctx, uint8_t mode );
599 
612 err_t stepper10_get_clim0_pin ( stepper10_t *ctx, uint8_t *state );
613 
626 err_t stepper10_set_clim0_pin ( stepper10_t *ctx, uint8_t state );
627 
640 err_t stepper10_get_edg_sel_pin ( stepper10_t *ctx, uint8_t *state );
641 
654 err_t stepper10_set_edg_sel_pin ( stepper10_t *ctx, uint8_t state );
655 
668 err_t stepper10_get_mo_pin ( stepper10_t *ctx, uint8_t *state );
669 
685 err_t stepper10_get_lo_state ( stepper10_t *ctx, uint8_t *state );
686 
696 
706 
716 
727 void stepper10_set_direction ( stepper10_t *ctx, uint8_t dir );
728 
739 void stepper10_set_rst_pin ( stepper10_t *ctx, uint8_t state );
740 
750 
761 void stepper10_set_step_pin ( stepper10_t *ctx, uint8_t state );
762 
780 err_t stepper10_drive_motor ( stepper10_t *ctx, uint32_t steps, uint8_t speed );
781 
782 #ifdef __cplusplus
783 }
784 #endif
785 #endif // STEPPER10_H
786  // stepper10
788 
789 // ------------------------------------------------------------------------ END
stepper10_s::slave_address
uint8_t slave_address
Definition: stepper10.h:260
STEPPER10_ERROR
@ STEPPER10_ERROR
Definition: stepper10.h:297
stepper10_set_edg_sel_pin
err_t stepper10_set_edg_sel_pin(stepper10_t *ctx, uint8_t state)
Stepper 10 set edg_sel pin function.
stepper10_get_lo_state
err_t stepper10_get_lo_state(stepper10_t *ctx, uint8_t *state)
Stepper 10 get LO function.
stepper10_set_mixed_decay
err_t stepper10_set_mixed_decay(stepper10_t *ctx, uint8_t mode)
Stepper 10 set mixed decay function.
stepper10_s::spi
spi_master_t spi
Definition: stepper10.h:258
stepper10_reset_device
void stepper10_reset_device(stepper10_t *ctx)
Stepper 10 reset device function.
stepper10_get_int_pin
uint8_t stepper10_get_int_pin(stepper10_t *ctx)
Stepper 10 get INT pin function.
stepper10_cfg_t::dir
pin_name_t dir
Definition: stepper10.h:277
stepper10_disable_device
void stepper10_disable_device(stepper10_t *ctx)
Stepper 10 disable device function.
stepper10_cfg_t::scl
pin_name_t scl
Definition: stepper10.h:271
stepper10_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: stepper10.h:282
spi_specifics.h
This file contains SPI specific macros, functions, etc.
stepper10_cfg_t::spi_speed
uint32_t spi_speed
Definition: stepper10.h:285
stepper10_select_spi
err_t stepper10_select_spi(stepper10_t *ctx)
Stepper 10 select SPI function.
stepper10_get_mo_pin
err_t stepper10_get_mo_pin(stepper10_t *ctx, uint8_t *state)
Stepper 10 get mo pin function.
stepper10_set_step_pin
void stepper10_set_step_pin(stepper10_t *ctx, uint8_t state)
Stepper 10 set step pin function.
stepper10_get_sleep_pin
err_t stepper10_get_sleep_pin(stepper10_t *ctx, uint8_t *state)
Stepper 10 get sleep pin function.
stepper10_s
Stepper 10 Click context object.
Definition: stepper10.h:249
stepper10_s::int_pin
digital_in_t int_pin
Definition: stepper10.h:255
stepper10_s::i2c
i2c_master_t i2c
Definition: stepper10.h:257
stepper10_return_value_t
stepper10_return_value_t
Stepper 10 Click return value data.
Definition: stepper10.h:295
stepper10_get_torque
err_t stepper10_get_torque(stepper10_t *ctx, uint8_t *mode)
Stepper 10 get torque function.
stepper10_set_rst_pin
void stepper10_set_rst_pin(stepper10_t *ctx, uint8_t state)
Stepper 10 set rst pin function.
stepper10_set_sleep_pin
err_t stepper10_set_sleep_pin(stepper10_t *ctx, uint8_t state)
Stepper 10 set sleep pin function.
stepper10_s::chip_select
pin_name_t chip_select
Definition: stepper10.h:261
stepper10_cfg_t::mosi
pin_name_t mosi
Definition: stepper10.h:274
STEPPER10_OK
@ STEPPER10_OK
Definition: stepper10.h:296
stepper10_get_mixed_decay
err_t stepper10_get_mixed_decay(stepper10_t *ctx, uint8_t *mode)
Stepper 10 get mixed decay function.
stepper10_cfg_t::sda
pin_name_t sda
Definition: stepper10.h:272
stepper10_s::step
digital_out_t step
Definition: stepper10.h:252
stepper10_set_step_mode
err_t stepper10_set_step_mode(stepper10_t *ctx, uint8_t mode)
Stepper 10 set step mode function.
stepper10_s::dir
digital_out_t dir
Definition: stepper10.h:250
stepper10_get_agc_pin
err_t stepper10_get_agc_pin(stepper10_t *ctx, uint8_t *state)
Stepper 10 get agc pin function.
stepper10_cfg_t::en
pin_name_t en
Definition: stepper10.h:276
stepper10_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: stepper10.h:286
stepper10_set_agc_pin
err_t stepper10_set_agc_pin(stepper10_t *ctx, uint8_t state)
Stepper 10 set agc pin function.
stepper10_drive_motor
err_t stepper10_drive_motor(stepper10_t *ctx, uint32_t steps, uint8_t speed)
Stepper 10 driver motor function.
stepper10_t
struct stepper10_s stepper10_t
Stepper 10 Click context object.
stepper10_cfg_setup
void stepper10_cfg_setup(stepper10_cfg_t *cfg)
Stepper 10 configuration object setup function.
stepper10_tca_write_reg
err_t stepper10_tca_write_reg(stepper10_t *ctx, uint8_t reg, uint8_t data_in)
Stepper 10 tca write reg function.
stepper10_s::en
digital_out_t en
Definition: stepper10.h:253
stepper10_write_spi_bank0
err_t stepper10_write_spi_bank0(stepper10_t *ctx, uint32_t data_in)
Stepper 10 write spi bank0 function.
stepper10_cfg_t::sck
pin_name_t sck
Definition: stepper10.h:275
stepper10_select_gpio
err_t stepper10_select_gpio(stepper10_t *ctx)
Stepper 10 select GPIO function.
stepper10_write_spi_bank1
err_t stepper10_write_spi_bank1(stepper10_t *ctx, uint32_t data_in)
Stepper 10 write spi bank1 function.
stepper10_init
err_t stepper10_init(stepper10_t *ctx, stepper10_cfg_t *cfg)
Stepper 10 initialization function.
stepper10_get_step_mode
err_t stepper10_get_step_mode(stepper10_t *ctx, uint8_t *mode)
Stepper 10 get step mode function.
stepper10_s::rst
digital_out_t rst
Definition: stepper10.h:251
stepper10_default_cfg
err_t stepper10_default_cfg(stepper10_t *ctx)
Stepper 10 default configuration function.
stepper10_cfg_t::step
pin_name_t step
Definition: stepper10.h:279
stepper10_cfg_t::rst
pin_name_t rst
Definition: stepper10.h:278
stepper10_enable_device
void stepper10_enable_device(stepper10_t *ctx)
Stepper 10 enable device function.
stepper10_tca_read_reg
err_t stepper10_tca_read_reg(stepper10_t *ctx, uint8_t reg, uint8_t *data_out)
Stepper 10 tca read reg function.
stepper10_get_clim0_pin
err_t stepper10_get_clim0_pin(stepper10_t *ctx, uint8_t *state)
Stepper 10 get clim0 pin function.
stepper10_cfg_t
Stepper 10 Click configuration object.
Definition: stepper10.h:270
stepper10_cfg_t::i2c_address
uint8_t i2c_address
Definition: stepper10.h:283
stepper10_cfg_t::int_pin
pin_name_t int_pin
Definition: stepper10.h:280
stepper10_get_edg_sel_pin
err_t stepper10_get_edg_sel_pin(stepper10_t *ctx, uint8_t *state)
Stepper 10 get edg_sel pin function.
stepper10_set_torque
err_t stepper10_set_torque(stepper10_t *ctx, uint8_t mode)
Stepper 10 set torque function.
stepper10_cfg_t::miso
pin_name_t miso
Definition: stepper10.h:273
stepper10_set_direction
void stepper10_set_direction(stepper10_t *ctx, uint8_t dir)
Stepper 10 set direction function.
stepper10_set_clim0_pin
err_t stepper10_set_clim0_pin(stepper10_t *ctx, uint8_t state)
Stepper 10 set clim0 pin function.