fan9 2.1.0.0
fan9.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 FAN9_H
29#define FAN9_H
30
31#ifdef __cplusplus
32extern "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
69#define FAN9_REG_EEPROM_ADDR_8 0x08
70#define FAN9_REG_EEPROM_ADDR_9 0x09
71#define FAN9_REG_EEPROM_ADDR_10 0x0A
72#define FAN9_REG_EEPROM_ADDR_11 0x0B
73#define FAN9_REG_EEPROM_ADDR_12 0x0C
74#define FAN9_REG_EEPROM_ADDR_13 0x0D
75#define FAN9_REG_EEPROM_ADDR_14 0x0E
76#define FAN9_REG_EEPROM_ADDR_15 0x0F
77#define FAN9_REG_EEPROM_ADDR_16 0x10
78#define FAN9_REG_EEPROM_ADDR_17 0x11
79#define FAN9_REG_EEPROM_ADDR_18 0x12
80#define FAN9_REG_EEPROM_ADDR_19 0x13
81#define FAN9_REG_EEPROM_ADDR_20 0x14
82#define FAN9_REG_EEPROM_ADDR_21 0x15
83#define FAN9_REG_EEPROM_ADDR_22 0x16
84#define FAN9_REG_EEPROM_ADDR_23 0x17
85#define FAN9_REG_EEPROM_ADDR_24 0x18
86#define FAN9_REG_EEPROM_ADDR_25 0x19
87#define FAN9_REG_EEPROM_ADDR_26 0x1A
88#define FAN9_REG_EEPROM_ADDR_27 0x1B
89#define FAN9_REG_EEPROM_ADDR_28 0x1C
90#define FAN9_REG_EEPROM_ADDR_29 0x1D
91#define FAN9_REG_EEPROM_ADDR_30 0x1E
92#define FAN9_REG_PWM_VAL 0x65
93 // fan9_reg
95
110#define FAN9_SPEED_CTRL_OPEN_LOOP 0x0000
111#define FAN9_SPEED_CTRL_CLOASED 0x0001
112#define FAN9_PHA_MODE_AUTO 0x0000
113#define FAN9_PHA_MODE_LINEAR_PHASE 0x0002
114#define FAN9_RD_ENABLED 0x0000
115#define FAN9_RD_DISABLED 0x0004
116#define FAN9_SPEED_CONTROL_PWM 0x0000
117#define FAN9_SPEED_CONTROL_ANALOG 0x0008
118#define FAN9_POLE_PAIR_1 0x0000
119#define FAN9_POLE_PAIR_2 0x0010
120#define FAN9_POLE_PAIR_3 0x0020
121#define FAN9_POLE_PAIR_4 0x0030
122#define FAN9_POLE_PAIR_5 0x0040
123#define FAN9_POLE_PAIR_6 0x0050
124#define FAN9_POLE_PAIR_7 0x0060
125#define FAN9_NOCOAST 0x0080
126#define FAN9_COAST 0x0000
127#define FAN9_ALIGNMODE_ALIGN 0x0000
128#define FAN9_ALIGNMODE_ONE_CYCLE 0x0100
129#define FAN9_QCKSTART_DISABLED 0x0000
130#define FAN9_QCKSTART_ENABLED 0x0200
131#define FAN9_OVPOPT_DISABLED 0x0000
132#define FAN9_OVPOPT_LOCK_DETECT 0x0400
133#define FAN9_FGSTRT_FG_DISABLED 0x0000
134#define FAN9_FGSTRT_FG_ENABLED 0x0800
135#define FAN9_BEMFHYS_LEVEL_0 0x0000
136#define FAN9_BEMFHYS_LEVEL_1 0x1000
137#define FAN9_BEMFHYS_LEVEL_2 0x2000
138#define FAN9_BEMFHYS_LEVEL_3 0x3000
139#define FAN9_SOWAUTO_VALUE_0 0x0000
140#define FAN9_SOWAUTO_VALUE_1 0x4000
141#define FAN9_OCPOPT_RST_AFTER_TLOCK 0x0000
142#define FAN9_OCPOPT_RST_AFTER_PWM_ONOFF 0x8000
143
148#define FAN9_STRTDMD_VALUE 0x0033
149#define FAN9_DMDPOST_VALUE 0xCA00
150
155#define FAN9_PIN_STATE_LOW 0x00
156#define FAN9_PIN_STATE_HIGH 0x01
157
162#define FAN9_DIRECTION_CW 0x00
163#define FAN9_DIRECTION_CCW 0x01
164
169#define FAN9_BRAKE_OFF 0x00
170#define FAN9_BRAKE_ON 0x01
171
176#define FAN9_PWM_CALCULATION_CONS 511.0f
177#define FAN9_PWM_CALCULATION_MUL 100
178
179
185#define FAN9_DEVICE_ADDRESS 0x55
186 // fan9_set
188
203#define FAN9_MAP_MIKROBUS( cfg, mikrobus ) \
204 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
205 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
206 cfg.rd = MIKROBUS( mikrobus, MIKROBUS_AN ); \
207 cfg.brk = MIKROBUS( mikrobus, MIKROBUS_RST ); \
208 cfg.dir = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
209 cfg.flt = MIKROBUS( mikrobus, MIKROBUS_INT )
210 // fan9_map // fan9
213
218typedef struct
219{
220 // Output pins
221 digital_out_t brk;
222 digital_out_t dir;
224 // Input pins
225 digital_in_t rd;
227 digital_in_t flt;
229 // Modules
230 i2c_master_t i2c;
232 // I2C slave address
235} fan9_t;
236
241typedef struct
242{
243 pin_name_t scl;
244 pin_name_t sda;
246 pin_name_t rd;
247 pin_name_t brk;
248 pin_name_t dir;
249 pin_name_t flt;
251 uint32_t i2c_speed;
252 uint8_t i2c_address;
254} fan9_cfg_t;
255
260typedef enum
261{
263 FAN9_ERROR = -1
264
266
283
297err_t fan9_init ( fan9_t *ctx, fan9_cfg_t *cfg );
298
312
327err_t fan9_generic_write ( fan9_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
328
343err_t fan9_generic_read ( fan9_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
344
354uint8_t fan9_get_rd_pin ( fan9_t *ctx );
355
365uint8_t fan9_get_flt_pin ( fan9_t *ctx );
366
377void fan9_set_direction ( fan9_t *ctx, uint8_t dir );
378
389void fan9_set_brake ( fan9_t *ctx, uint8_t brake_state );
390
404err_t fan9_write_reg ( fan9_t *ctx, uint8_t reg, uint16_t data_in );
405
419err_t fan9_read_reg ( fan9_t *ctx, uint8_t reg, uint16_t *data_out );
420
433err_t fan9_set_pwm ( fan9_t *ctx, uint8_t pwm_val );
434
447err_t fan9_get_pwm ( fan9_t *ctx, uint8_t *pwm_val );
448
449#ifdef __cplusplus
450}
451#endif
452#endif // FAN9_H
453 // fan9
455
456// ------------------------------------------------------------------------ END
fan9_return_value_t
Fan 9 Click return value data.
Definition: fan9.h:261
@ FAN9_OK
Definition: fan9.h:262
@ FAN9_ERROR
Definition: fan9.h:263
void fan9_set_brake(fan9_t *ctx, uint8_t brake_state)
Fan 9 set brake state function.
uint8_t fan9_get_rd_pin(fan9_t *ctx)
Fan 9 get RD pin state function.
err_t fan9_set_pwm(fan9_t *ctx, uint8_t pwm_val)
Fan 9 set PWM value function.
void fan9_set_direction(fan9_t *ctx, uint8_t dir)
Fan 9 set direction function.
void fan9_cfg_setup(fan9_cfg_t *cfg)
Fan 9 configuration object setup function.
err_t fan9_generic_write(fan9_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Fan 9 I2C writing function.
err_t fan9_read_reg(fan9_t *ctx, uint8_t reg, uint16_t *data_out)
Fan 9 register reading function.
err_t fan9_write_reg(fan9_t *ctx, uint8_t reg, uint16_t data_in)
Fan 9 register writing function.
err_t fan9_init(fan9_t *ctx, fan9_cfg_t *cfg)
Fan 9 initialization function.
err_t fan9_default_cfg(fan9_t *ctx)
Fan 9 default configuration function.
err_t fan9_get_pwm(fan9_t *ctx, uint8_t *pwm_val)
Fan 9 get PWM value function.
err_t fan9_generic_read(fan9_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Fan 9 I2C reading function.
uint8_t fan9_get_flt_pin(fan9_t *ctx)
Fan 9 get FLT pin state function.
Fan 9 Click configuration object.
Definition: fan9.h:242
pin_name_t rd
Definition: fan9.h:246
uint32_t i2c_speed
Definition: fan9.h:251
pin_name_t flt
Definition: fan9.h:249
pin_name_t dir
Definition: fan9.h:248
pin_name_t scl
Definition: fan9.h:243
pin_name_t sda
Definition: fan9.h:244
pin_name_t brk
Definition: fan9.h:247
uint8_t i2c_address
Definition: fan9.h:252
Fan 9 Click context object.
Definition: fan9.h:219
digital_in_t flt
Definition: fan9.h:227
digital_out_t brk
Definition: fan9.h:221
digital_in_t rd
Definition: fan9.h:225
i2c_master_t i2c
Definition: fan9.h:230
uint8_t slave_address
Definition: fan9.h:233
digital_out_t dir
Definition: fan9.h:222