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
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_analog_in.h"
49 #include "drv_pwm.h"
50 
71 #define BRUSHLESS8_DAC_REG_DEVICE_CONFIG 0x01
72 #define BRUSHLESS8_DAC_REG_STATUS_TRIGGER 0x02
73 #define BRUSHLESS8_DAC_REG_BRDCAST 0x03
74 #define BRUSHLESS8_DAC_REG_CHN_A_DVSP 0x08
75 #define BRUSHLESS8_DAC_REG_CHN_B_FGC 0x09
76 #define BRUSHLESS8_DAC_REG_CHN_C_LA 0x0A
77 #define BRUSHLESS8_DAC_REG_CHN_D_LAS 0x0B
78 #define BRUSHLESS8_DAC_REG_CHN_E_LAL 0x0C
79 #define BRUSHLESS8_DAC_REG_CHN_F_LAAJ 0x0D
80  // brushless8_reg
82 
97 #define BRUSHLESS8_DIRECTION_CW 1
98 #define BRUSHLESS8_DIRECTION_CCW 0
99 
105 #define BRUSHLESS8_RESET_EN 1
106 #define BRUSHLESS8_RESET_DIS 0
107 
112 #define BRUSHLESS8_VREF 5000
113 #define BRUSHLESS8_RESOLUTION 1024
114 
119 #define BRUSHLESS8_RETVAL int8_t
120 #define BRUSHLESS8_OK 0
121 #define BRUSHLESS8_ERROR (-1)
122 #define BRUSHLESS8_PARAM_ERROR (-2)
123 
128 #define BRUSHLESS8_FGC_STEP_0 0
129 #define BRUSHLESS8_FGC_STEP_1 310
130 #define BRUSHLESS8_FGC_STEP_2 630
131 #define BRUSHLESS8_FGC_STEP_3 940
132 #define BRUSHLESS8_FGC_STEP_4 1250
133 #define BRUSHLESS8_FGC_STEP_5 1560
134 #define BRUSHLESS8_FGC_STEP_6 1880
135 #define BRUSHLESS8_FGC_STEP_7 2190
136 #define BRUSHLESS8_FGC_STEP_8 2500
137 #define BRUSHLESS8_FGC_STEP_9 2810
138 
144 #define BRUSHLESS8_LAS_AUTOMATIC_60_DEG_RST 0
145 #define BRUSHLESS8_LAS_AUTOMATIC_360_DEG_RST 1250
146 #define BRUSHLESS8_LAS_EXT_IN_60_DEG_RST 2500
147 #define BRUSHLESS8_LAS_EXT_IN_360_DEG_RST 3750
148 
154 #define BRUSHLESS8_LA_STEP_0_DEG_0 0
155 #define BRUSHLESS8_LA_STEP_1_DEG_1p9 160
156 #define BRUSHLESS8_LA_STEP_2_DEG_3p8 310
157 #define BRUSHLESS8_LA_STEP_3_DEG_5p6 470
158 #define BRUSHLESS8_LA_STEP_4_DEG_7p5 630
159 #define BRUSHLESS8_LA_STEP_5_DEG_9p4 780
160 #define BRUSHLESS8_LA_STEP_6_DEG_11p3 940
161 #define BRUSHLESS8_LA_STEP_7_DEG_13p1 1090
162 #define BRUSHLESS8_LA_STEP_8_DEG_15 1250
163 #define BRUSHLESS8_LA_STEP_9_DEG_16p9 1410
164 #define BRUSHLESS8_LA_STEP_10_DEG_18p8 1560
165 #define BRUSHLESS8_LA_STEP_11_DEG_20p6 1720
166 #define BRUSHLESS8_LA_STEP_12_DEG_22p5 1880
167 #define BRUSHLESS8_LA_STEP_13_DEG_24p4 2030
168 #define BRUSHLESS8_LA_STEP_14_DEG_26p3 2190
169 #define BRUSHLESS8_LA_STEP_15_DEG_28p1 2340
170 #define BRUSHLESS8_LA_STEP_16_DEG_30 2500
171 #define BRUSHLESS8_LA_STEP_17_DEG_31p9 2660
172 #define BRUSHLESS8_LA_STEP_18_DEG_33p8 2810
173 #define BRUSHLESS8_LA_STEP_19_DEG_35p6 2970
174 #define BRUSHLESS8_LA_STEP_20_DEG_37p5 3130
175 #define BRUSHLESS8_LA_STEP_21_DEG_39p4 3280
176 #define BRUSHLESS8_LA_STEP_22_DEG_41p3 3440
177 #define BRUSHLESS8_LA_STEP_23_DEG_43p1 3590
178 #define BRUSHLESS8_LA_STEP_24_DEG_45 3750
179 #define BRUSHLESS8_LA_STEP_25_DEG_46p9 3910
180 #define BRUSHLESS8_LA_STEP_26_DEG_48p8 4060
181 #define BRUSHLESS8_LA_STEP_27_DEG_50p6 4220
182 #define BRUSHLESS8_LA_STEP_28_DEG_52p5 4380
183 #define BRUSHLESS8_LA_STEP_29_DEG_54p4 4530
184 #define BRUSHLESS8_LA_STEP_30_DEG_56p3 4690
185 #define BRUSHLESS8_LA_STEP_31_DEG_58p1 4840
186 
192 #define BRUSHLESS8_LAL_STEP_0_DEG_0 0
193 #define BRUSHLESS8_LAL_STEP_1_DEG_5p6 310
194 #define BRUSHLESS8_LAL_STEP_2_DEG_0 630
195 #define BRUSHLESS8_LAL_STEP_3_DEG_11p3 640
196 #define BRUSHLESS8_LAL_STEP_4_DEG_5p6 1250
197 #define BRUSHLESS8_LAL_STEP_5_DEG_0 1560
198 #define BRUSHLESS8_LAL_STEP_6_DEG_12p2 1880
199 #define BRUSHLESS8_LAL_STEP_7_DEG_6p6 2190
200 #define BRUSHLESS8_LAL_STEP_8_DEG_0 2500
201 #define BRUSHLESS8_LAL_STEP_9_DEG_13p1 2810
202 #define BRUSHLESS8_LAL_STEP_10_DEG_7p5 3130
203 #define BRUSHLESS8_LAL_STEP_11_DEG_0 3440
204 #define BRUSHLESS8_LAL_STEP_12_DEG_18p8 3750
205 #define BRUSHLESS8_LAL_STEP_13_DEG_13p1 4060
206 #define BRUSHLESS8_LAL_STEP_14_DEG_7p5 4380
207 #define BRUSHLESS8_LAL_STEP_15_DEG_0 4690
208 
214 #define BRUSHLESS8_LAAJ_STEP_0_PHASE_DEG_0 0
215 #define BRUSHLESS8_LAAJ_STEP_1_PHASE_DEG_0 80
216 #define BRUSHLESS8_LAAJ_STEP_2_PHASE_DEG_0 160
217 #define BRUSHLESS8_LAAJ_STEP_3_PHASE_DEG_0 230
218 #define BRUSHLESS8_LAAJ_STEP_4_PHASE_DEG_0 310
219 #define BRUSHLESS8_LAAJ_STEP_5_PHASE_DEG_0 390
220 #define BRUSHLESS8_LAAJ_STEP_6_PHASE_DEG_0 470
221 #define BRUSHLESS8_LAAJ_STEP_7_PHASE_DEG_0 550
222 #define BRUSHLESS8_LAAJ_STEP_8_PHASE_DEG_0p9 630
223 #define BRUSHLESS8_LAAJ_STEP_9_PHASE_DEG_1p9 700
224 #define BRUSHLESS8_LAAJ_STEP_10_PHASE_DEG_2p8 780
225 #define BRUSHLESS8_LAAJ_STEP_11_PHASE_DEG_3p8 860
226 #define BRUSHLESS8_LAAJ_STEP_12_PHASE_DEG_4p7 940
227 #define BRUSHLESS8_LAAJ_STEP_13_PHASE_DEG_5p6 1020
228 #define BRUSHLESS8_LAAJ_STEP_14_PHASE_DEG_6p6 1090
229 #define BRUSHLESS8_LAAJ_STEP_15_PHASE_DEG_7p5 1170
230 #define BRUSHLESS8_LAAJ_STEP_16_PHASE_DEG_8p4 1250
231 #define BRUSHLESS8_LAAJ_STEP_17_PHASE_DEG_9p4 1330
232 #define BRUSHLESS8_LAAJ_STEP_18_PHASE_DEG_10p3 1410
233 #define BRUSHLESS8_LAAJ_STEP_19_PHASE_DEG_11p3 1480
234 #define BRUSHLESS8_LAAJ_STEP_20_PHASE_DEG_12p2 1560
235 #define BRUSHLESS8_LAAJ_STEP_21_PHASE_DEG_13p1 1640
236 #define BRUSHLESS8_LAAJ_STEP_22_PHASE_DEG_13p1 1720
237 #define BRUSHLESS8_LAAJ_STEP_23_PHASE_DEG_15 1800
238 #define BRUSHLESS8_LAAJ_STEP_24_PHASE_DEG_15p9 1880
239 #define BRUSHLESS8_LAAJ_STEP_25_PHASE_DEG_16p9 1950
240 #define BRUSHLESS8_LAAJ_STEP_26_PHASE_DEG_17p8 2030
241 #define BRUSHLESS8_LAAJ_STEP_27_PHASE_DEG_18p8 2110
242 #define BRUSHLESS8_LAAJ_STEP_28_PHASE_DEG_19p7 2190
243 #define BRUSHLESS8_LAAJ_STEP_29_PHASE_DEG_20p6 2270
244 #define BRUSHLESS8_LAAJ_STEP_30_PHASE_DEG_21p6 2340
245 #define BRUSHLESS8_LAAJ_STEP_31_PHASE_DEG_22p5 2420
246 #define BRUSHLESS8_LAAJ_STEP_32_PHASE_DEG_23p4 2500
247 #define BRUSHLESS8_LAAJ_STEP_33_PHASE_DEG_24p4 2580
248 #define BRUSHLESS8_LAAJ_STEP_34_PHASE_DEG_25p3 2660
249 #define BRUSHLESS8_LAAJ_STEP_35_PHASE_DEG_26p3 2730
250 #define BRUSHLESS8_LAAJ_STEP_36_PHASE_DEG_27p2 2810
251 #define BRUSHLESS8_LAAJ_STEP_37_PHASE_DEG_28p1 2890
252 #define BRUSHLESS8_LAAJ_STEP_38_PHASE_DEG_29p1 2970
253 #define BRUSHLESS8_LAAJ_STEP_39_PHASE_DEG_30 3050
254 #define BRUSHLESS8_LAAJ_STEP_40_PHASE_DEG_30 3130
255 #define BRUSHLESS8_LAAJ_STEP_41_PHASE_DEG_30 3200
256 #define BRUSHLESS8_LAAJ_STEP_42_PHASE_DEG_30 3280
257 #define BRUSHLESS8_LAAJ_STEP_43_PHASE_DEG_30 3360
258 #define BRUSHLESS8_LAAJ_STEP_44_PHASE_DEG_30 3440
259 #define BRUSHLESS8_LAAJ_STEP_45_PHASE_DEG_30 3520
260 #define BRUSHLESS8_LAAJ_STEP_46_PHASE_DEG_30 3590
261 #define BRUSHLESS8_LAAJ_STEP_47_PHASE_DEG_30 3670
262 #define BRUSHLESS8_LAAJ_STEP_48_PHASE_DEG_30 3750
263 #define BRUSHLESS8_LAAJ_STEP_49_PHASE_DEG_30 3830
264 #define BRUSHLESS8_LAAJ_STEP_50_PHASE_DEG_30 3910
265 #define BRUSHLESS8_LAAJ_STEP_51_PHASE_DEG_30 3980
266 #define BRUSHLESS8_LAAJ_STEP_52_PHASE_DEG_30 4060
267 #define BRUSHLESS8_LAAJ_STEP_53_PHASE_DEG_30 4140
268 #define BRUSHLESS8_LAAJ_STEP_54_PHASE_DEG_30 4220
269 #define BRUSHLESS8_LAAJ_STEP_55_PHASE_DEG_30 4300
270 #define BRUSHLESS8_LAAJ_STEP_56_PHASE_DEG_30 4380
271 #define BRUSHLESS8_LAAJ_STEP_57_PHASE_DEG_30 4450
272 #define BRUSHLESS8_LAAJ_STEP_58_PHASE_DEG_30 4530
273 #define BRUSHLESS8_LAAJ_STEP_59_PHASE_DEG_30 4610
274 #define BRUSHLESS8_LAAJ_STEP_60_PHASE_DEG_30 4690
275 #define BRUSHLESS8_LAAJ_STEP_61_PHASE_DEG_30 4770
276 #define BRUSHLESS8_LAAJ_STEP_62_PHASE_DEG_30 4840
277 #define BRUSHLESS8_LAAJ_STEP_63_PHASE_DEG_30 4920
278 
284 #define BRUSHLESS8_SLAVE_ADDRESS_1 0x47
285 #define BRUSHLESS8_SLAVE_ADDRESS_2 0x48
286 
291 #define BRUSHLESS8_DAC 1
292 #define BRUSHLESS8_PWM 2
293  // brushless8_set
295 
310 #define BRUSHLESS8_MAP_MIKROBUS( cfg, mikrobus ) \
311  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
312  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
313  cfg.dir = MIKROBUS( mikrobus, MIKROBUS_CS ); \
314  cfg.an = MIKROBUS( mikrobus, MIKROBUS_AN ); \
315  cfg.res = MIKROBUS( mikrobus, MIKROBUS_RST ); \
316  cfg.pwm = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
317  cfg.fg = MIKROBUS( mikrobus, MIKROBUS_INT )
318  // brushless8_map // brushless8
321 
326 typedef struct brushless8_s
327 {
328  digital_out_t dir;
329  digital_out_t res;
331  digital_in_t an;
332  digital_in_t fg;
334  i2c_master_t i2c;
335  pwm_t pwm;
336  analog_in_t adc;
338  uint8_t slave_address;
340  uint16_t pwm_period;
341  uint32_t pwm_freq;
343  uint8_t ctrl_mod;
345 
350 typedef struct
351 {
352  pin_name_t scl;
353  pin_name_t sda;
354  pin_name_t dir;
355  pin_name_t an;
356  pin_name_t res;
357  pin_name_t pwm;
358  pin_name_t fg;
360  uint32_t i2c_speed;
361  uint8_t i2c_address;
363  uint32_t dev_pwm_freq;
365  analog_in_resolution_t resolution;
366  float vref;
368  uint8_t ctrl_mod;
370 
405 
421 
436 
449 void brushless8_dac_write_data ( brushless8_t *ctx, uint8_t reg, uint16_t write_data );
450 
465 uint16_t brushless8_dac_read_data ( brushless8_t *ctx, uint8_t reg );
466 
478 
491 void brushless8_set_direction ( brushless8_t *ctx, uint8_t status );
492 
505 void brushless8_set_reset ( brushless8_t *ctx, uint8_t status );
506 
518 int8_t brushless8_set_dac_vout ( brushless8_t *ctx, uint8_t dac_chn, uint16_t vout );
519 
527 void brushless8_set_duty_cycle ( brushless8_t *ctx, float duty_cycle );
528 
535 
542 
552 
562 
563 #ifdef __cplusplus
564 }
565 #endif
566 #endif // BRUSHLESS8_H
567  // brushless8
569 // ------------------------------------------------------------------------ END
brushless8_set_duty_cycle
void brushless8_set_duty_cycle(brushless8_t *ctx, float duty_cycle)
Sets PWM duty cycle.
brushless8_s::res
digital_out_t res
Definition: brushless8.h:329
brushless8_cfg_t::res
pin_name_t res
Definition: brushless8.h:356
brushless8_set_direction
void brushless8_set_direction(brushless8_t *ctx, uint8_t status)
Brushless 8 dir pin setting.
brushless8_s::dir
digital_out_t dir
Definition: brushless8.h:328
brushless8_cfg_t::sda
pin_name_t sda
Definition: brushless8.h:353
brushless8_cfg_t
Brushless 8 Click configuration object.
Definition: brushless8.h:351
brushless8_s::pwm
pwm_t pwm
Definition: brushless8.h:335
brushless8_s::ctrl_mod
uint8_t ctrl_mod
Definition: brushless8.h:343
brushless8_set_reset
void brushless8_set_reset(brushless8_t *ctx, uint8_t status)
Brushless 8 rst pin setting.
brushless8_init
BRUSHLESS8_RETVAL brushless8_init(brushless8_t *ctx, brushless8_cfg_t *cfg)
Brushless 8 initialization function.
brushless8_dac_write_data
void brushless8_dac_write_data(brushless8_t *ctx, uint8_t reg, uint16_t write_data)
Brushless 8 I2C write function.
brushless8_s::an
digital_in_t an
Definition: brushless8.h:331
brushless8_s::slave_address
uint8_t slave_address
Definition: brushless8.h:338
BRUSHLESS8_RETVAL
#define BRUSHLESS8_RETVAL
Brushless 8 function status.
Definition: brushless8.h:119
brushless8_pwm_stop
void brushless8_pwm_stop(brushless8_t *ctx)
Stops PWM module.
brushless8_t
struct brushless8_s brushless8_t
Brushless 8 Click context object.
brushless8_s::fg
digital_in_t fg
Definition: brushless8.h:332
brushless8_cfg_t::scl
pin_name_t scl
Definition: brushless8.h:352
brushless8_s::pwm_period
uint16_t pwm_period
Definition: brushless8.h:340
brushless8_dac_read_data
uint16_t brushless8_dac_read_data(brushless8_t *ctx, uint8_t reg)
Brushless 8 I2C read function.
brushless8_s
Brushless 8 Click context object.
Definition: brushless8.h:327
brushless8_cfg_t::vref
float vref
Definition: brushless8.h:366
brushless8_cfg_t::ctrl_mod
uint8_t ctrl_mod
Definition: brushless8.h:368
brushless8_cfg_t::pwm
pin_name_t pwm
Definition: brushless8.h:357
brushless8_s::i2c
i2c_master_t i2c
Definition: brushless8.h:334
brushless8_cfg_t::i2c_address
uint8_t i2c_address
Definition: brushless8.h:361
brushless8_cfg_t::dev_pwm_freq
uint32_t dev_pwm_freq
Definition: brushless8.h:363
brushless8_cfg_t::dir
pin_name_t dir
Definition: brushless8.h:354
brushless8_default_cfg
BRUSHLESS8_RETVAL brushless8_default_cfg(brushless8_t *ctx)
Brushless 8 default configuration function.
brushless8_cfg_t::an
pin_name_t an
Definition: brushless8.h:355
brushless8_s::adc
analog_in_t adc
Definition: brushless8.h:336
brushless8_cfg_t::resolution
analog_in_resolution_t resolution
Definition: brushless8.h:365
brushless8_read_adc
BRUSHLESS8_RETVAL brushless8_read_adc(brushless8_t *ctx, uint16_t *data_out)
ADC read function.
brushless8_set_dac_vout
int8_t brushless8_set_dac_vout(brushless8_t *ctx, uint8_t dac_chn, uint16_t vout)
Brushless 8 I2C function for setting vout.
brushless8_read_an_voltage
BRUSHLESS8_RETVAL brushless8_read_an_voltage(brushless8_t *ctx, float *data_out)
AN voltage read function.
brushless8_cfg_setup
void brushless8_cfg_setup(brushless8_cfg_t *cfg)
Brushless 8 configuration object setup function.
brushless8_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: brushless8.h:360
brushless8_pwm_start
void brushless8_pwm_start(brushless8_t *ctx)
Starts PWM module.
brushless8_get_fg
uint8_t brushless8_get_fg(brushless8_t *ctx)
Brushless 8 fg state.
brushless8_cfg_t::fg
pin_name_t fg
Definition: brushless8.h:358
brushless8_s::pwm_freq
uint32_t pwm_freq
Definition: brushless8.h:341