Optimization of thin film solar cells with CODE

Thin film solar cells work like this: Photons of sun light are absorbed and generate charge carriers. These are separated and generate a voltage. If an electrical consumer is attached to the cell there is a steady flow of electric current driven by the sun.

In the simplest case there is a single active layer which produces the charge carriers by photon absorption. It must be sandwiched between electrically conductive layers. Obviously at least one of the conducting layers must be transparent for the light which is used to generate the current.

The graph below shows the basic structure of a thin film solar cell: Sun light is incident through a glass substrate and a transparent conductive layer (TCO). At the bottom of the active layer (Absorber) is a metallic backside contact.

In a first approach one could compute and optimize the absorption of light in the active layer. This would be possible in CODE using an object of type 'layer absorption'. This is available in the list of spectra and returns (as a spectrum) the fraction of light absorbed in a selected layer of the coating. Very likely the solution of this optimization would be a semi-infinite active layer which absorbs all the light that has entered. This is, obviously, not a reasonable solution: The generated charge carriers should disappear quickly into the electrical contacts in order to avoid losses due to recombination. The optimization must be able to take into account this requirement.

With CODE you can optimize a thin film solar cell as follows. First you generate an object of type 'Charge carrier generation' in the list of spectra. You have to select the active layer and specify the 'number of sources': This defines how many sampling points in the depth of the active layer are used to compute the depth profile of the local absorption. Values between 20 and 100 should be ok. Next you should set the spectral range for the object and finally open the subobject 'Internal efficiency' in the treeview. This object defines the internal quantum efficiency, i.e. the likelihood of an absorbed photon to end up in a charge carrier that contributes to the electrical current. Internal efficiency objects have a subobject called 'Definition' which looks a little like the list of susceptibilities. Here you can define the shape of the internal efficiency - you may compose oscillators and several other terms. In this demo example an object of type 'Free formula'is used. The formula is just the constant C1. Later on C1 will be computed as a function of the layer thickness, expressing that the internal efficiency depends in a certain way on the thickness of the active layer. Now everything is defined and we can compute the first version of the charge carrier generation efficiency:

Knowing the charge carrier generation efficiency, we can compute the generated photocurrent by multiplying the efficiency with the spectrum of the sun and integrating over the whole wavelength range of interest. This can be done by creating an object of type 'Photocurrent' in the list of integral quantities. Like with all integral quantities we need to assign a spectrum to the photocurrent object. This has to be the charge carrier efficiency spectrum, of course. Editing the photocurrent object gives you the chance to specify the total illumination power in W/m^2 and the spectral distribution of the solar radiation. The final value of the photocurrent is then computed in mA/cm^2.

Optimizing the thin film solar cell now means to set a high target value for the photocurrent and select the layer thicknesses of the coating system as fit parameters. At this time we can also take into account that the internal efficiency depends on the thickness of the active layer. To do so, the demo configuration has a master parameter called Absorber_thickness. Master parameters can be used in expressions to compute other model parameters. This is done in the list of fitparameters. In our case, the thickness of the active layer is set equal to Absorber_thickness, and the internal efficiency parameter C1 is computed as 0.7 - Absorber_thickness/600. This means that with increasing thickness the efficiency drops down. The fit parameters which are modified in order to get the target value of the photocurrent are the TCO thickness and the master parameter Absorber_thickness. This is the situation before the fit is started:

Pressing Start the automatic fit is launched and after a short while the following optimized thickness values are obtained:

Note that the photocurrent is almost twice as high as in the starting situation although the thickness of the absorber layer is less than 50%.

Once the model computes the photocurrent we are in a very comfortable position: We can easily predict what any modification of the thin film stack would mean for the performance. Below are some typical questions and answers.

Would there be an advantage to use gold as backside contact? No, the highest photocurrent is 5.53 mA/cm^2 only. The reason is the much lower reflection of radiation by gold back into the absorber layer, compared to aluminum.

What about silver? That should reflect even more as aluminum. Indeed, working with a silver backside contact gives a maximum of 6.44 mA/cm^2 which is significantly higher than the 5.95 mA/cm^2 for aluminum. Note that after replacing the backside material the layer thicknesses have to be re-optimized in order to get the real maximum of the photocurrent.

How much would we benefit from using 2 mm of very clear glass instead of 4 mm float glass? Taking 2 mm of Pilkington Optiwhite increases the photocurrent from 5.95 mA/cm^2 to 6.19 mA/cm^2.