Skip to content

Series resistance calculation

SunSolve Power implements an analytical solution to compute the series resistance of a solar cell. The model accounts for the series resistance of each grid element (fingers, busbars, pads and ribbons), the contact resistance between these elements, lateral conduction at the cell surfaces (for example, current flowing through a diffused emitter layer), current flow through the wafer bulk, and resistance at the interfaces between the semiconductor and metal contacts.

Each element is treated as a resistive conductor that collects current from a defined active collection area of the solar cell. The power loss in each element is calculated based on its geometry and how that current enters and exits the element. The power loss is then converted into an equivalent series resistance.

We define Rs,cellR_{s,cell} as:

Rs,cell=ΔPcellIcell2AcellR_{s,\text{cell}} = \frac{\Delta P_{\text{cell}}}{I_{\text{cell}}^{2}} \cdot A_{\text{cell}}

Where ΔPcell\Delta P_{cell} is the total power loss caused by all resistive elements in the cell, IcellI_{cell} is the cell’s output current and AcellA_{cell} is the total active semiconductor area of the cell (the area that contributes current to the grid).

This definition makes RsR_s independent of cell size by using the units Ωcm2\Omega \cdot \text{cm}^2.


In SunSolve Power the metal grid is represented as a network of four element types:

  • Fingers, which collect current locally from the semiconductor.
  • Busbars, which collect current from many fingers and route it towards the pads.
  • Pads, which provide the connection points to the ribbons.
  • Ribbons, which carry current away from the cell to the external circuit.

On the illuminated side (assumed to be the front), photocurrent is generated uniformly in the active semiconductor area. That current first enters the fingers, then flows along the finger length into a busbar, then along a section of busbar from the finger entry point into the nearest contact pad, and finally along the ribbons. On the rear side, busbars and pads can also collect current directly from the semiconductor under their footprint.

If a grid has no busbars, then the current flows through the fingers to the intersection point with the ribbons, and then along the ribbons.

If the grid has no ribbons, then the current is extracted from the pads. In that case the grid resistance calculation appears as it might occur on an IV tester, where pairs of probes touch discrete locations on the busbar and extract the current during the measurement.

For the purposes of series-resistance calculation, each metal element:

  • is treated as a distributed resistor with a defined length, cross-section, current profile; and
  • is associated with an active semiconductor collection area AsegA_{\text{seg}} whose current flows through that element.

The solver ensures that every part of the active semiconductor area is associated with exactly one path through this metal network, which is why the active areas AsegA_{\text{seg}} and total active area AcellA_{\text{cell}} appear throughout the equations below.


For the numerical solution, SunSolve Power represents the front and rear grids as a network of connected sub-elements, corresponding to segments of fingers, busbars, pads and ribbons. Where the layout is sufficiently regular, the solver works on a representative unit cell of this network and scales the result to describe the full wafer. When the wafer shape or contact layout is too complex for a simple unit cell, the solver instead operates directly on the full layout constrained by the wafer boundary, without using symmetry-based scaling.

This section describes how the series resistance of each of these elements is calculated.

For any metal grid element (finger, busbar, pad or ribbon) the resistive power loss is

ΔP=ρLIL2g(B0,BL,L)\Delta P = \frac{\rho \cdot L \cdot I_L^2}{g(B_0, B_L, L)}

where:

SymbolMeaningρ\rho, electrical resistivity of the metalLL, length of the elementILI_L, current exiting the elementB0B_0, cross-sectional area at the start of the elementBLB_L, cross-sectional area at the end of the elementgg, geometry factor that accounts for tapering and current profile

This compact form is valid when the cross-section varies linearly along the element length and the current is either triangular or constant.

The term ‘triangular current’ represents the case where I0=0I_0 = 0. In this case, the current is zero at l = 0 (such as at the end of a finger) and it increases linearly to reach its maximum at l = L (such as where a finger meets a busbar). The term ‘tapered current’ represents the case where I0I_0 is finite and IL>I0I_L > I_0.


The geometry factor g(B0,BL,L)g(B_0,B_L,L) captures how tapering and the current profile along an element modify its resistive loss. In SunSolve Power the solver uses three closed-form cases, applied as follows.

Triangular current, constant-width element

This case is used for fingers and busbars when they have a constant cross-section. The current increases linearly along the element, and

g(B0,BL,L)=3BLg(B_0,B_L,L) = {3 B_L}

Triangular current, tapered element

This case is used for tapered fingers and tapered busbars. The cross-section varies linearly from B0B_0 at the start of the element to BLB_L at the end, and the current still increases linearly along the length. The geometry factor is

g(B0,BL,L)=(BLB0)3BL2B0222B0(BLB0)+B02ln(BLB0)g(B_0,B_L,L) = \frac{(B_L-B_0)^3}{\dfrac{B_L^2-B_0^2}{2} - 2 B_0 (B_L-B_0) + B_0^2 \ln\left(\dfrac{B_L}{B_0}\right)}

Constant current, constant-width element

This case is used for the metal ribbons (tabbing) and for any other elements modelled with a constant-current, constant-width profile. The geometry factor is

g(B0,BL,L)=BLg(B_0,B_L,L) = {B_L}

The cross-section B(l)B(l) depends on the selected profile:

Cross-sectionB(l)\mathbf{B}(l)Rectangular, W(l)HW(l) \cdot HTriangular, 12W(l)H\tfrac{1}{2} \cdot W(l) \cdot HCircular, πW(l)2\pi \cdot W(l)^2Elliptical, πW(l)H\pi \cdot W(l) \cdot HSemi-elliptical, 12πW(l)H\tfrac{1}{2} \cdot \pi \cdot W(l)\cdot HTrapezoidal, 12H(W1(l)+W2(l))\tfrac{1}{2} \cdot H \cdot \bigl(W_1(l) + W_2(l)\bigr)Pentagonal (rectangle-based), 12W(l)(H1+H2)\tfrac{1}{2} \cdot W(l) \cdot \bigl(H_1 + H_2\bigr)Pseudo-rectangular (type A), W(l)HW(l)2 ⁣(12π8)W(l) \cdot H - W(l)^2\!\left(\tfrac12-\tfrac{\pi}{8}\right)Pseudo-rectangular (type B), W(l)HH2 ⁣(2π2)W(l) \cdot H - H^2\!\left(2-\tfrac{\pi}{2}\right)

Widths are allowed to taper linearly along the element.

The options available for the cross-section of different elements can be seen on the relevant section of the electrode page.


The current exiting a grid element is proportional to the active semiconductor area feeding it:

IL=JactiveAseg=IcellAcellAsegI_L = J_{\text{active}} \cdot A_{\text{seg}} = \frac{I_{\text{cell}}}{A_{\text{cell}}} \cdot A_{\text{seg}}

where:

SymbolMeaningAsegA_{\text{seg}}, active area collected by the elementAcellA_{\text{cell}}, total active cell areaJactiveJ_{\text{active}}, uniform photocurrent density

Active area and current flow through the grid

Section titled “Active area and current flow through the grid”

Internally the solver builds these active areas bottom‑up, starting from the semiconductor and propagating through the metal network:

  • Fingers define stripes of semiconductor that feed them. On the illuminated side these stripes are reduced for the finger footprint and any ribbon shading. On the rear side the stripes are not reduced by front shading and, for interdigitated layouts, use the full gap between neighbouring fingers.
  • Busbars accumulate the active areas of all fingers that connect to them. On the rear side they also collect current directly from the semiconductor under their own footprint, which is added to their active area.
  • Pads sum the active areas of all fingers and busbars that feed into them. On the rear side each pad also adds its own footprint on the wafer. The sum of pad active areas, scaled from the unit grid to the full wafer, is what the solver uses as AcellA_{\text{cell}} in the series-resistance formulas.
  • Ribbons do not contact the semiconductor directly. Instead, each ribbon segment sees the active area of the pad beneath it as the area whose current enters the ribbon at that segment, and its total active area along the ribbon increases as it passes successive pads.

In module simulations, where ribbons run between separate wafers, the solver also includes the physical spacing between adjacent wafers in the geometric length of each ribbon span so that the ribbon series resistance accounts for the interconnections between cells.

This construction ensures that every square centimetre of active semiconductor area is associated with exactly one path through the metal network (via fingers, then busbars and pads, and finally into the ribbons), which is the basis for the AsegA_{\text{seg}} and AcellA_{\text{cell}} terms in the equations above.


Series-resistance contribution of one grid element

Section titled “Series-resistance contribution of one grid element”

Combining the definitions above, the series resistance contribution of any metal element is

