MPPT Explained: The Calculus and Power Electronics Behind Maximum Power Point Tracking

Why the load sets a module's operating point, how a boost converter moves it, and how two tracking algorithms find the peak, with the calculus shown and every number checked.

Rows of solar modules on a flat industrial roof with a wall-mounted inverter enclosure beside a plant room
The inverter's MPPT stage keeps the array at its maximum power point as light and temperature change.

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 (1−D)2(1-D)^2, where DD is the fraction of each cycle the switch is on. Changing DD 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:

  • VV, II: module voltage (V) and current (A); P=VIP = VI is power (W)
  • RR: load resistance, in ohms (Ω\Omega); GG: irradiance, in W/m²
  • VocV_{oc}: open-circuit voltage; Vmp,Imp,PmpV_{mp}, I_{mp}, P_{mp}: 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 1/R1/R:

I=VRI = \frac{V}{R}

To compute rather than sketch, we need an equation for the curve. The single-diode model uses these symbols: IphI_{ph}, the photocurrent, proportional to GG; I0I_0, the diode saturation current; nn, the ideality factor; NsN_s, the number of series cells; VT=kT/qV_T = kT/q, the thermal voltage, about 25.7 mV at 25 °C, with kk Boltzmann's constant, qq the electron charge and TT the cell temperature in kelvin; and RsR_s, RshR_{sh}, the series and shunt resistances.

I=Iph−I0[exp⁡(V+IRsnNsVT)−1]−V+IRsRshI = I_{ph} - I_0\left[\exp\!\left(\frac{V + I R_s}{n N_s V_T}\right) - 1\right] - \frac{V + I R_s}{R_{sh}}

The terms are the light-generated current, the diode loss and the shunt leakage. Since II appears on both sides, we solve it numerically by bisection. Illustrative parameters: Ns=72N_s = 72, n=1.0n = 1.0, Rs=0.15 ΩR_s = 0.15\ \Omega, Rsh=300 ΩR_{sh} = 300\ \Omega, Iph=13.95I_{ph} = 13.95 A at 1,000 W/m², and I0I_0 set for Voc=49.5V_{oc} = 49.5 V at 25 °C. The model then gives Vmp=41.75V_{mp} = 41.75 V, Imp=13.20I_{mp} = 13.20 A and Pmp=550.9P_{mp} = 550.9 W, with power falling 0.29% per kelvin.

Worked example: a resistor and a battery

Connect the module to a 3.16 Ω\Omega 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)
100041.7513.20550.93.16550.9 (100.0%)374.0 (67.9%)
80041.7110.54439.43.96384.6 (87.5%)298.7 (68.0%)
60041.557.87327.15.28216.8 (66.3%)223.4 (68.3%)
40041.175.21214.47.9096.4 (44.9%)148.2 (69.1%)
20040.212.54102.315.8224.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 VmpV_{mp}. Check: I2R=8.282×3.16≈217I^2 R = 8.28^2 \times 3.16 \approx 217 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 27×13.85≈37427 \times 13.85 \approx 374 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 Imp/VmpI_{mp}/V_{mp}, so the optimal load is:

Ropt=VmpImpR_{opt} = \frac{V_{mp}}{I_{mp}}

It moves. Photocurrent follows irradiance, so ImpI_{mp} falls almost in step with GG, while VmpV_{mp} falls only logarithmically. From 1,000 to 200 W/m², ImpI_{mp} drops to 19.3% but VmpV_{mp} by just 3.7%, so RoptR_{opt} rises five-fold, from 3.16 to 15.82 Ω\Omega. Heat acts the other way. At a cell temperature of 65 °C, VmpV_{mp} is 36.56 V (about −0.31-0.31% per kelvin) and RoptR_{opt} is 2.75 Ω\Omega, 13% lower.

Deriving the condition

Treat current as a function of voltage, I(V)I(V). Notation: dP/dV\mathrm{d}P/\mathrm{d}V is the slope of the power curve (W/V); dI/dV\mathrm{d}I/\mathrm{d}V is the slope of the I-V curve, the incremental conductance, in siemens (S); and I/VI/V is the instantaneous conductance of the operating point, also in S. The product rule gives:

P(V)=VI(V)⇒dPdV=I+VdIdVP(V) = V\,I(V) \qquad\Rightarrow\qquad \frac{\mathrm{d}P}{\mathrm{d}V} = I + V\,\frac{\mathrm{d}I}{\mathrm{d}V}

At a maximum the slope is zero, so dividing by VV:

dIdV=−IV\frac{\mathrm{d}I}{\mathrm{d}V} = -\frac{I}{V}

The curve's slope at the MPP is exactly the negative of the load line's slope. Since V>0V \gt 0, dP/dV\mathrm{d}P/\mathrm{d}V has the sign of dI/dV+I/V\mathrm{d}I/\mathrm{d}V + I/V, which gives a direction finder:

dPdV>0⟺dIdV>−IV,dPdV<0⟺dIdV<−IV\frac{\mathrm{d}P}{\mathrm{d}V} \gt 0 \iff \frac{\mathrm{d}I}{\mathrm{d}V} \gt -\frac{I}{V}, \qquad \frac{\mathrm{d}P}{\mathrm{d}V} \lt 0 \iff \frac{\mathrm{d}I}{\mathrm{d}V} \lt -\frac{I}{V}

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.0013.79496.6−0.019−0.383+13.12Left: raise V
41.7513.20550.9−0.316−0.3160.00At the MPP
44.0011.94525.4−0.875−0.271−26.55Right: lower V
47.007.33344.3−2.294−0.156−100.49Right: lower V

Check at 36 V: I+VdI/dV=13.79−36×0.019≈13.1I + V\,\mathrm{d}I/\mathrm{d}V = 13.79 - 36 \times 0.019 \approx 13.1 W/V, matching. The slope is far steeper on the right (−100.49-100.49 W/V at 47 V) than on the left, so the peak is lopsided. The second derivative confirms a maximum:

d2PdV2=2dIdV+Vd2IdV2\frac{\mathrm{d}^2P}{\mathrm{d}V^2} = 2\,\frac{\mathrm{d}I}{\mathrm{d}V} + V\,\frac{\mathrm{d}^2I}{\mathrm{d}V^2}

Numerically P′′(Vmp)=−7.04P''(V_{mp}) = -7.04 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:

  • Vin,IinV_{in}, I_{in} and Vout,IoutV_{out}, I_{out}: voltage (V) and current (A) at the array side and the load side
  • DD: duty ratio, the fraction of each period the switch is on (dimensionless); fsf_s: switching frequency (Hz); T=1/fsT = 1/f_s: period (s)
  • LL: inductance (H); vLv_L, iLi_L: inductor voltage and current
  • RloadR_{load}: load resistance; Rin=Vin/IinR_{in} = V_{in}/I_{in}: resistance seen by the array (Ω\Omega)

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 VinV_{in} and VoutV_{out} constant within a period.

Volt-second balance

An inductor obeys vL=LdiL/dtv_L = L\,\mathrm{d}i_L/\mathrm{d}t. In steady state its current returns to its starting value each period, so:

ΔiL=1L∫0TvLdt=0\Delta i_L = \frac{1}{L}\int_0^T v_L\,\mathrm{d}t = 0

Positive volt-seconds while the switch is on cancel negative volt-seconds while it is off. In a buck converter the inductor sees Vin−VoutV_{in} - V_{out} for DTDT and −Vout-V_{out} for (1−D)T(1-D)T:

(Vin−Vout)DT−Vout(1−D)T=0Vout=DVin\begin{aligned} (V_{in} - V_{out})\,D T - V_{out}\,(1-D)\,T &= 0 \\ V_{out} &= D\,V_{in} \end{aligned}

In a boost converter the inductor sees VinV_{in} for DTDT and Vin−VoutV_{in} - V_{out}, which is negative, for (1−D)T(1-D)T:

VinDT+(Vin−Vout)(1−D)T=0Vout=Vin1−D\begin{aligned} V_{in}\,D T + (V_{in} - V_{out})\,(1-D)\,T &= 0 \\ V_{out} &= \frac{V_{in}}{1-D} \end{aligned}

Sanity check: at D=0D = 0 the boost passes VinV_{in} through unchanged, and the output grows as DD 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 Vout2/RloadV_{out}^2/R_{load}:

VinIin=Vout2Rload⇒Rin=Vin2Vout2Rload=(1−D)2RloadV_{in} I_{in} = \frac{V_{out}^2}{R_{load}} \quad\Rightarrow\quad R_{in} = \frac{V_{in}^2}{V_{out}^2}\,R_{load} = (1-D)^2\,R_{load}

The last step substitutes Vin=Vout(1−D)V_{in} = V_{out}(1-D). The same steps for a buck give Rin=Rload/D2R_{in} = R_{load}/D^2. A boost can only lower the resistance the array sees, and a buck can only raise it. With a real efficiency η\eta near 98% to 99%, the boost result becomes η(1−D)2Rload\eta(1-D)^2 R_{load}, a shift of 1% to 2%.

Electrical equipment and monitoring hardware for a solar inverter installation
The MPPT stage of an inverter is a DC-DC converter plus a control loop that adjusts the duty ratio.

Worked example: ten modules into a 650 V bus

Ten of our modules in series give ten times the module VmpV_{mp} at the same current. The inverter holds the bus at 650 V, so the equivalent RloadR_{load} is 6502/P650^2/P and changes with power. At each condition's MPP, D=1−Vin/VoutD = 1 - V_{in}/V_{out}:

Condition String Vmp (V) Imp (A) Pmp (W) Rin (Ω) Rload (Ω) D
1000 W/m², 25 °C417.513.20550931.6376.690.358
1000 W/m², 45 °C391.513.25518929.5481.420.398
1000 W/m², 65 °C365.613.30486327.4986.880.437
400 W/m², 25 °C411.75.21214479.05197.080.367

Check row one: 1−D=417.5/650=0.6421 - D = 417.5/650 = 0.642, and 0.6422×76.69 Ω=31.6 Ω=Vmp/Imp0.642^2 \times 76.69\ \Omega = 31.6\ \Omega = V_{mp}/I_{mp}. The controller never handles "resistance". It raises DD 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 D=27/41.75=0.647D = 27/41.75 = 0.647 and delivers 550.9/27=20.40550.9/27 = 20.40 A, so 550.9 W instead of 374.0 W, a 47% gain. Check: Rload=1.323 ΩR_{load} = 1.323\ \Omega and 1.323/0.6472=3.16 Ω=Ropt1.323/0.647^2 = 3.16\ \Omega = R_{opt}.

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 ΔIL\Delta I_L be the peak-to-peak inductor current ripple (A). While the switch is on, the inductor sees a constant VinV_{in}, so its current rises at Vin/LV_{in}/L for a time D/fsD/f_s:

ΔIL=VinDLfs⟺L=VinDfsΔIL\Delta I_L = \frac{V_{in}\,D}{L\,f_s} \qquad\Longleftrightarrow\qquad L = \frac{V_{in}\,D}{f_s\,\Delta I_L}

Take an illustrative stage: Vin=400V_{in} = 400 V (near the 391.5 V of our string at 45 °C), Vout=650V_{out} = 650 V, fs=20f_s = 20 kHz, P=10P = 10 kW. Then:

D=1−400650=0.3846,Iin=10,000400=25 AD = 1 - \frac{400}{650} = 0.3846, \qquad I_{in} = \frac{10{,}000}{400} = 25\ \mathrm{A}

Designers often accept a ripple of 20% to 40% of the average current. At 20%, ΔIL=5\Delta I_L = 5 A, so:

L=400×0.384620,000×5=153.8100,000 H=1.54 mHL = \frac{400 \times 0.3846}{20{,}000 \times 5} = \frac{153.8}{100{,}000}\ \mathrm{H} = 1.54\ \mathrm{mH}

