Four facts about MPPT
- A module's operating point is where its I-V curve meets the load line. In our illustrative 550 W module, a resistor tuned for 1,000 W/m² captures only 66% of the available power at 600 W/m².
- The maximum power point is where the slope of power against voltage is zero. Equivalently, the slope of the I-V curve (incremental conductance) equals minus the ratio of current to voltage (instantaneous conductance).
- An ideal boost converter makes the array see the load resistance multiplied by , where is the fraction of each cycle the switch is on. Changing therefore moves the operating point.
- Perturb and observe loses power in proportion to its step squared, about 0.003% for 1 V on a 417 V string. Fast irradiance ramps and partial shading can still mislead it.
Every solar module has one voltage and current at which it delivers its greatest power, and that point never stays still. It moves with each passing cloud and each degree of cell temperature. The maximum power point tracker, or MPPT, in your inverter chases it many times a second. A datasheet reduces all this to "MPPT efficiency above 99%", which hides a good deal of calculus and power electronics.
This guide builds the subject from first principles: a resistor across a module, the maximum power condition from a derivative, buck and boost relations from volt-second balance, an inductor sized with real numbers, then the two classic tracking algorithms and the two conditions that defeat them. You need school calculus and Ohm's law. Every symbol is defined with its unit before use, and every number was computed in Python. For the cell physics, see How a Solar Cell Works. For the inverter as a whole, see What Is a Solar Inverter?
About the numbers: The module here is a model, not a product, and its parameters are illustrative values typical of a 550 W-class module. The converter values are illustrative too. Use the datasheets of your own equipment, and check the current edition of any standard you rely on.
Why the load sets the operating point
A module's voltage and current are tied together by its I-V curve, explained cell by cell in How a Solar Module Works. The load supplies a second relation between the same two quantities, and the operating point is the one pair that satisfies both. Notation:
- , : module voltage (V) and current (A); is power (W)
- : load resistance, in ohms (); : irradiance, in W/m²
- : open-circuit voltage; : voltage, current and power at the maximum power point (MPP)
Assume uniform irradiance, one cell temperature and steady conditions. Ohm's law gives the load line, a straight line through the origin with slope :
To compute rather than sketch, we need an equation for the curve. The single-diode model uses these symbols: , the photocurrent, proportional to ; , the diode saturation current; , the ideality factor; , the number of series cells; , the thermal voltage, about 25.7 mV at 25 °C, with Boltzmann's constant, the electron charge and the cell temperature in kelvin; and , , the series and shunt resistances.
The terms are the light-generated current, the diode loss and the shunt leakage. Since appears on both sides, we solve it numerically by bisection. Illustrative parameters: , , , , A at 1,000 W/m², and set for V at 25 °C. The model then gives V, A and W, with power falling 0.29% per kelvin.
Worked example: a resistor and a battery
Connect the module to a 3.16 resistor, perfect at 1,000 W/m², or to an ideal 27 V battery, such as a 24 V lead-acid bank on charge. Hold the cell at 25 °C so only irradiance changes.
| G (W/m²) | Vmp (V) | Imp (A) | Pmp (W) | Ropt (Ω) | 3.16 Ω resistor: W (share) | 27 V battery: W (share) |
|---|---|---|---|---|---|---|
| 1000 | 41.75 | 13.20 | 550.9 | 3.16 | 550.9 (100.0%) | 374.0 (67.9%) |
| 800 | 41.71 | 10.54 | 439.4 | 3.96 | 384.6 (87.5%) | 298.7 (68.0%) |
| 600 | 41.55 | 7.87 | 327.1 | 5.28 | 216.8 (66.3%) | 223.4 (68.3%) |
| 400 | 41.17 | 5.21 | 214.4 | 7.90 | 96.4 (44.9%) | 148.2 (69.1%) |
| 200 | 40.21 | 2.54 | 102.3 | 15.82 | 24.1 (23.6%) | 72.9 (71.3%) |
At 600 W/m² the resistor settles at 26.19 V and 8.28 A, far left of . Check: W, matching the table. The battery clamps the module at 27 V whatever the light, so at 1,000 W/m² it runs on the flat part of the curve at 13.85 A and delivers W, 67.9% of the possible. The 14.75 V of headroom above 27 V is wasted. Neither load can choose its own operating point. A DC-DC converter can.
The maximum power condition from calculus
A load line through the MPP has slope , so the optimal load is:
It moves. Photocurrent follows irradiance, so falls almost in step with , while falls only logarithmically. From 1,000 to 200 W/m², drops to 19.3% but by just 3.7%, so rises five-fold, from 3.16 to 15.82 . Heat acts the other way. At a cell temperature of 65 °C, is 36.56 V (about % per kelvin) and is 2.75 , 13% lower.
Deriving the condition
Treat current as a function of voltage, . Notation: is the slope of the power curve (W/V); is the slope of the I-V curve, the incremental conductance, in siemens (S); and is the instantaneous conductance of the operating point, also in S. The product rule gives:
At a maximum the slope is zero, so dividing by :
The curve's slope at the MPP is exactly the negative of the load line's slope. Since , has the sign of , which gives a direction finder:
Positive slope means left of the MPP, so voltage should rise. Negative means right, so it should fall. The table checks this at 1,000 W/m² and 25 °C.
| V (V) | I (A) | P (W) | dI/dV (S) | −I/V (S) | dP/dV (W/V) | Position |
|---|---|---|---|---|---|---|
| 36.00 | 13.79 | 496.6 | −0.019 | −0.383 | +13.12 | Left: raise V |
| 41.75 | 13.20 | 550.9 | −0.316 | −0.316 | 0.00 | At the MPP |
| 44.00 | 11.94 | 525.4 | −0.875 | −0.271 | −26.55 | Right: lower V |
| 47.00 | 7.33 | 344.3 | −2.294 | −0.156 | −100.49 | Right: lower V |
Check at 36 V: W/V, matching. The slope is far steeper on the right ( W/V at 47 V) than on the left, so the peak is lopsided. The second derivative confirms a maximum:
Numerically W/V² for our module. It is negative, and it returns below.
DC-DC converters as adjustable impedance transformers
Calculus says where the peak is. A DC-DC converter puts the array there. It switches current on and off thousands of times a second so that the array sees a different resistance from the one the load really has. The inverter's DC stage does this ahead of the H-bridge described in How a Solar Inverter Makes AC. Notation:
- and : voltage (V) and current (A) at the array side and the load side
- : duty ratio, the fraction of each period the switch is on (dimensionless); : switching frequency (Hz); : period (s)
- : inductance (H); , : inductor voltage and current
- : load resistance; : resistance seen by the array ()
Assumptions: ideal switch and diode, lossless inductor, continuous conduction (inductor current never reaches zero), steady state (each period repeats the last), and capacitors large enough to hold and constant within a period.
Volt-second balance
An inductor obeys . In steady state its current returns to its starting value each period, so:
Positive volt-seconds while the switch is on cancel negative volt-seconds while it is off. In a buck converter the inductor sees for and for :
In a boost converter the inductor sees for and , which is negative, for :
Sanity check: at the boost passes through unchanged, and the output grows as rises. Real diode drops and resistances shift these ratios by a percent or two.
The impedance the array sees
For a lossless converter, power in equals power out, and the load draws :
The last step substitutes . The same steps for a buck give . A boost can only lower the resistance the array sees, and a buck can only raise it. With a real efficiency near 98% to 99%, the boost result becomes , a shift of 1% to 2%.
Worked example: ten modules into a 650 V bus
Ten of our modules in series give ten times the module at the same current. The inverter holds the bus at 650 V, so the equivalent is and changes with power. At each condition's MPP, :
| Condition | String Vmp (V) | Imp (A) | Pmp (W) | Rin (Ω) | Rload (Ω) | D |
|---|---|---|---|---|---|---|
| 1000 W/m², 25 °C | 417.5 | 13.20 | 5509 | 31.63 | 76.69 | 0.358 |
| 1000 W/m², 45 °C | 391.5 | 13.25 | 5189 | 29.54 | 81.42 | 0.398 |
| 1000 W/m², 65 °C | 365.6 | 13.30 | 4863 | 27.49 | 86.88 | 0.437 |
| 400 W/m², 25 °C | 411.7 | 5.21 | 2144 | 79.05 | 197.08 | 0.367 |
Check row one: , and . The controller never handles "resistance". It raises from 0.358 to 0.437 as the cells heat, and the array slides to its new peak. A boost cannot step down, so the bus must stay above the string's coldest-morning voltage, a question treated in String Sizing for Inverters.
A buck serves battery chargers. Our module at its MPP into the 27 V battery needs and delivers A, so 550.9 W instead of 374.0 W, a 47% gain. Check: and .
Safety: PV strings are live whenever light falls on them, and 400 V to 650 V can kill. Work on strings, isolators and converters is for qualified, licensed electricians only. DC arcs do not extinguish themselves, so never open a connector or isolator under load unless it is rated for that duty.
Sizing the boost inductor
Let be the peak-to-peak inductor current ripple (A). While the switch is on, the inductor sees a constant , so its current rises at for a time :
Take an illustrative stage: V (near the 391.5 V of our string at 45 °C), V, kHz, kW. Then:
Designers often accept a ripple of 20% to 40% of the average current. At 20%, A, so:
Choose 1.5 mH, giving A (20.5%). The current swings from 22.4 A to 27.6 A, so the inductor must not saturate below about 28 A. Check: the off-time is 30.8 s and the current falls at A/s, a fall of 5.13 A, equal to the rise. Halving the ripple target doubles , as does halving : 10% ripple at 20 kHz needs 3.08 mH, 30% at 40 kHz only 0.51 mH. Higher frequency shrinks the inductor but raises switching loss. Below an average current of half the ripple, 2.56 A or about 10% of full power, the converter enters discontinuous conduction, where no longer holds.
Perturb and observe
Perturb and observe, written P&O, needs only a voltage and a current sensor. It nudges the operating voltage, checks whether power rose, and keeps going if it did. Notation: is the sample index; and are measured voltage, current and power; is the step in the voltage reference (V); is the time between steps (s), longer than the converter's settling time. The algorithm, in order:
- Measure the array voltage and current, and compute .
- Compare with the stored previous power .
- If the power rose, keep the direction of the last step. If it fell, reverse the direction.
- Move the voltage reference by in that direction, by changing the duty ratio.
- Store and , wait for the converter to settle, and return to step 1.
The three-point dither
Suppose the tracker sits at the MPP, point B, with A one step to the left and C one step to the right. Any step lowers power, so it cannot rest. From B it steps to C, power falls, so it reverses to B, power rises, so it continues to A, power falls, so it reverses to B, and so on: B, C, B, A, repeating. It spends half its time at B and a quarter each at A and C. To find the cost, expand the power curve to second order about , where is the curvature (W/V²):
At the maximum and . One step away the loss is , and the four-step cycle averages half of that, shown by the bar below. With the dimensionless curvature :
The loss is quadratic in the step. The approximation drops the third-order term, which makes the peak lopsided. For our module . A ten-module string has W/V², V and W, and the same , since with modules in series scales as and as .
| Step ΔV (V) | Taylor loss at A or C (W) | Exact loss left / right (W) | Mean dither loss (%) | Time to climb 217 V at 20 ms (s) |
|---|---|---|---|---|
| 1 | 0.35 | 0.35 / 0.36 | 0.0032 | 4.35 |
| 2 | 1.41 | 1.36 / 1.45 | 0.0128 | 2.17 |
| 5 | 8.80 | 8.15 / 9.52 | 0.0799 | 0.87 |
| 10 | 35.20 | 30.21 / 41.22 | 0.3195 | 0.43 |
| 20 | 140.81 | 104.46 / 193.01 | 1.2780 | 0.22 |
Doubling the step from 1 V to 2 V multiplies the loss by four, as predicted. The Taylor estimate is within about 8% to 5 V, but at 20 V it is 35% high on the left and 27% low on the right. A direct simulation at 1,000 W/m² gave mean losses of 0.0045%, 0.11% and 0.41% for 1, 5 and 10 V, slightly above the table because the voltage grid seldom puts B exactly on .
The last column is the price of small steps. Climbing from 200 V to the 417.5 V peak, after start-up or after shade clears, takes steps of . A large step is quick but dithers expensively. A small step is accurate but slow. Halving the step cuts the dither loss to a quarter and doubles the climb time, which is why variable-step designs take large steps far from the peak and small ones near it.
Drift under rapidly rising irradiance
P&O assumes any power change followed from its step. When light is changing, the change in one sample combines both effects:
Near the peak the first term is tiny. Take a ramp of 100 W/m² per second near 600 W/m². In one 20 ms sample W/m², and with W per W/m² the light adds about 10.9 W. A wrong 1 V step near the peak costs only about 0.2 W at that irradiance. The tracker sees power rise, keeps going, and drifts from the peak until the slope term grows enough to cancel the 10.9 W. We simulated the ten-module string ramped from 300 to 900 W/m² with an instantaneous converter and 20 ms steps:
| Ramp (W/m² per s) | 0.5 V step | 1 V step | 5 V step |
|---|---|---|---|
| 50 | 91.5% | 99.1% | 99.8% |
| 100 | 93.4% | 91.4% | 99.7% |
| 200 | 94.6% | 93.3% | 99.3% |
| 400 | 97.3% | 94.6% | 95.1% |
Read the pattern, not the individual figures, which depend on where the ramp starts. Small steps are vulnerable because their own effect is swamped. A larger step helps at moderate ramps but fails at 400 W/m² per second. These ramps are severe, like a moving cloud edge, and are not typical of a whole day. Remedies include sampling faster than the light changes, adapting the step, and comparing three points to separate the irradiance trend from the step.
Incremental conductance
Incremental conductance applies the derived condition directly. With and , the ratio approximates , and there are three cases:
The algorithm, in order:
- Measure and , then compute and against the previous sample.
- If : hold if , raise the voltage reference if (light has risen), and lower it if .
- Otherwise compare with . If equal within a small tolerance , hold: the MPP has been reached.
- If , the point is left of the MPP, so raise the voltage reference by one step.
- If , the point is right of the MPP, so lower it by one step.
- Store and , wait , and repeat.
It can stop at the peak instead of dithering, and it knows the direction from the slope. In practice it compares two noisy differences, so needs care. A common improvement scales the step with the slope, using a gain in V²/W:
With V²/W on our module, the step is 0.66 V at 36 V (slope 13.12 W/V) and 1.33 V at 44 V (slope W/V), and it shrinks to nothing at the peak. One caution: using the same sample-to-sample differences, the plain algorithm gave efficiencies within about one percentage point of P&O in our ramp simulation, because also contains the effect of changing light.
Partial shading and the search for the global peak
Hill-climbing works on a single hump. Partial shading breaks that. As the module I-V curve guide explains, a module is divided into substrings, commonly three, each with a bypass diode. When a substring is shaded and the string current exceeds what it can carry, its bypass diode conducts and it contributes about to the string voltage, where is the diode drop, taken as 0.5 V. The power curve then has more than one maximum.
Worked example: two shaded substrings in ten modules
Take ten modules, so 30 substrings in series. A tank shadow lowers two substrings to 300 W/m². The other 28 stay at 1,000 W/m² and 25 °C. Summing each substring's voltage at a given string current gives:
| Point on the string P-V curve | V (V) | I (A) | P (W) | Share of unshaded Pmp |
|---|---|---|---|---|
| Unshaded MPP | 417.5 | 13.20 | 5,509 | 100% |
| Local maximum, nothing bypassed | 472.5 | 4.07 | 1,922 | 34.9% |
| Valley between the peaks | 448.9 | 4.19 | 1,881 | 34.1% |
| Global maximum, two bypassed | 388.7 | 13.19 | 5,129 | 93.1% |
Check the global peak: 28 of 30 substrings at full current give W, less W in the diodes, so 5,129 W. The local peak keeps every substring active but is limited to about 4.1 A, so it yields only 37.5% of the global peak.
The two peaks are 24 V apart with a valley only 2% deep. A P&O tracker with a 2 V step that starts at 480 V, near open circuit, settles between 470 and 474 V at 1,922 W. Started at 440 V or 300 V, it settles near 388 V at 5,128 W. The local slope cannot show which peak is better, so hill-climbing gets stuck.
Periodic global sweeps
The remedy is to measure the whole curve. Every seconds the tracker sweeps the voltage across its MPPT window in seconds, records the highest power, jumps there and resumes local tracking. If is the mean power during the sweep as a fraction of , the energy lost is:
Sweeping our unshaded string from 495 V down to 150 V gives , so a 2 s sweep every 600 s costs of energy. Finding the global peak above recovers about 3,200 W, so one sweep's cost is repaid in about a second. Where shading is routine, better remedies are layout changes, separate MPPT inputs, or module-level electronics, as the inverter overview describes.
MPPT efficiency and the whole inverter
MPPT efficiency is the energy harvested divided by the energy available at the true maximum power point over the same period. Here is the power drawn from the array and the power at its true MPP, both in W and integrated over time :
EN 50530 defines static tests at steady irradiance levels and dynamic tests with changing irradiance profiles. Check the current edition for details. Both matter: in steady light our 1 V, 5 V and 10 V steps gave 99.9955%, 99.89% and 99.59%, yet under severe ramps the figure ranged from 91% to 99.8%. A datasheet figure above 99% is realistic for steady light and says little about cloud edges.
MPPT is the first stage. The energy then passes through the DC-DC converter and the inverter bridge, so overall efficiency is a product. With illustrative values of 99.8%, 99.3% and 98.8%:
The 97.9% is lower than any single stage. One percentage point on a 100 kW plant making roughly 1,500 units per kW per year, an approximate figure to confirm in a site audit, is about 1,500 units a year. Ray2Volt can run this analysis for your own site, checking the string layout against the inverter's MPPT window, assessing shading and reading your inverter logs. Start with a free power audit.
Frequently asked questions
What is the difference between MPPT and a DC-DC converter?
The DC-DC converter is the hardware: switches, an inductor and capacitors that change the voltage and current between the array and the DC bus. MPPT is the control algorithm that sets the converter's duty ratio so the array stays at its maximum power point. The two work together inside the inverter.
Why does the operating point oscillate even in steady sunlight?
Perturb and observe cannot know it has reached the peak, because any step away lowers the power slightly. It therefore dithers among three voltages. The average loss grows with the square of the step, so a step of about 1% of the maximum power voltage costs roughly 0.06% of array power.
Does MPPT create extra power?
No. It cannot exceed what the modules produce at the prevailing irradiance and temperature. It only avoids the loss of a badly matched load. In our example a direct 27 V battery connection captured about 68% of the available power, while an ideal buck converter at the maximum power point delivered all of it, before converter losses.
Do I need more than one MPPT input?
Two inputs help when parts of the array differ in orientation, tilt or shading, because each input finds its own peak instead of compromising. One input is fine for an array facing a single direction without shade. Check the inverter datasheet for the number of inputs and the MPPT voltage window.
Have your plant's tracking and string layout checked
Share your inverter model and a month of generation data. Our engineers can review the MPPT window, string layout and shading at your site.