brushless8 2.0.0.0
brushless8.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 BRUSHLESS8_H
29#define BRUSHLESS8_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
35#include "drv_digital_out.h"
36#include "drv_digital_in.h"
37#include "drv_i2c_master.h"
38#include "drv_analog_in.h"
39#include "drv_pwm.h"
40
61#define BRUSHLESS8_DAC_REG_DEVICE_CONFIG 0x01
62#define BRUSHLESS8_DAC_REG_STATUS_TRIGGER 0x02
63#define BRUSHLESS8_DAC_REG_BRDCAST 0x03
64#define BRUSHLESS8_DAC_REG_CHN_A_DVSP 0x08
65#define BRUSHLESS8_DAC_REG_CHN_B_FGC 0x09
66#define BRUSHLESS8_DAC_REG_CHN_C_LA 0x0A
67#define BRUSHLESS8_DAC_REG_CHN_D_LAS 0x0B
68#define BRUSHLESS8_DAC_REG_CHN_E_LAL 0x0C
69#define BRUSHLESS8_DAC_REG_CHN_F_LAAJ 0x0D
70 // brushless8_reg
72
87#define BRUSHLESS8_DIRECTION_CW 1
88#define BRUSHLESS8_DIRECTION_CCW 0
89
95#define BRUSHLESS8_RESET_EN 1
96#define BRUSHLESS8_RESET_DIS 0
97
102#define BRUSHLESS8_VREF 5000
103#define BRUSHLESS8_RESOLUTION 1024
104
109#define BRUSHLESS8_RETVAL int8_t
110#define BRUSHLESS8_OK 0
111#define BRUSHLESS8_ERROR (-1)
112#define BRUSHLESS8_PARAM_ERROR (-2)
113
118#define BRUSHLESS8_FGC_STEP_0 0
119#define BRUSHLESS8_FGC_STEP_1 310
120#define BRUSHLESS8_FGC_STEP_2 630
121#define BRUSHLESS8_FGC_STEP_3 940
122#define BRUSHLESS8_FGC_STEP_4 1250
123#define BRUSHLESS8_FGC_STEP_5 1560
124#define BRUSHLESS8_FGC_STEP_6 1880
125#define BRUSHLESS8_FGC_STEP_7 2190
126#define BRUSHLESS8_FGC_STEP_8 2500
127#define BRUSHLESS8_FGC_STEP_9 2810
128
134#define BRUSHLESS8_LAS_AUTOMATIC_60_DEG_RST 0
135#define BRUSHLESS8_LAS_AUTOMATIC_360_DEG_RST 1250
136#define BRUSHLESS8_LAS_EXT_IN_60_DEG_RST 2500
137#define BRUSHLESS8_LAS_EXT_IN_360_DEG_RST 3750
138
144#define BRUSHLESS8_LA_STEP_0_DEG_0 0
145#define BRUSHLESS8_LA_STEP_1_DEG_1p9 160
146#define BRUSHLESS8_LA_STEP_2_DEG_3p8 310
147#define BRUSHLESS8_LA_STEP_3_DEG_5p6 470
148#define BRUSHLESS8_LA_STEP_4_DEG_7p5 630
149#define BRUSHLESS8_LA_STEP_5_DEG_9p4 780
150#define BRUSHLESS8_LA_STEP_6_DEG_11p3 940
151#define BRUSHLESS8_LA_STEP_7_DEG_13p1 1090
152#define BRUSHLESS8_LA_STEP_8_DEG_15 1250
153#define BRUSHLESS8_LA_STEP_9_DEG_16p9 1410
154#define BRUSHLESS8_LA_STEP_10_DEG_18p8 1560
155#define BRUSHLESS8_LA_STEP_11_DEG_20p6 1720
156#define BRUSHLESS8_LA_STEP_12_DEG_22p5 1880
157#define BRUSHLESS8_LA_STEP_13_DEG_24p4 2030
158#define BRUSHLESS8_LA_STEP_14_DEG_26p3 2190
159#define BRUSHLESS8_LA_STEP_15_DEG_28p1 2340
160#define BRUSHLESS8_LA_STEP_16_DEG_30 2500
161#define BRUSHLESS8_LA_STEP_17_DEG_31p9 2660
162#define BRUSHLESS8_LA_STEP_18_DEG_33p8 2810
163#define BRUSHLESS8_LA_STEP_19_DEG_35p6 2970
164#define BRUSHLESS8_LA_STEP_20_DEG_37p5 3130
165#define BRUSHLESS8_LA_STEP_21_DEG_39p4 3280
166#define BRUSHLESS8_LA_STEP_22_DEG_41p3 3440
167#define BRUSHLESS8_LA_STEP_23_DEG_43p1 3590
168#define BRUSHLESS8_LA_STEP_24_DEG_45 3750
169#define BRUSHLESS8_LA_STEP_25_DEG_46p9 3910
170#define BRUSHLESS8_LA_STEP_26_DEG_48p8 4060
171#define BRUSHLESS8_LA_STEP_27_DEG_50p6 4220
172#define BRUSHLESS8_LA_STEP_28_DEG_52p5 4380
173#define BRUSHLESS8_LA_STEP_29_DEG_54p4 4530
174#define BRUSHLESS8_LA_STEP_30_DEG_56p3 4690
175#define BRUSHLESS8_LA_STEP_31_DEG_58p1 4840
176
182#define BRUSHLESS8_LAL_STEP_0_DEG_0 0
183#define BRUSHLESS8_LAL_STEP_1_DEG_5p6 310
184#define BRUSHLESS8_LAL_STEP_2_DEG_0 630
185#define BRUSHLESS8_LAL_STEP_3_DEG_11p3 640
186#define BRUSHLESS8_LAL_STEP_4_DEG_5p6 1250
187#define BRUSHLESS8_LAL_STEP_5_DEG_0 1560
188#define BRUSHLESS8_LAL_STEP_6_DEG_12p2 1880
189#define BRUSHLESS8_LAL_STEP_7_DEG_6p6 2190
190#define BRUSHLESS8_LAL_STEP_8_DEG_0 2500
191#define BRUSHLESS8_LAL_STEP_9_DEG_13p1 2810
192#define BRUSHLESS8_LAL_STEP_10_DEG_7p5 3130
193#define BRUSHLESS8_LAL_STEP_11_DEG_0 3440
194#define BRUSHLESS8_LAL_STEP_12_DEG_18p8 3750
195#define BRUSHLESS8_LAL_STEP_13_DEG_13p1 4060
196#define BRUSHLESS8_LAL_STEP_14_DEG_7p5 4380
197#define BRUSHLESS8_LAL_STEP_15_DEG_0 4690
198
204#define BRUSHLESS8_LAAJ_STEP_0_PHASE_DEG_0 0
205#define BRUSHLESS8_LAAJ_STEP_1_PHASE_DEG_0 80
206#define BRUSHLESS8_LAAJ_STEP_2_PHASE_DEG_0 160
207#define BRUSHLESS8_LAAJ_STEP_3_PHASE_DEG_0 230
208#define BRUSHLESS8_LAAJ_STEP_4_PHASE_DEG_0 310
209#define BRUSHLESS8_LAAJ_STEP_5_PHASE_DEG_0 390
210#define BRUSHLESS8_LAAJ_STEP_6_PHASE_DEG_0 470
211#define BRUSHLESS8_LAAJ_STEP_7_PHASE_DEG_0 550
212#define BRUSHLESS8_LAAJ_STEP_8_PHASE_DEG_0p9 630
213#define BRUSHLESS8_LAAJ_STEP_9_PHASE_DEG_1p9 700
214#define BRUSHLESS8_LAAJ_STEP_10_PHASE_DEG_2p8 780
215#define BRUSHLESS8_LAAJ_STEP_11_PHASE_DEG_3p8 860
216#define BRUSHLESS8_LAAJ_STEP_12_PHASE_DEG_4p7 940
217#define BRUSHLESS8_LAAJ_STEP_13_PHASE_DEG_5p6 1020
218#define BRUSHLESS8_LAAJ_STEP_14_PHASE_DEG_6p6 1090
219#define BRUSHLESS8_LAAJ_STEP_15_PHASE_DEG_7p5 1170
220#define BRUSHLESS8_LAAJ_STEP_16_PHASE_DEG_8p4 1250
221#define BRUSHLESS8_LAAJ_STEP_17_PHASE_DEG_9p4 1330
222#define BRUSHLESS8_LAAJ_STEP_18_PHASE_DEG_10p3 1410
223#define BRUSHLESS8_LAAJ_STEP_19_PHASE_DEG_11p3 1480
224#define BRUSHLESS8_LAAJ_STEP_20_PHASE_DEG_12p2 1560
225#define BRUSHLESS8_LAAJ_STEP_21_PHASE_DEG_13p1 1640
226#define BRUSHLESS8_LAAJ_STEP_22_PHASE_DEG_13p1 1720
227#define BRUSHLESS8_LAAJ_STEP_23_PHASE_DEG_15 1800
228#define BRUSHLESS8_LAAJ_STEP_24_PHASE_DEG_15p9 1880
229#define BRUSHLESS8_LAAJ_STEP_25_PHASE_DEG_16p9 1950
230#define BRUSHLESS8_LAAJ_STEP_26_PHASE_DEG_17p8 2030
231#define BRUSHLESS8_LAAJ_STEP_27_PHASE_DEG_18p8 2110
232#define BRUSHLESS8_LAAJ_STEP_28_PHASE_DEG_19p7 2190
233#define BRUSHLESS8_LAAJ_STEP_29_PHASE_DEG_20p6 2270
234#define BRUSHLESS8_LAAJ_STEP_30_PHASE_DEG_21p6 2340
235#define BRUSHLESS8_LAAJ_STEP_31_PHASE_DEG_22p5 2420
236#define BRUSHLESS8_LAAJ_STEP_32_PHASE_DEG_23p4 2500
237#define BRUSHLESS8_LAAJ_STEP_33_PHASE_DEG_24p4 2580
238#define BRUSHLESS8_LAAJ_STEP_34_PHASE_DEG_25p3 2660
239#define BRUSHLESS8_LAAJ_STEP_35_PHASE_DEG_26p3 2730
240#define BRUSHLESS8_LAAJ_STEP_36_PHASE_DEG_27p2 2810
241#define BRUSHLESS8_LAAJ_STEP_37_PHASE_DEG_28p1 2890
242#define BRUSHLESS8_LAAJ_STEP_38_PHASE_DEG_29p1 2970
243#define BRUSHLESS8_LAAJ_STEP_39_PHASE_DEG_30 3050
244#define BRUSHLESS8_LAAJ_STEP_40_PHASE_DEG_30 3130
245#define BRUSHLESS8_LAAJ_STEP_41_PHASE_DEG_30 3200
246#define BRUSHLESS8_LAAJ_STEP_42_PHASE_DEG_30 3280
247#define BRUSHLESS8_LAAJ_STEP_43_PHASE_DEG_30 3360
248#define BRUSHLESS8_LAAJ_STEP_44_PHASE_DEG_30 3440
249#define BRUSHLESS8_LAAJ_STEP_45_PHASE_DEG_30 3520
250#define BRUSHLESS8_LAAJ_STEP_46_PHASE_DEG_30 3590
251#define BRUSHLESS8_LAAJ_STEP_47_PHASE_DEG_30 3670
252#define BRUSHLESS8_LAAJ_STEP_48_PHASE_DEG_30 3750
253#define BRUSHLESS8_LAAJ_STEP_49_PHASE_DEG_30 3830
254#define BRUSHLESS8_LAAJ_STEP_50_PHASE_DEG_30 3910
255#define BRUSHLESS8_LAAJ_STEP_51_PHASE_DEG_30 3980
256#define BRUSHLESS8_LAAJ_STEP_52_PHASE_DEG_30 4060
257#define BRUSHLESS8_LAAJ_STEP_53_PHASE_DEG_30 4140
258#define BRUSHLESS8_LAAJ_STEP_54_PHASE_DEG_30 4220
259#define BRUSHLESS8_LAAJ_STEP_55_PHASE_DEG_30 4300
260#define BRUSHLESS8_LAAJ_STEP_56_PHASE_DEG_30 4380
261#define BRUSHLESS8_LAAJ_STEP_57_PHASE_DEG_30 4450
262#define BRUSHLESS8_LAAJ_STEP_58_PHASE_DEG_30 4530
263#define BRUSHLESS8_LAAJ_STEP_59_PHASE_DEG_30 4610
264#define BRUSHLESS8_LAAJ_STEP_60_PHASE_DEG_30 4690
265#define BRUSHLESS8_LAAJ_STEP_61_PHASE_DEG_30 4770
266#define BRUSHLESS8_LAAJ_STEP_62_PHASE_DEG_30 4840
267#define BRUSHLESS8_LAAJ_STEP_63_PHASE_DEG_30 4920
268
274#define BRUSHLESS8_SLAVE_ADDRESS_1 0x47
275#define BRUSHLESS8_SLAVE_ADDRESS_2 0x48
276
281#define BRUSHLESS8_DAC 1
282#define BRUSHLESS8_PWM 2
283 // brushless8_set
285
300#define BRUSHLESS8_MAP_MIKROBUS( cfg, mikrobus ) \
301 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
302 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
303 cfg.dir = MIKROBUS( mikrobus, MIKROBUS_CS ); \
304 cfg.an = MIKROBUS( mikrobus, MIKROBUS_AN ); \
305 cfg.res = MIKROBUS( mikrobus, MIKROBUS_RST ); \
306 cfg.pwm = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
307 cfg.fg = MIKROBUS( mikrobus, MIKROBUS_INT )
308 // brushless8_map // brushless8
311
316typedef struct brushless8_s
317{
318 digital_out_t dir;
319 digital_out_t res;
321 digital_in_t an;
322 digital_in_t fg;
324 i2c_master_t i2c;
325 pwm_t pwm;
326 analog_in_t adc;
330 uint16_t pwm_period;
331 uint32_t pwm_freq;
333 uint8_t ctrl_mod;
335
340typedef struct
341{
342 pin_name_t scl;
343 pin_name_t sda;
344 pin_name_t dir;
345 pin_name_t an;
346 pin_name_t res;
347 pin_name_t pwm;
348 pin_name_t fg;
350 uint32_t i2c_speed;
351 uint8_t i2c_address;
353 uint32_t dev_pwm_freq;
355 analog_in_resolution_t resolution;
356 float vref;
358 uint8_t ctrl_mod;
360
395
411
426
439void brushless8_dac_write_data ( brushless8_t *ctx, uint8_t reg, uint16_t write_data );
440
455uint16_t brushless8_dac_read_data ( brushless8_t *ctx, uint8_t reg );
456
468
481void brushless8_set_direction ( brushless8_t *ctx, uint8_t status );
482
495void brushless8_set_reset ( brushless8_t *ctx, uint8_t status );
496
508int8_t brushless8_set_dac_vout ( brushless8_t *ctx, uint8_t dac_chn, uint16_t vout );
509
517void brushless8_set_duty_cycle ( brushless8_t *ctx, float duty_cycle );
518
525
532
542
552
553#ifdef __cplusplus
554}
555#endif
556#endif // BRUSHLESS8_H
557 // brushless8
559// ------------------------------------------------------------------------ END
struct brushless8_s brushless8_t
Brushless 8 Click context object.
#define BRUSHLESS8_RETVAL
Brushless 8 function status.
Definition: brushless8.h:109
void brushless8_pwm_start(brushless8_t *ctx)
Starts PWM module.
BRUSHLESS8_RETVAL brushless8_read_an_voltage(brushless8_t *ctx, float *data_out)
AN voltage read function.
uint16_t brushless8_dac_read_data(brushless8_t *ctx, uint8_t reg)
Brushless 8 I2C read function.
void brushless8_set_direction(brushless8_t *ctx, uint8_t status)
Brushless 8 dir pin setting.
int8_t brushless8_set_dac_vout(brushless8_t *ctx, uint8_t dac_chn, uint16_t vout)
Brushless 8 I2C function for setting vout.
uint8_t brushless8_get_fg(brushless8_t *ctx)
Brushless 8 fg state.
void brushless8_set_duty_cycle(brushless8_t *ctx, float duty_cycle)
Sets PWM duty cycle.
BRUSHLESS8_RETVAL brushless8_init(brushless8_t *ctx, brushless8_cfg_t *cfg)
Brushless 8 initialization function.
void brushless8_cfg_setup(brushless8_cfg_t *cfg)
Brushless 8 configuration object setup function.
void brushless8_set_reset(brushless8_t *ctx, uint8_t status)
Brushless 8 rst pin setting.
void brushless8_dac_write_data(brushless8_t *ctx, uint8_t reg, uint16_t write_data)
Brushless 8 I2C write function.
BRUSHLESS8_RETVAL brushless8_read_adc(brushless8_t *ctx, uint16_t *data_out)
ADC read function.
void brushless8_pwm_stop(brushless8_t *ctx)
Stops PWM module.
BRUSHLESS8_RETVAL brushless8_default_cfg(brushless8_t *ctx)
Brushless 8 default configuration function.
Brushless 8 Click configuration object.
Definition: brushless8.h:341
pin_name_t fg
Definition: brushless8.h:348
analog_in_resolution_t resolution
Definition: brushless8.h:355
float vref
Definition: brushless8.h:356
uint8_t ctrl_mod
Definition: brushless8.h:358
uint32_t i2c_speed
Definition: brushless8.h:350
uint32_t dev_pwm_freq
Definition: brushless8.h:353
pin_name_t dir
Definition: brushless8.h:344
pin_name_t scl
Definition: brushless8.h:342
pin_name_t pwm
Definition: brushless8.h:347
pin_name_t res
Definition: brushless8.h:346
pin_name_t sda
Definition: brushless8.h:343
pin_name_t an
Definition: brushless8.h:345
uint8_t i2c_address
Definition: brushless8.h:351
Brushless 8 Click context object.
Definition: brushless8.h:317
digital_out_t res
Definition: brushless8.h:319
uint8_t ctrl_mod
Definition: brushless8.h:333
uint32_t pwm_freq
Definition: brushless8.h:331
i2c_master_t i2c
Definition: brushless8.h:324
digital_in_t an
Definition: brushless8.h:321
uint8_t slave_address
Definition: brushless8.h:328
digital_in_t fg
Definition: brushless8.h:322
analog_in_t adc
Definition: brushless8.h:326
pwm_t pwm
Definition: brushless8.h:325
uint16_t pwm_period
Definition: brushless8.h:330
digital_out_t dir
Definition: brushless8.h:318