For BQ40Z50 pack with correct chemical ID, Does the DOD0 for cells in Gauging status2 will update when gauge take OCV? Is the DOD0_x update based on the cell voltage?Is the direction that the higher cell voltage has lower DOD0 value?Â
BQ40Z50 DOD0 VS Vcell
Cells string over 1000V using bq76PL536
Dear all,
We want to reach high voltage connecting 376 LiFePO4 series cells.Â
As the bq76PL536A can monitor a stack up to 192 cells, would be possible split this stack in 2 and use 2 ICs monitoring 188 cells each one?
Besides, with a suitable FET, is it possible to have up to 4 A balancing circuit?
Thank you in advance.
Bests,
Douglas
Schematic Review: BQ27421-G1
Hi Forum,
I have customer in need of a schematic review for a UHF radio sleeve for smartphones. Please review the schematic for the part in the subject line. SCHEMATIC1 _ PAGE4.pdf
Thanks for your help!
Jay
BQ78350 coulomb counter went wrong after shutdown
Following a full discharge cycle matching the expected FCC by 0.1% (very good!!), I charged the pack to about 55% (~7300mAh).
I sent (twice) the shutdown command to my BQ78350. It went down properly, or at least appeared to do so.
I disconnected all the cells then reconnected them.
After booting the BQ, the coulomb counter went from about 7300mAh to about 10700mAh. I saw it live in Battery Studio. SOC went up from about to 55% to about 80%. SOC, FCC and coulomb counter all match but where does that extra 3400mAh come from???
It is not the first time I do a shutdown and cells disconnect. It always appeared to stay at the same SOC after rebooting.
Now that I try charging the pack, I quickly get an overcharge fault because the coulomb counter reaches FCC+OC Threshold.
What could have happened?
How can I put the coulomb counter back on track again?
Thanks
Fred
bq27421 footprint
Hello,
Could someone please direct me to where to find a TI recommended PCB footprint for the bq27421?Â
Thanks,
BQEASY and NCR18650
I am going through the setup phase in BQEASY with a 27541 and was wondering how to determine what to enter for taper current? We are using a pack consisting of 3 groups of 6 cells in parallel to make 12 Volts. The batteries are NCR18650. Sorry if this is a dumb question, but I've looked through the forums and haven't found an answer yet. Should I leave the taper current at the default 100 mils?
Â
Thanks
Using More than one External Temp Sensor on a BP76920+BQ78350
From customer:
Can you please find out if there is any way of getting more than one external temperature sensor on a bp76920+bq78350 - based solution? This is very important to us. If the answer is no, we'll be forced to choose between a bq40z50 (which does not scale up to 8, 12, and 15 cells) or a bq76920+ ARM or MSP430 solution with the SOC and additional temp sensors would be monitored.  It would also be good to know if using a 76930 for a 4-cell solution (which would give us a second external temp sensor) is supported by the bq78350...
BQ34Z100-G1 EVM
Hello,
The BQ34Z100EVMproduct folder is not clear about which chip is being shipped on the board currently.
The BOM in the EVM User's Guide for the BQ34Z100EVM lists the BQ34100PW-G1 as the IC gas gauge. Does this mean that all EVM's are now shipping with the BQ34Z100-G1 chip on board?
Also I think the BQ34100PW-G1 on the BOM could be small typo? Wouldn't it be BQ34Z100PW-G1if it's the G1 chip?
Thanks.
BQ40Z50 BMS SMbus - Is it possible to alter the device address
Hello TI community,
I am currently working on a 4s configuration 20 Ah battery pack and I was wondering if it is possible to change the device address for smbus purposes such that multiple devices can be monitored and communicated with on the same bus. I have looked through the BQstudio software and through the technical reference but do not really see an option for doing so?
Any help is much appreciated.
Thanks
chemistry loading on bq78350 w/o bqstudio
BQ78350 DOD at EDV2 vs Battery Low
BQ78350 TRM p.52:
" DOD at EDV2 should be initialized to (1 – Battery_Low%) × 16384, where Battery_Low% = Battery_Low% ÷ 2.56. "
Battery_Low% = Battery_Low% ÷ 2.56 is suspect.
Only Battery_Low%=0 can make this equation true.
That must be false.
DOD default value is 15232, which nearly matches the default Battery_Low% value of 7%.
It matches.
However, 2.56 factor must be totally ignored for everything to almost make sense.
Can you clarify this please?
BQ78350 Wake From Sleep
When the BQ78350 wakes up from sleep mode, can it be configured to automatically turn on the DSG and CHG outputs?Â
BQ78350 FCC vs reserve capacity vs update
Can you explain the relation between reserve capacity and full charge capacity when it comes to learning (FCC update)?
BQ78350 TRM section 8.1.9 states:
"The value of Reserve Capacity is subtracted from the learn capacity when determining the value of the reported FCC."
I am not sure what is "learn capacity". That expression does not appear anywhere else in the document.
FCC does not include the reserve capacity because it initially matches the design capacity, which itself does not
include reserve capacity (or at least is recommended not to in section 8.1.1).
I am afraid that subtracting reserve capacity from FCC will lead to an error, unless "reported FCC" refers to some other parameter than FCC itself.
I am confused..
Regards,
bq76940 - CHG_ON and DSG_ON failed to turn on
hi,
please, whenever i set CHG_ON or DSG_ON, the SCD and OCD turned to 1 immediately that's caused both charge and discharge mosfet failed to turn on.
when set CHG_ON, the SCD turned to 1 immediately
when set DSG_ON, the OCD turned to 1 immediatelyÂ
environment : bq76940 connected with 13s without OV or UV errors, without loading connected,Â
tigerÂ
BQ2014: NAC is not updated
Use the BQ2014, and have obtained the charge capacity of Ni-MH batteries.
NAC is not updated when you charge or discharge.
Reproduction frequency is very low, it is not yet confirmed only once.
1. I can not NAC update from the initial start-up time.
2. NAC update is available in the register write.
3. After the power supply is stopped, when it is started again, the symptoms can no longer reproduce.
The power supply point, I considered counter for NAC update is no longer operating.
Thank you information about the cause of the counter for NAC update does not work.
Bq34z110: Transfer data to flash problem using micro controller in C, followed instructions SLUA66
After many hours of trying, I still cannot change the bz34z110 flash content .
The idea was to start with something easy like changing the serial number, as one can read it back to verify that the flash has indeed changed. I reset the hardware etc, but the flash always stays the same.
(Brand new bz34z110, never programmed before, as from the factory)
Reading subclass 48Â (serial number at 15 & 16)
 subclass ? 48
( 48)0x30
 0164  00B0  070A  F6D0  0CFE  3100  0000  0100  0000  8403  A00F  401F  70FE  085A  09CA  0D92
  356   176  1802 63184  3326 12544     0   256     0 33795 40975 16415 28926  2138  2506  3474
 64 01 B0 00 0A 07 D0 F6 FE 0C 00 31 00 00 00 01 00 00 03 84 0F A0 1F 40 FE 70 5A 08 CA 09 92 0D Sum32=0x08FF
 SUM 32 Bytes    =0x08FF
 bq_read_checksum =0x0D
 bq_calc_checksum =0x00 read_standard=(0D) > return 0
if I add all 32 Bytes I get 0x08FF.
If I read the checksum I get 0x0d.. I can do this for subclass 64 for instance the last byte is also the checksum readÂ
 subclass ? 64
( 64)0x40
 FF61  0030  0000  0006  0014  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  4C00
 65377    48     0     6    20     0     0     0     0     0     0     0     0     0     0 19456
 61 FF 30 00 00 00 06 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C Sum32=0x01F6
 SUM 32 Bytes    =0x01F6
 bq_read_checksum =0x4C
 bq_calc_checksum =0x09 read_standard=(4C) > return 0
 subclass ? 104
(104)0x68
 2071  945C  9808  FAC0  007B  0000  4E00  0020  0000  0000  0000  0000  0000  0000  0000  BC00
 8305 37980 38920 64192   123     0 19968    32     0     0     0     0     0     0     0 48128
 71 20 5C 94 08 98 C0 FA 7B 00 00 00 00 4E 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BC Sum32=0x0580
 SUM 32 Bytes    =0x0580
 bq_read_checksum =0xBC
 bq_calc_checksum =0x7F read_standard=(BC) > return 0
