Tool/software:
i attach the my design of BQ25622 , here when i connected the vbus to 5v source then BQ25622 ic will heated up too much ,help me to fixed this is this right design or i have to modified it if yes then provide suggestion
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.
Tool/software:
i attach the my design of BQ25622 , here when i connected the vbus to 5v source then BQ25622 ic will heated up too much ,help me to fixed this is this right design or i have to modified it if yes then provide suggestion
Hi Ravi,
I have reviewed your schematic and have the following comments.
-Can you please help to explain the reason for your selection of 220 ohm resistors for pullup for STAT and PG pins? Generally speaking TI recommends using at least 1kohm or larger resistors for these pins as they are not designed to be able to sink a large amount of current.
-Pullup resistor connected to INT pin is recommended to be 10kohm.
-Please be aware to enable charging you need to be able to pull /CE pin low. Your schematic only shows /CE connected to 3.3V pullup.
-Please be aware if you are to leave TS pin unconnected you need to set TS_IGNORE = 1 (REG0x1A[7]) to be able to charge your battery.
Besides these comments the rest of the schematic looks okay.
here when i connected the vbus to 5v source then BQ25622 ic will heated up too much
Can you please help to quantify this statement? What is the current draw at VBUS when you observe the PCB heating up? How much is the IC heating? If you do not have a way to measure heat can you please use the integrated ADC of the BQ25622. The TDIE ADC output (REG0x36) will provide a close estimate of the IC temperature.
Best Regards,
Garrett
hello @garrett thanks for your replay ,here i made the change which u suggest like (1)give 1kohm in STAT and PG PIN , (2) 10kohm pull up on INT (3) pull down on CE by 3.3kohm but it did not slove problem ,is VBUS is compalsory to activate ic
Hi Ravi,
Thank you for implementing the recommended changes.
I will require a waveform of VBUS, IBUS, etc or data to show the IC heating you are observing to be able to move forward with further debug. At this point in time nothing from the schematic alone indicates why you are seeing overheating issues.
Best Regards,
Garrett
Hi Ravi,
One additional suggestion. As a first step, if you are looking to simply be able to communicate to the charger IC to avoid heating I recommend only connecting the battery, not VBUS, and then try to confirm I2C communication. By only connecting the battery the buck converter will not turn on and IC heating will be mitigated.
Best Regards,
Garrett
hello garrett , thanks for your replay. here when i remove the vbus then i am not able to communicate with i2c.
Hi Ravi,
here when i remove the vbus then i am not able to communicate with i2c.
What is your battery voltage in this case and did you confirm you can measure the voltage at the BAT pin of BQ25622 IC? I2C communication will function when only battery is connected as long as battery voltage is greater than 2.5V.
Once you confirm battery voltage I also recommend checking if SCL and SDA are at expected pullup voltage.
On a separate note I saw your request for Linux sample driver files, but when I attempted to send via email the delivery failed due to server inability to find your listed email address. Can you please provide an alternate email address to (ravikunar.c@ciright.com)?
Best Regards,
Garrett
hello @garrett thanks for replay continuously, here now i am able to comunicate with i2c with battery without vbus, my vbus = 4.2v(max),
issue (1) how to charge battery without vbus ,if i connect vbus then my ic getting heating up.
(2) i provided my code below for battery level detection help me to correct it , if u can please.
(i am using esp32s3)
code:-
#include <stdio.h>
#include "driver/i2c.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define I2C_MASTER_NUM I2C_NUM_0
#define I2C_MASTER_SDA_IO 6
#define I2C_MASTER_SCL_IO 5
#define I2C_MASTER_FREQ_HZ 100000
#define BQ25622_ADDR 0x6B
#define REG_ADC_CTRL 0x26
#define REG_ADC_FUNC_DIS0 0x27
#define REG_VBAT_ADC 0x30
void i2c_master_init() {
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_io_num = I2C_MASTER_SCL_IO,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = I2C_MASTER_FREQ_HZ
};
i2c_param_config(I2C_MASTER_NUM, &conf);
i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0);
}
esp_err_t write_register(uint8_t reg, uint8_t data) {
uint8_t buffer[2] = {reg, data};
return i2c_master_write_to_device(I2C_MASTER_NUM, BQ25622_ADDR, buffer, 2, 1000 / portTICK_PERIOD_MS);
}
esp_err_t read_register(uint8_t reg, uint8_t *data, size_t len) {
return i2c_master_write_read_device(I2C_MASTER_NUM, BQ25622_ADDR, ®, 1, data, len, 1000 / portTICK_PERIOD_MS);
}
void app_main() {
i2c_master_init();
// Enable all ADCs (VBAT enabled = bit 4 = 0)
uint8_t adc_func_dis = 0x00; // 0b00000000 = enable all
write_register(REG_ADC_FUNC_DIS0, adc_func_dis);
// ADC Control Register (0x26):
// ADC_EN=1, ADC_RATE=0 (continuous), ADC_SAMPLE=00 (12-bit),
// ADC_AVG=0 (single), ADC_AVG_INIT=1 (start)
uint8_t adc_ctrl = (1 << 7) | (0 << 6) | (0 << 5) | (0 << 4) | (0 << 3) | (1 << 2); // 0x84
write_register(REG_ADC_CTRL, adc_ctrl);
while (1) {
uint8_t adc_raw[2];
read_register(REG_VBAT_ADC, adc_raw, 2);
uint16_t raw_adc = ((adc_raw[0] << 8) | adc_raw[1]) >> 1; // Bits 12:1
// Print raw ADC value only
printf("Raw ADC: %u\n", raw_adc);
vTaskDelay(pdMS_TO_TICKS(2000));
}
}
Hi Ravi,
Thank you for your response and confirming you can utilize I2C communication when IC is powered by battery. Please see my comments below.
1) Correct, you will not be able to charge the battery without input power at VBUS. I was first just looking to confirm your battery connection is okay and the IC can be powered by battery as expected.
Regarding the IC overheating I suspect it is either a layout or soldering issue given I did not find a critical issue in the schematic which would lead to increased current draw. To be able to debug further can you please measure the current draw at VBUS? What voltage do you measure at VBUS and BAT pins when IC heating is observed?
Best Regards,
Garrett
hey @garrett thanks for being with us, Regarding IC overheating i clear u my hardware setput firstly i chance my IC replaced by new one .
2) vbus powerd by 5v.
3) battery is not connected.
4) vsys measured 3.7v .
5) vbat measure 0v.(without connecting)
in this senario if i connect the battery it lead to overheated the IC and damaged it.
what i am understand here i have to first enable the charging process so i get some voltage in vbat then i am able to connect battery at vbat is this right then can u provide help how to enable charging by software and hardware in brief.
we are blank now we dont understand what to do we have to release project very soon we only stuck on this issue we expact fast replay as we only utterly reliant on you.
Hi Ravi,
Thank you for the response and the urgency of your project is understood. Please see my comments below.
2) vbus powerd by 5v.
3) battery is not connected.
4) vsys measured 3.7v .
5) vbat measure 0v.(without connecting)
For this hardware setup when you report BAT pin =0V initially are you disabling charge via either /CE pin pulled high or EN_CHG register set to 0b?
Also please help to answer my previous question of current draw at VBUS when overheating occurs? Current draw is needed to understand if charger IC is operating at expected charge current or if there is possibly a short or other issue causing abnormal current through the IC.
what i am understand here i have to first enable the charging process so i get some voltage in vbat then i am able to connect battery at vbat is this right then can u provide help how to enable charging by software and hardware in brief.
The BQ25622 device can handle connecting the battery with charge enabled. You should be able to connect battery with charge enabled or disabled.
Given you see overheating only after battery is connected to continue debug of your issue I recommend setting ICHG to a very low value, such as 80mA min setting, before connecting your battery and enabling charge and see if that helps.
Best Regards,
Garrett
hello @garrett , (1) i didn't do anything related to charging by software.
(2) my CE pin is high. i also check by maling CE pin low in this care vbus = 5v, vsys=0.
(3) vbus draw 1A constant current.
can u provide me exact working schematics for this IC where we can directly charge our battery without any software loaded. i cant take more risk we already damage many IC.
Hi Ravi,
When /CE pin is high you should be able to connect the battery without any overheating observed. Charge is disabled so no current should flow to the battery and input adapter is connected at VBUS so SYS load should continue to be powered from input rather than from battery.
(3) vbus draw 1A constant current.
When charge is enabled and no IC registers have been changed battery drawing 1A is expected as default ICHG setting is 1.04A, but VSYS should maintain voltage regulation above battery voltage.
Your results seem to indicate some sort of issue on the output side of the charger which is not schematic related, specifically the BAT path considering VSYS is regulated at expected 3.7V when no battery is connected.
can u provide me exact working schematics for this IC where we can directly charge our battery without any software loaded
Please refer to the BQ25622EVM schematic in the EVM User's Guide. I have linked the document below and the schematic is on page 14. This is a working schematic where the device will function without any I2C register modifications.
BQ25620EVM User's Guide (Rev. A)
Best Regards,
Garrett
hello @garrett ,i update my schematics after changed as per evm schematics. here i give 5v to vbus battery is not connected getting vsys=3.7v and led on pg pin is on and i2c detected, after sometime around 10min led on pg pin turn off measured vbus=5v, vsys=0, i2c not able to detect .
on same IC battery connected ,vbat =3.9v ,vsys=3.9v i2c vbus is not there and i2c detected .
above two situation CE is is high.
here i am not able to understand here my IC is damaged or some of IC peripheral are damaged. if in this case nothing damaged then why i didn't get vsys when vbus=5v. and if IC damaged then why IC able to communicate via i2c when Vbat is appply by battery.
still confused ,how to communicate with IC via i2c when both vbus and battery is present in this case my IC get overheated and damaged.
give us proper guide do work with this IC proparly.
Hi Ravi,
I see no clear issues in the updated schematic. Regarding your question on damage, it is possible for part of the IC to become damaged while other aspects still function. For example, I have seen input side damage before which prevents proper converter operation, but the I2C block of the device still functioned normally.
The issues you are observing continue to point to a layout or soldering issue considering there is no issue with your schematic and you appear to see overheating/damage even without charge enabled.
here i give 5v to vbus battery is not connected getting vsys=3.7v and led on pg pin is on and i2c detected, after sometime around 10min led on pg pin turn off measured vbus=5v, vsys=0, i2c not able to detect .
If you are able to replicate this behavior I recommend capturing a waveform of VBUS, SW, VSYS, VBAT which triggers on VSYS dropping in an attempt to debug exactly what is leading to issue where SYS output is no longer able to be regulated normally.
Best Regards,
Garrett
hello @garratt , here as you want to see waveform of VBUS,SW,VSYS,VBAT provided below.
(1) VBUS and SW when CE IS high
(2) VBUS and VBAT when CE IS high
(3) VBUS and VSYS when CE is high
(4) VBUS and SW when CE is low
(5) VBUS and VBAT when CE is low
(6) VBUS and VSYS when CE is low
here CHANNEL-2(blue) is VBUS and other is alternative.
we replace new IC then we connect vbus to 4.9v get vbat=2.5v on pin (battery is not present) ,vsys=3.7v connected with led strip ,led on pg pin is on and able to read vbat adc value around 2.5v ,resister on address 0x16 given 0x20, this is when CE is high.
when CE is low ,vbus=4.9v, getting vbat=2.5v and vsys =3.7v and led on both pg and stat pin on , with resister on address 0x16 given 0x20, and vbat adc value getting 0;
in which are the safest case we connect the battery because before we damaged our IC with VBUS and VBAT.
why i didn't get data on vadc in above case when CE is low.
@TI we want proper solution as we are going to used this IC in large scale in our product.
Hi Ravi,
VBAT = 2.5V with no battery present is not expected for either CE high or CE low case. When CE is high and nothing is connected at BAT expected voltage is 0V. When CE is low and no battery is present BQ25622 is expected to charge BAT pin output cap up to 4.2V.
Observing 2.5V at BAT pin with charge disabled would indicate there is some leakage path in your hardware setup.
In the waveform which includes SW expectation is SW voltage should be transitioning between 5V and 0V, similar to what is shown in Figure 9-10 in the BQ25622 datasheet. If you use a smaller time division are you able to see expected SW waveform?
in which are the safest case we connect the battery because before we damaged our IC with VBUS and VBAT.
If you board is wired according to the schematic you provided the battery is expected to be able to be connected without damaging the IC. This IC has been released to the market for over two years and we have various customers using it without issue.
@TI we want proper solution as we are going to used this IC in large scale in our product.
If you need a board for further prototyping which is verified to function as expected you are able to purchase the BQ25622EVM from TI.com. I have linked the product page below.
BQ25622EVM Evaluation board | TI.com
Best Regards,
Garrett
hello @garrett here i am tring to read only ADC value of VBAT when only battery is connect :
code :
#include <stdio.h>
#include "driver/i2c_master.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
// I2C settings
#define I2C_MASTER_SDA_IO 6
#define I2C_MASTER_SCL_IO 5
#define I2C_PORT_NUM_0 0
#define I2C_FREQ_HZ 100000
#define BQ25622_ADDR 0x6B
#define CHARGING_ENABLE 0x16
#define ADC_CONTROL 0x26
#define VBAT_ADC_LSB 0x30 // LSB first
#define VBAT_ADC_MSB 0x31 // MSB second
i2c_master_bus_handle_t bus_handle;
i2c_master_dev_handle_t dev_handle;
// I2C Master Initialization
void i2c_master_init() {
i2c_master_bus_config_t i2c_mst_config = {
.clk_source = I2C_CLK_SRC_DEFAULT,
.i2c_port = I2C_PORT_NUM_0,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_io_num = I2C_MASTER_SDA_IO,
.glitch_ignore_cnt = 7,
};
ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_mst_config, &bus_handle));
i2c_device_config_t dev_cfg = {
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
.device_address = BQ25622_ADDR,
.scl_speed_hz = I2C_FREQ_HZ,
};
ESP_ERROR_CHECK(i2c_master_bus_add_device(bus_handle, &dev_cfg, &dev_handle));
}
// Write a register
esp_err_t write_register(uint8_t reg, uint8_t data) {
uint8_t buffer[2] = {reg, data};
return i2c_master_transmit(dev_handle, buffer, sizeof(buffer), -1);
}
// Read a register
esp_err_t read_register(uint8_t reg, uint8_t *data, size_t len) {
esp_err_t ret = i2c_master_transmit(dev_handle, ®, 1, -1); // Send reg address
if (ret != ESP_OK) return ret;
return i2c_master_receive(dev_handle, data, len, -1); // Read data
}
void app_main() {
i2c_master_init();
uint8_t buffer1 = 0;
uint8_t adc_lsb = 0, adc_msb = 0;
volatile uint16_t vbat_adc = 0;
vTaskDelay(pdMS_TO_TICKS(100));
// Read CHARGING_ENABLE register before write
//read_register(CHARGING_ENABLE, &buffer1, 1);
// printf("Charging enable register before write: 0x%02X\n", buffer1);
// Write EN_CHG = 1
// write_register(CHARGING_ENABLE, 0x20);
// vTaskDelay(pdMS_TO_TICKS(10));
// printf("Charging enable register after write: 0x%02X\n", 0x20);
// Enable ADC: Continuous mode + ADC_EN
while (1) {
write_register(ADC_CONTROL, 0x84); // Bit 7 (ADC_EN) + Bit 2 (CONT_CONV)
vTaskDelay(pdMS_TO_TICKS(10));
volatile float voltage=0.0;
vbat_adc =0;
adc_lsb = 0, adc_msb = 0;
// Read 2 bytes VBAT ADC
read_register(VBAT_ADC_LSB, &adc_lsb, 1);
read_register(VBAT_ADC_MSB, &adc_msb, 1);
vbat_adc =((uint16_t)adc_msb << 8) | adc_lsb;
voltage = vbat_adc * 0.001f; // 1 LSB = 1 mV
printf("VBAT raw ADC: %u, Voltage: %.3f V\n", vbat_adc, voltage);
vTaskDelay(pdMS_TO_TICKS(1500));
}
}
output result random log:
VBAT raw ADC: 3888, Voltage: 3.888 V
VBAT raw ADC: 3888, Voltage: 3.888 V
VBAT raw ADC: 3888, Voltage: 3.888 V
VBAT raw ADC: 3888, Voltage: 3.888 V
VBAT raw ADC: 3888, Voltage: 3.888 V
VBAT raw ADC: 3888, Voltage: 3.888 V
VBAT raw ADC: 3882, Voltage: 3.882 V
VBAT raw ADC: 3880, Voltage: 3.880 V
VBAT raw ADC: 3882, Voltage: 3.882 V
VBAT raw ADC: 3882, Voltage: 3.882 V
VBAT raw ADC: 3882, Voltage: 3.882 V
VBAT raw ADC: 3880, Voltage: 3.880 V
BAT raw ADC: 3870, Voltage: 3.870 V
VBAT raw ADC: 3870, Voltage: 3.870 V
VBAT raw ADC: 3870, Voltage: 3.870 V
VBAT raw ADC: 3870, Voltage: 3.870 V
VBAT raw ADC: 3870, Voltage: 3.870 V
VBAT raw ADC: 3870, Voltage: 3.870 V
VBAT raw ADC: 3864, Voltage: 3.864 V
VBAT raw ADC: 3864, Voltage: 3.864 V
VBAT raw ADC: 3864, Voltage: 3.864 V
VBAT raw ADC: 3864, Voltage: 3.864 V
VBAT raw ADC: 3864, Voltage: 3.864 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3860, Voltage: 3.860 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
VBAT raw ADC: 3856, Voltage: 3.856 V
here are some obseved data between multimeter(battery +ve and -ve) and VBAT ADC data :
VBAT_ADC VALE == MULTIMETER VALUE
3.888v == 3.862v
3.885v == 3.858v
3.884v == 3.856v
3.883v == 3.854v
3.882v == 3.854v
3.881v == 3.854v
3.880v == 3.852v
3.879v == 3.852v
3.878v == 3.852v
3.877v == 3.850v
3.876v == 3.846v
3.873v == 3.844v
3.870v == 3.842v
3.807v == 3.784v
3.804v == 3.780v
3.801v == 3.778v
3.799v == 3.774v
3.783v == 3.760v
3.781v == 3.756v
3.779v == 3.754v
3.769v== 3.746v
3.718v == 3.696v
here why i am getting difference of 0.025. and why ,when the battery voltage goes below the 2.9v adc stop reading data and print privous data all the time.
secondly, what is the value to Vref for ADC, in datasheet only mentioned ranged but which value to be consider as Vref
thirdly, we still not get proper answer why when we connect battery and vbus together our IC got damaged.
Hi Ravi,
Please see my comments below.
1) The battery monitoring ADC of the BQ25622 device is offered as an extra feature in addition to the regular charger and is for reference only, and therefore does not have accuracy specs. If your system requires highly accurate ADC measurements use of a battery gauge device is recommended. With that in mind observed difference of approx. 0.025V between ADC output and multimeter measurement is not unexpected.
when the battery voltage goes below the 2.9v adc stop reading data
Referring to the 'Integrated 12-bit ADC for Monitoring' section of the datasheet (Section 8.3.7) when in battery only operation the battery voltage must be above Vbat_lowv voltage threshold for ADC operation. ADC will turn off when battery voltage drops below this threshold. Vbat_lowv threshold is typical 2.8V and maximum spec of 2.9V. Given this the ADC stopping is expected.
what is the value to Vref for ADC
2) Unfortunately, I cannot share such details as it is proprietary.
thirdly, we still not get proper answer why when we connect battery and vbus together our IC got damaged.
3)The intended operation of the BQ25622 IC is to have both input connected at VBUS and battery connected at BAT pin. This use case has been thoroughly validated by TI, works as expected on the BQ25622EVM board, and has been used by a variety of customers without issue.
Given I see no issues with your most recent schematic the damage you are observing is almost certainly due to board layout or test hardware setup. Have you used your oscilloscope to attempt to capture waveforms of power signals at time when IC gets damaged in your test? Are you seeing abnormal current draw at either VBUS or BAT in the leadup to observed damage?
Best Regards,
Garrett
hello @garrett , use of BQ25622EVM board doest solve our problem as we going to make our own custom PCB where only IC will integrate we cant put whole EVM board.
2) why u cant tell about vref ,without knowing vref how we can identified whether our value correct or not.
3) why diffrence between actual value(vbat measured by multimeter) and ADC value are change as load increase on vsys.
Hi Ravi,
2) why u cant tell about vref ,without knowing vref how we can identified whether our value correct or not.
Allow me to clarify. The VBAT ADC is measuring the same voltage as observed at the BAT pin of the BQ25622. The battery voltage measurement for the ADC is taken at the Q4 BATFET internal to the IC. Please measure voltage as close as possible to BAT pin of the IC as reference to compare to VBAT_ADC output.
3) why diffrence between actual value(vbat measured by multimeter) and ADC value are change as load increase on vsys.
If you are measuring by multimeter at the battery terminals the difference will increase as load increases due to voltage drop along the trace and wires between BAT pin and actual battery terminals. A higher current through the path leads to larger voltage drop.
Best Regards,
Garrett
I resolved the IC heating problem ,but now charging is not getting enable. even after making CE pin low and charging enable resister(0x16) is set to 0x20.
which means EN_CHG bit is 1.
Hi Ravi,
Firstly, great to hear you resolved your issue regarding IC heating.
Now to address your report of not charging can you please try the following experiment. Please test if BAT pin output voltage will increase to approx. 4.2V with charge enabled and no battery actually connected?
Expectation is BQ25622 will charge the 10 uF output capacitor at BAT to 4.2V, then charge will terminate, voltage will decay some and then charge up to 4.2V again similar to the waveform capture shown below.
If BQ25622 works as expected in this test then it confirms all IC configuration is okay and there is something specifically related to your battery pack preventing charge.
Best Regards,
Garrett