Shuo Chen's Notes
  • Home
  • Bugs

Kernel

  • Study
  • Data Structures
  • File Descriptor Table
  • Epoll
  • Call Graphs
  • SO_REUSEPRT
  • Profiles
  • Changes
  • Docs

Languages

  • lcc
  • Lua
  • Memory Model

Miscs

  • Git
  • SSL
  • Links

Elec

  • DSP
  • Reed-Solomon
  • μA78L05 Analysis and Simulation
  • LM7805 Analysis and Simulation
  • TL431 Analysis and Simulation
  • TL072/TL082 Analysis and Simulation
    • History
    • Analysis of circuit
      • Estimating DC operating point
      • Open-loop gain
        • Input stage small-signal model
        • Gain stage
        • Small-signal model of TL072
    • Simulation
      • Open-loop gain
      • DC transfer function
      • Frequency response
      • Slew-rate
      • Phase reversal
      • Input offset voltage
  • XL741/741SE Simulation and Experiments
Shuo Chen's Notes
  • Elec
  • TL072/TL082 Analysis and Simulation

TL072/TL082 Analysis and Simulation¶

By Shuo Chen (chenshuo_at_chenshuo.com) [30% done]

Latest version: https://chenshuo.github.io/notes/TL082/

Jupyter source of this page: https://github.com/chenshuo/notes/blob/master/notebooks/TL082.ipynb

Comments and discussions: https://github.com/chenshuo/notes/discussions

TL082/TL072 are general purpose JFET-input op amps (a.k.a. Bi-FET technology), first introduced by Texas Instruments in 1977.

Note: This post doesn't talk about new TL07xH/TL08xH opamps introduced in 2020, which are CMOS opamps. We focus on those classic JFET input op amps.

