Ultra-Low Power LiPo Charger via Energy Harvesting

Super-small BQ25504-based device charges a LiPo battery at ~7 mA using an inexpensive solar cell in direct sunlight

Similar projects worth following
I have been using the ESP8285 and other MCUs for a lot of environmental sensing projects and battery life is a big issue, even for the relatively low power STM32L4. The competing priorities of small size and long life are hard to manage without an oversize battery or having to recharge after just a few hours. Neither is really acceptable for wearable applications or those demanding remote monitoring. In addition to beating down energy usage with various low power strategies, one solution is to harvest energy from the environment. High-efficiency, inexpensive solar cells make this a logical choice for remote applications like environmental data loggers, and the BQ25504 makes it easy to power an MCU with the sun! The low (>330 mV) cold start threshold even allows practical energy harvesting from indoor lighting as well.

This is a product for sale at Tindie that I designed and use in various projects, including my SensorTile project where I have described its performance in detail.

From the Tindie product page:

This is a small (0.5 x 0.5 inch) breakout board for Texas Instrument's BQ25504 Ultra Low Power Boost Converter with Battery Management for Energy Harvesting Applications.

From the datasheet: "The bq25504 device is the first of a new family of intelligent integrated energy harvesting nano-power management solutions that are well suited for meeting the special needs of ultra low power applications. The device is specifically designed to efficiently acquire and manage the microwatts (µW) to milliwatts (mW) of power generated from a variety of DC sources like photovoltaic (solar) or thermal electric generators. The bq25504 is the first device of its kind to implement a highly efficient boost converter/charger targeted toward products and systems, such as wireless sensor networks (WSNs) which have stringent power and operational demands. The design of the bq25504 starts with a DC-DC boost converter/charger that requires only microwatts of power to begin operating."

The BQ25504 is a high-efficiency boost converter of great flexibility that can be used to charge a battery using energy harvesting from a variety of sources. Here I have chosen to set the parameters of the boost converter to charge a standard one-cell, 4.2 V LiPo battery like this one. The BQ25504 employs a Maximum Power Point Tracking (MPPT) method which regulates the input impedance of the charger to maintain maximum efficiency of the solar cell. I have set the MPPT to 78% of the open-circuit voltage of the solar cell.

The BQ25504 protects the LiPo battery from undervoltage, which can cause damage through excessive discharge, as well as overvoltage to prevent excessive charging. The over- and under-voltage protection thresholds are set by a resistor network which I have chosen to limit discharging to 3.27 V and over charging to 4.27 V.
There is a battery OK threshold of 3.58 V and a battery hysteresis threshold of 3.78 V. The battery OK pin will toggle to LOW when the battery voltage falls below 3.58 V. The battery OK pin will toggle to HIGH when the battery voltage rises above 3.78 V. In other words, on decreasing battery voltage (due to discharging) the interrupt will fall and stay LOW (and the on-board green led will go out) below 3.58 V, and on increasing battery voltage (due to charging) the interrupt will rise and stay HIGH (and the green led will remain on) above 3.78 V. The battery OK pin allows an MCU to monitor the state of the battery charge. The idea is that the MCU can detect when the battery OK pin falls to the LOW logical condition (a sort of interrupt) and limit large loads until the solar cell is able to recharge the battery to a sufficient level to support the large current draw.
It sounds complicated, and it takes some time to get your arms around all of the detail in the data sheet, but it is really straightforward to use the BQ25504 in your applications. Connect the solar cell to the IN port, the LiPo battery to the BAT port. Use the OK pin as a battery charge detection interrupt and simply connect the SYS power (3.3 - 4.3 V!) and GND to the VIN/GND pins of your MCU.

I have been using the BQ25504 along with this small 2.2V solar cell to power my SensorTile Environmental Data logging project. I have found that with 6 hours of direct sun (~20 klux) I am generating an average of ~7 mA per hour (at >90% efficiency!), just enough to keep the 1.8 mA Sensor Tile running indefinitely. You can read more about this and see plots of the charge versus time in the project logs.

