summaryrefslogtreecommitdiffstatshomepage
path: root/nl_examples/opamp.c
blob: 9f17ac7cc2c217f93cbecbb525654d8c3c854797 (plain) (blame)
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
/*
 * opamp.c
 *
 */


#include "netlist/devices/net_lib.h"

NETLIST_START(opamp)

    /* Opamp model from
     *
     * http://www.ecircuitcenter.com/Circuits/opmodel1/opmodel1.htm
     *
     * Bandwidth 10Mhz
     *
     * This one is connected as a impedance changer
     */

    /* Standard stuff */

    NETDEV_CLOCK(clk)
    NETDEV_PARAM(clk.FREQ, 1000) // 1000 Hz
    NETDEV_SOLVER(Solver)
    NETDEV_PARAM(Solver.FREQ, 48000)
    NETDEV_PARAM(Solver.ACCURACY, 1e-6)

    /* Wiring up the opamp */

    NET_C(PLUS, clk)
    NET_C(MINUS, OUT)

    /* The opamp model */

    NETDEV_VCCS(G1)
    NETDEV_PARAM(G1.G, 100)  // typical OP-AMP amplification 100 * 1000 = 100000
    NETDEV_R(RP1, 1000)
    NETDEV_C(CP1, 1.59e-6)   // <== change to 1.59e-3 for 10Khz bandwidth
    NETDEV_VCVS(EBUF)
    NETDEV_PARAM(EBUF.RO, 50)
    NETDEV_PARAM(EBUF.G, 1)

    NET_ALIAS(PLUS, G1.IP) // Positive input
    NET_ALIAS(MINUS, G1.IN) // Negative input
    NET_ALIAS(OUT, EBUF.OP) // Opamp output ...

    NET_C(EBUF.ON, GND)

    NET_C(G1.ON, GND)
    NET_C(RP1.2, GND)
    NET_C(CP1.2, GND)
    NET_C(EBUF.IN, GND)

    NET_C(RP1.1, G1.OP)
    NET_C(CP1.1, RP1.1)
    NET_C(EBUF.IP, RP1.1)

    //NETDEV_LOG(logX, OUT)
    //NETDEV_LOG(logY, 4V)
NETLIST_END()