My checksum function
UINT_8 bq_read_checksum (void){
   //calc checksum
   UINT_8        address = BQ34Z100_ADDRESS; // 0xAA
   UINT_8        read_data [1];
  Â
   // write checksum to the special block checksum address
   read_data[0] = BQ_BLOCK_DATA_CHECKSUM;  // 0x60
   // send the register to the device
   if (i2cwrite(address , read_data, 1, 1) == 1 ) { // no stop
     if (i2cread(address , read_data, 1, 0) == 1) // stop
         return read_data[0];
     else
        gprintf (TTL,"Err: bq_read_checksum::Read ? \n");
    } else Â
    gprintf (TTL,"Err:bq_read_checksum::Write ? \n");
      return 0;  Â
}
I calculate the checksum as follows
UINT_8 bq_calc_checksum (const bool update_flash){
   //calc checksum
   int           i, chkSum = 0, chkSumTemp;
   UINT_8        address = BQ34Z100_ADDRESS; // AA
   UINT_8        write_data [2];
   UINT_8        status;
  Â
   // add all up
   for (i = 0; i < 31; i++){
       chkSum += flash_data[i];
   }
   chkSumTemp = chkSum / 256;
   chkSum = chkSum - (chkSumTemp * 256); Â
   chkSum = 255 - chkSum;
  Â
   chkSumTemp = 0;
   // add all up
   for (i = 0; i < 32; i++){
       chkSumTemp += flash_data[i];
   }
   gprintf (TTL, "Sum32=0x%04X\n", chkSumTemp);
  Â
   if (update_flash == true){
     //write checksum to the special block checksum address
     write_data[0] = BQ_BLOCK_DATA_CHECKSUM;  // 0x60
     write_data[1] = (chkSum & 0x00FF);
     // send the register and checksum to the device
     status = i2cwrite(address , write_data, 2, 0); // issue a stop
     if (status == 2 ){
       return true;
     }
     else {
       gprintf (TTL,
                "ERR: could not write checksum 0x%02X Ret(%d)\n",
                write_data[1], status);
       return false;
      }
   } else{
      return chkSum;
  }
}
But I could not get this to change my serial number, note I have a global array (flash_data) that holds the 32 flash data bytes
New serial number always fails at bq_calc_checksum(true), or the value in flash stay unchanged, however I can use my read_standard to read the voltage currents etc, so I think I read the default serial number as one.
bool new_serial_number (const UINT_16Â value)
{
   UINT_8   serialH, serialL;
   UINT_8   subclass = 48;
   UINT_8 * ptr = NULL;
   serialH = msb(value);
   serialL = lsb(value);
   if (readFlash(subclass, false, false, 0, ptr))
   {
       // Note :: The endian is different, the default serial number is at the wrong index
       if (changeFlash(15,serialL,1))
       {
           //gprintf (TTL,"OK :changeFlash serialH\n");
           if (changeFlash(16,serialH,1))
           {
               //gprintf (TTL,"OK :changeFlash serialL\n");
               dump_flash ();
               if (bq_calc_checksum(true))
               {
                  gprintf (TTL,"OK :bq_calc_checksum 4\n");
                  wait_ms(200);
                  if (readFlash(subclass, false, false, 0, ptr))
                  {
                     gprintf (TTL, "OK :new_serial_number: Wr 0x%04X \n", value);
                     dump_flash ();
                     return true;
                  } else
                   gprintf (TTL,"ERR:new_serial_number 5\n");
               } else
                   gprintf (TTL,"ERR:new_serial_number 4\n");
           } else
           gprintf (TTL,"ERR:new_serial_number 3\n");
       } else
       gprintf (TTL,"ERR:new_serial_number 2\n");
   } else
   gprintf (TTL, "ERR:new_serial_number 1\n");
   return false;
 }
