43 lines
869 B
Python
43 lines
869 B
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
e_0 = 8.85E-14
|
|
k_ox = 3.9
|
|
e_ox = e_0 * k_ox
|
|
|
|
mu = 350 # 350 cm^2 / (V*s)
|
|
t_ox = 100E-8 # 100A
|
|
|
|
C_ox = e_ox / t_ox
|
|
W = 1.2
|
|
L = 0.6
|
|
|
|
beta = mu * C_ox * W/L
|
|
|
|
V_g_range = np.arange(-5,1)
|
|
V_t = 0.7
|
|
V_dd = np.linspace(-5,0, 50)
|
|
|
|
def I_ds(V_gs, V_ds, V_t, beta):
|
|
if V_gs > V_t:
|
|
return np.zeros_like(V_ds)
|
|
|
|
V_dsat = V_gs - V_t
|
|
|
|
return np.where(V_ds > V_dsat,
|
|
-beta * (V_gs - V_t - V_ds/2) * V_ds,
|
|
-beta * (V_gs - V_t)**2 / 2)
|
|
|
|
for V_s in (0, 2):
|
|
for V_g in V_g_range:
|
|
V_gs = V_g - V_s
|
|
V_ds = V_dd - V_s
|
|
plt.plot(V_ds,
|
|
1000*I_ds(V_gs, V_ds, V_t, beta),
|
|
label="$V_{gs}$ = "+str(V_gs))
|
|
|
|
plt.xlabel("$V_{ds}$[V]")
|
|
plt.ylabel("$I_{ds}$[mA]")
|
|
plt.legend()
|
|
plt.show()
|