Rs=ρLg(B0,BL,L)[AsegAcell]2AcellR_s = \frac{\rho \cdot L}{g(B_0,B_L,L)} \cdot \left[ \frac{A_{\text{seg}}}{A_{\text{cell}}} \right]^2 \cdot A_{\text{cell}}

This is the core equation used by the grid Rs calculation. It is applied to every finger, busbar, pad and ribbon and summed to obtain the total metal-grid resistance. Note that the absolute value of the current has dropped out of the equation, making the series‑resistance calculation possible without needing that value explicitly.


Contact resistance between the semiconductor and a grid element is treated separately.

The power loss is:

ΔPcont=rcontIcont2Acont\Delta P_{\text{cont}} = \frac{r_{\text{cont}} \cdot I_{\text{cont}}^2}{A_{\text{cont}}}

where rcontr_{\text{cont}} is the specific contact resistivity and AcontA_{\text{cont}} is the metal–semiconductor contact area.

The current entering the element from the semiconductor is:

Icont=IcellAcell, activeAs,activeI_{\text{cont}} = \frac{I_{\text{cell}}}{A_{\text{cell, active}}} \cdot A_{s, active}

where As,activeA_{s, active} is the active semiconductor area feeding the element directly. Note that it is not necessarily the same as Aseg{A_{seg}} the active of the grid element, as defined above. Take, for example, a busbar that collects current from a large area of the cell via a set of fingers. In this case, Aseg{A_{seg}} is large and As,active{A_{s, active}} is much smaller. (It might even be zero if the busbar shades any collection that it could have made).

The series‑resistance contribution from contact resistance can therefore be written as:

Rs,cont=rcontAcont(As,activeAcell, active)2AcellR_{s,\text{cont}} = \frac{r_{\text{cont}}}{A_{\text{cont}}} \cdot \left( \frac{A_{s, active}}{A_{\text{cell, active}}} \right)^2 \cdot A_{\text{cell}}

At solver level, this expression is applied separately to each element type, with different interpretations of AcontA_{\text{cont}} and As,activeA_{s, active}:

  • FingersAcontA_{\text{cont}} is the finger footprint on the wafer (finger width times finger length) unless a sheet resistance is defined under the finger (in that case see next section regarding current crowding). As,activeA_{s, active} is the active semiconductor area whose current enters directly through that finger.
  • Busbars (rear side only) – the busbar contact term represents busbar–wafer contact. AcontA_{\text{cont}} is the busbar footprint on the wafer and As,activeA_{s, active} is the same footprint area, because the rear busbar collects current vertically from the semiconductor beneath it. When the busbars are on the front side this contribution is set to zero, regardless of the specified contact resistivity.
  • Pads (rear side only) – the pad contact term represents pad–wafer contact. AcontA_{\text{cont}} is the pad footprint and As,activeA_{s, active} is that same area. As with busbars, pad contact resistance is only included when the pads are on the rear side.
  • Ribbons – ribbon contact resistance represents the soldered (or bonded) interface between each ribbon segment and its pad, not a ribbon–wafer contact. In this case the solver uses the pad footprint as the contact area in the formula, so AcontA_{\text{cont}} equals the pad area under that segment while As,activeA_{s, active} is the total semiconductor area whose current exits through that pad.

Current crowding and transfer length for fingers

Section titled “Current crowding and transfer length for fingers”

When a conductive surface layer (front or rear skin) is enabled and has a finite sheet resistance RR_\square, the current under a finger contact is not uniform. Instead it crowds into a region of width comparable to the transfer length LTL_T, so that only an effective part of the nominal finger width carries current.

For a given specific contact resistivity rcontr_{\text{cont}} and sheet resistance RR_\square the transfer length is:

LT=rcontRL_T = \sqrt{\frac{r_{\text{cont}}}{R_\square}}

For a constant-width finger of width WFW_F the effective contact width is:

WE=2LTtanh ⁣(WF2LT)W_E = 2 L_T \tanh\!\left(\frac{W_F}{2 L_T}\right)

and the series resistance contribution of the finger contact is increased by the factor

Rs,cont(finger, eff)=Rs,cont(finger)WFWER_{s,\text{cont}}^{\text{(finger, eff)}} = R_{s,\text{cont}}^{\text{(finger)}} \cdot \frac{W_F}{W_E}

For a tapered finger SunSolve uses the average of the maximum and minimum widths. Writing WF,maxW_{F,\max} and WF,minW_{F,\min} for the maximum and minimum finger widths,

WE,max=2LTtanh ⁣(WF,max2LT),WE,min=2LTtanh ⁣(WF,min2LT),W_{E,\max} = 2 L_T \tanh\!\left(\frac{W_{F,\max}}{2 L_T}\right), \qquad W_{E,\min} = 2 L_T \tanh\!\left(\frac{W_{F,\min}}{2 L_T}\right),

and

WF,av=WF,max+WF,min2,WE,av=WE,max+WE,min2W_{F,\text{av}} = \frac{W_{F,\max} + W_{F,\min}}{2}, \qquad W_{E,\text{av}} = \frac{W_{E,\max} + W_{E,\min}}{2}

The contact-resistance contribution for a tapered finger is then scaled as

Rs,cont(finger, eff)=Rs,cont(finger)WF,avWE,avR_{s,\text{cont}}^{\text{(finger, eff)}} = R_{s,\text{cont}}^{\text{(finger)}} \cdot \frac{W_{F,\text{av}}}{W_{E,\text{av}}}

This correction is only applied when the emitter or surface sheet resistance is enabled in the solver. For large rcontr_{\text{cont}} (or very low RR_\square) the transfer length becomes comparable to the finger width, WEWFW_E \approx W_F, and the current-crowding correction becomes negligible.

SymbolMeaningrcontr_{\text{cont}}, specific contact resistivity (interface metal–semiconductor)RR_\square, sheet resistance of the underlying emitter or surface layerLTL_T, transfer length of the contactWFW_F, nominal finger widthWEW_E, effective contact width for a constant-width fingerWFmaxW_{Fmax}, maximum width of a tapered fingerWFminW_{Fmin}, minimum width of a tapered fingerWFavW_{F\text{av}}, average nominal width of a tapered fingerWEmaxW_{Emax}, effective width corresponding to WFmaxW_{Fmax}WEminW_{Emin}, effective width corresponding to WFminW_{Fmin}WEavW_{E\text{av}}, average effective width of a tapered finger

In addition to the metal grid, SunSolve Power can include lateral conduction in conductive surface layers such as the front and rear emitters or transparent conductive oxides (TCOs). In the user interface these are labelled Front skin and Rear skin and are specified via their sheet resistance RR_\square (in Ω/\Omega/\square).

Each skin is modelled as a uniform conductive sheet between parallel fingers. For a given side of the cell, the solver uses the finger pitch pp (centre-to-centre spacing between adjacent fingers) and the finger spacing ss (distance between the edges of neighbouring fingers) to compute that layer’s series-resistance contribution in Ωcm2\Omega \cdot \text{cm}^2 as

Rs,skin=Rps12R_{s,\text{skin}} = R_\square \cdot \frac{p \cdot s}{12}

Here

QuantityMeaningRR_\square, sheet resistance entered in the UI for the front or rear skinpp, finger pitch (perpendicular distance between adjacent fingers)ss, finger spacing, equal to the pitch minus the finger width

The front and rear skins are solved independently using this expression (with the appropriate pitch and width for each side) and their Rs,skinR_{s,\text{skin}} values are added to Rs,cellR_{s,\text{cell}}.


SunSolve Power can also include bulk resistance through the wafer base, configured in the UI as Base resistance via a bulk resistivity ρbase\rho_\text{base} (in Ωcm\Omega \cdot \text{cm}) and a cell thickness tt.

The base is treated as a uniform slab of semiconductor carrying current vertically between the front and rear surfaces. The corresponding series-resistance contribution in Ωcm2\Omega\cdot\text{cm}^2 is:

Rs,base=ρbasetR_{s,\text{base}} = \rho_\text{base} \cdot t

where tt is the physical wafer thickness (the thickness entered in the UI is internally converted to centimetres for this calculation). This term is added to the metal-grid and contact contributions when the Base resistance option is enabled.


The total value of cell series resistance is the sum of all calculated resistances.

The grid calculator computes:

Rs,cell=grid elementsRs  +contactsRs,cont  +Rs,skins  +Rs,bulkR_{s,\text{cell}} = \sum_{\text{grid elements}} R_s \;+ \sum_{\text{contacts}} R_{s,\text{cont}} \;+ R_{s,\text{skins}} \;+ R_{s,\text{bulk}}

where Rs,skinsR_{s,\text{skins}} includes any enabled front and rear conductive skins, and Rs,bulkR_{s,\text{bulk}} is the bulk (base) resistance contribution.