This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RTOS/BQ27510-G3: BQ27510-G3 Problem in soc, soh, and time to empty parameters

Part Number: BQ27510-G3
Other Parts Discussed in Thread: CC1350

Tool/software: TI-RTOS

hi sir.....

 BQ27510-G3 was interfaced to the cc1350  controller while receiving data from the sensor some parameter like SOC, SOH, TIME TO EMPTY values not accurate can you suggest any modification in my code

DELAY_US(70);

txBuffer_bat[0] =0x06; //temperature
i2cWrite((uint8_t)0x55, txBuffer_bat, 1);
DELAY_US(70);
i2cRead((uint8_t)0x55,rxBuffer_bat_temp,2);
Temperature = ((uint16_t) rxBuffer_bat_temp[1] << 8) | rxBuffer_bat_temp[0];
Bat_Temperature = (float)(Temperature);
Bat_Temperature = Bat_Temperature / 10.0f;
Bat_Temperature -= 272.15f;

DELAY_US(70);

txBuffer_bat[0] =0x08; //voltage
i2cWrite((uint8_t)0x55, txBuffer_bat, 1);
DELAY_US(70);
i2cRead((uint8_t)0x55,rxBuffer_bat_volt,2);
Voltage = ((uint16_t) rxBuffer_bat_volt[1] << 8) | rxBuffer_bat_volt[0];
Bat_Voltage = (float)(Voltage);
Bat_Voltage = Bat_Voltage / 1000.0f;

DELAY_US(70);

txBuffer_bat[0] =0x16; //time to empty
i2cWrite((uint8_t)0x55, txBuffer_bat, 1);
DELAY_US(70);
i2cRead((uint8_t)0x55,rxBuffer_bat_time,2);
TimeToEmpty = ((int16_t) rxBuffer_bat_time[1] << 8) | rxBuffer_bat_time[0];
Bat_TimeToEmpty = (float)(TimeToEmpty);
Bat_TimeToEmpty = Bat_TimeToEmpty / 60.0f;

DELAY_US(70);

txBuffer_bat[0] =0x14; //current
i2cWrite((uint8_t)0x55, txBuffer_bat, 1);
DELAY_US(70);
i2cRead((uint8_t)0x55,rxBuffer_bat_current,2);
AverageCurrent = ((int16_t) rxBuffer_bat_current[1] << 8) | rxBuffer_bat_current[0];
Bat_AverageCurrent = (float)(AverageCurrent);
Bat_AverageCurrent = Bat_AverageCurrent / 1000.0f;

DELAY_US(70);

txBuffer_bat[0] =0x1C; //sate of Health
i2cWrite((uint8_t)0x55, txBuffer_bat, 1);
DELAY_US(70);
i2cRead((uint8_t)0x55,rxBuffer_bat_soh,2);
StateOfHealth = ((int16_t) rxBuffer_bat_soh[1] << 8) | rxBuffer_bat_soh[0];
StateOfHealth = (StateOfHealth & 0xFF);

DELAY_US(70);

txBuffer_bat[0] =0x20; //sate of charge
i2cWrite((uint8_t)0x55, txBuffer_bat, 1);
DELAY_US(70);
i2cRead((uint8_t)0x55,rxBuffer_bat_soc,2);
StateOfCharge = ((int16_t) rxBuffer_bat_soc[1] << 8) | rxBuffer_bat_soc[0];

  • hi Sai

    What do you mean are not accurate. Are you saying  the gauge is reporting correct values but you are unable to read the correct data from the device or are you saying the gauge is not reporting correct values?  If the latter, then the question arises as to weather you performed the chem id identification, programmed the identified chem id and then performed a learning cycle?

    thanks

    Onyx 

  • hi sir..

    thanks for the replay..

    ->In the data sheet of Bq27510-g3 they are given like soc is predicted by StateOfCharge( ) =
    RemainingCapacity( ) ÷ FullChargeCapacity( ) . if i have done this calculation when my battery voltage is at 3.66v (max volttage 3.7v) it is giving soc is 7%.
    -> is it possible to measure soc based on battery voltages.

    thanks

    sai naresh
  • Sai,
    The gauge does not predict the SOC based off voltage. It is a combination of multiple parameters, so you cannot simply correlate voltage to SOC.
    Did you perform a chemid identification and a learning cycle?
    thanks
    Onyx