The main reason I wrote an article about energy harvesting, was to gain some understanding of this wide and hot topic. One of the goals, of most IoT devices, should be uninterruptible operation. To achieve an uninterruptible operation means having an uninterruptible energy supply. One of the methods, to build an uninterruptible power supply, is to use energy harvesting techniques. This article will be an introduction to charging a lithium-ion battery with the sun’s energy.
This will be the first article in the series of articles on this subject matter. I will present my analysis of the problem and how I tested an energy harvesting circuit/chip. This may be a guideline or tutorial on how to deploy energy harvesting techniques in your next IoT project.
Optimizing power usage techniques
Energy harvesting is one of the key techniques in building “battery-less” projects. Energy harvesting is the process of collecting electricity from external sources [wiki]. Sources of energy can be thermal, solar, wind and others.
IoT devices are battery-operated devices. To gain longer device life operability we have to deal with problems of optimizing power usage. As a consequence we have to:
1) Devices must operate in short bursts of time
2) Optimizing the same code to run with fewer instructions
3) Entering/understanding power saving modes
4) And other power-saving techniques
In more advanced projects, that means reducing complex algorithms to simpler ones or sometimes even trading memory usage in place of the CPU. In place of utilizing the CPU to calculate some value, use a lookup table. We may need to combine all of the mentioned techniques above.
In this series of articles, we will frequently deal with solar cells for the simple reason of their availability and low cost. The famous Bell Labs scientists invented the solar cell [read this great book for more details]. One of the main development drivers, of the solar cell, was the idea of finding an energy source in space. Orbiting satellites require a power source to receive and transmit radio waves back to earth. Sun seemed like the perfect and “infinite” source of energy.
Solar cells operation
Let’s get back to our task, of understanding and utilizing an energy harvesting technique. Solar cells convert light energy into electrical energy. You should always attempt to locate them in sunny spots. As a consequence of changing weather conditions (it is not always sunny), one of the difficulties with solar technology is its fluctuating power output. This is a challenge we have to solve. Generated current and voltage will vary depending on the absorbed photon energy.
I will describe the basic behavior of solar cell operation under a system load. Needless to say, each cell performs differently and according to its specifications. For the sake of understanding, assume our system load requires V=5V and 300mA to work.
Let’s take an example. Our solar cell can generate V=5V and I=500mA. Our system load consumes 5V and 300mA. The generated current exceeds the consumed current, as a consequence, we have no voltage drops. In the event of unfavorable weather conditions, it may only supply a voltage of V=4V and a current of I=200mA. The voltage level will drop, as a consequence of higher current consumption. We might get our 300mA of current barring the voltage drop. Again, that may be a problem for our device that does not work under 5V. The internal resistance of our solar cell increases as the current consumption grows.
Everything functions according to Ohm’s law, I=V/R, where the resistance changes, the other two parameters depend on the solar radiation. Let’s take the lowest power curve for an example (shown with the red arrow in figure1). If the current is I=0A (open circuit, no load attached to the solar cell), the voltage is V=12V at its maximum. As a consequence of our current consumption, I=0.2A, the voltage drops to about V=2V. For sunnier days, the curves grow steeper (curves above the one we used for our example.)
The issue mentioned above is the fundamental problem of solar technology. To solve the given problem, we use a battery or intermediate circuitry between our solar cell and load.
The maximum power tracking algorithm
Fortunately, we do not run our devices directly from the solar panels. We are only concerned about extracting the maximum power from our solar cell at the given moment. The logic is simple, the more power we feed into the system/circuit, the faster our battery charges. The idea is to maximize the output power from the solar cell. Namely, to find the voltage-current ratio where the power is at the peak. The formula for power is P=V*I. The Maximum Power Point (MPP) is the intersection point between current and voltage, and power is at its peak.
In our particular example, for the lowest curve (shown with the red arrow), when the voltage is at near V=9.6V and current at around I=0.18, we can extract around P=9.6V*0.18A=1.728W (red point, shown with the green arrow.) For example, if we sunk current of I=0.2A and a voltage of around V=6V, then the extracted power would be P=6V*0.2A=1.2W (blue point, shown with the blue arrow.) At this point, we generate less power than at the previously calculated point. If you go to the right of our maximum power point, you will get again a lower power output than our calculated 1.728W. For the uppermost IV curve, the MPP would be at 11V*1.8A=19.8W. As you can observe, for our given example, the same solar panel can produce such enormous variations of generated power solely depending on the sun’s rays hitting the solar cell.
I will not explain the details of how various maximum power point tracking algorithms work, but rather the BQ25570, which we use in our particular scenario. The rule of thumb is, that solar cells have their MPP somewhere between 70% and 90% of their open-circuit voltage, then we can reduce our search space.
Simply put, instead of evaluating all the possible IV intersections points to find the power peak, our algorithm works simply by sinking the “highest” amount of current before the voltage drops below 80% of the open-circuit voltage. With two external resistors, you can adjust a different value than 80% of the open-circuit voltage, i.e. to make it 50% or let’s say 95% of the open-circuit voltage.
In short, the algorithm works as follows:
1) The MPP algorithm disconnects the solar cell every 16 seconds from the charging circuit. Then, it measures the open-circuit voltage (voltage is at its maximum since hypothetically no current is sunk.) This measurement duration is normally 256 milliseconds (according to the datasheet.)
2) Sink the amount of current until the voltage reaches 80% of the open-circuit voltage. For example, if the open-circuit voltage is at 2V, then VMPP would be at 0.8*2V=1.6V, 1.6V*(current_at_1.6V_of_the_cell).
3) Repeat everything starting from step 1.
For more information, on how the maximum power point tracking (MPPT) algorithm works (not of our circuit), watch this wonderful video.
The BQ25570 operation
I did not make an attempt, to fully describe how the chip functions and all of its functionalities but rather to get you fast-moving. I will provide you with a simplified block diagram of how our circuit operates, as it can be seen in figure 3. The BQ25570 is a boost circuit with an implementation of the MPPT algorithm. It amplifies/boosts the input voltage from the solar cell to a predefined voltage level that charges our battery. You can set the charging voltage with external resistors. The TI BQ25570 chip was designed to harvest energy from voltages as low as 100 mV, which is quite low. You can charge as well a supercapacitor, rather than a rechargeable battery. For my predetermined application, the supercapacitor was not an option.
The TI BQ25570 has an internal buck converter, i.e. it can switch down the battery voltage to your required voltage. If your microcontroller runs on 2.5V, you can get fixed output voltage at 2.5V without using any external low dropout regulator (LDO.) This saves you money and required space on the printed circuit board (PCB) for the LDO or a buck (switch-down) circuit. Of course, there are some limitations, it can supply a current of up to 110 mA. The chip was designed for low power applications.
I ordered the board with the BQ25570 on it from AliExpress. After 3 weeks of shipping time, it arrived and I began my tests. The BQ25570 board came with a supercapacitor on it. I desoldered the supercapacitor from the board. As I mentioned earlier in the article, I intended to charge a Lithium-Ion battery.
This supercapacitor may be useful if your input source (solar cell), generates small amounts of current and low voltage levels. In that case, the chip would first charge the supercapacitor. Once the supercapacitor reaches a specific voltage level, then the stored energy in it would be boosted/converted to the battery charging voltage level.
The experiment with a programmable power supply
Simultaneously I “skimmed” through the datasheet and checked the most important parameters. like I/O pin functions, maximum and minimum input/output values to ensure I don’t break the chip before I even had tested it. After I had a basic understanding of how the part should function, I started to draw a schematic. There were four pins. I connected two pins to the ground. Considering the EN (enable) pin is active low, I had to connect it to GND, to enable the chip. To disable the buck converter, VOUT_EN had to be connected to GND, as it is active high.
As a result, I connected these three pins: GND, EN, and VOUT_EN.
I had an unused Lithium-Ion battery lying around. The battery had a capacity of 110mA. What a stroke of luck 😊, everything with a higher capacity would take a longer period to note any changes in the battery voltage. Ultimately, I measured the voltage level of the battery. It was close to 3.6V, I connected the battery to a constant current load, to discharge it to 3V. As a matter of fact, you can discharge lithium-ion batteries to lower voltage levels. Yet, the battery can be damaged and one would not gain a great deal of operational time.
Once the battery was at 3V, I connected the board to my programmable power supply. You may ask yourself why didn’t I connect it immediately to a solar cell? Well, I want to be certain about the flawless circuit operation, while the optimal conditions have been provided. Once the proper operation of the chip is confirmed, we can proceed with connecting it to the solar cells. Later, this may save us some headache/debugging time.
I recorded a video of how I tested it.
In the second part of the video, I tried to measure the charging current, to estimate the efficiency of the circuit. Efficiency can be calculated by taking the ratio between the input power feed into the system and the output power.
I thought the cheap Chinese voltmeter, on the right side, would introduce errors and influence my current measurement results, so I decided to use the uCurrent gold. Obviously, this was a flaw in my test hypothesis. I believe, the burden resistor, for measuring the current influenced my measurement results. It influenced them by changing the battery’s internal resistance since it was between the circuit and the battery.
How I came to the conclusion that my measurement results are not valid, can be seen at the end of the video. Once I stopped measuring the current, i.e. when I left out the uCurrent gold from my test setup, the input power grew on the power supply. I still have to discover what effect caused this behavior and to gain a deeper understanding of it. I measured the voltage of 4.18V at the battery connector on the board itself, multiplied it with the current measured at the voltmeter and got a power efficiency of 82%. Which is not too bad at all, taking into account that the passive components are some cheap components not recommended by Texas Instruments. The design of the board itself and the component layout is different from the one proposed in the datasheet.
Performance and the calculations, over-voltage, and under-voltage protection
To understand the acquired results, I had to rule out the option that I got them by chance. My next step was to analyze the schematic. I contacted my merchant to get the schematic but I had no luck! I started to draw the schematic by hand to get the equivalent schematic circuit from the datasheet. In figure 5, you can see used resistors. I entered the resistor values in the spreadsheet provided by Texas Instruments, figure 6.
|Spreadsheet voltage||Measured voltage||Error percentage|
|VBAT_OV||4.066 V||4.160 V||+2.31%|
|VOUT||2.574 V||2.589 V||+0.58%|
The table above compares the results with predicted values. The board performs very close to the estimated values from the spreadsheet. The error of 2.31% in the battery over-voltage protection may be a result of my measurement errors. The resistor tolerance of ROV2= 1.1M may have influenced it or the voltage drop of the wires. The battery over-voltage error is still within the ranges of lithium-ion batteries, i.e. 4.2V. Speaking about under-voltage protection, I did not test it but according to the spreadsheet, it is ~2.874V. When I enabled the V_EN pin, disconnected it from GND and connected it to the V_OK pin, the output voltage was ~2.589V. The battery temperature, while charging the battery with a current of 80mA, was always around 27.9 °C (~ 82.22 F), which was the room temperature as well.
We discussed the subject of energy harvesting. Along with the theoretical introduction, we proceeded with a realistic example. The BQ25570 board works well and does its job in controlled conditions. No hazardous situations have been detected. The battery temperature remained constant. The estimated values from the spreadsheet matched the measured ones. The IC must be field-tested. The second article, related to this board, will be a field test.