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.

BQ76940: Pak current junk reading and first NTC thermistor TS1 not reading issue

Part Number: BQ76940


Tool/software:

Hi TI Team,

We are currently developing a Battery Management System (BMS) using the BQ76940 IC, interfaced with an STM32 microcontroller. Our goal is to read and control key parameters such as cell voltages, pack current, pack voltage, and temperature. So far, we have successfully read the individual cell voltages and the pack voltage.

However, we are encountering issues with reading the pack current and temperature (TS1):

1.Pack Current:

  • The value read from the CC register is almost constant, typically 0xFFB1, and occasionally 0x0042.

  • According to the datasheet, we have applied the given formula to calculate the current, but the ADC value does not change with varying load conditions.

  • Additionally, the CC_READY bit is set only once after power-on. We are enabling both ADC_EN and CC_EN bits, but the CC value does not update.

//our code for your reference

HAL_I2C_Mem_Read(&hi2c1, 0x08<<1,PACKCURR_REG_ADD, I2C_MEMADD_SIZE_8BIT, Read_Arr, 2, 100); //pack current
Pack_curre_adc_raw=((Read_Arr[0] << 8) | Read_Arr[1]);
Pack_cur_sig_value=(int16_t)Pack_curre_adc_raw;
Pack_CUR_uVolt=(float)Pack_cur_sig_value*8.44;
Pack_CUR_Volt=Pack_CUR_uVolt*0.000001;
Pack_Current_A=Pack_CUR_Volt/0.005;        //I=V/R A
Pack_microA=Pack_Current_A*1000000;       //microAmps

Could you please confirm whether our calculation method is correct, and clarify the correct procedure for reading the CC register value? Are there any additional steps required to ensure that the coulomb counter updates continuously?

2.Temperature (TS1):

  • We are reading the TS1, TS2, and TS3 registers for NTC thermistor temperature measurements. The TS2 and TS3 registers are returning correct values. However, when we read the TS1 register, we consistently receive a constant value of 0x21A5, while TS2 and TS3 return values such as 0x0F6F.
  • After conversion, the TS2 and TS3 values correspond to approximately 29 °C, which is correct. In contrast, the TS1 value does not change and remains constant.
  • We have attached the relevant code below for your reference. Could you please review it and advise on any mistakes or missing steps in our implementation that might cause TS1 to remain constant?

#define TS1_REG_ADD 0x2C
#define TS2_REG_ADD 0x2E
#define TS3_REG_ADD 0x30

BQ769x0_BlockRead(&hi2c1,TS1_REG_ADD,gRead_arr,2);
HAL_I2C_Mem_Read(&hi2c1, 0x08<<1,TS1_REG_ADD, I2C_MEMADD_SIZE_8BIT, Read_Arr, 2, 100); //Thermistor1
Thermist_raw_val[0]=((Read_Arr[0] << 8) | Read_Arr[1]) & 0x3FFF;
ThermisTemp[0]=ConvertRawToTemp(Thermist_raw_val[0]);

HAL_I2C_Mem_Read(&hi2c1, 0x08<<1,TS2_REG_ADD, I2C_MEMADD_SIZE_8BIT, Read_Arr, 2, 100); //Thermistor2
Thermist_raw_val[1]=((Read_Arr[0] << 8) | Read_Arr[1]) & 0x3FFF;
ThermisTemp[1]=ConvertRawToTemp(Thermist_raw_val[1]);

HAL_I2C_Mem_Read(&hi2c1, 0x08<<1,TS3_REG_ADD, I2C_MEMADD_SIZE_8BIT, Read_Arr, 2, 100); //Thermistor3
Thermist_raw_val[2]=((Read_Arr[0] << 8) | Read_Arr[1]) & 0x3FFF;
ThermisTemp[2]=ConvertRawToTemp(Thermist_raw_val[2]);

We had previously raised a query regarding the procedure for reading parameters from the BQ76940 IC, but unfortunately, we have not received a response. This lack of clarity makes it difficult for us to proceed with the evaluation and implementation of this device in our project.

In order to make informed decisions about purchasing and using this IC in our BMS design, we kindly request timely support and clarification. We would greatly appreciate it if someone could address these queries and provide guidance on resolving the issues we are facing

 

Thanks,

Priyadharshini S.