PV I-V Curve Calculator

PV I-V Curve Calculator

The single-diode model, with its parameters extracted from a module’s data sheet rather than asked for: the I-V and power curves, the maximum power point and its voltage and current, the fill factor and the module’s efficiency — all recomputed at your own irradiance and cell temperature, because the data sheet is at STC and a roof in May is not.

The I-V curve, the maximum power point and the efficiency at your conditions

Data sheet + irradiance + cell temperature → I-V curve
From the data sheet’s electrical table at 1000 W/m², 25 °C, AM1.5. Use the figures from your part’s datasheet; typical values vary widely between manufacturers.
These four numbers are the whole data sheet as far as the model is concerned: they fix the photocurrent, the diode saturation current and the series resistance between them.
Electrically in series, which is not the same as the cell count printed on the box. A 144-half-cell module is two parallel strings of 72, so this is 72. A 120-half-cell module is 60.
Length × width from the mechanical drawing, used only for the efficiency figure. A 2278 × 1134 mm module is 2.583 m².
Positive and small: the band gap narrows as the cell warms, so it absorbs slightly more of the spectrum. +0.04 to +0.05 %/°C for crystalline silicon.
Negative and much larger in effect: −0.24 to −0.30 %/°C for a modern crystalline module. This is the number that decides how much a hot roof costs you, and it is why string length is checked at the coldest expected temperature.
Used only as a cross-check: the page compares the power its model predicts against the data sheet’s own linear derating, and if the two disagree badly then the ideality factor or the shunt resistance needs attention. −0.29 to −0.40 %/°C is the usual range.
The saturation current I₀ is what makes V_oc fall with temperature, and there are two ways to set its temperature dependence. The first back-calculates I₀ at your temperature so that V_oc lands exactly where your data sheet says it will — which is what you want when you have a data sheet. The second uses the physical band-gap expression, which is what you want when you do not, and which for a modern module typically predicts a steeper V_oc coefficient than the module actually has. The page reports both so you can see the gap.
1.0 for a purely diffusion-limited junction, higher when recombination matters. 1.0 to 1.3 covers most crystalline modules and 1.15 is a reasonable starting value. It is NOT on the data sheet, and the series resistance the page extracts is sensitive to it — raise n and the extracted R_s falls, because both do the same job of bending the knee. That degeneracy is real and is why single-diode extraction always needs one assumed parameter.
The parallel leakage across the cell string. Not on the data sheet either; it shows up as the slope of the I-V curve near short circuit. A few hundred ohms to a few kilohms for a healthy crystalline module; a low value is the signature of a shunted or cracked cell. Enter a very large number to switch it off.
1000 W/m² is STC and is a bright clear noon with the array square to the sun. A real roof at a real tilt sees 600 to 900 W/m² for much of a clear day and far less under cloud.
The CELL, not the air. In full sun a roof-mounted module runs 25 to 35 °C above ambient; the data sheet’s NOCT figure is measured at 800 W/m², 20 °C air and 1 m/s wind and is the usual starting estimate.
The single-diode equivalent circuit — a model, not something you could unsolder from a module. The photocurrent source is the light; the diode is the junction it shines on; the shunt resistance is leakage across the cell string and the series resistance is everything resistive between the junction and the terminals, in the emitter, the fingers, the busbars and the interconnect. Of the five parameters, three are extracted from your data sheet and the two written in ohms are the ones you have to assume. The dots show where the current goes at the maximum power point.
401.7WExample

a 550 W module — I_sc 13.90 A, V_oc 49.90 V, I_mp 13.19 A, V_mp 41.70 V, 72 cells in series, 2.584 m² — with an ideality factor of 1.15 and 400 Ω of shunt resistance assumed, running at 800 W/m² and 50 °C cell temperature

Advertisement

Implicit in V, explicit in V_j

I = Iph − I₀·(exp((V + I·Rs)/a) − 1) − (V + I·Rs)/Rsh,   a = n·Ns·kT/q
put Vj = V + I·Rs and both coordinates become explicit:
I(Vj) = Iph − I₀·(exp(Vj/a) − 1) − Vj/Rsh,   V(Vj) = Vj − I(Vj)·Rs
dP/dVj = 0  ⇔  I + I′·(Vj − 2·I·Rs) = 0
FF = Pmp ÷ (Voc·Isc),   η = Pmp ÷ (G·A)
V_j
the junction voltage: the voltage across the diode and the shunt resistance, which is the terminal voltage plus the drop in the series resistance. Sweeping it traces the whole curve with no iteration at all
I_ph, I₀, R_s
extracted from the data sheet’s own three points, not asked for. Nobody has I₀ to hand
n, R_sh
the two the data sheet does not give, which have to be assumed. They are also the two the answer is least sensitive to near the maximum power point and most sensitive to at the two ends of the curve
FF
fill factor: how square the curve is. It is the fraction of the V_oc × I_sc rectangle the maximum power point actually reaches, and series resistance is what takes it away

Worked example

a 550 W module — I_sc 13.90 A, V_oc 49.90 V, I_mp 13.19 A, V_mp 41.70 V, 72 cells in series, 2.584 m² — with an ideality factor of 1.15 and 400 Ω of shunt resistance assumed, running at 800 W/m² and 50 °C cell temperature
The string's thermal voltage at 25 °C is n·N_s·kT/q = 1.15 × 72 × 25.693 mV = 2.127 V. With that and the shunt resistance fixed, the open-circuit and short-circuit conditions give I₀ and I_ph as functions of R_s alone, and forcing the curve through the data sheet's maximum power point leaves one equation in R_s. Twenty bisections give R_s = 117.8 mΩ, that is 1.64 mΩ per cell, and then I₀ = 896 pA and I_ph = 13.9 A
At 50 °C the thermal voltage rises to 2.306 V and the saturation current rises to 24 nA — here back-calculated so that V_oc lands exactly where the data sheet's -0.27 %/°C says it should. At 800 W/m² the photocurrent is 11.26 A, so V_oc = 46.01 V and I_sc = 11.25 A
Sweeping the junction voltage traces the curve explicitly. Sixteen bisections on I + I′·(V_j − 2·I·R_s) find the peak of the power curve at V_j = 39.46 V, which is V_mp = 38.22 V at I_mp = 10.51 A — so P_mp = 401.7 W
That is a fill factor of 0.7757 (against 0.7930 on the data sheet) and a module efficiency of 19.43% on 2.584 m², down from 21.29% at STC. It is 73.02% of the nameplate — the honest answer to what a 550 W module does on a warm roof
Cross-check: the data sheet's own linear power coefficient of -0.34 %/°C predicts 402.6 W at this irradiance and temperature. The physical model and the linear derating differ by 0.24%, which is close agreement between two independent routes and the best available evidence that the assumed ideality factor and shunt resistance suit this module. Switching to the band-gap model instead would imply a V_oc coefficient of -0.381 %/°C — noticeably steeper than the -0.27 %/°C the data sheet claims, which is a known weakness of the plain band-gap translation for a modern cell

The three standard test conditions, and why none of them is your roof

ConditionIrradianceCell or air temperatureSpectrumWhat it is for
STC — standard test conditions1000 W/m²25 °C cellAM1.5Gthe nameplate. A cell at 25 °C in 1000 W/m² of sun essentially never happens outdoors; it is a flash-test condition
NOCT — nominal operating cell temperature800 W/m²20 °C air, 1 m/s wind, open rackAM1.5Gthe measured cell temperature under those conditions, typically 42 to 48 °C. It is the number to start from when estimating cell temperature from air temperature
NMOT / PTC-style ratings800 W/m²20 °C airAM1.5Ga rating at conditions closer to reality, quoted by some manufacturers and required by some incentive programmes
Low-light point200 W/m²25 °C cellAM1.5GIEC 61853-1 requires efficiency to be reported here too, because a module that holds its efficiency at 200 W/m² makes real energy on a cloudy morning
Your roof, a clear afternoon in May600 to 900 W/m²45 to 65 °C cellvaries with air mass and cloudwhat this page is for: the same model, evaluated where the module actually is
The conditions themselves are defined in IEC 61215 and IEC 61853-1, which are copyrighted and not reproduced here; this table names them and says what each is used for. The numbers in the last row are the point of the page.

