For my project I need to charge a 2s, 7.4V LiPo battery pack from an 18V 10W solar panel. This would not be an issue if I was able to use ICs such as the BQ2057WTS, but I am required to do design a circuit in place of the IC using parts lying around lab (Transistors, voltage regulators, op-amps etc.).

LiPo batteries require careful charging using a method called CC/CV (Constant current/ Constant voltage) where the battery first charges with a constant current and rising voltage to a specific point and then undergoes constant voltage charging where the voltage is kept constant and the current is changing until the battery is fully charged.

I am currently struggling with the design of this specific circuit in place of the IC to ensure the battery is not damaged, any advice would be greatly appreciated.

Update: My supervisor finally agreed to let me use the arduino ATMEGA328P microcontroller to aid with the design. Therefore, am I correct in saying that I can make use of the ADC channels to measure the voltage of the battery and control the separate CC/CV accordingly?


Battery - Ansmann 7.4V, 2600 mAh. Datasheet here
Nominal charge 0.5C, max charge 1C, endpoint charge 0.01C.
Vmax 8.4V +/- 1% Temperature: Charge 0 - +45C, Discharge -20 - +60C, Storage -20 - +40C


closed as too broad by Chris Stratton, Dave Tweed Mar 2 at 12:08

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    \$\begingroup\$ Could you please share what design you have so far? Then there is something more specific to discuss.. \$\endgroup\$ – Huisman Mar 1 at 14:21
  • 3
    \$\begingroup\$ Doing this with pure analog electronics sounds like madness to me. Kind of like replacing a MCU with discreet logic circuits. What's the reason you can't use an IC? \$\endgroup\$ – Lundin Mar 1 at 14:22
  • \$\begingroup\$ Li+ charge controllers must observe the ambient temperature as charging should only begin with an ambient temperature between 0C and 40C. 45C is permissible (for a number of batteries - check the datasheet) for charging to continue. You will also need to design a cell balancing circuit. \$\endgroup\$ – Peter Smith Mar 1 at 14:22
  • \$\begingroup\$ Possible duplicate of LI Ion battery charger? \$\endgroup\$ – Sunnyskyguy EE75 Mar 1 at 15:30
  • \$\begingroup\$ At a very minimum you must define climatic range, battery chemistry, C range and desired C rates CC= C rate TBD, CV = 4.0 to 4.2 ( TBD depends on life cycle spec vs capacity), Cutoff = 10% of CC during CV. There are almost infinite solutions and failure without specs \$\endgroup\$ – Sunnyskyguy EE75 Mar 1 at 15:31

Like most problems, you should start this one by breaking it down into simpler problems. A practical design would almost certainly use a microcontroller or an IC to do this, but there's no reason you couldn't build something out of more discrete ICs. Doing so could be instructive.

  • Do you need and how would you make a circuit that measures temperature to ensure it's appropriate to charge the batteries?
  • Do you need and how would you make a circuit that detects when it's time to stop charging and turns everything off until it's time to charge again?
  • How do you want to switch the current? Will your switching be linear or will you use an inductor to step down the voltage making a more complicated but more efficient design that scales better?
  • How would you make a circuit that detects and limits current during CC charging?
  • How would you make a circuit that detects and limits voltage during CV charging?
  • Do you need and how would you make a circuit that limits current to a lower level if the voltage is below a certian limit.
  • Can you combine the above parts by sharing elements like the switching elements so you only have one high current/high power transistor?
  • How do you make the device safe? What could fail and how could it fail and how do you protect users and valuable parts of your circuit if they do? (MOSFETS tend to fail closed so it's a challenge to break a circuit when they start to fail if you don't have some sort of fuse)
  • \$\begingroup\$ Thank you for your reply! Ill try answer as best as I possibly as even I am slightly unsure of what my supervisor wants! 1) In the edit, I have added that I am able to use a ATMEGA328P Micro controller, so to measure temperature i was going to use an ADC pin with a thermistor. 2) Hopefully using the functionality of the ATMEGA328p i can measure the voltage in the battery and get the circuit to react accordingly. \$\endgroup\$ – Zee96 Mar 2 at 6:50
  • \$\begingroup\$ For the rest of the questions, I am yet to figure out as I have just been told that I can use the ATMEGA328p, I am really hoping this will aid in acting as the "brain" of my charger. \$\endgroup\$ – Zee96 Mar 2 at 6:58
  • \$\begingroup\$ If you have trouble with an external temperature sensor, it looks like there's one on the ATMEGA328P. To measure battery voltage you'll want to divide it with a pair of resistors and compare it with a fixed supply or reference... but you'll also want to limit it and that's still typically done with an analog circuit or dedicated ICs. \$\endgroup\$ – Andrew Macrae Mar 2 at 17:10

