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.