Why the curve is the answer, and what the model cannot see

A photovoltaic module is not a voltage source and not a current source. It is a current source in parallel with a diode, and everything that makes a module interesting is in the shape that produces: nearly constant current up to a knee, then a collapse to open circuit. Somewhere on that knee is the one operating point that delivers the most power, and the whole job of an MPPT charge controller or a string inverter is to sit on it while it moves.

The equation, and why it looks unsolvable. The single-diode model says the terminal current is the photocurrent minus what the diode takes minus what the shunt resistance leaks, and the voltage that drives both of those is the terminal voltage PLUS the drop in the series resistance — which depends on the current. So I appears on both sides. There is no elementary closed form for I(V); the exact solution needs the Lambert W function. But the difficulty is entirely an artefact of insisting that V is the independent variable. Sweep the JUNCTION voltage instead — the voltage actually across the diode — and both the current and the terminal voltage fall out explicitly, with no iteration and no approximation. That is what this page does, and substituting the resulting pair back into the original implicit equation gives an identity, which is checked numerically to a picoamp at 41 points on every curve.

Where the parameters come from. A data sheet gives four numbers: I_sc, V_oc, I_mp and V_mp, plus the temperature coefficients. It does not give I₀, and nobody has I₀ to hand. So the page extracts it: with the ideality factor and the shunt resistance assumed, the open-circuit and short-circuit conditions pin I_ph and I₀ as functions of the series resistance, and forcing the curve through the stated maximum power point leaves a single equation in R_s alone, which is bisected. The model then passes through all three data sheet points exactly. Two parameters still have to be assumed, and the page is honest about that: the ideality factor and the shunt resistance are not on any data sheet, and raising one lowers the extracted series resistance because both bend the knee the same way. That degeneracy is intrinsic to fitting five parameters to four numbers.

Temperature is the whole story of a real array. Irradiance scales the current almost exactly linearly, which is easy. Temperature is not: it lifts I_sc very slightly and drops V_oc a great deal, because the diode’s saturation current rises steeply with temperature. A module at 65 °C loses about 14% of its nameplate power to temperature alone, before any consideration of soiling, mismatch or inverter efficiency. This page offers two ways to handle it: force the model to match your data sheet’s V_oc coefficient, or use the physical band-gap expression of De Soto, Klein and Beckman. For a modern module the two disagree — the band-gap expression typically predicts a steeper coefficient than the module actually has — and the page reports both so you can see by how much.

What it does not cover. One module at one uniform irradiance and one uniform temperature. It says nothing about partial shading, which is the single biggest real-world effect and is not a scaling of this curve at all — a shaded cell goes into reverse bias and the bypass diodes take over, producing a curve with several local maxima that can fool a poorly written MPPT algorithm. It says nothing about mismatch between modules in a string, about light-induced degradation, or about the cell cracks that show up as a collapsed shunt resistance.

For the system around the module: the array sizing calculator turns a daily energy requirement into kilowatts of panels, the string V_oc calculator checks the coldest-morning open-circuit voltage against an inverter’s DC limit and the hottest afternoon against the bottom of its MPPT window, and the charge controller calculator sizes the controller and quantifies what MPPT gains over PWM. None of them draws the device curve; this page is where that lives.

Advertisement

Frequently asked questions

Why does the page need an ideality factor and a shunt resistance when my data sheet has neither?

