Bipolar Junction Transistor Breakdown with Ib=0
Not being satisfied with the information out there on Ic-Vce curves, I decided to generate some of my own raw data. This study deals with BJT breakdown with a zero base current (Ib=0). A voltage source is attached between collector and emitter, and a current meter is connected in series with the collector. During the experiments, I increase the voltage until breakdown is detected, then push Vce to +1V after breakdown. Finally, the voltage is reversed until it returns to its starting position, by which point the transistor drops out of breakdown. This process is repeated 20 times to observe any deviations or drift effects. The transistor used was an NPN BC547B.
The first graph shows the overlay of 20 such runs, while the transistor is subject to forced air cooling:
The second graph shows the same 20 runs, with the transistor sitting in still air:
Observations:
- In both cases, a hysteresis is observed between entering breakdown mode and leaving it.
- Furthermore, the temperature rise in the uncooled case causes a second hysteresis effect between the positive-going voltage direction, and the negative-going return direction.
- The heating of the transistor increases its resistance, which makes for lower Ic values compared to the cooled conditions given the same Vce.
- The resistance of the transistor in the cooled case is about 500 ohms.
- Un the uncooled case, the forward-going resistance is hard to characterize, but is roughly 783 ohms (+- a lot). In the reverse case it is about 539 ohms.
- The immediate post-breakdown readings (the valley after the peak) are inaccurate as they seem to get lower with time, when holding Vce steady. These tests were executed at roughly 5 minutes/pass, with 10mV steps. A slower/faster execution will yield different results.
Possible Future Investigations:
- Examine the effect of prolonged exposure to breakdown conditions on the breakdown Vce point.
- Examine the effect of breakdown exposure on transistor current gain.
Note to self:
- Publish a time-series of these measurements so that any sequence trends can be identified instead of lumped together. A left-right slider that changes the image displayed would be the best way of presenting such data.
Here is the source code for doing the experiment. It requires a VISA driver to be installed, and the PyVISA module.
from visa import *
import msvcrt
def get_variable(prompt, unit, default):
value = raw_input("{0} ({1}) [{2}]: ".format(prompt, unit, default))
if (value):
return value
else:
return default
def get_key():
if msvcrt.kbhit():
return msvcrt.getch()
else:
return None
psu = instrument("GPIB::12")
dmm = instrument("GPIB::23")
psu.write("OUTPUT OFF")
dmm.write("F5RAN5T1")
volt_start = float(get_variable("Starting Voltage", "V", 68))
volt_increment = float(get_variable("Voltage Increment", "mV", 100)) / 1000
volt_excursion = float(get_variable("Breakdown Excursion", "V", 1))
volt_limit = float(get_variable("Voltage Limit", "V", 90))
curr_limit = float(get_variable("Current Limit", "mA", 30)) / 1000
curr_breakdown = float(get_variable("Breakdown Detection Threshold", "uA", 500)) / 1000000
iterations = int(get_variable("Iterations", "#", 1))
file_format = get_variable("File Format", "String", "BJT-{:03d}.txt")
psu.write("CURR {}".format(curr_limit))
iteration = 0
quit = False
while (iteration < iterations and not quit):
print("---> Iteration #{}".format(iteration + 1))
file = open(file_format.format(iteration), 'w')
psu.write("VOLT {}".format(volt_start))
psu.write("OUTPUT ON")
volt = volt_start
curr_prev = 0.0
breakdown = False
reverse = False
volt_breakdown = 0.0
while (volt < volt_limit):
psu.write("VOLT {}".format(volt))
curr = float(dmm.read())
if (curr - curr_prev > curr_breakdown):
breakdown = True
volt_breakdown = volt
curr_prev = curr
if (breakdown and volt >= volt_breakdown + volt_excursion):
reverse = True
log = "{:.2f} V, {:.2f} uA, breakdown={}, reverse={}".format(volt, curr*1000000, breakdown, reverse)
print(log)
file.write(log + "\n")
if (reverse):
volt -= volt_increment
else:
volt += volt_increment
if (volt < volt_start):
break
key = get_key()
if (key == 'q'):
quit = True
break
psu.write("OUTPUT OFF")
psu.write("VOLT {}".format(volt_start))
file.close()
iteration += 1
Here are the gnuplot commands for displaying the data:
set key left set title "BJT Breakdown - Cooled" set xlabel "Vce (V)" set ylabel "Ice (uA)" set xrange [69:72.5] set yrange [-100:5000] plot "BJT-000.txt" using 1:3 with lines,"BJT-001.txt" using 1:3 with lines,\ "BJT-002.txt" using 1:3 with lines,"BJT-003.txt" using 1:3 with lines,\ "BJT-004.txt" using 1:3 with lines,"BJT-005.txt" using 1:3 with lines,\ "BJT-006.txt" using 1:3 with lines,"BJT-007.txt" using 1:3 with lines,\ "BJT-008.txt" using 1:3 with lines,"BJT-009.txt" using 1:3 with lines,\ "BJT-010.txt" using 1:3 with lines,"BJT-011.txt" using 1:3 with lines,\ "BJT-012.txt" using 1:3 with lines,"BJT-013.txt" using 1:3 with lines,\ "BJT-014.txt" using 1:3 with lines,"BJT-015.txt" using 1:3 with lines,\ "BJT-016.txt" using 1:3 with lines,"BJT-017.txt" using 1:3 with lines,\ "BJT-018.txt" using 1:3 with lines,"BJT-019.txt" using 1:3 with lines
The raw data has been rar'd up and can be downloaded here.