Loading...
 

BJT Breakdown

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:

Image

The second graph shows the same 20 runs, with the transistor sitting in still air:

Image

Observations:

  1. In both cases, a hysteresis is observed between entering breakdown mode and leaving it.
  2. 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.
  3. The heating of the transistor increases its resistance, which makes for lower Ic values compared to the cooled conditions given the same Vce.
  4. The resistance of the transistor in the cooled case is about 500 ohms.
  5. 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.
  6. 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:

  1. Examine the effect of prolonged exposure to breakdown conditions on the breakdown Vce point.
  2. Examine the effect of breakdown exposure on transistor current gain.

Note to self:

  1. 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.

BJTBreakdown.py
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:

BJT.plot
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.