Microsoft Excel - 11.00 kB - 06/04/2018 at 17:03


EAGLE design files

x-zip-compressed - 51.60 kB - 06/04/2018 at 17:02


  • First Test of New Production Board

    Kris Winer06/16/2018 at 17:39 0 comments

    16 June 2018

    Well, first test because sometime last night (8.34 pm, to be exact) the Sensor Tile stopped working. I know this because that's the last entry in the SPI flash data log. I don't know why. The battery had nearly a full charge (91% at 4.11 V) at the time of stoppage so I assume it was a glitch or that the battery somehow became loose (the JST connector is just pressed into the JTS PTHs on the SensorTile, not soldered) or just one of those things. But this is somewhat rare in my testing to date, but usually I have the devices mounted in some kind of box, not a glass jar as in this case.

    Well, I got about 1.5 days worth of data, which is enough to tell that the BQ25504 boards with the new inductor are working well.

    First the record of the ambient light in lux measured from the VEML6040. I am using the smallest (40 ms) integration time since the sensor is in direct sunlight and the light pegs the sensor at its maximum output of 16384 lux for several hours per day. I estimate the incident sunlight is ~20 klux for at least four hours (x-axis grid spacing) a day. According to the data sheet, at 50 klux sun light the solar cell should be producing 16.9 mA at 2.2 V, so I am probably getting ~20 mA/50 mA x 16.9 mA ~7 mA per hour as I estimated in my previous experiments.

    The charge state of the 105 mAH 1S 3.7 V LiPo battery I used was about 60% at the start of the experiment, ramped up to ~68% with the one or two hours of sun left when I first placed the apparatus on the back deck table and then it fell through the night reaching a low of ~46%. I was able to query the battery voltage and charge level in real time using Adafruit's BLE UART app on my smart device, but nothing beats data recorded at ten second intervals on flash for later detailed analysis!

    The data capture a full day's worth of charging; even though the VEML6040 captured sunrise at ~5.45 AM on 6/15 (when the orange amb light line starts moving up, it is not until more or less direct sunlight falls on the solar cell at ~11 AM that charging really gets going. Peak charge is reached at ~4 PM, when the device enters the house shadow (local "sunset"), and then gradually falls until the device (and data recording) stops at 8:34 PM. Peak charge at 94% from minimum of 46% means about half of the battery capacity is added by the charger (roughly 50 mAH) per day. The device uses only ~68% - 46% ~ 22% of battery capacity per day so this set up should last indefinitely as long as there are a few hours of direct sun per day.

    The battery voltage responds as one would expect, reaching a minimum of 3.76 V at around 8 AM and peak battery voltage of 4.14 V at 4 PM 6/15.

    I will restart the experiment, maybe with the JST connector soldered to the SensorTile this time and see if I can get several days of data.

    Overall, I would say the BQ25504 Solar Cell LiPo charger works as advertised, at least with this particular solar cell. For some projects, 50 mAH per day of charging might not be enough, and the other variables including hours of sunlight, cloud cover, container, system device, etc will determine whether this solution will work for any given application.

    One thing I am curious about is whether this solution will work for some other method of power harvesting, not a solar cell but maybe thermoelectric or piezoelectric device. The only requirement is a DC voltage > 0.35 V. If I can find a suitable energy transducer, I will give this a try...

  • New Production Boards

    Kris Winer06/14/2018 at 18:38 0 comments

    14 June 2018

    It's always a gamble to have a large batch of boards produced in China. I have been working with a fab house in Beijing for a couple of years and I still get surprised by them. In this case, they couldn't source the specified inductor on the BQ25504 Solar Cell LiPo Battery charger so they went ahead and substituted with one that they thought was close. And without asking or telling me! I found out after receiving the 500 unit batch by inspection of the new boards:

    The new inductor seems to be slightly inferior to the old one:

    • the tolerance on the new part is +/- 20%, on the old part +/- 10 % lower is better
    • the DC resistance on the old part is 0.56 Ohm typical, 1.52 Ohm for the new part, lower is better.
    • saturation current of old part is 0.64 A, new part is 0.53 A, higher is better.

    Does any of this matter? I don't know. So I thought I would do a test of performance just to check.

    I pulled a random board out of the box and soldered it to a 50 mm x 33 mm, 2.2 V solar cell and LiPo battery connector:

    It looks like the green led is not working (I have found a few, maybe ~2% of the boards have this problem, just my luck) since I measured 4.15 V on the system and battery and battery OK outputs with this rig using light from my white led desk lamp. This is actually a blessing in disguise; while it is useful to have led indication to tell when the board is charging it does use up ~200 uA for little benefit. In use I would knock the led off of the board anyway to save this power. Still, it is in the design and is supposed to work.

    So the main charging function of the board seems to work just fine. But this isn't enough. I want to verify that the charger can generate enough power to run a useful device (or rather, measure the power generated in a typical use case).

    I would use my LoRaSensorTile as  test vehicle but the average power usage of this is 40 uA, or about 1 mA per day. Really not enough for a good power test! Instead I will go back to my STM32L4 SensorTile with the CCS811 which causes the average power usage to be more like ~1-2 mA. Then with ~6 hours of sun at ~7 mA power generated I should be able to keep this going indefinitely. I really just need to capture a few days worth of data to verify that the charger is working well.

    I'll connect the SensorTile and run the experiment over a week or so. The SensorTile has BLE so I can keep track of what it is doing in real time on the smart phone but the most useful analysis will come from the data captured and stored onto the SPI flash that I will look at in detail when the experiment is over.

    First check of function and all looks good:

    33.4 972.9 27.1 0 0 3.91 59.5
    33.6 972.9 26.5 0 0 3.91 59.5
    33.7 972.9 26.5 0 0 3.91 59.5
    34.0 972.8 26.1 0 0 3.91 59.5
    34.5 972.9 25.6 0 0 3.91 59.5
    34.6 972.8 25.5 0 0 3.91 59.5
    34.8 972.8 25.3 0 0 3.91 59.5
    35.0 972.8 24.9 0 0 3.91 59.5
    35.2 972.9 24.7 0 0 3.91 59.8
    35.4 972.9 24.5 400 0 3.91 59.8
    35.8 972.9 23.9 400 0 3.91 59.8
    35.8 972.9 23.5 400 0 3.91 59.8
    35.5 972.9 23.5 400 0 3.91 59.8
    35.4 972.9 24.2 400 0 3.91 59.8
    35.5 972.9 24.0 400 0 3.91 59.8
    35.6 973.0 24.1 400 0 3.91 59.8
    36.0 973.0 24.0 400 0 3.91 59.8
    36.2 972.9 23.8 400 0 3.91 59.8
    36.4 972.9 23.4 400 0 3.91 60.1
    36.7 972.8 23.0 400 0 3.91 60.1
    36.8 972.9 22.5 400 0 3.91 60.1
    37.0 972.8 22.6 400 0 3.91 60.1
    36.8 972.8 22.7 400 0 3.91 60.1
    36.5 972.8 22.6 400 0 3.92 60.1
    36.3 972.8 22.5 400 0 3.92 60.1
    36.3 972.8 22.8 400 0 3.92 60.1
    36.4 972.9 22.5 400 0 3.92 60.1

     This is the output from my smartphone showing temperature in C, pressure in mbar, humidity in %rH, the eCO2 in ppm and the TVOC in ppb (from the CCS811), the battery voltage and battery % full charge (from the MAX17048 fuel gauge). I placed the device in the remnants of the sun on the table on the back deck so I am pleasantly surprised to see all of the sensors reporting sensible values...

    Read more »

View all 2 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates