I previously tested all my 2SK170 and 2SJ74 JFETs by hand with a simple circuit, it’s illustrated well at the Fetzer Valve page, which is a great resource on making a very simple JFET amplifier that somewhat mimics a tube sound. The schematic is near the bottom of the page. I used a DPDT switch and tested two JFETs at a time, then logged the results in a spreadsheet and put the JFETs on a roll of tape with a start number and end number corresponding to the ID in the spreadsheet.
Clearly I needed a way to automate this as some projects will need to many matched JFETs, or I’ll at least need to know their basic characteristics since they have a ridiculously wide manufacturing tolerance. This was a bit of a pain when I went to build my Discrete Class-A all JFET opamp on a breadboard. Side note: Sounds awesome as the initial input for my modular guitar amplifier project and drives the Fetzer Valve circuits into crunchy distortion, especially when the presence caps are engaged!
So I took the schematic and scaled it up. I used a Seeed relay shield attached to an ARM Cortex M3 based Arduino Due. An Arduino Uno would’ve also worked, but the Due has more ADCs and higher precision. This is just a prototype for a larger version, and a proof of concept. It tests 4 JFETs at a time since there are only 4 relays.
The relay shield acts the same as the SPDT switch shown to switch between Vpp and Idss measurement. Sending “R” to the Arduino over serial changes modes, and it just consistently prints out the measured values. I had tried to use the SPDT switch to trigger an interrupt, but I didn’t have any hardware debounce and the interrupt triggers were actually causing the µC to freeze up for some reason. I didn’t look into it and just figured it’d be easier to read the serial input.
The code is very simple and available on GitHub at https://github.com/fdimitri/Arduino_DUE_JFET_Tester. I set the relay pin low or high to measure Vpp or Idss then perform a few measurements and average them. The Due has a bunch of on-chip SRAM so storing 16 samples from 12 ADCs with 16 bit precision (12 bit with 4 bits of padding) doesn’t hurt in the least at 384 bytes of RAM of our 96kB total.
(Not shown: 9v battery source)
I used 1% metal film resistors so I could basically ignore calibration, though you could easily use 10% and measure them then set a calibration factor FOR EACH ADC. I’d rather spend a few extra bucks and deal with a maximum ~2% error factor.
The relays make a satisfying click as they all switch in synchronization. The JFETs are driven with what ever voltage I need, if you expect your values to exceed 3.3v on a Due you’ll have to add a voltage divider to your sampling line, and they’ll have to be very high resistance to not interfere with the JFET — which can also reduce sampling accuracy, ironically. You could also adjust the sense resistor in the circuit. I’ll post schematics with higher power JFETs to illustrate different tactics for dealing with high current JFETs or ones with a high Vgs(off)/Vpp.
The source voltage for the JFETs doesn’t affect Vpp/Idss to such a degree that I had to modify anything, Vpp never exceeds ~1.3v, and Idss never exceeds ~1.5v (which equates to 15mA) with my 2SK170s. You can also test P channel JFETs, but you have to modify a few things to do so. Again, I’ll be posting complete schematics for each type and what to do with high Vpp/Idss devices. The second version is going to use 24 relays and an extra 8 channel 10 bit ADC so I can measure 20 JFETs at a time.
I like to let them sit in each mode for a few minutes to stabilize temperature (as they’re rather) before actually recording the readings. All of these things are going to go into the software, and support for the Seeed boards will remain for a simpler JFET tester (even up to 3 boards if you’re up to wiring them) — however I really recommend the 8 relay boards with optocouplers that you can buy on eBay. The optocouplers protect your precious µC pins from anything as you trigger the relays.
Feeding the JFETs with 3.3v gave me wonky readings, and 5v wasn’t much better. 9v gives me pretty much the same readings as 30v with some small variance, so I’d recommend a 9v feed. You should protect your ADC inputs with at least Zeners (I didn’t).. or some type of break switch (ie any transistor).
So Phase 1: 4 Relays, Using 4/12 onboard 12 bit ADCs
Phase 2: 16 Relays, using 12/12 onboard 12 bit ADCs
Phase 3: 24 Relays, using 12/12 onboard 12 bit ADCs + external chip with 8 10 bit ADCs
Phase 4: Use RadioShack 276-170 boards with JFET sockets installed instead of breadboards (Two sections of 47 columns, 5 rows). That will easily give me 22 JFETs per board
Phase 5: Add more I2C ADCs and relays to test ~50 JFETs at a time for easy cataloging
Phase 7: Switch to STM32F429, test 100 JFETs at a time with many I2C ADCs (or use a hilarious amount of relays as a huge multiplexer instead of a massive ADC array — which also has the advantage of sounding really cool)
Since the Arduino Due is basically a monster as far as micros go, we won’t run into any issues with lack of RAM or PROM storage. Do you know how insane 96kB is when you came from 8kB and less of RAM? Granted it’s not as much as an improvement as the processor itself.. but still very nice! Of course I cheated back in those days and hooked up 64kB SRAM.. in banks.. and bank switches happened between task switches, so each process/task had its own bank of 32kB of RAM for the heap. But that’s a story for another day, and I digress!
I may also port the project to my STM32F429 Discovery board. It has 256kB of RAM with another 8MB on the PCB accessible and addressable through the external bus, along with a 320×240 touch-screen LCD. That would be an entirely new program, of course as unfortunately the STM32F boards are not really supported under Arduino (though apparently some work is being done for some of them.. the F429 is not one of those devices).
Between that and maybe an easier navigation device (track ball off a Blackberry? Joystick?) it’d certainly be a more impressive looking and easier to use tester. I know I don’t need that much RAM for this application, but I can’t argue with more specs 🙂 It also has a trio of I2C busses for hooking up LOTS of ADCs! It also sports I2S.. which means.. more ADCs!
And my secret end goal? To make a single ended JFET output stage to drive a small guitar amp.. shh! I’m gonna need lots of these things to drive a few amps into a speaker!