Blame demo/electron.dem

Packit 0986c0
#
Packit 0986c0
# $Id: electron.dem,v 1.9 2008/04/30 04:16:05 sfeam Exp $
Packit 0986c0
#
Packit 0986c0
# Electronics demo
Packit 0986c0
#
Packit 0986c0
# Bipolar Transistor (NPN) Mutual Characteristic
Packit 0986c0
Ie(Vbe)=Ies*exp(Vbe/kT_q)
Packit 0986c0
Ic(Vbe)=alpha*Ie(Vbe)+Ico
Packit 0986c0
alpha = 0.99
Packit 0986c0
Ies = 4e-14
Packit 0986c0
Ico = 1e-09
Packit 0986c0
kT_q = 0.025
Packit 0986c0
set dummy Vbe
Packit 0986c0
set grid
Packit 0986c0
set offsets
Packit 0986c0
unset log
Packit 0986c0
unset polar
Packit 0986c0
set samples 160
Packit 0986c0
set title "Mutual Characteristic of a Transistor"
Packit 0986c0
set xlabel "Vbe (base emmitter voltage)"
Packit 0986c0
set xrange [0 : 0.75]
Packit 0986c0
set ylabel "Ic (collector current)"
Packit 0986c0
set yrange [0 : 0.005]
Packit 0986c0
set key box
Packit 0986c0
set key at .2,.0045
Packit 0986c0
set format y "%.4f"
Packit 0986c0
plot Ic(Vbe)
Packit 0986c0
set format "%g"
Packit 0986c0
Packit 0986c0
pause -1 "Hit return to continue"
Packit 0986c0
Packit 0986c0
# Junction Field Effect Transistor (JFET) Mutual Characteristic
Packit 0986c0
# drain current above pinch off
Packit 0986c0
Ida(Vd)=Ido*(1-Vg/Vp)**2
Packit 0986c0
# drain current below pinch off
Packit 0986c0
Idb(Vd)=Ido*(2*Vd*(Vg-Vp)-Vd*Vd)/(Vp*Vp)
Packit 0986c0
# drain current
Packit 0986c0
Id(Vd)= (Vd>Vg-Vp) ? Ida(Vd) : Idb(Vd)
Packit 0986c0
# drain current at zero gate voltage
Packit 0986c0
Ido = 2.5
Packit 0986c0
# pinch off voltage
Packit 0986c0
Vp = -1.25
Packit 0986c0
# gate voltage
Packit 0986c0
Vg = 0
Packit 0986c0
set dummy Vd
Packit 0986c0
unset grid
Packit 0986c0
unset key
Packit 0986c0
#set offsets 0, 1, 0, 0
Packit 0986c0
set title "JFET Mutual Characteristic"
Packit 0986c0
set xlabel "Drain voltage Vd (V)"
Packit 0986c0
set xrange [0 : 4]
Packit 0986c0
set ylabel "Drain current Id (mA)"
Packit 0986c0
set yrange [0 : 5]
Packit 0986c0
set rmargin 12
Packit 0986c0
set label 1 "-0.5 Vp" at 4.1,0.625
Packit 0986c0
set label 2 "-0.25 Vp" at 4.1,1.4
Packit 0986c0
set label 3 "0" at 4.1,2.5
Packit 0986c0
set label 4 "Vg = 0.5 Vp" at 4.1,3.9
Packit 0986c0
plot Vg=0.5*Vp,Id(Vd),Vg=0.25*Vp,Id(Vd),Vg=0,Id(Vd),Vg=-0.25*Vp,Id(Vd)
Packit 0986c0
Packit 0986c0
pause -1 "Hit return to continue"
Packit 0986c0
unset label
Packit 0986c0
unset rmargin
Packit 0986c0
Packit 0986c0
# show off double axes
Packit 0986c0
Packit 0986c0
# amplitude frequency response
Packit 0986c0
A(jw) = ({0,1}*jw/({0,1}*jw+p1)) * (1/(1+{0,1}*jw/p2))
Packit 0986c0
p1 = 10
Packit 0986c0
p2 = 10000
Packit 0986c0
set dummy jw
Packit 0986c0
set grid x y2
Packit 0986c0
set logscale xy
Packit 0986c0
set log x2
Packit 0986c0
unset log y2
Packit 0986c0
set key default
Packit 0986c0
set key bottom center box
Packit 0986c0
set title "Amplitude and Phase Frequency Response"
Packit 0986c0
set xlabel "jw (radians)"
Packit 0986c0
set xrange [1.1 : 90000.0]
Packit 0986c0
set ylabel "magnitude of A(jw)"
Packit 0986c0
set y2label "Phase of A(jw) (degrees)"
Packit 0986c0
set ytics nomirror tc lt 1
Packit 0986c0
set y2tics nomirror tc lt 3
Packit 0986c0
set xtics mirror
Packit 0986c0
set tics out
Packit 0986c0
set autoscale  y
Packit 0986c0
set autoscale y2
Packit 0986c0
plot abs(A(jw)) lt 1, 180/pi*arg(A(jw)) axes x1y2 lt 3
Packit 0986c0
Packit 0986c0
pause -1 "Hit return to continue"
Packit 0986c0
Packit 0986c0
# undo what we've done
Packit 0986c0
reset