# solar panel MPPT and battery charging

I'm trying to understand solar panel Maximum Power Point Tracking theory and how it is done practically for charging battery banks.

I think I understand MPPT in a general sense: the solar panel has VI curves which define a specific load in which you will extract the most power. These curves change with environment conditions like light levels, temperature, etc, so the tracking algorithm tries to dynamically find the best load value. It's usually not practical to just change the actual end load that we want to power (and often can't), so we use a switch mode power supply to adjust the output voltage, changing the output current. To balance Pout = Pin (assuming ideal switcher), the panel's current draw changes, and this is how we adjust the operating point on the panel's VI curves.

So my question is this: We are changing the output voltage to get the maximum power, but don't batteries typically need a specific voltage to charge them efficiently? Is it better to shoot for MPP of the solar panel or shoot for optimal charging conditions for the battery?

• See the input and output of your MPPT charger as separate. Power goes in and power comes out but you can swap voltage for current and vice versa. – winny Feb 18 '17 at 17:12

Solar panel I-V characteristics are highly non-linear; this results in a Power-Voltage plot featuring a maximum at a given Voltage Vmpp across the panel.

As you pointed out in your question, it happens that the IV curve changes over time according to the light irradiance and temperature, and Vmpp changes, too. That's the reason why methods to track Vmpp are sought: squeezing as much power as possible from the source, i.e., the panel.

Between your panel and the storage element (battery, supercapacitor) there is an harvesting circuit, based on a (switched) DC-DC converter topology (e.g., boost); MPPT techniques are implemented inside this circuit to keep the input voltage of the harvester (i.e., the output voltage of the panel) as close as possible to Vmpp. Therefore, when you target MPPT, the focus is on optimal power transfer from the source to the harvester (which -in turn- will actually introduce some loss itself, yep!). As RoyC puts it, optimal battery charge is another story.

Maybe the schematic below will help: the photovoltaic panel is modelled as a current source in parallel with a diode (representing the PN junction); the goal of MPPT is to keep the voltage V as close as possible to Vmpp. simulate this circuit – Schematic created using CircuitLab

For clarity, I have drawn one possible implementation of a Boost-based solar harvester. The IC I put in the schematic is a Schmitt trigger comparator whose task is that of keeping the voltage at its non-inverting terminal as close as possible to Vref. One can set Vref = Vmpp in order to achieve our goal. simulate this circuit

Now: how can we generate Vref = Vmpp?

Even in this case there are different possibilities: for example, an additional timing cicuitry can be designed to disconnect periodically the solar panel load, so that a peak holder can 'capture' the panel open-circuit voltage Voc. It can be seen that Vmpp is usually an approximately constant fraction of Voc, irrespectively of the the environmental conditions. By knowing the ratio Vmpp/Voc, a voltage divider can be used to obtain Vmpp starting from the stored value of Voc.

• this is just an example of implementation: it should be noted that an external control logic is not required to switch the MOSFET on and off; instead, the comparator output accomplishes this task, which is very useful in applications where power-draining microcontrollers cannot be afforded;
• the low-power comparator draws its supply from the harvester input terminal; since this has some fluctuation (mostly depending on the inductor value and on the comparator's time delay) an RC filter can be used to smooth it.

Other possible harvesting solutions include the use of microcontrollers implementing some sort of 'Perturbe & Observe' algorithm: as shown in another answer, in this case the operating conditions are changed a little bit while monitoring the response of the input power.

• While I appreciate all the answers, I'm still not clear on how exactly the harvester can change the perceived "load" while keeping the output voltage constant. Maybe I am just too dead set on my understanding of "typical" boost converters as boosting an input voltage to a different output voltage, as opposed to having the input be a current source in which you can change the input voltage. Is there a special name for this type of boost converter? Is there a formula for relating duty ratio to load? – user2913869 Feb 23 '17 at 17:14
• The harvester may be based on a boost converter. The way the input voltage is kept close to Vmpp differs according to the specific solution. As I have written in the comments to the answer below, for very low power applications a self-oscillating harvester is preferred. In this case, you usually find a Schmitt trigger comparator whose output is employed to drive the switching transistor. The inverting input of the comparator is tied to a reference voltage Vref=Vmpp, while the non-inverting one is connected to the harvester input, which is therefore forced to stay very close to Vref=Vmpp – NotANumber Feb 23 '17 at 17:33
• This is basically due to the astable behaviour of the comparator. When it comes to such a self-oscillating solution, the switching period and duty cycle are not set from the outside; instead, they result from the panel's working conditions – NotANumber Feb 23 '17 at 17:36
• I edited my answer above to clarify such concepts. It is not so straightforward to deeply understand this mechanism, actually. – NotANumber Feb 23 '17 at 18:25
• @NotANumber I know it's been a while, but can you say how do you set V_ref= V_mpp? I know V_mpp can be calculated in microcontroller, but how do you set V_ref to such value??? – Jack Feb 24 '18 at 4:14

An mppt tracker needs 2 independent voltages for input and output. Output voltage will be fixed, but input voltage has to be variable and changeable by changing the input "load" dynamically.

Your tracker will have to sweep the input "load" constantly, going up and down to find the input "load" that gives most power output.

The algorithm should be something like this:

Set input load change direction as +
Loop {