Someone asked me how to make an automated system that measures the threshold voltage on a MOSFET. This is sometimes defined as the voltage where the MOSFET begins to conduct significant current when Vgs=Vds – and a common definition of ‘significant current’ is 250uA.

I initially thought this was a trivial problem but it actually turns out to be quite interesting. So this post ended up much longer than I thought.

With some cleverness, MOSFETs can be used as (cheap) radiation sensors, so this is occasionally an interesting thing to do. With incident ionizing radiation, the threshold voltage of the MOSFET increases.

I know microcontrollers better than anything else, so my approach would be to use a microcontroller to incrementally raise the gate+source voltage via an DAC, while using a sense resistor to convert the current conducted through the MOSFET to a measurable voltage (after amplification) by the microcontroller ADC.

The MOSFET in question is the IRFP250NPbF, so as usual, we start with the datasheet. This is a power MOSFET, with a threshold voltage of 2-4V. Off the bat, I would not have chosen this MOSFET – if V(th) increases much higher, it will be out of the range a 5V microcontroller can measure. It would be better to work with a MOSFET with a lower starting V(th) – but this is what we’ve got for now.

The microcontroller I would use as a student would either be an Arduino, or a Pi Pico W. The former can read out via serial, the latter by serial or Wi-Fi (e.g. throw together a smartphone app or use a laptop).

Neither of these microcontrollers has a DAC, so we’ll need to implement one. A binary-weighted DAC is probably a good choice, but during prototyping a R/2R DAC (https://www.electronics-tutorials.ws/combination/r-2r-dac.html) is faster to throw together with cheap junk from the side of the road to see if this works (use 1% resistors if you can though). Then if we need more accuracy, we can implement a binary-weighted one.

Anyway, the way an R/2R DAC works, is you output a digital value out the port it is connected to. The output voltage will be approximately equal to the value you send out the port, times 5V, divided by 2^(number of GPIO connected to the DAC). So for an 8-pin port, you can send 256 different voltage levels between 0-5V.

Both microcontrollers have an integrated ADC, so we can just use that. Building an ADC is a pain anyhow. So far, what we have is something like this:

At this point, we have the ability to apply a controlled voltage to a system, and measure an output voltage – but we are interested in measuring a current (250uA). So we use a small sense resistor between the MOSFET and ground. The voltage across the sense resistor will be very small, so we will need to buffer and amplify it. A nice dual op-amp like the OPA2132 would be overkill, but easy to use here.

So out MOSFET / Analog stage would look something like this:

The input to this is the output of our microcontroller DAC. The output of the above goes into the microcontroller ADC. Note that we connect the source directly to the gate. forcing Vgs=Vds. So all we need to do is slowly increase the input voltage until the output voltage indicates that the current passing through our MOSFET is 250uA.

Then the microcontroller would run an algorithm something like this:

  1. With output = 0, read the ADC. If it’s not close to zero, then your MOSFET is in backward, or something is very wrong. Return an error.
  2. Increase the value you output from the DAC by 1.
  3. Read the ADC, to see if the voltage is less than the target value.
  4. If it’s lower than the target, goto 2. Otherwise, output the DAC value out the serial port or WiFi, then set the DAC value to zero and start over.

The exact target value is calculated by taking the expected voltage across your sense resistor at 250uA (V=IR), and multiplying by the gain of your amplifier.

Do note all of this with a grain of salt. I didn’t build or test this circuit, and it’s a little out of my expertise :D