Quantcast
Channel: Power management forum - Recent Threads
Viewing all 35901 articles
Browse latest View live
↧

BQ40Z50 DOD0 VS Vcell

$
0
0

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? 

↧

Cells string over 1000V using bq76PL536

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

Hello,

Could someone please direct me to where to find a TI recommended PCB footprint for the bq27421? 

Thanks,

↧
↧

BQEASY and NCR18650

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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.

↧
Viewing all 35901 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>