20#define ADBMS_MODULE_COUNT (7)
23#define ADBMS_PEC_FAIL_MAX_RETRIES (3)
26#define ADBMS_GPIO_R1 (10000.0f)
28#define ADBMS_GPIO_VIN (3.0f)
31#define ADBMS_SPI_TX_BUFFER_SIZE \
32 (ADBMS6380_COMMAND_PKT_SIZE + (ADBMS_MODULE_COUNT * ADBMS6380_SINGLE_DATA_PKT_SIZE))
34#define ADBMS_SPI_RX_BUFFER_SIZE (ADBMS6380_SINGLE_DATA_PKT_SIZE * ADBMS_MODULE_COUNT)
36#define ADBMS_REGA_REFON (true)
37#define ADBMS_REGA_CTH (0b110)
38#define ADBMS_REGB_OV_THRESHOLD (4.2f)
39#define ADBMS_REGB_UV_THRESHOLD (3.0f)
40#define ADBMS_ADCV_RD (false)
41#define ADBMS_ADCV_CONT (true)
42#define ADBMS_ADCV_DCP (false)
43#define ADBMS_ADCV_RSTF (true)
44#define ADBMS_ADCV_OW (0b00)
45#define ADBMS_ADAX_OW (false)
46#define ADBMS_ADAX_PUP (false)
47#define ADBMS_ADAX_CH (0b00000)
Low level BMS driver specific to ADBMS6380 chip.
#define ADBMS6380_SINGLE_DATA_RAW_SIZE
Definition adbms6380.h:30
#define ADBMS6380_RDAUX_CMD_COUNT
Definition adbms6380.h:40
#define ADBMS6380_GPIO_COUNT
Definition adbms6380.h:21
#define ADBMS6380_RDCV_CMD_COUNT
Definition adbms6380.h:36
#define ADBMS6380_CELL_COUNT
Definition adbms6380.h:19
void adbms_write_regb(adbms_bms_t *bms)
Calculate and write REGB configuration to all modules.
Definition adbms.c:71
void adbms_periodic(adbms_bms_t *bms, float min_voltage_for_balance, float min_delta_for_balance)
Periodic service routine for connection, measurements, and balancing.
Definition adbms.c:354
void adbms_read_therms(adbms_bms_t *bms)
Read all GPIO/thermistor values (voltage and calculate temperature) and update module/pack statistics...
Definition adbms.c:283
void adbms_connect(adbms_bms_t *bms)
Perform the connect/bring-up sequence for all modules.
Definition adbms.c:156
void adbms_calculate_balance_cells(adbms_bms_t *bms, float min_voltage, float min_delta)
Compute per-cell discharge flags based on pack voltage spread.
Definition adbms.c:188
void adbms_init(adbms_bms_t *bms, SPI_InitConfig_t *spi, uint8_t *tx_buf)
Initialize the ADBMS driver instance and TX buffer.
Definition adbms.c:22
#define ADBMS_MODULE_COUNT
Definition adbms.h:20
bool adbms_read_and_check_rega(adbms_bms_t *bms)
Read back REGA and compare with cached configuration.
Definition adbms.c:88
void adbms_write_rega(adbms_bms_t *bms)
Calculate and write REGA configuration to all modules.
Definition adbms.c:56
void adbms_read_cells(adbms_bms_t *bms)
Read all cell voltages and update module/pack statistics.
Definition adbms.c:231
#define ADBMS_SPI_RX_BUFFER_SIZE
Definition adbms.h:34
void adbms_balance_and_update_regb(adbms_bms_t *bms, float min_voltage, float min_delta)
Compute discharge flags and write REGB to apply balancing.
Definition adbms.c:221
bool adbms_read_and_check_regb(adbms_bms_t *bms)
Read back REGB and compare with cached configuration.
Definition adbms.c:122
adbms_state_t
ADBMS driver connection/operation state.
Definition adbms.h:52
@ ADBMS_STATE_IDLE
Definition adbms.h:53
@ ADBMS_STATE_CONNECTED
Definition adbms.h:54
@ ADBMS_STATE_RECOVERING
Definition adbms.h:55
Fixed-size string builder. Useful for building large CMD strings before transmission.
Configuration entry for SPI initilization.
Definition spi.h:25
Top-level ADBMS driver state, I/O buffers, measurements, and error flags.
Definition adbms.h:104
float min_voltage
Definition adbms.h:112
bool err_regb_mismatch
Definition adbms.h:144
bool err_connect
Definition adbms.h:140
float max_voltage
Definition adbms.h:114
bool err_rega_mismatch
Definition adbms.h:142
float avg_voltage
Definition adbms.h:116
bool err_regb_pec
Definition adbms.h:149
bool err_spi
Definition adbms.h:138
SPI_InitConfig_t * spi
Definition adbms.h:131
float sum_voltage
Definition adbms.h:118
strbuf_t tx_strbuf
Definition adbms.h:133
bool is_balancing_enabled
Definition adbms.h:128
bool err_rega_pec
Definition adbms.h:147
float avg_therm_temp
Definition adbms.h:125
float min_therm_temp
Definition adbms.h:121
float max_therm_temp
Definition adbms.h:123
adbms_state_t state
Definition adbms.h:106
Per-ADBMS module measurements, config, and error flags.
Definition adbms.h:61
bool err_rega_mismatch
Definition adbms.h:96
float max_therm_temp
Definition adbms.h:83
float sum_voltage
Definition adbms.h:73
float min_voltage
Definition adbms.h:67
float avg_voltage
Definition adbms.h:71
float avg_therm_temp
Definition adbms.h:85
float max_voltage
Definition adbms.h:69
bool err_regb_mismatch
Definition adbms.h:98
float min_therm_temp
Definition adbms.h:81