123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #ifndef BEASTDEVICES_INA3221_H
- #define BEASTDEVICES_INA3221_H
- #include <ch.h>
- #include <hal.h>
- typedef enum {
- INA3221_ADDR40_GND = 0b1000000,
- INA3221_ADDR41_VCC = 0b1000001,
- INA3221_ADDR42_SDA = 0b1000010,
- INA3221_ADDR43_SCL = 0b1000011
- } ina3221_addr_t;
- typedef enum {
- INA3221_CH1 = 0,
- INA3221_CH2 = 1,
- INA3221_CH3 = 2,
- INA3221_CH_NUM = 3
- } ina3221_ch_t;
- typedef enum {
- INA3221_REG_CONF = 0,
- INA3221_REG_CH1_SHUNTV,
- INA3221_REG_CH1_BUSV,
- INA3221_REG_CH2_SHUNTV,
- INA3221_REG_CH2_BUSV,
- INA3221_REG_CH3_SHUNTV,
- INA3221_REG_CH3_BUSV,
- INA3221_REG_CH1_CRIT_ALERT_LIM,
- INA3221_REG_CH1_WARNING_ALERT_LIM,
- INA3221_REG_CH2_CRIT_ALERT_LIM,
- INA3221_REG_CH2_WARNING_ALERT_LIM,
- INA3221_REG_CH3_CRIT_ALERT_LIM,
- INA3221_REG_CH3_WARNING_ALERT_LIM,
- INA3221_REG_SHUNTV_SUM,
- INA3221_REG_SHUNTV_SUM_LIM,
- INA3221_REG_MASK_ENABLE,
- INA3221_REG_PWR_VALID_HI_LIM,
- INA3221_REG_PWR_VALID_LO_LIM,
- INA3221_REG_MANUF_ID = 0xFE,
- INA3221_REG_DIE_ID = 0xFF
- } ina3221_reg_t;
- typedef enum {
- INA3221_REG_CONF_CT_140US = 0,
- INA3221_REG_CONF_CT_204US,
- INA3221_REG_CONF_CT_332US,
- INA3221_REG_CONF_CT_588US,
- INA3221_REG_CONF_CT_1100US,
- INA3221_REG_CONF_CT_2116US,
- INA3221_REG_CONF_CT_4156US,
- INA3221_REG_CONF_CT_8244US
- } ina3221_conv_time_t;
- typedef enum {
- INA3221_REG_CONF_AVG_1 = 0,
- INA3221_REG_CONF_AVG_4,
- INA3221_REG_CONF_AVG_16,
- INA3221_REG_CONF_AVG_64,
- INA3221_REG_CONF_AVG_128,
- INA3221_REG_CONF_AVG_256,
- INA3221_REG_CONF_AVG_512,
- INA3221_REG_CONF_AVG_1024
- } ina3221_avg_mode_t;
- typedef struct Beastdevices_INA3221 {
- ina3221_addr_t i2c_addr;
- I2CDriver *i2cd;
- uint32_t shuntRes[INA3221_CH_NUM];
- uint32_t filterRes[INA3221_CH_NUM];
- } ina3221_t;
- uint16_t INA3221_getReg(ina3221_t * ina, const ina3221_reg_t reg);
- void INA3221_reset(ina3221_t * ina);
- void INA3221_setModePowerDown(ina3221_t * ina);
- void INA3221_setModeContinious(ina3221_t * ina);
- void INA3221_setModeTriggered(ina3221_t * ina);
- void INA3221_setShuntMeasEnable(ina3221_t * ina);
- void INA3221_setShuntMeasDisable(ina3221_t * ina);
- void INA3221_setBusMeasEnable(ina3221_t * ina);
- void INA3221_setBusMeasDisable(ina3221_t * ina);
- void INA3221_setAveragingMode(ina3221_t * ina, ina3221_avg_mode_t mode);
- void INA3221_setBusConversionTime(ina3221_t * ina, ina3221_conv_time_t convTime);
- void INA3221_setShuntConversionTime(ina3221_t * ina, ina3221_conv_time_t convTime);
- void INA3221_setPwrValidUpLimit(ina3221_t * ina, int16_t voltagemV);
- void INA3221_setPwrValidLowLimit(ina3221_t * ina, int16_t voltagemV);
- void INA3221_setShuntSumAlertLimit(ina3221_t * ina, int32_t voltagemV);
- void INA3221_setCurrentSumAlertLimit(ina3221_t * ina, int32_t currentmA);
- void INA3221_setWarnAlertLatchEnable(ina3221_t * ina);
- void INA3221_setWarnAlertLatchDisable(ina3221_t * ina);
- void INA3221_setCritAlertLatchEnable(ina3221_t * ina);
- void INA3221_setCritAlertLatchDisable(ina3221_t * ina);
- void INA3221_readFlags(ina3221_t * ina);
- bool INA3221_getTimingCtrlAlertFlag(void);
- bool INA3221_getPwrValidAlertFlag(void);
- bool INA3221_getCurrentSumAlertFlag(void);
- bool INA3221_getConversionReadyFlag(void);
- uint16_t INA3221_getManufID(ina3221_t * ina);
- uint16_t INA3221_getDieID(ina3221_t * ina);
- void INA3221_setChannelEnable(ina3221_t * ina, ina3221_ch_t channel);
- void INA3221_setChannelDisable(ina3221_t * ina, ina3221_ch_t channel);
- void INA3221_setWarnAlertShuntLimit(ina3221_t * ina, ina3221_ch_t channel, int32_t voltageuV);
- void INA3221_setCritAlertShuntLimit(ina3221_t * ina, ina3221_ch_t channel, int32_t voltageuV);
- void INA3221_setWarnAlertCurrentLimit(ina3221_t * ina, ina3221_ch_t channel, int32_t currentmA);
- void INA3221_setCritAlertCurrentLimit(ina3221_t * ina, ina3221_ch_t channel, int32_t currentmA);
- void INA3221_setCurrentSumEnable(ina3221_t * ina, ina3221_ch_t channel);
- void INA3221_setCurrentSumDisable(ina3221_t * ina, ina3221_ch_t channel);
- int32_t INA3221_getShuntVoltage(ina3221_t * ina, ina3221_ch_t channel);
- bool INA3221_getWarnAlertFlag(ina3221_t * ina, ina3221_ch_t channel);
- bool INA3221_getCritAlertFlag(ina3221_t * ina, ina3221_ch_t channel);
- int32_t INA3221_estimateOffsetVoltage(ina3221_t * ina, ina3221_ch_t channel, uint32_t busVoltage);
- int32_t INA3221_getCurrent(ina3221_t * ina, ina3221_ch_t channel);
- int32_t INA3221_getCurrentCompensated(ina3221_t * ina, ina3221_ch_t channel);
- uint32_t INA3221_getVoltage(ina3221_t * ina, ina3221_ch_t channel);
- #endif
|