Waste less time on Facebook — follow Brilliant.
Solar Energy

PV: Engineering and Advanced Concepts

Spectral losses with multiple junctions


In the last chapter, we learned how using the bandgap of a PV cell to collect energy from photons leads to spectral losses, which limits the PV cell’s performance. This quiz will explore how we can reduce these spectral losses (potentially surpassing the Shockley-Queisser limit) by using PV cells with multiple bandgaps.

Suppose we have a PV cell with two bandgaps: \(\SI{1}{\electronvolt}\) and \(\SI{2}{\electronvolt}\). Since we would need two PN junctions in this cell (one for the \(\SI{1}{\electronvolt}\) bandgap and one for the \(\SI{2}{\electronvolt}\) bandgap), we can call this a 2-junction (2J) cell. Suppose we also have some way of sending photons with energy \(> \SI{2}{\electronvolt}\) to the \(\SI{2}{\electronvolt}\) bandgap junction, and the rest of the incident photons to the \(\SI{1}{\electronvolt}\) bandgap junction. How would the efficiency of this cell compare to using a regular PV cell with just a \(\SI{1}{\electronvolt}\) bandgap or just a \(\SI{2}{\electronvolt}\) bandgap? Consider only spectral losses in the cell efficiency.

If we are only considering spectral losses, adding extra junctions in a PV cell improves efficiency. Adding a small bandgap lets us absorb photons which we otherwise couldn’t, and adding a large bandgap lets us collect high energy photons more efficiently. Adding more bandgaps allows us to collect a larger portion of the solar spectrum.

Recall the expression for calculating power collected by a single-junction cell (with the bandgap energy \(E^*\)) in the ultimate efficiency case: \[P_{PV} = \int_{E^*}^{\infty} B_E \frac{E^*}{E} dE\] Where \(B_E\) is the spectral irradiance of the radiation source illuminating our PV cell (i.e., the sun). For now, we’ll use Planck’s law and approximate the solar spectrum as a blackbody at \(\SI{5800}{\kelvin}\).

Note: in the past we’ve used the spectral irradiance as a function of wavelength (\(B_{\lambda}\)) and frequency (\(B_f\)), but here we are using spectral irradiance as a function of photon energy (\(B_E\)), since it is the most convenient way to directly choose the bandgap energies we want to use. \[B_E = \frac{2\pi E^3}{h^3 c^2}\frac{1}{e^{E/k_BT}-1}\]

If we have a PV cell with two bandgaps of \(E_1^*\) and \(E_2^*\), and a way of sorting photons to the correct junction, what is the expression for power collected? We will use the convention that higher subscripts correspond to higher energy, so \(E_2^* > E_1^*\)

We can find the ultimate efficiency of a PV cell by taking the electrical power collected by the cell and dividing by the total power incident on the cell, which can be calculated by integrating over all incident frequencies: \[P_{tot} = \int_0^{\infty} B_E dE\] \[\eta = \frac{P_{PV}}{P_{tot}}\]

The contour plot below shows ultimate efficiency versus different values of \(E_1^*\) and \(E_2^*\) for a two junction cell:

What is the highest ultimate efficiency (in percent) that can be achieved for a 2J cell?


The maximum ultimate efficiency in the Shockley-Queisser limit (with a single junction) is just under 44% for a bandgap of \(\SI{1.06}{\electronvolt}\). Using a 2J cell with the optimum bandgap values of \(\SI{0.77}{\electronvolt}\) and \(\SI{1.6}{\electronvolt}\), the ultimate efficiency can be increased to just above 60%.

Adding more junctions can improve efficiency further. The expression for power collected by a multi-junction cell (only considering spectral losses) follows a pattern that should be familiar if we compare the single junction case to the two junction case. For a multi-junction cell with \(N\) junctions, where the bandgap of the nth junction corresponds to the energy \(E_n^*\), the total collected power can be given by:

\[P_{PV} = \sum\limits_{n=1}^N \int_{E_n^*}^{E_{n+1}^*} B_E \frac{E_n^*}{E} dE\]

With \(E_{N+1}^* = \infty\). The code environment below uses this equation to calculate the ultimate efficiency of multi-junction cells with various bandgaps. You can change the values in the list “bgs” to change the bandgap energies. The values in this list will be used as the bandgap energies (in \(\si{\electronvolt}\)) for each junction.

Running the code will calculate the ultimate efficiency for a multi-junction cell with the specified bandgap energies. It will also output a plot with a curve showing the solar irradiance spectrum (approximated as a blackbody at \(\SI{5800}{\kelvin}\)) incident on the cell, and filled shapes showing the portion of the spectrum that is successfully collected as electricity in the ultimate efficiency case.