Because the model has five parameters — I_ph, I₀, n, R_s and R_sh — and the data sheet gives four numbers. Something has to be assumed. The convention is to assume n and R_sh, which are physically bounded (n between 1 and about 1.5, R_sh from a few hundred ohms upwards for a healthy module) and to extract the other three. The page then gives you a way to check the assumption: it compares the power its model predicts with the data sheet’s own linear power coefficient, and if those two agree the assumption is sound.

The model’s maximum power point is not exactly the one on my data sheet. Why?

Because the extraction forces the curve to PASS THROUGH the data sheet’s stated maximum power point, and the curve’s own maximum is then wherever it falls — usually a fraction of a percent away in power and a little further in voltage. That gap is information: it is the amount by which the data sheet’s own four numbers are internally inconsistent with a single-diode model at the assumed n and R_sh.

What cell temperature should I use?

Not the air temperature. A module in full sun runs 25 to 35 °C above ambient on an open rack and more when it is flush-mounted on a roof with poor airflow behind it. The data sheet’s NOCT figure — the cell temperature at 800 W/m², 20 °C air and 1 m/s wind, typically 42 to 48 °C — is the usual starting point: cell temperature ≈ air + (NOCT − 20) × irradiance ÷ 800.

Can I model a string or an array rather than one module?

For identical modules in series, multiply V_oc, V_mp and the cell count by the number of modules and leave the currents alone. For modules in parallel, multiply the currents and leave the voltages. That is exact only if every module sees the same irradiance and the same temperature, which in practice they do not — the difference is mismatch loss, and it is not something this page can see.

Why does the fill factor fall when the module gets hot?

Because V_oc falls while I_sc barely moves, so the V_oc × I_sc rectangle shrinks mostly in one direction, and the knee of the curve softens as the thermal voltage rises. Series resistance takes a bigger share of a smaller voltage. The fill factor is a good single number for how square the curve is, and watching it fall with temperature is watching the mechanism.

Does this handle partial shading?

No, and that matters. One shaded cell in a series string limits the whole string’s current and is pushed into reverse bias by the others; the bypass diode across its sub-string then conducts and the curve develops a step. The result is a curve with more than one local power maximum, which this single-diode model cannot produce and which a poorly written MPPT tracker can lock onto the wrong side of. Shading is a different calculation.

Related calculators

References

  1. W. De Soto, S. A. Klein and W. A. Beckman, “Improvement and validation of a model for photovoltaic array performance”, Solar Energy, vol. 80, no. 1, 2006, pp. 78–88, doi:10.1016/j.solener.2005.06.010. The source of this page’s temperature and irradiance translation. Verified against the published paper: equation 8 gives a/a_ref = T_c/T_c,ref, equation 9 gives I_o/I_o,ref = (T_c/T_c,ref)³·exp[(1/k)(E_g/T|_ref − E_g/T|_Tc)], equation 10 gives E_g/E_g,ref = 1 − 0.0002677(T − T_ref), and equation 11 gives I_L = (S/S_ref)(M/M_ref)[I_L,ref + α_Isc(T_c − T_c,ref)]. The air-mass modifier M/M_ref is taken as 1 here.
  2. M. G. Villalva, J. R. Gazoli and E. R. Filho, “Comprehensive approach to modeling and simulation of photovoltaic arrays”, IEEE Transactions on Power Electronics, vol. 24, no. 5, 2009, pp. 1198–1208. The standard reference for extracting the single-diode parameters from a data sheet by adjusting R_s and R_sh until the modelled maximum power matches the stated one. This page’s extraction is the closed-form variant of the same idea: n and R_sh assumed, and R_s found from the maximum-power condition by bisection.
  3. IEC 61215 (design qualification and type approval of terrestrial photovoltaic modules) and IEC 61853-1 (irradiance and temperature performance measurements) define standard test conditions, NOCT and the low-light points a data sheet quotes. Cited by number; both are copyrighted and no values from them are reproduced here.
  4. IEC 60891 (procedures for temperature and irradiance corrections to measured I-V characteristics of crystalline silicon photovoltaic devices) is the standard governing the translation this page performs. Cited by number and title; the method used here is De Soto’s, which is published openly.