91 lines
2.9 KiB
C
91 lines
2.9 KiB
C
/*
|
|
bq769x0.h - Battery management system based on bq769x0 for Arduino
|
|
Copyright (C) 2015 Martin J ger (m.jaeger@posteo.de)
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this program. If not, see
|
|
<http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _BQ769X0_H_
|
|
#define _BQ769X0_H_
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "hc32_ddl.h"
|
|
|
|
// can be reduced to save some memory if smaller ICs are used
|
|
#define MAX_NUMBER_OF_CELLS 15
|
|
#define MAX_NUMBER_OF_THERMISTORS 3
|
|
|
|
// IC type/size
|
|
#define bq76920 1
|
|
#define bq76930 2
|
|
#define bq76940 3
|
|
|
|
// initialization, status update and shutdown
|
|
void bq769x0_construct(void);
|
|
int bq769x0_begin(uint8_t alertPin, uint8_t bootPin);
|
|
int bq769x0_checkStatus(void); // returns 0 if everything is OK
|
|
void bq769x0_updateData(void);
|
|
void bq769x0_shutdown(void);
|
|
|
|
uint8_t bq769x0_updateBalancingSwitches(uint16_t sBal, uint8_t mode);
|
|
|
|
// charging control
|
|
bool enableCharging(void);
|
|
void disableCharging(void);
|
|
bool enableDischarging(void);
|
|
void disableDischarging(void);
|
|
|
|
// limit settings (for battery protection)
|
|
long setShortCircuitProtection(long current_mA, int delay_us);
|
|
long setOvercurrentChargeProtection(long current_mA, int delay_ms);
|
|
long setOvercurrentDischargeProtection(long current_mA, int delay_ms);
|
|
int setCellUndervoltageProtection(int voltage_mV, int delay_s);
|
|
int setCellOvervoltageProtection(int voltage_mV, int delay_s);
|
|
|
|
// battery status
|
|
uint16_t getNumberOfCells(void);
|
|
uint32_t getBatteryVoltage(void);
|
|
uint32_t getBatterySumVoltage(void);
|
|
uint16_t getCellVoltage(uint16_t idCell);
|
|
int getMinCellVoltage(void);
|
|
int getMaxCellVoltage(void);
|
|
float getTemperatureDegC(uint8_t channel);
|
|
float getTemperatureDegF(uint8_t channel);
|
|
uint16_t getCellBalStatus(void);
|
|
uint8_t getAfeStatus(void);
|
|
uint8_t getAfeCtrl1(void);
|
|
uint8_t getAfeCtrl2(void);
|
|
uint8_t getAfeProtect(uint8_t id);
|
|
uint8_t getAfeUvTrip(void);
|
|
uint8_t getAfeOvTrip(void);
|
|
|
|
uint8_t bq769x0_getAlertStatus(void);
|
|
void bq769x0_ResetAlert(void);
|
|
|
|
// Methods
|
|
bool determineAddressAndCrc(void);
|
|
void updateVoltages(void);
|
|
void updateCurrent(bool ignoreCCReadyFlag);
|
|
void updateTemperatures(void);
|
|
|
|
uint8_t readRegister(uint8_t address);
|
|
void writeRegister(uint8_t address, int data);
|
|
|
|
void updateAdcGain2(int32_t Gain2);
|
|
|
|
#endif // _BQ769X0_H_
|
|
|
|
/*******************(C)COPYRIGHT 2022 AMG ********************END OF FILE******/
|