-
Notifications
You must be signed in to change notification settings - Fork 34
Description
I am currently working on a simulation project involving TBC type solar cells, specifically focusing on shading effects. I have been using the PVmismatch library for these simulations, but I have encountered a discrepancy between the simulated IV curves and the actual measured results.
To provide more context, I have defined an 8 modules series system and have been progressively shading one component from one cell up to six cells. In my simulations, when I completely shade one cell on one component, the IV curve exhibits a "step-like" bending characteristic, which is not observed in the actual measurements. It is only when I increase the shading to six cells that the simulated results align with the actual measurements.
I suspect that this discrepancy might be due to the natural formation of Shunt Diodes between the interdigitated back-contact electrodes in TBC cells.To address this, I attempted to modify the calcCell function within the PVCell class by incorporating a Shunt Diode. Additionally, I increased the Vbypass value for each sub-string of cells to -5V, but the simulation results remained unchanged.
def calcCell(self):
"""
Calculate cell I-V curves.
Returns (Icell, Vcell, Pcell) : tuple of numpy.ndarray of float
"""
Vreverse = self.VRBD * self.pvconst.negpts
Vff = self.Voc
delta_Voc = self.VocSTC - self.Voc
# to make sure that the max voltage is always in the 4th quadrant, add
# a third set of points log spaced with decreasing density, from Voc to
# Voc @ STC unless Voc *is* Voc @ STC, then use an arbitrary voltage at
# 80% of Voc as an estimate of Vmp assuming a fill factor of 80% and
# Isc close to Imp, or if Voc > Voc @ STC, then use Voc as the max
if delta_Voc == 0:
Vff = 0.8 * self.Voc
delta_Voc = 0.2 * self.Voc
elif delta_Voc < 0:
Vff = self.VocSTC
delta_Voc = -delta_Voc
Vquad4 = Vff + delta_Voc * np.flipud(self.pvconst.negpts)
Vforward = Vff * self.pvconst.pts
Vdiode = np.concatenate((Vreverse, Vforward, Vquad4), axis=0)
Idiode1 = self.Isat1 * (np.exp(Vdiode / self.Vt) - 1.)
Idiode2 = self.Isat2 * (np.exp(Vdiode / 2. / self.Vt) - 1.)
Ishunt = Vdiode / self.Rsh
fRBD = 1. - Vdiode / self.VRBD
# use epsilon = 2.2204460492503131e-16 to avoid "divide by zero"
fRBD[fRBD == 0] = EPS
Vdiode_norm = Vdiode / self.Rsh / self.Isc0_T0
fRBD = self.Isc0_T0 * fRBD ** (-self.nRBD)
IRBD = (self.aRBD * Vdiode_norm + self.bRBD * Vdiode_norm ** 2) * fRBD
#2024.11.14 add dark current IShuntDiode from shunt diode
IShuntDiode = 1e-12 * (np.exp(0.0527 / self.Vt) - 1.)
Icell = self.Igen - Idiode1 - Idiode2 - Ishunt - IRBD + IShuntDiode
Icell_p = self.Igen - Idiode1 - Idiode2 - Ishunt - IRBD
# Vcell = Vdiode - Icell * self.Rs
Vcell = Vdiode - Icell_p * self.Rs
Pcell = Icell * Vcell
return Icell, Vcell, Pcell
# 2024/11/14 new diode model
# *-->--*--->---*--Rs--*-->-Icell--+
# ^ | | ^ ^
# | | | | |
# Igen Idiode Ishunt IDS Vcell
# | | | | |
# | v v | |
# *--<--*---<---*--<---*-----------=
Given these challenges, I would like to inquire whether the current version of the PVmismatch library supports shading simulation for BC (Back-Contact) structure solar cells. If not, there are any potential modifications or alternative approaches that might achieve more accurate simulation results?