mirror of
https://github.com/mamedev/mame.git
synced 2024-11-18 10:06:19 +01:00
4b4b4542b2
- fixed a bug in which the fallback solver was called instead of gauss - seidel. - matrix solvers are now subdevices of the solver devices - matrix solvers can now be scheduled independently - Rename RESCHED_LOOPS to GS_LOOPS (Gauss Seidel) - Added paragmenter NR_LOOPS (Newton Raphson)
87 lines
1.6 KiB
C
87 lines
1.6 KiB
C
/*
|
|
* opamp.c
|
|
*
|
|
*/
|
|
|
|
|
|
#include "netlist/devices/net_lib.h"
|
|
|
|
NETLIST_START(main)
|
|
|
|
/* Standard stuff */
|
|
|
|
CLOCK(clk, 1000) // 1000 Hz
|
|
SOLVER(Solver, 48000)
|
|
//PARAM(Solver.ACCURACY, 1e-3)
|
|
//PARAM(Solver.CONVERG, 1.0)
|
|
//PARAM(Solver.GS_LOOPS, 30)
|
|
|
|
/* Opamp wired as impedance changer */
|
|
SUBMODEL(op, opamp)
|
|
|
|
NET_C(op.GND, GND)
|
|
NET_C(op.PLUS, clk)
|
|
NET_C(op.MINUS, op.OUT)
|
|
|
|
SUBMODEL(op1, opamp)
|
|
/* Wired as inverting amplifier connected to output of first opamp */
|
|
|
|
RES(R1, 100000)
|
|
RES(R2, 200000)
|
|
|
|
NET_C(op1.GND, GND)
|
|
NET_C(op1.PLUS, GND)
|
|
NET_C(op1.MINUS, R2.2)
|
|
NET_C(op1.MINUS, R1.2)
|
|
|
|
NET_C(op.OUT, R1.1)
|
|
NET_C(op1.OUT, R2.1)
|
|
|
|
RES(RL, 1000)
|
|
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, G1.IN) // Negative input
|
|
ALIAS(OUT, EBUF.OP) // Opamp output ...
|
|
|
|
ALIAS(GND, EBUF.ON) // GND terminal
|
|
|
|
/* The opamp model */
|
|
|
|
VCCS(G1)
|
|
PARAM(G1.G, 100) // 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(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)
|
|
|
|
NETLIST_END()
|