$\newcommand{\li}[1]{{i_\mathrm{#1}}}$ $\newcommand{\ui}[1]{{I_\mathrm{#1}}}$ $\newcommand{\lv}[1]{{v_\mathrm{#1}}}$ $\newcommand{\uv}[1]{{V_\mathrm{#1}}}$ $\newcommand{\ur}[1]{{R_\mathrm{#1}}}$ $\newcommand{\sm}[2]{{{#1}_\mathrm{#2}}}$

The following table shows brief specs for TL072C from TI 1996 datasheet

Parameter Symbol Unit min typical max
Offset voltage Vos mV 3 10
Bias current $\ui{IB}$ pA 65 200
Input resistance $\ur{id}$ Ω $10^{12}$
Common-mode input voltage range $\uv{CM}$ V $\pm 11$ $-$12 to 15
Unit-gain bandwidth GBW MHz 3
Open-loop voltage gain $\sm{A}{VD}$ V/mV 25 200
Slew rate SR V/μsec 8 13
Supply current (per amp) $\ui{Q}$ mA 1.4 2.5
Input voltage noise density $\sm{e}{N}$ nV/$\sqrt{\mathrm{Hz}}$ 18
Total harmonic distrortion THD 0.003%

In the past, TL072 and TL082 had slightly different specs (TL082 had higher input voltage noise etc.), now they are essential the same chip, see TL082 1999 datasheet for comparison.

History¶

TL08x was announced in mid 1976 and released early 1977, TL06x and TL072x were added to the family later that year. Back then, there were three series:

Selling point Single Dual Quad Features
General purpose TL081 TL082 TL084 input voltage noise 25 nV/$\sqrt{\mathrm{Hz}}$
Low noise TL071 TL072 TL074 input voltage noise 18 nV/$\sqrt{\mathrm{Hz}}$
Low power TL061 TL062 TL064 supply current is 200μA per amp, but gain is as low as 6,000 (75.6dB)

Those op amps have internal frequency compensation (${C}_{c}=18$pF), except TL060, TL070 and TL080.

National's LF355/LF356/LF357 (released in 1975) were first Bi-FET opamps that made with ion implantation technique. which produces well-matched JFETs. So the input offset voltage of LF35x were made as low as typical BJT op amps (1~3 mV). However the cost of LF35x was high because it incorporates 4 pairs of JFETs and is about twice the die size of a μA741. TL081 contains only one pair of input JFETs, and is about the same size of a μA741.

National announced low-cost LF351/LF353/LF347 op amps in late 1977, in response to TI's TL07x/TL08x series. Although National's chips had somewhat improved circuit and specs, TL082 and LF353 are often interchangeable.

In late 1980s, TI sells its own LF351/LF353/LF347 op amps, which were probably just relabled TL071/TL072/TL074 respectively. Meanthile, National sells its own TL081/TL082, from the schematics we could tell that those were relabeled LF351/LF353 respectively.

Most interestingly, National was acquired by TI in 2011, its authentic LF353 had to be renamed LF353-N.

Origin LF353 TL082
National LF353-N TL082-N
TI LF353 TL082

Analysis of circuit¶

The following is a simplified schematic of TL072/TL082, it's a fairly typical two-stage single-pole op amp except the input transistors are P-JFETS not PNP.

Prof. W. Marshall Leach, Jr. wrote a brief analysis of TL071 circuit.

No description has been provided for this image

Estimating DC operating point¶

TI didn't reveal the values of most resistors in its datasheets (see notes below), but we can made educated guess based on the specs and formulas from James E. Solomon's 1974 classic paper The Monolithic Op Amp: A Tutorial Study.

First from formula (18), slew rate$=\displaystyle\frac{2I_1}{C_c}=13$V/μsec, with $C_c=18$pF, we know $I_1=117$μA, which is the bias current of both JFETs ($I_D$).

Second from formula (16), unity-gain bandwidth $f=\displaystyle\frac{\sm{g}{m1}}{2\pi C_c}=3$MHz, we know transconductance of the input stage $\sm{g}{m1} \approx 0.34$mS.

Notes: John L. Linsley Hood made estimation of resistor values in his 1982 article. Also resistor values are provided in ST's TL082 datasheets.

For JFET in saturation region, $i_D = I_{DSS}\displaystyle\Big(1-\frac{v_{GS}}{V_{TO}}\Big)^2 = \beta(v_{GS}-V_{TO})^2$, where $I_{DSS} = \beta\, V_{TO}^2$.

Note $\beta$ here is s SPICE parameter of JFET model, it has nothing to do with BJT's current gain.

In small-signal model, transconductance of JFET is $\sm{g}{m}=2\beta(\uv{GS}-\uv{TO})=2\sqrt{\beta \ui{D}}$

Given $I_D=117$μA and $g_m=0.34$mS, we calculate $\beta = \displaystyle (\frac{g_m}{2})^2 \frac{1}{ I_D}\approx 0.246$ mA/V${{}^2}$

Choose an arbitrary $V_{TO}=-1$V, then $I_{DSS}=0.246$mA, which will be the bias current of Zener diode $D_2$.

Next, we estimate the bias curent of the 2nd stage $I_2$.

The follow schematic shows the bias circuit of TL072/TL082.

No description has been provided for this image

From the datasheet, we know the supply current per amp is about 1.4mA, that is $2I_1 + I_2 + I_\mathrm{ref}+I_\mathrm{D2} + I_\mathrm{C9,C10,C14}\approx 1.4$mA

We already calculated $2I_1 = 13\times 18=234$μA, assume $I_\mathrm{C9,C10,C14}\approx 200$μA and $I_\mathrm{D2}\approx 250$μA, we have $I_2 = I_\mathrm{ref}\approx 400$μA.

Determining $R_{11}$:

Assuming $D_2$ breakdown voltage is 5V, and $V_\mathrm{BE8}\approx 0.7$V, then the voltage across $R_{11}$ is about 4.3V. We want $I_\mathrm{ref}=0.4$mA, so $R_{11}\approx\displaystyle\frac{4.3}{0.4}\approx 10$kΩ.

Determining $R_1$, which sets the output current of Widlar current source.

$\ui{C5}=2I_1 = 234$μA

$\ui{C5}\,R_1 = V_\mathrm{T}\ln\displaystyle\frac{I_\mathrm{ref}}{\ui{C5}}$

$R_1\approx\displaystyle \frac{26}{234} \log\frac{400}{234} \approx 60$Ω

Copied!
slew_rate = 13e6
c_comp = 18e-12
Ic5 = slew_rate * c_comp
Iref = 0.4e-3
Vt = 26e-3
R1 = Vt * log(Iref / Ic5) / Ic5
print('Ic5 = %.0f μA, R1 = %.1f Ω' % (Ic5 * 1e6, R1))
slew_rate = 13e6 c_comp = 18e-12 Ic5 = slew_rate * c_comp Iref = 0.4e-3 Vt = 26e-3 R1 = Vt * log(Iref / Ic5) / Ic5 print('Ic5 = %.0f μA, R1 = %.1f Ω' % (Ic5 * 1e6, R1))
Ic5 = 234 μA, R1 = 59.6 Ω

But simulation show $R_1=100$Ω is more appropriate if we take Early effect into account.

Copied!
ng.circ('''
Vcc vcc 0   15V
Vee vee 0  -15V

* Bias

J16 vcc  vcc  q8b  PJFET
D2  vee  q8b       DZ
Q8  q8c  q8b  q8e  NPN
R11 q8e  vee       10k
Q7  q7c  q7c  vcc  PNP
Q6  q6c  q7c  vcc  PNP
Q5  q5c  q7c  q5e  PNP
R1  vcc  q5e       100

V5  q5c    0  0
V6  q6c    0  0
V7  q7c  q8c  0

.model DZ D(IS=10fA BV=5.0)
.model PJFET PJF(VTO=-1 BETA=0.246e-3 LAMBDA=5e-3)
.model npn NPN (Bf=200 Br=2.0 VAf=130V Is=5fA)
.model pnp PNP (Bf=50 Br=4.0 VAf=50V Is=2fA)

.options savecurrents
''')
print_op(0)
ng.circ(''' Vcc vcc 0 15V Vee vee 0 -15V * Bias J16 vcc vcc q8b PJFET D2 vee q8b DZ Q8 q8c q8b q8e NPN R11 q8e vee 10k Q7 q7c q7c vcc PNP Q6 q6c q7c vcc PNP Q5 q5c q7c q5e PNP R1 vcc q5e 100 V5 q5c 0 0 V6 q6c 0 0 V7 q7c q8c 0 .model DZ D(IS=10fA BV=5.0) .model PJFET PJF(VTO=-1 BETA=0.246e-3 LAMBDA=5e-3) .model npn NPN (Bf=200 Br=2.0 VAf=130V Is=5fA) .model pnp PNP (Bf=50 Br=4.0 VAf=50V Is=2fA) .options savecurrents ''') print_op(0)
   @d2[id] =  -274.98 uA
  @j16[id] =  -276.79 uA
   @q5[ic] =  -221.35 uA
   @q6[ic] =  -527.88 uA
   @q7[ic] =  -410.32 uA
   @q8[ic] =   430.17 uA
   @r11[i] =   431.98 uA
    @r1[i] =   224.80 uA
       q5c =     0.00 mV
       q5e =   14.978 V
       q6c =     0.00 mV
       q7c =   14.326 V
       q8b =  -10.033 V
       q8c =   14.326 V
       q8e =  -10.680 V
 v5#branch =   221.35 uA
 v6#branch =   527.88 uA
 v7#branch =   430.17 uA
       vcc =   15.000 V
vcc#branch = -1456.20 uA
       vee =  -15.000 V
vee#branch =   706.96 uA

In summary,

  • $I_1=117$μA, calculated with slew rate and $C_c$ from spec
  • $I_2\approx 0.4$mA, estimated with total supply current from spec
  • $\sm{g}{m1}\approx 0.34$mS, calculated with unity gain bandwidth and $C_c$ from spec

In addition, $\beta$ of P-JFET

Open-loop gain¶

Next, we calculate the open-loop gain. Here's full schematic with estimated resistor values in parentheses.

Copied!
%%tikz -ct -f svg

\ctikzset{american currents, american voltages, european resistors}
%%tikz -ct -f svg \ctikzset{american currents, american voltages, european resistors}
No description has been provided for this image

Input stage small-signal model¶

No description has been provided for this image

The output resistor of Q2, $\sm{r}{o2}\approx \displaystyle\frac{1}{\lambda \ui{D}}$, where $\ui{D} = I_1=117$μA, assuming $\lambda = 0.005\mathrm{V}^{-1}$ for P-JFETs, so $\sm{r}{o2}\approx 1.71$MΩ.

The output resistor of Q4, $\sm{R}{o4} = \sm{r}{o4}[1+\sm{g}{m4}(R_3 /\!/ r_{\pi4})]$, where $\sm{r}{o4}\approx\displaystyle\frac{\uv{AN}}{\ui{C4}}$, $\sm{g}{m4}=\displaystyle\frac{\ui{C4}}{\uv{T}}\approx \frac{1}{222\Omega}$, $R_3=1080$Ω, $\ui{C4}\approx I_1=117$μA.

Assuming current gain of NPN is $\sm{\beta}{N}=200$, $r_{\pi4}\approx\displaystyle\frac{\sm{\beta}{N}}{\sm{g}{m4}}\approx 44.4$kΩ. As $r_{\pi4} \gg R_3$, $R_3 /\!/ r_{\pi4} \approx R_3$, $\sm{R}{o4} \approx \sm{r}{o4}(1+\sm{g}{m4}\, R_3)=\displaystyle \frac{\uv{AN}}{\ui{1}} + \frac{\uv{AN}}{\uv{T}}R_3$.

Assuming Early voltage of NPN is $\uv{AN}=130$V, $\sm{R}{o4} \approx \displaystyle\frac{130}{117}+\frac{130}{0.026}\times 1.08\approx 6.51$MΩ

The output resistor of the first stage $\sm{R}{o1}=\sm{r}{o2} /\!/ \sm{R}{o4}\approx 1.354$MΩ

Transconductance of the first stage $\sm{G}{m1}=\sm{g}{m1}\approx 0.34$mS, so the open-circuit voltage gain of the input stage is $\sm{G}{m1} \sm{R}{o1}\approx 460$.

Gain stage¶

No description has been provided for this image

We want to calculate the following parameters of the intermediate gain stage. Q11 is a common-emitter amplifier with emitter resistor $R_6$.

  • Transconductance of this stage $\sm{G}{m2}\approx\displaystyle\frac{1}{1/\sm{g}{m11}+R_6}$, where $\sm{g}{m11}=\displaystyle\frac{I_2}{\uv{T}}=\frac{1}{65\Omega}$, so $\sm{G}{m2}\approx\displaystyle\frac{1}{165\Omega}$

  • Input resistance $\ur{i2}$, which is input resistance of Q10: $\ur{i10}$

  • Output resistance $\ur{o2}=\sm{r}{o6}/\!/\ur{o11}$, where $\sm{r}{o6}\approx\dfrac{\uv{AP}}{I_2}=125$kΩ, and $\sm{R}{o11} \approx \sm{r}{o11}(1+\sm{g}{m11}\, R_6)=\displaystyle \frac{\uv{AN}}{I_2} + \frac{\uv{AN}}{\uv{T}}R_6=825$kΩ. So $\ur{o2}=\sm{r}{o6}/\!/\ur{o11}\approx108.6$kΩ

  • Voltage gain of the gain stage $\sm{A}{v2}=\sm{G}{m2}\,\ur{o2}\approx 658$

Let's consider Q10, which is a emitter follower, its emitter resistor is $\ur{E10}=R_5/\!/\ur{i11}$

  • The input resistance of Q11 is $\ur{i11}=r_{\pi 11} + (1+\sm{\beta}{N})R_6$, where $r_{\pi 11}=\displaystyle\frac{\sm{\beta}{N}}{\sm{g}{m11}}=13$kΩ, so $\ur{i11}=13+(1+200)\times 0.1=33.1$kΩ.
  • The emitter resistor of Q10 is $\ur{E10}=R_5/\!/\ur{i11}\approx 15.7$kΩ
  • The emitter current of Q10 is $\ui{E10}=\ui{R5}+\ui{B11}$, the voltage across $R_5$ is about $\uv{BE11}$, which assumed to be 0.7V, so $\ui{E10}=\dfrac{0.7}{30}+\dfrac{I2}{\sm{\beta}{N}}\approx 25.3$μA.
  • $\sm{g}{m10}=\dfrac{\ui{C10}}{\uv{T}}\approx \dfrac{1}{1026\Omega}$, $r_{\pi 10}=\dfrac{\sm{\beta}{N}}{\sm{g}{m10}}\approx 205.3$kΩ
  • The input resistance of Q10 is $\ur{i10}=r_{\pi 10}+ (1+\sm{\beta}{N})\ur{E10}\approx 205.3 + (1+200)\times 15.7\approx 3.53$MΩ, that is $\ur{i2}\approx 3.53$MΩ.

Small-signal model of TL072¶

No description has been provided for this image

The voltage gain of first stage $\sm{A}{v1}=\sm{G}{m1}(\ur{o1}/\!/\ur{i2})\approx 332$

The output stage is class AB push-pull circuit, which has high input resistance, so $\ur{i3}\gg\ur{o2}$, and $\sm{A}{v3}\approx 1$

The total voltage gain $\sm{A}{vd}=\sm{G}{m1}(\ur{o1}/\!/\ur{i2})\,\sm{G}{m2}(\ur{o2}/\!/\ur{i3})\,\sm{A}{v3}\approx 332 \times 658 \approx 2.18\times 10^{5}$, that is about 218 V/mV.

Simulation¶

Open-loop gain¶

No description has been provided for this image
Copied!
ng.circ('''
Vcc   vcc  0   15V
Vee   vee  0  -15V

Vid   in+  in-  DC 86.3u AC 1V
Vcm   in-  0    0
Rload out  0    10k

* Bias

J16 vcc  vcc q8b PJFET
D2  vee  q8b     DZ
Q8  q7c  q8b q8e NPN
R11 q8e  vee     10k
Q7  q7c  q7c vcc PNP
Q6  q14b q7c vcc PNP
Q5  q5c  q7c q5e PNP
R1  vcc  q5e     100

* Input

J1 q3c  in- q5c PJFET
J2 q10b in+ q5c PJFET2
Q3 q3c  q3b r2  NPN
Q4 q10b q3b r3  NPN
Q9 vcc  q3c q3b NPN
R2 r2   vee     1080
R3 r3   vee     1080
R4 q3b  vee     30k
*C1 r2  vee     15pF

* Gain

Q10  vcc  q10b  q11b NPN
Q11 q15b q11b r6   NPN
R5  q11b vee  30k
R6  r6   vee  100
C2  q10b  q15b 18pF
D1  q10b  q15b D

* Vbe multiplier

Q12 q14b q14b q13b NPN
Q13 q14b q13b q15b NPN
R7  q13b q15b 50k

* Output

Q14 vcc q14b q14e NPN 3
Q15 vee q15b q15e PNP 3
R8  q14e mid  64
R9  mid  q15e 64
R10 mid  out  128

.model DZ D(IS=10fA BV=5.0)
.model D D(IS=1fA)
.model PJFET PJF(VTO=-1 BETA=0.246e-3 LAMBDA=5e-3)
.model PJFET2 PJF(VTO=-1 BETA=0.246e-3 LAMBDA=5e-3)

.model npn NPN ( Bf=200 Br=2.0 VAf=130V Is=5fA Tf=0.35ns
+ Rb=200 Rc=200 Re=2 Cje=1.0pF Vje=0.70V Mje=0.33 Cjc=0.3pF
+ Vjc=0.55V Mjc=0.5 Cjs=3.0pF Vjs=0.52V Mjs=0.5)

.model pnp PNP ( Bf=50 Br=4.0 VAf=50V Is=2fA Tf=30ns
+ Rb=300 Rc=100 Re=10 Cje=0.3pF Vje=0.55V Mje=0.5 Cjc=1.0pF
+ Vjc=0.55V Mjc=0.5 Cjs=3.0pF Vjs=0.52V Mjs=0.5)
''')
print_op()
ng.circ(''' Vcc vcc 0 15V Vee vee 0 -15V Vid in+ in- DC 86.3u AC 1V Vcm in- 0 0 Rload out 0 10k * Bias J16 vcc vcc q8b PJFET D2 vee q8b DZ Q8 q7c q8b q8e NPN R11 q8e vee 10k Q7 q7c q7c vcc PNP Q6 q14b q7c vcc PNP Q5 q5c q7c q5e PNP R1 vcc q5e 100 * Input J1 q3c in- q5c PJFET J2 q10b in+ q5c PJFET2 Q3 q3c q3b r2 NPN Q4 q10b q3b r3 NPN Q9 vcc q3c q3b NPN R2 r2 vee 1080 R3 r3 vee 1080 R4 q3b vee 30k *C1 r2 vee 15pF * Gain Q10 vcc q10b q11b NPN Q11 q15b q11b r6 NPN R5 q11b vee 30k R6 r6 vee 100 C2 q10b q15b 18pF D1 q10b q15b D * Vbe multiplier Q12 q14b q14b q13b NPN Q13 q14b q13b q15b NPN R7 q13b q15b 50k * Output Q14 vcc q14b q14e NPN 3 Q15 vee q15b q15e PNP 3 R8 q14e mid 64 R9 mid q15e 64 R10 mid out 128 .model DZ D(IS=10fA BV=5.0) .model D D(IS=1fA) .model PJFET PJF(VTO=-1 BETA=0.246e-3 LAMBDA=5e-3) .model PJFET2 PJF(VTO=-1 BETA=0.246e-3 LAMBDA=5e-3) .model npn NPN ( Bf=200 Br=2.0 VAf=130V Is=5fA Tf=0.35ns + Rb=200 Rc=200 Re=2 Cje=1.0pF Vje=0.70V Mje=0.33 Cjc=0.3pF + Vjc=0.55V Mjc=0.5 Cjs=3.0pF Vjs=0.52V Mjs=0.5) .model pnp PNP ( Bf=50 Br=4.0 VAf=50V Is=2fA Tf=30ns + Rb=300 Rc=100 Re=10 Cje=0.3pF Vje=0.55V Mje=0.5 Cjc=1.0pF + Vjc=0.55V Mjc=0.5 Cjs=3.0pF Vjs=0.52V Mjs=0.5) ''') print_op()
       in+ =     0.09 mV
       in- =     0.00 mV
       mid =    -2.10 mV
       out =    -2.08 mV
      q10b =  -13.721 V
      q11b =  -14.295 V
      q13b =    33.12 mV
      q14b =   598.40 mV
      q14e =     6.98 mV
      q15b =  -622.82 mV
      q15e =   -11.20 mV
       q3b =  -14.254 V
       q3c =  -13.680 V
       q5c =  -328.50 mV
       q5e =   14.976 V
       q7c =   14.320 V
       q8b =  -10.033 V
       q8e =  -10.681 V
        r2 =  -14.872 V
        r3 =  -14.872 V
        r6 =  -14.949 V
       vcc =   15.000 V
vcc#branch = -1641.94 uA
vcm#branch =    -0.03 nanoA
       vee =  -15.000 V
vee#branch =  1642.15 uA
vid#branch =    -0.01 nanoA
Copied!
ng.cmd('dc vid 0u 200u 0.1u')
Vin = ng.vector('in+')
Vout = ng.vector('out')
plt.plot(Vin*1e3, Vout)
cross = sum(Vout < 0)
plt.xlabel('Differential input voltage (mV)')
plt.ylabel('Output voltage (V)')
plt.title('Open loop amplify')
print('Output swing %.2f to %.2f' % (min(Vout), max(Vout)))
ng.cmd('dc vid 0u 200u 0.1u') Vin = ng.vector('in+') Vout = ng.vector('out') plt.plot(Vin*1e3, Vout) cross = sum(Vout < 0) plt.xlabel('Differential input voltage (mV)') plt.ylabel('Output voltage (V)') plt.title('Open loop amplify') print('Output swing %.2f to %.2f' % (min(Vout), max(Vout)))
Output swing -13.18 to 14.00
No description has been provided for this image
Copied!
cross_point = np.sum(Vout < 0)
assert Vout[cross_point] > 0 and Vout[cross_point-1] < 0
print('Vos = %.1f uV Vout = %.1f mV' % (Vin[cross_point] * 1e6, Vout[cross_point]*1e3))

assert Vout[0] < -10 and Vout[-1] > 10
start = np.sum(Vout < -10)
end =  np.sum(Vout < 10)
deltaVin = Vin[end] - Vin[start]
print('Delta Vin for 10V delta in Vout: %.1f uV' % (1e6*deltaVin/2))
deltaVout = Vout[end] - Vout[start]
gain = deltaVout / deltaVin
print('Gain = %.0f V/mV, %.1f dB' % (gain/1e3, 20*log10(gain)))
cross_point = np.sum(Vout < 0) assert Vout[cross_point] > 0 and Vout[cross_point-1] < 0 print('Vos = %.1f uV Vout = %.1f mV' % (Vin[cross_point] * 1e6, Vout[cross_point]*1e3)) assert Vout[0] < -10 and Vout[-1] > 10 start = np.sum(Vout < -10) end = np.sum(Vout < 10) deltaVin = Vin[end] - Vin[start] print('Delta Vin for 10V delta in Vout: %.1f uV' % (1e6*deltaVin/2)) deltaVout = Vout[end] - Vout[start] gain = deltaVout / deltaVin print('Gain = %.0f V/mV, %.1f dB' % (gain/1e3, 20*log10(gain)))
Vos = 86.4 uV Vout = 21.7 mV
Delta Vin for 10V delta in Vout: 42.7 uV
Gain = 234 V/mV, 107.4 dB
Copied!
ng.cmd('dc vcm -15V 15V 1m')

Vout = ng.vector('out')
Vin = ng.vector('in-')
plt.plot(Vin, Vout)
plt.xlabel('Common mode input voltage (V)')
plt.ylabel('Output voltage (V)')
plt.title('Open loop Vcm vs. Vout')
print('Output range: %.2f V to %.2f V' % (min(Vout), max(Vout)))
plt.ylim([-15, 15])
ng.cmd('dc vcm -15V 15V 1m') Vout = ng.vector('out') Vin = ng.vector('in-') plt.plot(Vin, Vout) plt.xlabel('Common mode input voltage (V)') plt.ylabel('Output voltage (V)') plt.title('Open loop Vcm vs. Vout') print('Output range: %.2f V to %.2f V' % (min(Vout), max(Vout))) plt.ylim([-15, 15])
Output range: -13.36 V to 14.07 V
(-15.0, 15.0)
No description has been provided for this image

DC transfer function¶

Copied!
ng.cmd('tf v(out) vid')
ng.vectors()
ng.cmd('tf v(out) vid') ng.vectors()
{'output_impedance_at_V(out)': array([1258.36662401]),
 'vid#Input_impedance': array([2.74265901e+09]),
 'Transfer_function': array([237458.95448348])}
Copied!
ng.cmd('tf v(out) vcm')
ng.vectors()
ng.cmd('tf v(out) vcm') ng.vectors()
{'output_impedance_at_V(out)': array([1258.36662401]),
 'vcm#Input_impedance': array([4.97225885e+11]),
 'Transfer_function': array([0.9148618])}

Frequency response¶

Copied!
ng.cmd('AC dec 10 0.1Hz 100MegHz')
freq = ng.vector('frequency')
out = ng.vector('out')

fig, ax = plt.subplots()
plt.loglog(freq, np.abs(out))
plt.title('Frequency response')
plt.ylabel('Gain')
plt.xlabel('Frequency (Hz)')
for i in range(len(freq)):
    if int(freq[i]*100) in np.power(10, range(10)):
        print('Gain at %8.0f Hz is %10.2f  Phase %6.1f deg ' % (freq[i], np.abs(out[i]), degrees(np.angle(out[i]))))
plt.ylim(1e-2, 1e6)

ax2 = ax.twinx()
phase =  np.unwrap(np.angle(out))/math.pi*180
plt.semilogx(freq, phase, '--y')

plt.ylim(-200, 10)
plt.ylabel('Phase (degree)')

print('Gain %.1f dB' % (log10(np.abs(out[0]))*20))
cross = sum(np.abs(out) > 1)
print('%.2f MHz' % (freq[cross]/1e6))
ng.cmd('AC dec 10 0.1Hz 100MegHz') freq = ng.vector('frequency') out = ng.vector('out') fig, ax = plt.subplots() plt.loglog(freq, np.abs(out)) plt.title('Frequency response') plt.ylabel('Gain') plt.xlabel('Frequency (Hz)') for i in range(len(freq)): if int(freq[i]*100) in np.power(10, range(10)): print('Gain at %8.0f Hz is %10.2f Phase %6.1f deg ' % (freq[i], np.abs(out[i]), degrees(np.angle(out[i])))) plt.ylim(1e-2, 1e6) ax2 = ax.twinx() phase = np.unwrap(np.angle(out))/math.pi*180 plt.semilogx(freq, phase, '--y') plt.ylim(-200, 10) plt.ylabel('Phase (degree)') print('Gain %.1f dB' % (log10(np.abs(out[0]))*20)) cross = sum(np.abs(out) > 1) print('%.2f MHz' % (freq[cross]/1e6))
Gain at        0 Hz is  237451.96  Phase   -0.5 deg 
Gain at        1 Hz is  236728.56  Phase   -4.5 deg 
Gain at       10 Hz is  186662.49  Phase  -38.2 deg 
Gain at      100 Hz is   29957.04  Phase  -82.8 deg 
Gain at     1000 Hz is    3019.59  Phase  -89.3 deg 
Gain at    10000 Hz is     301.98  Phase  -90.1 deg 
Gain at   100000 Hz is      30.18  Phase  -92.0 deg 
Gain at  1000000 Hz is       2.85  Phase -108.9 deg 
Gain at 10000000 Hz is       0.10  Phase -160.2 deg 
Gain 107.5 dB
2.51 MHz
No description has been provided for this image

Slew-rate¶

No description has been provided for this image
Copied!
ng.circ('''
* power supplies

V1  vcc 0  15V
V2  vee 0 -15V

Vin  vin    0   DC -5 PULSE -5 5 1u 10N 10N 3U 100U 
R1   in+  vin   100
R2   in-  out   100

Rload out    0   10000

X  in+ in- vcc vee out TL082
X2 vin out2 vcc vee out2 TL082M

.include tl082.cir

*.options savecurrents
''')
ng.cmd('tran 10n 6.5u')
t = ng.vector('time')
Vout = ng.vector('out')
Vout2 = ng.vector('out2')
Vin = ng.vector('vin')
plt.plot(t*1e6, Vin, '--', label='Vin')
plt.plot(t*1e6, Vout, label='Vout')
plt.plot(t*1e6, Vout2, '-.', label='Macromodel')
plt.ylabel('Input/Output voltage (V) ')
plt.xlabel('Time (μs)')
plt.title('Slew rate')
plt.legend()
ng.circ(''' * power supplies V1 vcc 0 15V V2 vee 0 -15V Vin vin 0 DC -5 PULSE -5 5 1u 10N 10N 3U 100U R1 in+ vin 100 R2 in- out 100 Rload out 0 10000 X in+ in- vcc vee out TL082 X2 vin out2 vcc vee out2 TL082M .include tl082.cir *.options savecurrents ''') ng.cmd('tran 10n 6.5u') t = ng.vector('time') Vout = ng.vector('out') Vout2 = ng.vector('out2') Vin = ng.vector('vin') plt.plot(t*1e6, Vin, '--', label='Vin') plt.plot(t*1e6, Vout, label='Vout') plt.plot(t*1e6, Vout2, '-.', label='Macromodel') plt.ylabel('Input/Output voltage (V) ') plt.xlabel('Time (μs)') plt.title('Slew rate') plt.legend()
<matplotlib.legend.Legend at 0x7fa7098a5190>
No description has been provided for this image

Phase reversal¶

Copied!
ng.circ('''
* power supplies
V1  vcc 0  15V
V2  vee 0  0V

Vin  vin    0    2V
R1   in+  vin  100
R2   in-  out  100

Rload out    0   10000

X  in+ in- vcc vee out TL082

.include tl082.cir
.options savecurrents
''')
# print_op(0)
ng.cmd('dc vin 0V 15V 1m')

Vout = ng.vector('out')
Vin = ng.vector('vin')
# plt.figure(figsize=(4, 3))
plt.plot(Vin, Vout)
plt.xlabel('Common mode input voltage (V)')
plt.ylabel('Output voltage (V)')
plt.title('Phase Reversal')
print('Output range: %.2f V to %.2f V' % (min(Vout), max(Vout)))
ng.circ(''' * power supplies V1 vcc 0 15V V2 vee 0 0V Vin vin 0 2V R1 in+ vin 100 R2 in- out 100 Rload out 0 10000 X in+ in- vcc vee out TL082 .include tl082.cir .options savecurrents ''') # print_op(0) ng.cmd('dc vin 0V 15V 1m') Vout = ng.vector('out') Vin = ng.vector('vin') # plt.figure(figsize=(4, 3)) plt.plot(Vin, Vout) plt.xlabel('Common mode input voltage (V)') plt.ylabel('Output voltage (V)') plt.title('Phase Reversal') print('Output range: %.2f V to %.2f V' % (min(Vout), max(Vout)))
ERROR:ngspyce.sharedspice:Note: Starting dynamic gmin stepping
ERROR:ngspyce.sharedspice:Note: Dynamic gmin stepping completed
Output range: 1.25 V to 14.07 V
No description has been provided for this image

Input offset voltage¶

Previous Next

Built with MkDocs using a theme provided by Read the Docs.
GitHub « Previous Next »