My read flash is as follows
bool readFlash (const UINT_8Â Â Â sub_class,
               const bool     dump,
               const bool     remote_control,
               const UINT_32  index,
               UINT_8       * answer
              )
{
   static UINT_8 read_data [2] = {0};
   UINT_8        write_data [2], i;
   UINT_8        address = BQ34Z100_ADDRESS;
  Â
   // default answer
   answer = NULL;
  Â
   // enable flash transfer
   write_data[0] = BQ_BLOCK_DATA_CONTROL ; // 0x61;
   write_data[1] = 0x00; // transfer code = 0
  Â
   // send the register to be read write
   if (i2cwrite(address , write_data, 2, 0) == 2 ) // stop
   {
       // specify sub class
       write_data[0] = 0x3e;
       write_data[1] = sub_class;// & 0x7f;
       // send the register to be read write
       if (i2cwrite(address , write_data, 2, 0) == 2 ) // stop
       {
           // enable general purpose block
           if (index < 32)
           {
               write_data[0] = 0x3f;
               write_data[1] = 0;
           } else
           {
               write_data[0] = 0x3f;
               write_data[1] = index % 32; // modulo  index 48 => 48 mod 32 = 16 (0x10)
           }
           // send the register to be read write
           if (i2cwrite(address , write_data, 2, 0) == 2 ) // stop
           {
               write_data[0] = BQ_BLOCK_DATA;  // 0x40
               write_data[1] = 0;
               // send the register to be read write
               if (i2cwrite(address , write_data, 1, 0) == 1 ) // no stop
               {
                 for (i = 0; i < 32; i++)
                 {
                     if (i2cread (address, read_data, 1, 0) == 1) // stop
                      {
                           // global
                           flash_data[i] = read_data[0];
                      }
                      else
                      {
                           gprintf (1,"4.Error reading flash [%d] \n", sub_class );
                           return false;
                      }
                    }
               }
               // save the global on success, only used when we dump the flash
               last_read_subclass = sub_class;
           } else
           {
               gprintf (1,"3.Error reading flash [%d] \n", sub_class );
               return false;
           }
       }
       else
       {
           gprintf (1,"2.Error reading flash [%d] \n", sub_class );
           return false;
       }
   } else
   {
       gprintf (1,"1.Error reading flash [%d] \n", sub_class );
       return false;
   }
//SLUA66
//Going to Production With the bq34z1xx
//PRODUCTION STEP 3: Update any Individual Flash Locations, such as Serial Number,Lot Code, and Date.Other than
//the Voltage Divider value, there will usually be some data that is unique to each battery pack, or group
//of packs such as serial number, date of manufacture, etc. This data can be written using the technique below in
//Figure 8.
Function UpdateSerialNumber (iSerialNum As Integer) As Long
 Dim lError        As Long
 Dim iSubClass     As Integer
 Dim iTransferCode As Integer
 Dim yRo wData(32) As Byte
 Dim iChecksum     As Integer
 Dim iTmp          As Integer
 Dim i             As Integer
Â
 iSubClass = 48 '// subclass for configuration data
 iTransferCode = 0
 '//ENABLE FLASH TRANSFER
 lError = WriteI2CByte(&H61, iTransferCode, &HAA)
 '//SPECIFY SUBCLASS
 lError = WriteI2CByte(&H3E, iSubClass, &HAA)
 '//ENABLE GENERAL PURPOSE BLOCK
  lError = WriteI2CByte(&H3F, iTransferCode, &HAA)
 '//
 READ 32 BYTE BLOCK
 lError = ReadI2CByteArray(&H40, yRowData, 32, &HAA)
 '// REPLACE SERIAL NUMBER RAM. ROW OFFSETS ARE FOUND IN THE DATASHEET
 yRowData(15) = (iSerialNum\256) '//MSByte
 yRowData(16) = iSerialNum -(yRowData(0) * 256) '//LSByte
 '//CALCULATE THE CHECKSUM BYTE AND INVERT IT
 For i = 0 To 31
     iChecksum = iChecksum + yRowData(i)
 Next i
 iTmp = iChecksum\256 '//Integer divide
 iChecksum = iChecksum -(iTmp * 256)
 iChecksum = 255 - iChecksum
 '// MOVE THE SERIAL NUMBER INTO THE FUEL GAUGE BUFFER
 lError = WriteI2CByte(&H40 + 15, CInt(yRowData(15)), &HAA)
 lError = WriteI2CByte(&H40 + 16, CInt(yRowData(16)), &HAA)
 '// TRANSFER TO FLASH USING THE CHECKSUM
 lError = WriteI2CByte(&H60, iChecksum, &HAA)
 DoDelay 0.2 '// Wait 0.2 second
En Function
Implementing the bq29702 for a single Li+ battery
Hello,
I am searching for a battery protection chip capable of UVP, UVP . Overcurrent is not really necessary, because charging current is limited and supervised by the battery charging IC.
Using TI's product search tool I found the bq297xy chip as a soltuion. After reading the datasheet I am a bit confused on how to chose the right chip. As pointed out on the example on page 19 and following, the datasheet suggests a chip with a charge-overcurrent trigger of 70mV (OCC) because of the RDSONÂ of about 14,5m Ohm.
The problem is, that the available devices, suitable for my parameters only have an OCC of 0,155A as stated out in the "released device configurations" table (bq29702) but this isn't working with specs for the thresholds of the bq297xy, right? So how can I realize an OVP of about 4,35V and an UVP of 2,8V with this product, and the roght power FETs?
As i mentioned in my introdoction i would also be fine just with an OVP and UVP that protects the battery from damage, so if there is a more suitable product, i would love to hear about it.
thanks for your help and best regards
Benjamin
FAS bit clear problem of bq34z110
Hello!
The following problems occurred during my studying the bq34z110 (With EV2300).
I changed to a mistake Unsealed code "0000 0000", and the Full Access Code "0000 0000" to have changed.
Then [FAS] bit is not clear, [SS] bit is clear.
And I can read the data flash, I can not write.
How to completely reset the bq34z110 in this case?
Or is there a way to clear the FAS bit?
Depleted Voltage
Hello,
We are developing a 2 cell pack with the bq20z95 gauge and bq24765 charger and have chosen a Depleted Voltage threshold of 5000mV and set the CS_XCHGLV bit, so that the DSG FET opens when the voltage falls below 5000mV for 2 seconds. This works well, as per the attached log file. However, at the same time as the XCHGLV flag is set, the FCHG flag is cleared and the Charging Current is set to 0V, so that when I attach the smart charger, it won't charge unless I issue a reset command. I've attached my gg file and a capture of the bqEVSW screen.
Page 58 of SLUA404 states that "A charger must be detected as present for a Depleted Voltage fault to occur." Is this a typo or something? It doesn't make sense to me. As far as having an external voltage source goes, we are planning to use the charger's VDDP reference to recover the pack from a deep discharge, (SLUA533) although, it was not connected at the time of the test.
I've also noticed that after I reset the gauge, the PMS_CHG flag is set in the FET status and although the Charging Current is restored to the full rate 1280mA, the measured charge current slowly ramps up from a few mA.
Any suggestions on how to get this pack charging will be appreciated!
Thank you,
Jeremy.
(Please visit the site to view this file)
(Please visit the site to view this file)
Zero Volt charging -- SLUS757C
I'd like some help with Zero Volt charging. SLUS757C, p. 3 states that the PMS pin should be connected to PACK to enable 0V precharge using the charge FET, yet SLUU264a, p. 35 suggests that PMS = GND for 0-V Charge FET mode. Should PMS be tied to PACK, or GND to allow zero volt charging?
Also, going back to my earlier post, wouldn't it make more sense to couple the 6V VDDP reference using the BAT54 (SLUA533) directly to the VCC pin on the gauge? This would allow the gauge to power up immediately, rather than having to wait until the cells are charged to the point where the BQ29330's 5.5V startup voltage is reached, keeping in mind that there are three diodes in series (including the FET body diode), which will all impose a voltage drop. The gauge could then command the charger with the precharge current.
Does this seem correct, or am I missing something?
Thank you,
Jeremy.