There are two fundamental choices

  • trivial FET switch with 8.2 to 8.4V comparator latch off FET - 1hr job power loss > 50%,why bother!
  • complex MPT Buck regulator with above . Learn many ways how to conjugate match PV current source to a 10 kilofarad load 2S Li-Ion pack from 18 to 8.2V This is NOT a logic problem. ( Ardiuino) but an RF switched SMPS problem ( if you accept the challenge)
  • A simple Buck regulator will never work. It will just drag PV voltage down to 4~6V The impedance here is > 40 Ohms at max PV power and Z rises as solar power reduces. Don't believe me try out a simple Buck 18 to 8V regulator and see why this is true. due to lack of load regulation from Zin mismatch.


The biggest design challenge is how to get 18V, 10W from a mismatched V/I capacitive load and V/I current source. If you put 18V 450mA source into a 7.4 to 8.4 2S Li-Ion battery being charged < 1/2 power conversion efficiency.

e.g. Power Efficiency = 21% = (8.4V*0.45A)/18W out of the 18V PV panel to charge the battery. Thus a PMT PV controller is needed more than a simple Vbat cutoff regulator which is trivial.

Panel Assumptions

  • Pmax =18W Solar Panel: Monocrystalline silicon 18V 10W @ 0.55A

  • Voc= No-load voltage: 18-23VDC (depending on solar power)

  • Load voltage: 12V (<6W)

  • Output current: 400~450mA Isc = 550mA (Max.)

enter image description here

enter image description here


  • 4.2 * 8.4V charge voltage is mismatched with 18V photovoltaic (PV) panel,
    which is a solar-powered current-source ( thus MPT buck pre-regulator needed)

    • Since 450mA charge current is much less than Li Ion typ. charge currents, CC is not needed
    • Assuming std Li-Ion cells 4.2V CV and 1A rates with 10% cuttoff or 100mA for CCV cutoff = 100% SoC,

    • Current sense with 100mV drop at 0.5A = 50mW requires 0.1V/0.5A= 200 mΩ current shunt on low side for ease of comparing to 0.1V Vref (stable)

- Design requirements :

  • Test criteria = Design Specs
  • Buck converter for MPT on PV 18V to 8.4v
  • Vmax detection and I cutoff sense 8.2~8.4V 50~100mA cutoff
  • over voltage protection 8.42V and I cutoff "logic" for shut off
  • Power-on or periodic reset
  • LED bar indicator options, Off/On charge state, State of Charge indicator 6.6V to 7.4 Green 7.4V to 8.4V RED during charge .

enter image description here

my conceptual idea in simulator

Analog optimization of PV current source and Capacitance using quasi-resonant Conjugate matched Buck impedance step-down converter with automated Hysteresis cut-off and startup. ( Ask your prof about this) An Arduino won't help there. All I used was a comparator with setpoint for cutoff with LED indicator for Charging with a critical setting of hysteresis thresholds using 5.0V = Vref not shown.

Cin provides the boost ripple current to 10uH @ 75kHZ switched at 50% duty cycle must be Film Cap for high ripple current.

