1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/*
* opamp.c
*
*/
#include "netlist/devices/net_lib.h"
NETLIST_START(main)
/* Standard stuff */
CLOCK(clk, 10000) // 1000 Hz
SOLVER(Solver, 48000)
ANALOG_INPUT(V5, 5)
PARAM(Solver.ACCURACY, 1e-6)
PARAM(Solver.DYNAMIC_TS, 0)
PARAM(Solver.SOR_FACTOR, 1.0)
//PARAM(Solver.CONVERG, 1.0)
PARAM(Solver.GS_LOOPS, 5)
PARAM(Solver.GS_THRESHOLD, 5)
SUBMODEL(op1, opamp_fast)
/* Wired as non - inverting amplifier like in LM3900 datasheet */
RES(R1, 25000)
RES(R2, 100000)
RES(R3, 200000)
CAP(C1, CAP_U(0.05))
NET_C(clk, C1.1)
NET_C(C1.2, R1.1)
NET_C(op1.VM, GND)
NET_C(op1.VP, V5 )
NET_C(op1.PLUS, R1.2, R3.1)
NET_C(R3.2, V5)
//NET_C(R3.2, GND)
NET_C(op1.MINUS, R2.2)
NET_C(op1.OUT, R2.1)
RES(RL, 10000)
NET_C(RL.2, GND)
NET_C(RL.1, op1.OUT)
LOG(logX, op1.OUT)
LOG(logY, clk)
NETLIST_END()
NETLIST_START(opamp)
/* Opamp model from
*
* http://www.ecircuitcenter.com/Circuits/opmodel1/opmodel1.htm
*
* Bandwidth 10Mhz
*
*/
/* Terminal definitions for calling netlists */
ALIAS(PLUS, G1.IP) // Positive input
ALIAS(MINUS, G2.IN) // Negative input
ALIAS(OUT, EBUF.OP) // Opamp output ...
ALIAS(VM, EBUF.ON) // V- terminal
ALIAS(VP, DUMMY.I) // V+ terminal
DUMMY_INPUT(DUMMY)
/* The opamp model */
CCCS(G1)
CCCS(G2)
//PARAM(G1.G, 100) // typical OP-AMP amplification 100 * 1000 = 100000
PARAM(G1.G, 1000000) // typical OP-AMP amplification 100 * 1000 = 100000
PARAM(G2.G, 1000000) // typical OP-AMP amplification 100 * 1000 = 100000
RES(RP1, 1000)
CAP(CP1, 1.59e-6) // <== change to 1.59e-3 for 10Khz bandwidth
VCVS(EBUF)
PARAM(EBUF.RO, 50)
PARAM(EBUF.G, 1)
// NET_C(EBUF.ON, GND)
NET_C(G1.ON, GND)
NET_C(G2.ON, GND)
NET_C(RP1.2, GND)
NET_C(CP1.2, GND)
NET_C(EBUF.IN, GND)
NET_C(G1.IN, G2.IP, GND)
NET_C(RP1.1, G1.OP)
NET_C(RP1.1, G2.OP)
NET_C(CP1.1, RP1.1)
NET_C(EBUF.IP, RP1.1)
NETLIST_END()
NETLIST_START(opamp_fast)
/*
* Fast norton opamp model without bandwidth
*/
/* Terminal definitions for calling netlists */
ALIAS(PLUS, R1.1) // Positive input
ALIAS(MINUS, R2.1) // Negative input
ALIAS(OUT, G1.OP) // Opamp output ...
ALIAS(VM, G1.ON) // V- terminal
ALIAS(VP, DUMMY.I) // V+ terminal
DUMMY_INPUT(DUMMY)
/* The opamp model */
RES(R1, 1)
RES(R2, 1)
NET_C(R1.1, G1.IP)
NET_C(R2.1, G1.IN)
NET_C(R1.2, R2.2, G1.ON)
VCVS(G1)
PARAM(G1.G, 1000000)
PARAM(G1.RO, RES_K(8))
NETLIST_END()
|