dcmotor12 2.1.0.0
dcmotor12.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 DCMOTOR12_H
29#define DCMOTOR12_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_spi_master.h"
52#include "spi_specifics.h"
53#include "drv_i2c_master.h"
54#include "drv_analog_in.h"
55
76#define DCMOTOR12_REG_STATUS1 0x01
77#define DCMOTOR12_REG_STATUS2 0x02
78#define DCMOTOR12_REG_STATUS3 0x03
79#define DCMOTOR12_REG_CONFIG1 0x04
80#define DCMOTOR12_REG_CONFIG2 0x05
81#define DCMOTOR12_REG_CONFIG3 0x06
82#define DCMOTOR12_REG_CONFIG4 0x07
83#define DCMOTOR12_REG_CONFIG5 0x08
84#define DCMOTOR12_REG_CONFIG6 0x09
85#define DCMOTOR12_REG_CONFIG7 0x0A
86
91#define DCMOTOR12_REG_INPUT 0x00
92#define DCMOTOR12_REG_OUTPUT 0x01
93#define DCMOTOR12_REG_POLARITY 0x02
94#define DCMOTOR12_REG_CONFIG 0x03
95
96 // dcmotor12_reg
97
112#define DCMOTOR12_CONFIG12_OPEN_LOAD_NOP_100US 0x000000ul
113#define DCMOTOR12_CONFIG12_OPEN_LOAD_NOP_50US 0x002000ul
114#define DCMOTOR12_CONFIG12_OPEN_LOAD_NOP_500US 0x004000ul
115#define DCMOTOR12_CONFIG12_OPEN_LOAD_NOP_MASK 0x006000ul
116#define DCMOTOR12_CONFIG12_DUTY_OFF_LOW_SIDE 0x000000ul
117#define DCMOTOR12_CONFIG12_DUTY_OFF_HIGH_SIDE 0x001000ul
118#define DCMOTOR12_CONFIG12_DUTY_OFF_MASK 0x001000ul
119#define DCMOTOR12_CONFIG12_VBAT_UVC_0US 0x000000ul
120#define DCMOTOR12_CONFIG12_VBAT_UVC_100US 0x000800ul
121#define DCMOTOR12_CONFIG12_VBAT_UVC_MASK 0x000800ul
122#define DCMOTOR12_CONFIG12_CLIMIT_UP_6p5A 0x000000ul
123#define DCMOTOR12_CONFIG12_CLIMIT_UP_4p6A 0x000400ul
124#define DCMOTOR12_CONFIG12_CLIMIT_UP_MASK 0x000400ul
125#define DCMOTOR12_CONFIG12_CLIMIT_LOW_0p25A 0x000000ul
126#define DCMOTOR12_CONFIG12_CLIMIT_LOW_0p5A 0x000200ul
127#define DCMOTOR12_CONFIG12_CLIMIT_LOW_MASK 0x000200ul
128#define DCMOTOR12_CONFIG12_CLIMIT_LOW_0p25A 0x000000ul
129#define DCMOTOR12_CONFIG12_CLIMIT_LOW_0p5A 0x000200ul
130#define DCMOTOR12_CONFIG12_OPEN_LOAD_OP_200mA 0x000000ul
131#define DCMOTOR12_CONFIG12_OPEN_LOAD_OP_100mA 0x000080ul
132#define DCMOTOR12_CONFIG12_OPEN_LOAD_OP_300mA 0x000100ul
133#define DCMOTOR12_CONFIG12_OPEN_LOAD_OP_MASK 0x000180ul
134#define DCMOTOR12_CONFIG12_SR_MODE_NORMAL 0x000000ul
135#define DCMOTOR12_CONFIG12_SR_MODE_SLOW1 0x000010ul
136#define DCMOTOR12_CONFIG12_SR_MODE_SLOW2 0x000020ul
137#define DCMOTOR12_CONFIG12_SR_MODE_SLOW3 0x000030ul
138#define DCMOTOR12_CONFIG12_SR_MODE_SLOW4 0x000040ul
139#define DCMOTOR12_CONFIG12_SR_MODE_FAST2 0x000050ul
140#define DCMOTOR12_CONFIG12_SR_MODE_FAST1 0x000060ul
141#define DCMOTOR12_CONFIG12_SR_MODE_MASK 0x000070ul
142#define DCMOTOR12_CONFIG12_OC_LATCH 0x000000ul
143#define DCMOTOR12_CONFIG12_OC_AUTO 0x000008ul
144#define DCMOTOR12_CONFIG12_OC_MASK 0x000008ul
145#define DCMOTOR12_CONFIG12_OC_LATCH 0x000000ul
146#define DCMOTOR12_CONFIG12_OC_AUTO 0x000008ul
147#define DCMOTOR12_CONFIG12_SPI_DISR_10mS 0x000000ul
148#define DCMOTOR12_CONFIG12_SPI_DISR_100mS 0x000002ul
149#define DCMOTOR12_CONFIG12_SPI_DISR_1S 0x000004ul
150#define DCMOTOR12_CONFIG12_SPI_DISR_DISABLE 0x000006ul
151#define DCMOTOR12_CONFIG12_SPI_DISR_MASK 0x000006ul
152#define DCMOTOR12_CONFIG12_OPMODE_DISR_OFF 0x000000ul
153#define DCMOTOR12_CONFIG12_OPMODE_DISR_CONTINUE 0x000001ul
154#define DCMOTOR12_CONFIG12_OPMODE_DISR_MASK 0x000001ul
155
160#define DCMOTOR12_CONFIG56_MOTOR_OPMODE_MAX 3u
161#define DCMOTOR12_CONFIG56_MOTOR_OPMODE_SHIFT 22ul
162#define DCMOTOR12_CONFIG56_MOTOR_OPMODE_MASK 0xC00000ul
163#define DCMOTOR12_CONFIG56_DRV_FREQ_MAX 2047u
164#define DCMOTOR12_CONFIG56_DRV_FREQ_SHIFT 11ul
165#define DCMOTOR12_CONFIG56_DRV_FREQ_MASK 0x3FF800ul
166#define DCMOTOR12_CONFIG56_DUTY_PERIOD_MAX 2047u
167#define DCMOTOR12_CONFIG56_DUTY_PERIOD_SHIFT 0ul
168#define DCMOTOR12_CONFIG56_DUTY_PERIOD_MASK 0x0007FFul
169
174#define DCMOTOR12_DIAG1_PIN 0x01
175#define DCMOTOR12_DIAG2_PIN 0x02
176#define DCMOTOR12_EN1_PIN 0x04
177#define DCMOTOR12_EN2_PIN 0x08
178#define DCMOTOR12_CM_SEL_PIN 0x10
179#define DCMOTOR12_SLP_PIN 0x20
180
185#define DCMOTOR12_DEFAULT_CONFIG 0xE3
186
191#define DCMOTOR12_MODE_OUTPUT_OFF 0x00
192#define DCMOTOR12_MODE_FORWARD 0x01
193#define DCMOTOR12_MODE_REVERSE 0x02
194#define DCMOTOR12_MODE_BRAKE 0x03
195
200#define DCMOTOR12_PIN_LOW_LEVEL 0
201#define DCMOTOR12_PIN_HIGH_LEVEL 1
202
207#define DCMOTOR12_VREF_3V3 3.3
208#define DCMOTOR12_VREF_5V 5.0
209
214#define DCMOTOR12_NUM_CONVERSIONS 5000
215#define DCMOTOR12_RSENSE 220.0f
216#define DCMOTOR12_VOLTAGE_TO_CURRENT 0.00238167f
217
223#define DCMOTOR12_DEVICE_ADDRESS_A1A0_00 0x70
224#define DCMOTOR12_DEVICE_ADDRESS_A1A0_01 0x71
225#define DCMOTOR12_DEVICE_ADDRESS_A1A0_10 0x72
226#define DCMOTOR12_DEVICE_ADDRESS_A1A0_11 0x73
227
236#define DCMOTOR12_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
237#define DCMOTOR12_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
238
239 // dcmotor12_set
240
255#define DCMOTOR12_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.cm = MIKROBUS( mikrobus, MIKROBUS_AN ); \
263 cfg.slp = MIKROBUS( mikrobus, MIKROBUS_RST ); \
264 cfg.clk = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
265 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
266
267 // dcmotor12_map
268 // dcmotor12
269
274typedef struct
275{
276 // Output pins
277 digital_out_t clk;
278 digital_out_t slp;
280 // Input pins
281 digital_in_t int_pin;
283 // Modules
284 spi_master_t spi;
285 i2c_master_t i2c;
286 analog_in_t adc;
289 pin_name_t chip_select;
292
297typedef struct
298{
299 // Communication gpio pins
300 pin_name_t scl;
301 pin_name_t sda;
302 pin_name_t miso;
303 pin_name_t mosi;
304 pin_name_t sck;
305 pin_name_t cs;
306 pin_name_t cm;
308 // Additional gpio pins
309 pin_name_t clk;
310 pin_name_t slp;
311 pin_name_t int_pin;
313 // static variable
314 uint32_t spi_speed;
315 spi_master_mode_t spi_mode;
316 spi_master_chip_select_polarity_t cs_polarity;
318 uint32_t i2c_speed;
319 uint8_t i2c_address;
321 analog_in_resolution_t resolution;
322 float vref;
325
336
353
368
382
396err_t dcmotor12_write_register ( dcmotor12_t *ctx, uint8_t reg, uint32_t data_in );
397
410err_t dcmotor12_read_register ( dcmotor12_t *ctx, uint8_t reg, uint32_t *data_out );
411
425err_t dcmotor12_pca9538a_write_register ( dcmotor12_t *ctx, uint8_t reg, uint8_t data_in );
426
439err_t dcmotor12_pca9538a_read_register ( dcmotor12_t *ctx, uint8_t reg, uint8_t *data_out );
440
450
460
470
480void dcmotor12_set_clk_pin ( dcmotor12_t *ctx, uint8_t state );
481
494err_t dcmotor12_set_en1_pin ( dcmotor12_t *ctx, uint8_t state );
495
508err_t dcmotor12_get_en1_pin ( dcmotor12_t *ctx, uint8_t *state );
509
522err_t dcmotor12_set_en2_pin ( dcmotor12_t *ctx, uint8_t state );
523
536err_t dcmotor12_get_en2_pin ( dcmotor12_t *ctx, uint8_t *state );
537
550err_t dcmotor12_set_cm_sel_pin ( dcmotor12_t *ctx, uint8_t state );
551
564err_t dcmotor12_get_cm_sel_pin ( dcmotor12_t *ctx, uint8_t *state );
565
578err_t dcmotor12_get_diag1_pin ( dcmotor12_t *ctx, uint8_t *state );
579
592err_t dcmotor12_get_diag2_pin ( dcmotor12_t *ctx, uint8_t *state );
593
606err_t dcmotor12_get_sleep_pin ( dcmotor12_t *ctx, uint8_t *state );
607
619err_t dcmotor12_read_an_pin_value ( dcmotor12_t *ctx, uint16_t *data_out );
620
634err_t dcmotor12_read_an_pin_voltage ( dcmotor12_t *ctx, float *data_out );
635
647err_t dcmotor12_get_motor_current ( dcmotor12_t *ctx, float *current );
648
664
680
692err_t dcmotor12_set_ch1_drive_frequency ( dcmotor12_t *ctx, uint16_t drv_freq );
693
705err_t dcmotor12_set_ch2_drive_frequency ( dcmotor12_t *ctx, uint16_t drv_freq );
706
718err_t dcmotor12_set_ch1_duty_period ( dcmotor12_t *ctx, uint16_t duty_period );
719
731err_t dcmotor12_set_ch2_duty_period ( dcmotor12_t *ctx, uint16_t duty_period );
732
733#ifdef __cplusplus
734}
735#endif
736#endif // DCMOTOR12_H
737
738 // dcmotor12
739
740// ------------------------------------------------------------------------ END
dcmotor12_return_value_t
DC Motor 12 Click return value data.
Definition dcmotor12.h:331
@ DCMOTOR12_OK
Definition dcmotor12.h:332
@ DCMOTOR12_ERROR
Definition dcmotor12.h:333
err_t dcmotor12_set_en2_pin(dcmotor12_t *ctx, uint8_t state)
DC Motor 12 set en2 pin function.
err_t dcmotor12_default_cfg(dcmotor12_t *ctx)
DC Motor 12 default configuration function.
void dcmotor12_wake_up_device(dcmotor12_t *ctx)
DC Motor 12 wake up device function.
err_t dcmotor12_read_an_pin_voltage(dcmotor12_t *ctx, float *data_out)
DC Motor 12 read AN pin voltage level function.
err_t dcmotor12_get_en1_pin(dcmotor12_t *ctx, uint8_t *state)
DC Motor 12 get en1 pin function.
err_t dcmotor12_set_en1_pin(dcmotor12_t *ctx, uint8_t state)
DC Motor 12 set en1 pin function.
void dcmotor12_set_clk_pin(dcmotor12_t *ctx, uint8_t state)
DC Motor 12 set clk pin function.
err_t dcmotor12_get_diag2_pin(dcmotor12_t *ctx, uint8_t *state)
DC Motor 12 get diag2 pin function.
void dcmotor12_cfg_setup(dcmotor12_cfg_t *cfg)
DC Motor 12 configuration object setup function.
err_t dcmotor12_get_sleep_pin(dcmotor12_t *ctx, uint8_t *state)
DC Motor 12 get sleep pin function.
void dcmotor12_enter_sleep_mode(dcmotor12_t *ctx)
DC Motor 12 enter sleep mode function.
err_t dcmotor12_set_ch2_duty_period(dcmotor12_t *ctx, uint16_t duty_period)
DC Motor 12 set ch1 duty period function.
uint8_t dcmotor12_get_int_pin(dcmotor12_t *ctx)
DC Motor 12 get int pin function.
err_t dcmotor12_read_register(dcmotor12_t *ctx, uint8_t reg, uint32_t *data_out)
DC Motor 12 read register function.
err_t dcmotor12_pca9538a_read_register(dcmotor12_t *ctx, uint8_t reg, uint8_t *data_out)
DC Motor 12 pca9538a read register function.
err_t dcmotor12_get_en2_pin(dcmotor12_t *ctx, uint8_t *state)
DC Motor 12 get en2 pin function.
err_t dcmotor12_read_an_pin_value(dcmotor12_t *ctx, uint16_t *data_out)
DC Motor 12 read AN pin value function.
err_t dcmotor12_set_ch2_drive_frequency(dcmotor12_t *ctx, uint16_t drv_freq)
DC Motor 12 set ch2 drive frequency function.
err_t dcmotor12_set_cm_sel_pin(dcmotor12_t *ctx, uint8_t state)
DC Motor 12 set cm sel pin function.
err_t dcmotor12_set_ch2_operation_mode(dcmotor12_t *ctx, uint8_t mode)
DC Motor 12 set ch2 operation mode function.
err_t dcmotor12_get_motor_current(dcmotor12_t *ctx, float *current)
DC Motor 12 get motor current function.
err_t dcmotor12_init(dcmotor12_t *ctx, dcmotor12_cfg_t *cfg)
DC Motor 12 initialization function.
err_t dcmotor12_get_cm_sel_pin(dcmotor12_t *ctx, uint8_t *state)
DC Motor 12 get cm sel pin function.
err_t dcmotor12_set_ch1_drive_frequency(dcmotor12_t *ctx, uint16_t drv_freq)
DC Motor 12 set ch1 drive frequency function.
err_t dcmotor12_write_register(dcmotor12_t *ctx, uint8_t reg, uint32_t data_in)
DC Motor 12 write register function.
err_t dcmotor12_pca9538a_write_register(dcmotor12_t *ctx, uint8_t reg, uint8_t data_in)
DC Motor 12 pca9538a write register function.
err_t dcmotor12_set_ch1_operation_mode(dcmotor12_t *ctx, uint8_t mode)
DC Motor 12 set ch1 operation mode function.
err_t dcmotor12_set_ch1_duty_period(dcmotor12_t *ctx, uint16_t duty_period)
DC Motor 12 set ch1 duty period function.
err_t dcmotor12_get_diag1_pin(dcmotor12_t *ctx, uint8_t *state)
DC Motor 12 get diag1 pin function.
This file contains SPI specific macros, functions, etc.
DC Motor 12 Click configuration object.
Definition dcmotor12.h:298
pin_name_t clk
Definition dcmotor12.h:309
analog_in_resolution_t resolution
Definition dcmotor12.h:321
float vref
Definition dcmotor12.h:322
pin_name_t slp
Definition dcmotor12.h:310
uint32_t i2c_speed
Definition dcmotor12.h:318
spi_master_chip_select_polarity_t cs_polarity
Definition dcmotor12.h:316
pin_name_t sck
Definition dcmotor12.h:304
spi_master_mode_t spi_mode
Definition dcmotor12.h:315
pin_name_t cm
Definition dcmotor12.h:306
pin_name_t mosi
Definition dcmotor12.h:303
uint32_t spi_speed
Definition dcmotor12.h:314
pin_name_t scl
Definition dcmotor12.h:300
pin_name_t int_pin
Definition dcmotor12.h:311
pin_name_t miso
Definition dcmotor12.h:302
pin_name_t sda
Definition dcmotor12.h:301
pin_name_t cs
Definition dcmotor12.h:305
uint8_t i2c_address
Definition dcmotor12.h:319
DC Motor 12 Click context object.
Definition dcmotor12.h:275
spi_master_t spi
Definition dcmotor12.h:284
digital_out_t slp
Definition dcmotor12.h:278
digital_in_t int_pin
Definition dcmotor12.h:281
i2c_master_t i2c
Definition dcmotor12.h:285
digital_out_t clk
Definition dcmotor12.h:277
uint8_t slave_address
Definition dcmotor12.h:288
pin_name_t chip_select
Definition dcmotor12.h:289
analog_in_t adc
Definition dcmotor12.h:286