enter image description here

  • \$\begingroup\$ I wonder who does not understand this design issue ? -1 and is afraid to comment \$\endgroup\$ – Sunnyskyguy EE75 Mar 1 at 18:25
  • \$\begingroup\$ Professional Engineers learn to ask questions and not be too quick to judge (-1) \$\endgroup\$ – Sunnyskyguy EE75 Mar 1 at 18:54
  • 1
    \$\begingroup\$ Who on earth would advocate an MPPT design for a simple battery charger based on available analog devices? I'd imagine the OP is expected to show some diligence in dealing with the difference in solar panel output voltage and provide a CC/CV profile for the batteries. The OP might also be expected to show the weaknesses in the design, such as lower efficiency. The suggestions here are simply over the top. I added a -1. \$\endgroup\$ – Jack Creasey Mar 1 at 19:36
  • \$\begingroup\$ This shows your lack of understanding. When a 10W charger at 18V drives a battery at 8.2V battery the series power loss is 50% thus the OP then faces a heatsink issue because someone overlooked the details. This is not the situation for an LDO with disable switch and who needs CC regulation if 10W is only 450mA into a 20Wh battery back capable of 10A, besides he'll never see 10W charge power and then wonder why.... \$\endgroup\$ – Sunnyskyguy EE75 Mar 1 at 19:38
  • \$\begingroup\$ A simple DC-DC buck convertor (within the potential of available analog components) solves the problem. Change the 18V to say 12V and you reduce losses without the complexity. Any given battery has charge current limits, both CC and for CV trickle so you DO have to be aware of and control the current. \$\endgroup\$ – Jack Creasey Mar 1 at 19:56

Tentative charger specification:

The following outlines the required functionality to implement an efficient energy converting pseudo MPPT charger. It implements CCCV charging, low voltage trickle up, very low battery voltage charging disable, maximum current charge limiting, pseudo MPPT with insolation compensation, PV panel temperature compensation, and battery over and under temperature lockout.

Availability of a microcontroller with analogue digital Converters and PWM digital output is assumed.

  • Provide a buck converter controlled by the microcontroller. this could be implemented almost completely in software with a transistor switch controlled by the microcontroller, or if desired, a reference voltage could be provided by the microcontroller to a discrete buck converter.

  • Provide small current sense resistors in the PV panel ground lead and battery ground lead. and use simple op-amp amplifiers to increase the voltage from the sense resistors to a sensible level for the microcontroller ADCs.

  • Use voltage dividers to allow measurement of the PV panel voltage and battery voltage by the motor controller.

  • Use a thermistor or or RTD to measure PV panel temperature

  • Use a thermistor or RTD to measure battery temperature.

  • Charge the battery from the PV panel using the buck converter.

  • Monitor PV panel voltage and change the loading from the buck converter so that the panel tracks a desired MPPT curve - ie V_ panel = Vmp modified by PV panel current, battery temperature etc. ie The desired panel voltage will rise slightly with increasing PV current and will fall steeply at the very low current and to compensate for very low insolation conditions and will compensate for panel temperature.

  • If battery voltage is below the battery maximum of about 8.4 volts charge at maximum available energy as long as I charge is below I charge Max of 1C.

  • If battery voltage = battery voltage maximum of about 8.4 volts operate in constant voltage mode and monitor battery current until end point current is reached

  • If battery voltage is less than 2.5 volts per cell limit charging to say 0.1 C or some other designed limit.

  • If battery voltage is less than 2 volts per cell prevent charging

  • If battery temperature exceeds 40° C prevent charging

  • If battery temperature is below 0 degrees C prevent charging


Answers from Andrew and Sunnyskyguy provide good material for developing you question. You need a full spec on what is required of you and a full spec of all equipment involved. Once you have those it will be "not too hard" to arrive at a good solution. Please consider this a starting point, with input to follow as more information is provided.

Very importantly - when is this required to be finished by?

Full spec of equipment:

PV panel spec: Vmp, Imp, Wmp, Isc, Voc, ....
Brand , model, Datasheet link?

Battery: Chemistry (LiPo but ...?) Wh, Vnom, Ah, Imax_chg, Vmax_chg, Tempmaxchg,
Brand, model, datasheet link.

Charging spec:

Do you need/want to charge battery to nearly full capacity or would ~= 80% capacity with much longer cycle life be OK? (ie if you stop at end of CC then CV not needed and you get less capacity but better lifetime), ...

Do you need/want to implement protection features such as
low rate trickle-up charge under 2.5V (or wherever),
full lock out under say 2V (I recently almost had a house fire because a charger did NOT do this
cell temperature monitoring,
environment temperature monitoring.

An Arduino will allow a charger with all bells and whistles, if desired.
Whistling Dixie optional.


Not the answer you're looking for? Browse other questions tagged or ask your own question.