|
| 1 | +''' |
| 2 | + PVL_CALCPARAMS_DESOTO Applies temperature and irradiance corrections to reference parameters per [1] |
| 3 | +
|
| 4 | + Syntax |
| 5 | + [IL, I0, Rs, Rsh, nNsVth] = pvl_calcparams_desoto(S, Tcell, alpha_isc, ModuleParameters, EgRef, dEgdt) |
| 6 | + [IL, I0, Rs, Rsh, nNsVth] = pvl_calcparams_desoto(S, Tcell, alpha_isc, ModuleParameters, EgRef, dEgdt, M) |
| 7 | + [IL, I0, Rs, Rsh, nNsVth] = pvl_calcparams_desoto(S, Tcell, alpha_isc, ModuleParameters, EgRef, dEgdt, M, Sref) |
| 8 | + [IL, I0, Rs, Rsh, nNsVth] = pvl_calcparams_desoto(S, Tcell, alpha_isc, ModuleParameters, EgRef, dEgdt, M, Sref, Tref) |
| 9 | + |
| 10 | + Description |
| 11 | + Applies the temperature and irradiance corrections to the IL, I0, |
| 12 | + Rs, Rsh, and a parameters at reference conditions (IL_ref, I0_ref, |
| 13 | + etc.) according to the De Soto et. al description given in [1]. The |
| 14 | + results of this correction procedure may be used in a single diode |
| 15 | + model to determine IV curves at irradiance = S, cell temperature = |
| 16 | + Tcell. |
| 17 | +
|
| 18 | + Input Parameters: |
| 19 | + S - The irradiance (in W/m^2) absorbed by the module. S must be >= 0. |
| 20 | + May be a vector of irradiances, but must be the same size as all |
| 21 | + other input vectors. Due to a division by S in the script, any S |
| 22 | + value equal to 0 will be set to 1E-10. |
| 23 | + Tcell - The average cell temperature of cells within a module in C. |
| 24 | + Tcell must be >= -273.15. May be a vector of cell temperatures, but |
| 25 | + must be the same size as all other input vectors. |
| 26 | + alpha_isc - The short-circuit current temperature coefficient of the |
| 27 | + module in units of 1/C. |
| 28 | + ModuleParameters - a struct with parameters describing PV module |
| 29 | + performance at reference conditions according to DeSoto's paper. A |
| 30 | + Parameters may be generated or found by lookup. For ease of use, PVL_RETREIVESAM |
| 31 | + can automatically generate a struct based on the most recent SAM CEC module |
| 32 | + database. The ModuleParameters struct must contain (at least) the |
| 33 | + following 5 fields: |
| 34 | + ModuleParameters.a_ref - modified diode ideality factor parameter at |
| 35 | + reference conditions (units of eV), a_ref can be calculated from the |
| 36 | + usual diode ideality factor (n), number of cells in series (Ns), |
| 37 | + and cell temperature (Tcell) per equation (2) in [1]. |
| 38 | + ModuleParameters.IL_ref - Light-generated current (or photocurrent) |
| 39 | + in amperes at reference conditions. This value is referred to |
| 40 | + as Iph in some literature. |
| 41 | + ModuleParameters.I0_ref - diode reverse saturation current in amperes, |
| 42 | + under reference conditions. |
| 43 | + ModuleParameters.Rsh_ref - shunt resistance under reference conditions (ohms) |
| 44 | + ModuleParameters.Rs_ref - series resistance under reference conditions (ohms) |
| 45 | + EgRef - The energy bandgap at reference temperature (in eV). 1.121 eV |
| 46 | + for silicon. EgRef must be >0. |
| 47 | + dEgdT - The temperature dependence of the energy bandgap at SRC (in 1/C). |
| 48 | + May be either a scalar value (e.g. -0.0002677 as in [1]) or a |
| 49 | + vector of dEgdT values corresponding to each input condition (this |
| 50 | + may be useful if dEgdT is a function of temperature). |
| 51 | + M - An optional airmass modifier, if omitted, M is given a value of 1, |
| 52 | + which assumes absolute (pressure corrected) airmass = 1.5. In this |
| 53 | + code, M is equal to M/Mref as described in [1] (i.e. Mref is assumed |
| 54 | + to be 1). Source [1] suggests that an appropriate value for M |
| 55 | + as a function absolute airmass (AMa) may be: |
| 56 | + M = polyval([-0.000126, 0.002816, -0.024459, 0.086257, 0.918093], AMa) |
| 57 | + M may be a vector, but must be of the same size as all other input |
| 58 | + vectors. |
| 59 | + Sref - Optional reference irradiance in W/m^2. If omitted, a value of |
| 60 | + 1000 is used. |
| 61 | + Tref - Optional reference cell temperature in C. If omitted, a value of |
| 62 | + 25 C is used. |
| 63 | + |
| 64 | + Output: |
| 65 | + IL - Light-generated current in amperes at irradiance=S and |
| 66 | + cell temperature=Tcell. |
| 67 | + I0 - Diode saturation curent in amperes at irradiance S and cell temperature Tcell. |
| 68 | + Rs - Series resistance in ohms at irradiance S and cell temperature Tcell. |
| 69 | + Rsh - Shunt resistance in ohms at irradiance S and cell temperature Tcell. |
| 70 | + nNsVth - modified diode ideality factor at irradiance S and cell temperature |
| 71 | + Tcell. Note that in source [1] nNsVth = a (equation 2). nNsVth is the |
| 72 | + product of the usual diode ideality factor (n), the number of |
| 73 | + series-connected cells in the module (Ns), and the thermal voltage |
| 74 | + of a cell in the module (Vth) at a cell temperature of Tcell. |
| 75 | +
|
| 76 | + Notes: |
| 77 | + If the reference parameters in the ModuleParameters struct are read |
| 78 | + from a database or library of parameters (e.g. System Advisor Model), |
| 79 | + it is important to use the same EgRef and dEgdT values that |
| 80 | + were used to generate the reference parameters, regardless of the |
| 81 | + actual bandgap characteristics of the semiconductor. For example, in |
| 82 | + the case of the System Advisor Model library, created as described in |
| 83 | + [3], EgRef and dEgdT for all modules were 1.121 and -0.0002677, |
| 84 | + respectively. |
| 85 | +
|
| 86 | + Sources: |
| 87 | +
|
| 88 | + [1] W. De Soto et al., "Improvement and validation of a model for |
| 89 | + photovoltaic array performance", Solar Energy, vol 80, pp. 78-88, |
| 90 | + 2006. |
| 91 | +
|
| 92 | + [2] System Advisor Model web page. https://sam.nrel.gov. |
| 93 | +
|
| 94 | + [3] A. Dobos, "An Improved Coefficient Calculator for the California |
| 95 | + Energy Commission 6 Parameter Photovoltaic Module Model", Journal of |
| 96 | + Solar Energy Engineering, vol 134, 2012. |
| 97 | +
|
| 98 | + [4] O. Madelung, "Semiconductors: Data Handbook, 3rd ed." ISBN |
| 99 | + 3-540-40488-0 |
| 100 | +
|
| 101 | + See also |
| 102 | + PVL_SAPM PVL_SAPMCELLTEMP PVL_SINGLEDIODE |
| 103 | + PVL_SAMLIBRARYREADER_CECMODULES |
| 104 | +
|
| 105 | +
|
| 106 | + This table of reference bandgap energies (EgRef), bandgap energy |
| 107 | + temperature dependence (dEgdT), and "typical" airmass response (M) is |
| 108 | + provided purely as reference to those who may generate their own |
| 109 | + reference module parameters (a_ref, IL_ref, I0_ref, etc.) based upon the |
| 110 | + various PV semiconductors. Again, we stress the importance of |
| 111 | + using identical EgRef and dEgdT when generation reference |
| 112 | + parameters and modifying the reference parameters (for irradiance, |
| 113 | + temperature, and airmass) per DeSoto's equations. |
| 114 | + ----------------------------------------------------------------------- |
| 115 | +
|
| 116 | + Silicon (Si): |
| 117 | + EgRef = 1.121 |
| 118 | + dEgdT = -0.0002677 |
| 119 | + M = polyval([-0.000126 0.002816 -0.024459 0.086257 0.918093], AMa) |
| 120 | + Source = Reference 1 |
| 121 | + Cadmium Telluride (CdTe): |
| 122 | + EgRef = 1.475 |
| 123 | + dEgdT = -0.0003 |
| 124 | + M = polyval([-2.46E-5 9.607E-4 -0.0134 0.0716 0.9196], AMa) |
| 125 | + Source = Reference 4 |
| 126 | + Copper Indium diSelenide (CIS): |
| 127 | + EgRef = 1.010 |
| 128 | + dEgdT = -0.00011 |
| 129 | + M = polyval([-3.74E-5 0.00125 -0.01462 0.0718 0.9210], AMa) |
| 130 | + Source = Reference 4 |
| 131 | + Copper Indium Gallium diSelenide (CIGS): |
| 132 | + EgRef = 1.15 |
| 133 | + dEgdT = ???? |
| 134 | + M = polyval([-9.07E-5 0.0022 -0.0202 0.0652 0.9417], AMa) |
| 135 | + Source = Wikipedia |
| 136 | + Gallium Arsenide (GaAs): |
| 137 | + EgRef = 1.424 |
| 138 | + dEgdT = -0.000433 |
| 139 | + M = unknown |
| 140 | + Source = Reference 4 |
| 141 | +''' |
| 142 | + |
| 143 | +import pandas as pd |
| 144 | +import pvl_tools |
| 145 | +import numpy as np |
| 146 | + |
| 147 | + |
| 148 | +def pvl_calcparams_desoto(S,Tcell,alpha_isc,ModuleParameters,EgRef,dEgdT,M=1,Sref=1000,Tref=25): |
| 149 | + |
| 150 | + Vars=locals() |
| 151 | + |
| 152 | + Expect={'S':('x >= 0') , |
| 153 | + 'Tcell':('x >= - 273.15') , |
| 154 | + 'alpha_isc': (''), |
| 155 | + 'ModuleParameters': (''), |
| 156 | + 'EgRef': ('x > 0'), |
| 157 | + 'dEgdT': (''), |
| 158 | + 'M': ('num','default','default=1'), |
| 159 | + 'Sref':('default','default=1000'), |
| 160 | + 'Tref':('default','default=25') |
| 161 | + } |
| 162 | + |
| 163 | + var=pvl_tools.Parse(Vars,Expect) |
| 164 | + |
| 165 | + var.M=np.max(var.M,0) |
| 166 | + a_ref=var.ModuleParameters.A_ref |
| 167 | + IL_ref=var.ModuleParameters.I_l_ref |
| 168 | + I0_ref=var.ModuleParameters.I_o_ref |
| 169 | + Rsh_ref=var.ModuleParameters.R_sh_ref |
| 170 | + Rs_ref=var.ModuleParameters.R_s |
| 171 | + |
| 172 | + |
| 173 | + k=8.617332478e-05 |
| 174 | + Tref_K=var.Tref + 273.15 |
| 175 | + Tcell_K=var.Tcell + 273.15 |
| 176 | + |
| 177 | + var.S[var.S == 0]=1e-10 |
| 178 | + E_g=var.EgRef * ((1 + var.dEgdT*((Tcell_K - Tref_K)))) |
| 179 | + |
| 180 | + nNsVth=a_ref*((Tcell_K / Tref_K)) |
| 181 | + |
| 182 | + IL=var.S / var.Sref *(var.M) *((IL_ref + var.alpha_isc * ((Tcell_K - Tref_K)))) |
| 183 | + I0=I0_ref * (((Tcell_K / Tref_K) ** 3)) * (np.exp((var.EgRef / (k*(Tref_K))) - (E_g / (k*(Tcell_K))))) |
| 184 | + Rsh=Rsh_ref * ((var.Sref / var.S)) |
| 185 | + Rs=Rs_ref |
| 186 | + |
| 187 | + return IL,I0,Rs,Rsh,nNsVth |
0 commit comments