Вы находитесь на странице: 1из 3

Calculating Temperature of Electronic PCB from Current

flowing through it or power consumed

Assumptions:

 The copper side with the traces is modeled as a sheet of copper rather than traces.
 The body is thin enough that thermal conductivity within the body is unimportant, and the entire device is
considered to be at a uniform temperature.
 Only the two broad surfaces contribute to the heat loss, the sides are neglected.
 The surroundings, including the air and radiative syncs, are at a uniform temperature TsTs
 Thermal coefficients: ϵcu=0.78, ϵpcb=0.50, hup=7.25 W/m2K, hdown=3.63 W/m2K

Under these assumptions we can estimate the temperature of the board by simply equating heat flows.
The heat coming in per unit time is from Joule heating from the current running through the copper and
is given by
qin=I2R = Power Dissipated
The heat flowing out has two escape mechanisms; radiative heat transfer to the surroundings which is given
by
qrad=ϵσA(T4−T4s) Here, ϵ = ϵcu +ϵpcb
and convective heat transfer to the air which is given by
qconv=hA(T−Ts) Here, h = hup + hdown
Now we just equate the heat flows

Qin=Qout
I2R=A[σ(T4−T4s)(ϵcu+ϵpcb)+(T−Ts)(hup+hdown)]

we can rearrange this to look like a quartic equation

σ(ϵcu+ϵpcb)T4+(hu+hd)T−[I2RA+σ(ϵcu+ϵpcb)T4s+(hu+hd)Ts]=0

This isn't easy to solve analytically, but Mathematica would have no problem. I put it into Python and
numerically found the minimum of the absolute value. I assumed a total resistance of R=1ΩR=1Ω so
your actual results may vary. The results are shown below.
Here is the Python code also:

import scipy.optimize as opt


import numpy as np
import matplotlib.pyplot as plt

# Define the function with some extra variables


def tempOpt( t, ts, i):
sigma = 5.67e-8
ec = 0.78
ep = 0.50
hu = 7.25
hd = 3.63
r = 1
a = 0.0103
e = ec + ep
h = hu + hd
out = sigma*e*t**4 + h*t - i**2*r/a - sigma*e*ts**4 - h*ts
return out

# Decide the ranges for the current and temperature


currents = np.linspace( 0.1, 20, 50)
temps = [0, 20, 40, 60, 80, 100]

# Calculate the value


resDict = dict()
for temp in temps:
resVec = np.zeros( np.shape( currents))
cnt = 0
for current in currents:
# Define a new function of one variable and a minimum at zero
# Don't forget to convert between Kelvin and Celcius
def tempNow( t):
return abs( tempOpt( t+273.15, temp+273.15, current))
# Find the minimum with a reasonable guess
guess = temp + 30
resVec[cnt] = opt.fmin( tempNow, 30)
cnt += 1
# Store results in dictionary
resDict[temp] = resVec

# Plot
plt.figure(1)
plt.clf()
for temp in temps:
plt.plot( currents, resDict[temp], lw=2)
plt.xlabel('Current (A)')
plt.ylabel('Board Temp ($^\circ$C)')
leg = plt.legend( temps, loc=2)
leg.set_title( '$T_s$ ($^\circ$C)')
plt.title('Board Temperature (R=1$\Omega$)')

Вам также может понравиться