Go Down

Topic: Solar Li-ion charging with power-path/load sharing (Read 200 times) previous topic - next topic


Hello, I want to make a project that uses Arduino uno , a servo and possibly a LCD for displaying information on it. Since power will be always drawn from the single cell 3.7V li-ion battery, I want the battery to be solar charged, while simultaneously powering the load. I have come up after a long research on the subject that I need a power-path between the TP4056 charger module and the battery. The solution is to use a P-channel mosfet, as shown in the attached schematic. Is that going to work ? I don't want to overcharge the battery and burn down everything.


Jul 20, 2019, 12:26 am Last Edit: Jul 20, 2019, 12:38 am by ShermanP
That schematic looks very familiar.

The battery should not power the load while it is being charged.  It will not charge properly, and especially will not terminate charging properly, if it is feeding current to the load.  What you want is for the solar power to provide power both to the load and to the battery charger when the sun is shining.  That circuit will do that if the solar power source is 5V or less.  But if it is significantly higher than that, then you may need a second regulator, and the circuit would need to be wired differently.  If the solar power is 12V, you would need a buck regulator to drop the load voltage to 5V.  Then the battery output would need a boost regulator as in the schematic to get up to 5V.  I'm assuming you want the load voltage to be 5V.  So this may be pretty complicated.

Edit: You might find a buck/boost regulator that would provide 5V output from an input voltage of 3V to whatever your solar power provides, and that could just take the place of the boost regulator shown in the schematic.


I found another solution to use this http://www.ti.com/lit/ug/slvu274e/slvu274e.pdf the BQ24074 IC, however it is SMD and even getting the components and figuring out how to make a module with it I won't be able to properly solder it. So is my proposed solution in the first post going to work with the TP4056 ? Please help me, because Im struggling for a week to find a solution how to power arduino and charge the battery for it.


The TP4056 requires input voltage of 4V to 8V, but as a practical matter 5V to 8V to fully charge the battery.  What will be the voltage provided by your solar supply?

The circuit in the drawing was specifically designed for 5V power from USB.  Using solar power may complicate things if the solar source provides more than 5V.  it could be too high for the TP4056, and too high for the MT3608 boost regulator.


I am planing to use 5 or 6 V solar panel. As far as for open circuit voltage that can spike more than 10V from the panel, I found a solution using diodes in this forum.


The MCP73871 has integrated load sharing and battery charge management. There is also cheap boards available with it.


Jul 22, 2019, 05:02 pm Last Edit: Jul 22, 2019, 05:03 pm by garabetov
Will this work also ? https://www.dfrobot.com/product-1712.html . As for the MCP73871 IC I don't want to mess with SMD soldering and making pcb out of it, as far as I found is this "ready-made" module, but I am unsure of it https://www.ebay.co.uk/itm/USB-MCP73871-DC-Solar-Lipoly-Lithium-Lon-Polymer-Charger-3-7-4-2V-Battery-Module/272486195867?hash=item3f7171629b:g:k0UAAOSwnHZYUfcu and I can't wait 2 months for delivery


No PM's please.


Based on the schematic, it doesn't look like your DFRobot module includes power sharing.  The MCP73871 module specifically does include it.  So if you can keep the solar source near 5V, that may be your best choice, or just use the original schematic you asked about.  The problem, though, is what happens when a cloud passes by and the solar power drops below 5V.  Neither the original schematic nor the MCP73871 make any specific provision for an input voltage that varies widely anywhere between 0V and 6V from time to time.  The CN3065 charging IC included in the DFRobot module is designed for solar applications, and shuts off if the input voltage falls below 4.4V.  I don't know what the TP4056 and MCP73871 do when the voltage drops, but the datasheets may tell you that.  I see the MCP73871 is also available on AliExpress, and there are a number of CN3065 modules on Ebay for a lot less than the DFRobot, but they don't have load sharing either.

I would be interested in your diode solution.


Jul 22, 2019, 10:23 pm Last Edit: Jul 22, 2019, 10:28 pm by garabetov
Isn't the mosfet purpose to switch to the battery in case there is a cloud coverage ( voltage dropout ) ? My only concern is to be able to prevent the fire hazard from overcharging the li-ion. As I pointed out, I don't have the experience to create a circuit based on the SMD componenet such as the MCP73871 IC and similar to it. As far for the current draw from Arduino, there are solutions to minimize the consumption as much as possible, hence extending the run-time on battery. But for this project it defeats its purpose to disconnect the load while charging the battery. The idea and circuit was borrowed from this  thread however no one confirmed that the TP module successfully terminated the charge while being under constant current draw


The charger is set to terminate charging when the charging current drops below 10% of the full charging current.  So if you charge at 1A in the beginning, it will terminate when the current drops below 100 mA.  If your Arduino and other parts draw less than that 100 mA, the charger would charge the battery a bit more than normal, but would eventually still shut down.  So that could be one way around this problem.

But the varying supply voltage does complicate things.  For example, the mosfet will be turned on fully when there is no solar power, and turned off fully when the full 5V solar power is available.  But what happens if the solar voltage is somewhere in between?  Is the mosfet on, or is it off, or is it partially on?  You could have a situation where the solar voltage is too low to power the Arduino, but not low enough to turn on the mosfet and let the battery power it.

Similarly, what does the TP4056 do if its input voltage drops to 2.5V?  Well, on this one it looks like you're ok.  Here's what the datasheet says:

Vcc(Pin 4): Positive Input Supply VoltageVIN is the power supply to the internal circuit. When VIN drops to within 30mv of the BAT pin voltage, TP4056 enters low power sleep mode, dropping BAT pin's current to less than 2uA.

So that means it shuts down when the voltage gets too low, which is what you want it to do.


Ok, here's a possible solution.  Even if the solar voltage is not low enough to turn on the mosfet, current will still flow from the battery through the mosfet's body diode.  But this is frowned upon for any significant amount of current because the diode just isn't designed for that.  However, you could install another diode that IS designed for high current in parallel with the body diode.  The attached drawing shows a 1N4001, but you would want one with a forward voltage drop smaller than the body diode's drop so all the current would pass through the external diode.  The mosfet and diode datasheets should provide the drop data.

This is not ideal because the diode drop just wastes power,  so you really want the mosfet to turn on fully and bypass the diodes if possible.  But this should work ok, and I think it is safe.  Hopefully others here will comment on whether this possible solution makes sense.

That would leave only the problem of the solar voltage being too high.  That might be solved by adding a base load that's always there and which brings the voltage down to about 5.5V when the cells are in full sun.

Go Up