Choose 1.5 mH, giving 400×0.3846/(1.5×10−3×20,000)=5.13400 \times 0.3846/(1.5\times10^{-3} \times 20{,}000) = 5.13 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 μ\mus and the current falls at (650−400)/1.5 mH=166,667(650-400)/1.5\ \mathrm{mH} = 166{,}667 A/s, a fall of 5.13 A, equal to the rise. Halving the ripple target doubles LL, as does halving fsf_s: 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 Vout=Vin/(1−D)V_{out} = V_{in}/(1-D) 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: kk is the sample index; Vk,IkV_k, I_k and Pk=VkIkP_k = V_k I_k are measured voltage, current and power; ΔV\Delta V is the step in the voltage reference (V); TaT_a is the time between steps (s), longer than the converter's settling time. The algorithm, in order:

  1. Measure the array voltage and current, and compute Pk=VkIkP_k = V_k I_k.
  2. Compare PkP_k with the stored previous power Pk−1P_{k-1}.
  3. If the power rose, keep the direction of the last step. If it fell, reverse the direction.
  4. Move the voltage reference by ΔV\Delta V in that direction, by changing the duty ratio.
  5. Store VkV_k and PkP_k, wait TaT_a 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 VmpV_{mp}, where P′′P'' is the curvature (W/V²):

P(V)≈Pmp+P′(Vmp)(V−Vmp)+12P′′(Vmp)(V−Vmp)2P(V) \approx P_{mp} + P'(V_{mp})\,(V - V_{mp}) + \tfrac{1}{2}\,P''(V_{mp})\,(V - V_{mp})^2

At the maximum P′(Vmp)=0P'(V_{mp}) = 0 and P′′<0P'' \lt 0. One step away the loss is 12|P′′|ΔV2\tfrac{1}{2}|P''|\,\Delta V^2, and the four-step cycle averages half of that, shown by the bar below. With the dimensionless curvature κ=|P′′|Vmp2/Pmp\kappa = |P''|\,V_{mp}^2/P_{mp}:

ΔP≈12P′′ΔV2,ΔPPmp≈|P′′|ΔV24Pmp=κ4(ΔVVmp)2\Delta P \approx \tfrac{1}{2}\,P''\,\Delta V^2, \qquad \frac{\overline{\Delta P}}{P_{mp}} \approx \frac{|P''|\,\Delta V^2}{4\,P_{mp}} = \frac{\kappa}{4}\left(\frac{\Delta V}{V_{mp}}\right)^2

The loss is quadratic in the step. The approximation drops the third-order term, which makes the peak lopsided. For our module κ=22.3\kappa = 22.3. A ten-module string has P′′=−0.704P'' = -0.704 W/V², Vmp=417.5V_{mp} = 417.5 V and Pmp=5,509P_{mp} = 5{,}509 W, and the same κ\kappa, since with NN modules in series P′′P'' scales as 1/N1/N and Vmp2/PmpV_{mp}^2/P_{mp} as NN.

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)
10.350.35 / 0.360.00324.35
21.411.36 / 1.450.01282.17
58.808.15 / 9.520.07990.87
1035.2030.21 / 41.220.31950.43
20140.81104.46 / 193.011.27800.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 VmpV_{mp}.

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 217/ΔV217/\Delta V steps of TaT_a. 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:

ΔP≈∂P∂VΔV+∂P∂GΔG,∂P∂V≈P′′(V−Vmp)\Delta P \approx \frac{\partial P}{\partial V}\,\Delta V + \frac{\partial P}{\partial G}\,\Delta G, \qquad \frac{\partial P}{\partial V} \approx P''\,(V - V_{mp})

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 ΔG=2\Delta G = 2 W/m², and with ∂P/∂G≈Pmp/G=5.45\partial P/\partial G \approx P_{mp}/G = 5.45 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
5091.5%99.1%99.8%
10093.4%91.4%99.7%
20094.6%93.3%99.3%
40097.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 ΔV=Vk−Vk−1\Delta V = V_k - V_{k-1} and ΔI=Ik−Ik−1\Delta I = I_k - I_{k-1}, the ratio ΔI/ΔV\Delta I/\Delta V approximates dI/dV\mathrm{d}I/\mathrm{d}V, and there are three cases:

ΔIΔV=−IV (at the MPP),ΔIΔV>−IV (left),ΔIΔV<−IV (right)\frac{\Delta I}{\Delta V} = -\frac{I}{V}\ \text{(at the MPP)}, \qquad \frac{\Delta I}{\Delta V} \gt -\frac{I}{V}\ \text{(left)}, \qquad \frac{\Delta I}{\Delta V} \lt -\frac{I}{V}\ \text{(right)}

The algorithm, in order:

  1. Measure VkV_k and IkI_k, then compute ΔV\Delta V and ΔI\Delta I against the previous sample.
  2. If ΔV=0\Delta V = 0: hold if ΔI=0\Delta I = 0, raise the voltage reference if ΔI>0\Delta I \gt 0 (light has risen), and lower it if ΔI<0\Delta I \lt 0.
  3. Otherwise compare ΔI/ΔV\Delta I/\Delta V with −Ik/Vk-I_k/V_k. If equal within a small tolerance ε\varepsilon, hold: the MPP has been reached.
  4. If ΔI/ΔV>−Ik/Vk\Delta I/\Delta V \gt -I_k/V_k, the point is left of the MPP, so raise the voltage reference by one step.
  5. If ΔI/ΔV<−Ik/Vk\Delta I/\Delta V \lt -I_k/V_k, the point is right of the MPP, so lower it by one step.
  6. Store VkV_k and IkI_k, wait TaT_a, 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 ε\varepsilon needs care. A common improvement scales the step with the slope, using a gain MM in V²/W:

ΔVstep=M|dPdV|\Delta V_{step} = M\,\left|\frac{\mathrm{d}P}{\mathrm{d}V}\right|

With M=0.05M = 0.05 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 −26.55-26.55 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 ΔI\Delta I also contains the effect of changing light.

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 −Vd-V_d to the string voltage, where VdV_d 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 MPP417.513.205,509100%
Local maximum, nothing bypassed472.54.071,92234.9%
Valley between the peaks448.94.191,88134.1%
Global maximum, two bypassed388.713.195,12993.1%

Check the global peak: 28 of 30 substrings at full current give 5,509×28/30=5,1425{,}509 \times 28/30 = 5{,}142 W, less 2×0.5 V×13.2 A=132 \times 0.5\ \mathrm{V} \times 13.2\ \mathrm{A} = 13 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 tit_i seconds the tracker sweeps the voltage across its MPPT window in tst_s seconds, records the highest power, jumps there and resumes local tracking. If p‾\bar{p} is the mean power during the sweep as a fraction of PmpP_{mp}, the energy lost is:

loss fraction≈(1−p‾)tsti\text{loss fraction} \approx (1 - \bar{p})\,\frac{t_s}{t_i}

Sweeping our unshaded string from 495 V down to 150 V gives p‾=0.71\bar{p} = 0.71, so a 2 s sweep every 600 s costs (1−0.71)×2/600≈0.097%(1 - 0.71) \times 2/600 \approx 0.097\% 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 PactualP_{actual} is the power drawn from the array and PmaxP_{max} the power at its true MPP, both in W and integrated over time tt:

ηMPPT=∫Pactualdt∫Pmaxdt\eta_{MPPT} = \frac{\int P_{actual}\,\mathrm{d}t}{\int P_{max}\,\mathrm{d}t}

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%:

ηtotal=ηMPPTηDC-DCηinv=0.998×0.993×0.988=0.979\eta_{total} = \eta_{MPPT}\,\eta_{DC\text{-}DC}\,\eta_{inv} = 0.998 \times 0.993 \times 0.988 = 0.979

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.

Ray2Volt Solar

Ray2Volt Solar Private Limited

We design, install, and service rooftop solar for homes and businesses across Tirupati district and Andhra Pradesh, from PM Surya Ghar residential systems to commercial and industrial plants. Every enquiry starts with a free power audit.

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.

Get a free quote Chat on WhatsApp