Skip to Main Content Skip to Search
Accelerating the pace of engineering and science

 

Newsletters - MATLAB Digest

Determining the Characteristic Curve for a Junction Field-Effect Transistor

by Dave Tasto and Jane Price

In this technical example, we will design a method for testing the output characteristics of Junction Field Effect Transistors (JFET) in order to optimize electrical system design. This example will demonstrate that the combination of MATLAB and the Data Acquisition Toolbox provides a complete environment for data acquisition, analysis, and visualization.

Introduction

The operating characteristics of JFETs are often unpredictable because of their internal geometric dependence. Understanding even minute differences in individual JFET operating characteristics is an important aspect in the design of many electronic systems. When designing audio amplifiers, for example, it is important to determine exactly what levels of performance will be available for various inputs. Consequently, tests can be done to more accurately determine the operating characteristics of JFET devices. Such a test requires the measurement of the output current over a range of input voltages. The overall electronic system design can be optimized once these values are known.

Using standard test equipment, MATLAB, and the Data Acquisition Toolbox, you can design a system to test individual JFET characteristics. This paper will describe the design of such a system. First, we will set up the hardware and then write the MATLAB code for acquiring data and analyzing the results. We will then use our test system to compare the response of two JFETs that are part of the same production lot. We will see that, though the JFETs were produced at the same time, they are electrically very different because of the differences in each JFET's internal geometry.

JFET Overview

Before continuing, it might be useful to look at the typical operating characteristics of JFET devices. A schematic for a JFET device is shown in Figure 1. The classical "textbook" output plot for understanding JFET functionality is to plot drain current versus the drain-to-source voltage, or the Id-Vds characteristic curve. To create this plot, a voltage is applied to the drain while the source voltage is brought to ground. An input voltage, Vgs, is applied to the gate. To determine the drain current, Id, for various levels of Vds, Vgs is held constant and the drain voltage, Vds, is varied while measuring Id. When Vds is increased, Id also increases, as shown in Figure 2. Eventually, Id will reach a saturation point and will no longer increase, as shown in Figure 2 where Id becomes constant. The point where Id becomes constant is an important characteristic of a JFET. It is typically denoted as the drain-source saturation current, Idss. After this point is reached, increasing Vds further will cause no further increase in Id, and the Id-Vds characteristic curve will become flat.

Figure 1: N-Channel Junction Field-Effect Transistor (JFET)


Figure 2: Typical Id-Vds characterisitic curve for N-channel JFET

To profile the JFET's operating characteristics over various voltage levels for Vgs, we can simply increase Vgs slightly and then repeat the previous steps, raising Vds until we reach the saturation current, Idss, and plot the results. The results should look similar to those presented in Figure 2.

For our example, we will create the Id-Vds characteristic curve for two JFETs from the same production lot. This will allow us to ascertain the differences in output characteristics caused by minute differences in the internal geometries of individual JFET devices.

Hardware Set Up

The hardware for this example consists of a National Instruments DAQCard-1200, running NI-DAQ drivers. We are running MATLAB 5.3 and the Data Acquisition Toolbox version 1.0. The Data Acquisition Toolbox provides an interface to the National Instruments hardware and allows us to acquire data directly from the hardware into the MATLAB environment.

As stated earlier, determining the response of a JFET involves controlling the drain and gate voltages while measuring the current flowing from the drain to the source. For our test setup we will use n-channel MPF102 JFETs. These particular devices were specifically designed for audio-through-VHF amplifier and mixer applications.

In order to obtain the entire output range of the JFET, we need to vary the drain-source voltage, Vds, and the gate voltages, Vgs, over ranges of 0 to 10V and -5 to 0V, respectively. This span provides us with the maximum output range of the JFET and allows us to see the relevant characteristics. As the MPF102 has a gate current rating of 10 mA, saturation will occur at about this level. This means that in order to cover the range up to saturation, we need to supply at least 10mA. Because the DAQCard-1200 can only supply up to 1 mA per channel, we need to create a current amplifier. Using the circuit shown in Figure 3, we are able to supply the proper voltage range to the drain-source voltage (node 2) and draw the 10mA as needed. The gate voltage, Vgs, and input voltage, Vin, will be controlled from the analog output channels on the DAQCard-1200. Current measurements will be obtained by measuring the differential voltage across nodes 1 and 2 and then dividing that voltage by the resistance, R2.

Figure 3: Circuit schematic

The values for R1 and R2 are 47k and 100 respectively. The DAQCard-1200 has an output channel that supplies a constant +5V DC, which is used as an input to the positive terminal on the LM324 operational amplifier. The +12V DC supply to the op amp can be driven by a battery source or an AC/DC converter.

Acquistion Code

Now that our hardware and electronic circuitry are set up, we can begin writing our acquisition code. A feature of the Data Acquisition Toolbox is that it is based on objects. This means that all of the properties associated with a specific hardware device are collected into a single device object. Device objects allow you to access specific hardware subsystems. The device objects supported by the toolbox are analog input (AI), analog output (AO), and digital I/O. Here, we will use both the AI and AO objects.

When we create an analog input, we create an object in MATLAB that is directly associated with our hardware. This object provides a gateway to all of the hardware's functionality and allow us to control the behavior of our acquisition.

There are two main parts to our acquisition code: the analog input and the analog output. The analog output object will be used to send the appropriate input and gate voltages from the DAQCard to our circuit. The analog input object will collect the differential output voltage from the circuit, which will later be converted to a current.

We begin by creating the analog input and analog output objects. To do this, we simply need to specify the type of hardware that we will use and the device number, as shown below:

ai=analoginput('nidaq',1);
ao=analogoutput('nidaq',1);

Now that the objects are created, we need to configure them for our application. We begin by configuring the input object. Our setup requires us to use two inputs, one for the current and one for the drain voltage. To do this, we first add two channels to our analog input object, as follows:

ic=addchannel(ai,[2 0]); % Adding the first two differential
% inputs to the input object

Next, we specify the input voltage range of 0 to 10 volts and name each of the channels:

ic.inputrange=[0 10]; % Setting the sensor and in
ic(1).SensorRange=ic(1).InputRange; % ranges from 0 to 10 volts
ic(1).UnitsRange=ic(1).InputRange;  
ic(1).ChannelName='Drain-Source Voltage'; % Naming channel 2 (1st index)
ic(2).UnitsRange=ic(2).InputRange*10; % Measuring current indirectly:
ic(2).SensorRange=ic(2).InputRange; % I = V/R, where R is 100 Ohm and
ic(2).Units='mA'; % 1000 mA = 1 A
ic(2).ChannelName='Drain-Source Current'; % Naming channel 0 (2nd index)

In the code above, we need to multiply the InputRange by a factor of 10 in order to obtain the correct value for the current. This value is derived from I = V/R, where R is 100 and 1000 mA = 1 A. Thus, the units range from 0-100 mA, as shown below. In this case, our sensor range is the same as the input range on the card.

We can verify the setup of the input object by typing ic at the command line:

>>ic            
Index: ChannelName: HwChannel InputRange: SensorRange: UnitsRange: Units:
1 'Drain-Source Voltage' 2 [0 10] [0 10] [0 10] 'Volts'
2 'Drain Current' 0 [0 10] [0 10] [0 100] 'mA'

The next step is to configure our output object. The configuration is similar to the setup for the input object:

oc=addchannel(ao,[0 1]); % Adding 2 channels to the output object
oc.UnitsRange=oc(1).OutputRange; % The unit range on all channels will
  % be the same as the default output
  % range (-5V to 5V)
oc(1).ChannelName='Vin'; % Naming the output channels, according
oc(2).ChannelName='Vgs'; % to circuit schematic

Finally, we can verify the properties of the output channels by typing oc at the command line:

>>oc          
Index: ChannelName: HwChannel InputRange: UnitsRange: Units:
1 'Vin' 0 [-5 5] [-5 5] 'Volts'
2 'Vgs' 1 [-5 5] [-5 5] 'Volts'

Analysis and Plotting Code

Now that the acquisition portion of our setup is complete, we need to write the code to vary the drain-source voltage for multiple gate voltages. We do this by creating a nested for loop. Since we are using a current amplifier as the input to the drain-source voltage, Vds, of our JFET, we will control Vds by varying Vin (see Figure 3). At each gate voltage, we want to sweep the input voltage, Vin, from -5 to +5 volts in steps of 0.25 volts. Finally, we will create a matrix of the voltage, Vds, and current, Id. The code for this is as follows:

Vds=[]; % Initializing Drain Voltage &
Id=[]; % Drain to Source Current
VgsList = [-4.5:.5:-2 -1.75:.25:0];  
for Vgs = VgsList  
data=[];  
for Vin = -5:0.25:5 ;  
putsample(o,[Vin,Vgs]); % Output drain-source, gate voltages
data=[data; getsample(ai)] % Acquire vector of all inputs
end % for Vgs
Vds = [Vds data(:,1)]; % Setting up voltage matrix
Id = [Id data(:,2)]; % Setting up current matrix
end % for Vin

The putsample function applies the voltages to the channels of the output object, ai, while getsample acquires a vector of input voltages for all the channels of the output object, ao. Because we are interested in steady-state output values based on a constant input, we used the single-point acquisition functions putsample and getsample to send and receive the data. If we wanted to analyze the reaction of the system to a time-varying input, we could use the buffered acquisition functions putdata and getdata. But because we are only doing single-value acquisition, we do not have to worry about synchronization and sample rate setup. As the voltages are acquired, they are concatenated to form a matrix containing the drain-source voltage, Vds (first column of data), and the drain current, Id (second column of data). This makes it easy to view the output.

We have succeeded in acquiring a matrix of voltages and a matrix of current levels. Now, we will plot our results using MATLAB graphics routines.

First, we will make a simple 2-D plot of the results, as follows:

legendStr={};        % Build up a legend string for VgsCt=1:length(VgsList),     legendStr{VgsCt}=[num2str(VgsList(VgsCt)) 'V']; end   h=plot(Vds,Id); legend(h(5:end),legendStr(5:end)); xlabel('V_{ds} (V)'); ylabel('I_{d} (mA)'); title('\bf{Lines of constant V_{gs} for JFET');

The resulting plot is shown below.

Figure 4: Resulting Id vs. Vds characteristic for n-channel MPF102 JFET 1

As the plot shows, our output characteristic curve is exactly as expected. The drain current, Id, increases until it reaches its saturation level and then holds constant.

For a more detailed look at our results, we can use specialized plotting routines in MATLAB to view the operating characteristics in three dimensions. To do this, we create an array of the gate voltages corresponding to the number of drain voltages.

Vgs = repmat(VgsList,[length(Vds(:,1)),1]); % Duplicates Vgs by rows to  
  % have as many rows as Vds

A sample of the output from this command is shown in Figure 5. As you can see, this creates matrices of equal size for Vgs, Vds, and Id, enabling us to make a three-dimensional plot of our results.

Figure 5: Using the repmat function, we created equivalent sized matrices so that we can generate a 3-dimensional plot of our results. Click to enlarge image.

Using the surf command, we create a 3-D surface of Vds, Vgs, and Id as our x-, y-, and z-data, respectively. We will also add labels to each of the axes and a title to the plot.

surf(Vds, Vgs, Id);        % Plot 3-D surface xlabel('V_{ds} (V)'); ylabel('V_{gs} (V)'); zlabel('I_{d} (mA)'); title('\bf{Operating Characteristics for JFET}');


Figure 6: Resulting 3-D Id vs. Vds characteristic curve for n-channel MPF102 JFET


Figure 7: By rotating the 3-D suface plot, we can compare our results to the original 2-D representation of the operating characteristics

At the beginning of this paper, we stated that we wanted to compare the characteristic curve for multiple JFETs from the same production lot in order to understand their operational differences. To do this, we simply replaced the original JFET in our test setup with another and ran the test again. Below, Figure 8 shows a plot of the results of two different MPF102 JFETs. As you can see from the plot, the operating characteristics of the two JFETs are significantly different from each other and are quite easy to measure and visualize using our acquisition and analysis test system.

Figure 8: Id vs. Vds characteristic curve for two MPF102 JFET devices. Notice the difference in operating characteristics between the two devices from the same production lot.

Conclusions

The operating characteristics of JFET devices can vary significantly when there are even minute differences in their geometric composition. Understanding these differences can strongly influence the design of electronic systems. We have shown that, using MATLAB and the Data Acquisition Toolbox, you can design a simple test setup that allows you to easily compare the characteristic curves for multiple JFET devices. We also took a close look at hardware and software design for creating such a setup. This example has shown how to analyze data while it is acquired and how to visualize it using MATLAB plotting routines. Finally, we demonstrated how you can measure the output of two n-channel MPF102 JFET devices from the same production lot to determine the differences in operating characteristics caused by internal geometric differences.

Contact sales
Subscribe to newsletters