Calculating diode maximum power disspation using Python

Most diode datasheets don’t list a maximum power dissipation. Instead, they list a thermal resistance from the junction to the leads and from the junction to the ambient air.

Based on this, calculating the maximum power dissipation is easy. Check the maximum allowable operating temperature (typically 150°C) and compute how many watts are neccessary to heat the diode up to that temperature from an assumed (maximum) ambient temperature.

$$P_{\text{max}} = \frac{T_{\text{max}} - T_{\text{ambient}}}{R_{\text{jl}}}$$

Here, we use $R_{\text{jl}}$ as the thermal resistance from the junction to the leads, assuming a sufficently large heatsink (i.e. copper plane) is used to transfer away the heat.

In this simple formula, we assume that the thermal resistance from the junction to the ambient air is negligible (since it’s typicall much much higher than the thermal resistance to the leads).

In theory, you could include some thermal dissipation from the junction to the ambient air in addition to the thermal resistance to the leads, but this rather small effect is typically more than compensated for by the fact that in practical PCBs, your copper plane heatsink will not be perfect and hence lead to a slightly higher thermal resistance than the datasheet’s value.

Here’s how you can do that in Python. Note that we assume some fixed values for the thermal resistance (which I found in some datasheets), but you should always use the values from the datasheet of the diode you’re actually using!.

However, you can use these values as a general rule of thumb which package you can use for a given power dissipation (no liability is assumed for breaking your diodes :-) )

import numpy as np
from UliEngineering.EngineerIO import *
from matplotlib import pyplot as plt
import matplotlib.ticker as mtick
plt.style.use("ggplot")

environment_temperatures = np.linspace(-40, 85, 1000)

# Compute the maximum power dissipation
def diode_max_power_dissipation(environment_temperature, thermal_resistance, max_operating_temp=150.0):
    return (max_operating_temp - environment_temperatures) / thermal_resistance

sod323_max_power_dissipation = diode_max_power_dissipation(environment_temperatures, 90)
sod123_max_power_dissipation = diode_max_power_dissipation(environment_temperatures, 40)
sma_max_power_dissipation = diode_max_power_dissipation(environment_temperatures, 17)
smb_max_power_dissipation = diode_max_power_dissipation(environment_temperatures, 15)
smc_max_power_dissipation = diode_max_power_dissipation(environment_temperatures, 10)

def format_celsius(value, pos=None):
    return format_value(value, '°C', significant_digits=3)

def format_watt(value, pos=None):
    return format_value(value, 'W')

plt.plot(environment_temperatures, sod323_max_power_dissipation, label="SOD323")
plt.plot(environment_temperatures, sod123_max_power_dissipation, label="SOD123")
plt.plot(environment_temperatures, sma_max_power_dissipation, label="SMA")
plt.plot(environment_temperatures, smb_max_power_dissipation, label="SMB")
plt.plot(environment_temperatures, smc_max_power_dissipation, label="SMC")
plt.gca().legend()
plt.gca().yaxis.set_major_formatter(mtick.FuncFormatter(format_watt))
plt.gca().xaxis.set_major_formatter(mtick.FuncFormatter(format_celsius))
plt.xlabel("Ambient temperature (°C)")
plt.ylabel("Power dissipation (W)")
plt.title("Diode power dissipation")
plt.gcf().set_size_inches(10, 6)
plt.savefig("/ram/diode_power_dissipation.svg")

Diode power dissipation for common packages