Does adding a new junction always increase ultimate efficiency?

Note: the code is all written for you, so you only need to change the list “bgs” if you want to explore the influence of bandgap energies on ultimate efficiency. However, if you’re interested in looking at the specifics of the calculation, the code includes commenting and documentation, so you can see exactly how the program is written.

# Change the bandgap energies of the MJ cell you want to find the ulimate efficiency of by modifying the list below. If you want more junctions, simply add more numbers to the list
bgs = [0.8,1.4,2.2] # bandgap energies (in eV) of our multi-junction cell


import math
import numpy as np
import scipy.integrate as integrate
import matplotlib.pyplot as plt

# first we define some constants we'll need in later calculations
h = 4.136e-15  # Planck constant in eV*s
c = 3e8 # Speed of light in m/s
kB = 8.617e-5 # Boltzmann constant in eV/K
Tsun = 5800 # Temperature of sun in K

# Define a function for spectral irradiance incident on our cell as a function of photon energy in eV
def B(E):
    return 2*math.pi*E**3/h**3/c**2*1/(math.exp(E/(kB*Tsun))-1)

# We can find the total power incident on the cell by integrating over the spectral irradiance. We integrate to 10 eV (rather than infinity) because B(10) << B(1), so the integral out to 10 will give us essentially the same answer as the integral to infinity (which isn't practical to compute)
Ptot = integrate.quad(lambda E: B(E), 0, 10)[0]

# We sort the bandgaps in ascending order, then append 10 eV to our bangaps because that's the energy we'll integrate out to for our highest bandgap
bgs = sorted(bgs)
# We initialize the collected PV power at 0
PPV = 0

for x in range(0,len(bgs)-1):
    # for each bandgap, we define the portion of the solar spectral irradiance that can be collected by that junction
    def intfun(E):
        return (bgs[x]/E)*2*math.pi*E**3/h**3/c**2*1/(math.exp(E/(kB*Tsun))-1)
    # we then integrate from that bandgap to the next bandgap to find the collected power from that junction, and add it to the total collected PV power
    PPV = PPV + integrate.quad(lambda E: intfun(E), bgs[x], bgs[x+1])[0]
# we can find efficiency by dividing total collected PV power by the total power in the solar spectrum
eff = PPV/Ptot
print('The ultimate efficiency of this multi-junction PV cell is',100*round(eff,4),'%')

# The code below outputs a plot to visualize the ultimate efficiency of the chosen MJ PV cell
# The curve shows the incident solar irradiance, while the filled in area shows the collected portion of the incident spectrum
# Note that the collected portion is very high immediately after a bandgap, since that bandgap can collect photons with energy just above it very efficiently

plt.plot(np.linspace(0.01,5),[B(x) for x in np.linspace(0.01,5)])

collected = []
for x in np.linspace(0.01,5,400):
    if x<bgs[0]:
        relbg = max([i for i in bgs if i <= x])
plt.fill_between(np.linspace(0.01,5,400), 0, collected)        

plt.xlabel('Photon energy [eV]')
plt.ylabel('Solar irradiance')
Python 3

In a 4J cell, the highest ultimate efficiency of almost 75% is achieved with bandgaps of \(\SI{0.54}{\electronvolt}\), \(\SI{1}{\electronvolt}\), \(\SI{1.54}{\electronvolt}\), and \(\SI{2.3}{\electronvolt}\). What is the ultimate efficiency (in percent) of a single junction cell with a bandgap of \(\SI{2.3}{\electronvolt}\)?

Adding more junctions to a PV cell can improve efficiency, but doing so requires using bandgaps far from the ideal value for single junction cells. For multi-junction cells, we need good PV materials that have small bandgaps (like Ge) and large bandgaps (like GaP), which we wouldn’t want to use in single-junction cells, since they wouldn’t be able to achieve high efficiency on their own.

Using multi-junction cells, we could potentially reach ultimate efficiencies much higher than what is possible with single junction cells, and in fact, some multi-junction cells have already demonstrated efficiencies higher than the SQ limit.

With infinite junctions, the ultimate efficiency could even reach 100%. However, as real single junction cells can’t achieve the ultimate efficiency value in practice, real MJ cells are also unable to reach their corresponding ultimate efficiency. The next quiz will look at real implementations of MJ cells and how to calculate more realistically achievable efficiencies for them.


Problem Loading...

Note Loading...

Set Loading...