etheory
Well-known member
Hi all!
I've been working on a 1176 compressor design recently, and, as always, matching of jfets was required.
To do this, I used the following process:
1.) Record curves for each jfet using the Atlas DCA75 Pro
2.) I then store the following filenames for each of the 3 recorded curves:
Where 001 is a number that I draw on the top of the jfet by first wiping it with liquid-paper, then writing on the number in very fine ink pen (uni pin fine line 0.1)
Then I run the following code that I wrote (for python 3) over the directory of files:
Which you could trivially modify to your specific use-case.
But the idea is that it effectively sorts by Vgs(off).
From there, you can visually match jfets, then compare their Idss.
From there, you can load the graph data, and plot them.
I'm sharing this since it might be useful to someone in the future.
For instance, I found a great match for 2 jfets, specifically for me, 020 and 046:
I've been working on a 1176 compressor design recently, and, as always, matching of jfets was required.
To do this, I used the following process:
1.) Record curves for each jfet using the Atlas DCA75 Pro
2.) I then store the following filenames for each of the 3 recorded curves:
- 2N5457 - 001.txt
- 2N5457 Id Vds - 001.txt
- 2N5457 Id Vgs - 001.txt
Where 001 is a number that I draw on the top of the jfet by first wiping it with liquid-paper, then writing on the number in very fine ink pen (uni pin fine line 0.1)
Then I run the following code that I wrote (for python 3) over the directory of files:
Code:
import os
import re
import collections
data = {}
directory = "/full/path/to/the/directory/containing/your/files"
for filename in os.listdir(directory):
# find the first set of data
if filename.find('2N5457 - ') != -1:
id = int(filename.strip('2N5457 - ').strip('.txt'))
file_object = open(os.path.join(directory, filename), 'r')
contents = file_object.readlines()
for line in contents:
if line.find('Vgs(off)=') != -1:
splitData = line.strip('Vgs(off)=').split(' at ')
vgsoff = float(splitData[0].strip('V'))
vgsid = splitData[1].strip('Id=').strip('µA\n')
data.setdefault(id, {}).update({'Vgs(off)' : [vgsoff, vgsid]})
elif line.find('Vgs(on)=') != -1:
splitData = line.strip('Vgs(on)=').split(' at ')
vgsoff = float(splitData[0].strip('V'))
vgsid = splitData[1].strip('Id=').strip('µA\n')
data.setdefault(id, {}).update({'Vgs(on)' : [vgsoff, vgsid]})
elif line.find('Idss=') != -1:
splitData = line.strip('Idss=').split(' at ')
idss = float(splitData[0].strip('mA'))
vds = splitData[1].strip('Vds=').strip('V\n')
data.setdefault(id, {}).update({'Idss' : [idss, vds]})
# sort by Vgs(off)
sortedData = []
for item in data.items():
sortedData.append(item)
# sorting function is the Vgs(off) value of the jfet
# we can then visually match jfets, and further match by Idss
def sortFunction(elem):
return elem[1]['Vgs(off)'][0]
sortedData.sort(key=sortFunction)
for item in sortedData:
print(item)
Which you could trivially modify to your specific use-case.
But the idea is that it effectively sorts by Vgs(off).
From there, you can visually match jfets, then compare their Idss.
From there, you can load the graph data, and plot them.
I'm sharing this since it might be useful to someone in the future.
For instance, I found a great match for 2 jfets, specifically for me, 020 and 046: