Application Center - Maplesoft

App Preview:

PV Diode Parameter Estimation

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application




Parameter Estimation for Photovoltaic Diodes

Introduction

 

The behavior of a photovoltaic diode is often modeled with an equivalent circuit (illustrated above), and is described by the equation below.

 

If = Ipv-I0*(exp((If*Rs+Vf)/(n*Vt))-1)-(If*Rs+Vf)/Rp

This application

 

• 

will rearrange this equation to give i in terms of the LambertW equation

• 

find the best-fit parameters against experimental data

References:

http://www.hindawi.com/journals/jam/2013/362619/

Gray, J.L., The Physics of the Solar Cell, in Handbook of Photovoltaic Science and Engineering, A. Luque, Hegedus, S., Editor. 2011, John Wiley and Sons

 

Rearrange Diode Equation

restart

I_r := solve(If = Ipv-I0*(exp((If*Rs+Vf)/(n*Vt))-1)-(If*Rs+Vf)/Rp, If)

-(-(-LambertW(-I0*Rp*Rs*exp(Rp*(I0*Rs+Ipv*Rs+Vf)/(n*Vt*(Rp+Rs)))/(-Rp*Vt*n-Rs*Vt*n))+Rp*(I0*Rs+Ipv*Rs+Vf)/(n*Vt*(Rp+Rs)))*n*Vt+Vf)/Rs

I_pred := unapply(I_r, Vf, Ipv, I0, n, Rs, Rp):

Import Experimental I-V Data for Photo Voltaic Diode

data := ExcelTools:-Import("diode experimental data.xlsx", "Sheet1")

data := Array(1..26, 1..2, {(1, 1) = -.2057, (1, 2) = .764, (2, 1) = -.1291, (2, 2) = .762, (3, 1) = -0.588e-1, (3, 2) = .7605, (4, 1) = 0.57e-2, (4, 2) = .7605, (5, 1) = 0.646e-1, (5, 2) = .76, (6, 1) = .1185, (6, 2) = .759, (7, 1) = .1678, (7, 2) = .757, (8, 1) = .2132, (8, 2) = .757, (9, 1) = .2545, (9, 2) = .7555, (10, 1) = .2924, (10, 2) = .754, (11, 1) = .3269, (11, 2) = .7505, (12, 1) = .3585, (12, 2) = .7465, (13, 1) = .3873, (13, 2) = .7385, (14, 1) = .4137, (14, 2) = .728, (15, 1) = .4373, (15, 2) = .7065, (16, 1) = .459, (16, 2) = .6755, (17, 1) = .4784, (17, 2) = .632, (18, 1) = .496, (18, 2) = .573, (19, 1) = .5119, (19, 2) = .499, (20, 1) = .5265, (20, 2) = .413, (21, 1) = .5398, (21, 2) = .3165, (22, 1) = .5521, (22, 2) = .212, (23, 1) = .5633, (23, 2) = .1035, (24, 1) = .5736, (24, 2) = -0.1e-1, (25, 1) = .5833, (25, 2) = -.123, (26, 1) = .59, (26, 2) = -.21})

V_data := convert(data[() .. (), 1], Vector):

I_data := convert(data[() .. (), 2], Vector):

p1 := plot(V_data, I_data, style = point, legend = "Experimental Data"):

T := 273.15+33:

Find Best-Fit Parameters

res := Statistics:-NonlinearFit(I_pred, V_data, I_data, parameterranges = [.1 .. 1, 0 .. 0.1e-3, 1 .. 2, 0.1e-1 .. .1, 1 .. 100], output = solutionmodule, iterationlimit = 50, optimalitytolerance = 0.1e-1):

pars := res:-Results(parametervector)

pars := Vector(5, {(1) = .7663937375048753, (2) = 0.936308114823049e-5, (3) = 1.923856439323053, (4) = 0.16002604408174137e-1, (5) = 51.387460064408074}, datatype = float[8])

res:-Results(residualsumofsquares)

0.1785240007e-2

Plot Model Curve Against Experimental Data

p2 := plot(('I_pred')(Vf, pars[1], pars[2], pars[3], pars[4], pars[5]), Vf = min(V_data) .. max(V_data), color = black, legend = ["Model Curve"], axesfont = [Arial], legendstyle = [font = [Arial]], size = [800, 500], gridlines):

plots:-display(p1, p2, title = "Parameter Estimation for Photovoltatic Diode", titlefont = [Arial, 18])

NULL