mirror of
https://github.com/holub/mame
synced 2025-10-04 08:28:39 +03:00

improvements. - fix MB3614 parameter - Added VARCLOCK which derives step size from function - optimized function handling in CS and VS - fixed a bug in ppreprocessor - add trunc to pfunction - added opamp_amplification_curve to derive characteristic amplification curve
73 lines
1.5 KiB
C++
73 lines
1.5 KiB
C++
// license:GPL-2.0+
|
|
// copyright-holders:Couriersud
|
|
/*
|
|
* Script to analyze opamp amplification as a function of frequency.
|
|
*
|
|
* ./nltool -t 0.5 -f nl_examples/opamp_amplification_curve.cpp
|
|
*
|
|
* t=0.0: 10 Hz
|
|
* t=0.1: 100 Hz
|
|
* t=0.2: 1000 Hz
|
|
* t=0.3: 10000 Hz
|
|
* t=0.4: 100000 Hz
|
|
* ....
|
|
*
|
|
* ./plot_nl.sh --log Y Z
|
|
*/
|
|
|
|
|
|
#include "netlist/devices/net_lib.h"
|
|
|
|
#define OPAMP_TEST "MB3614(FPF=10 UGF=1000k)"
|
|
|
|
NETLIST_START(main)
|
|
|
|
/* Standard stuff */
|
|
|
|
//VARCLOCK(clk, "0.5 / pow(10, 1 + T * 4)")
|
|
//CLOCK(clk, 1000)
|
|
SOLVER(Solver, 48000)
|
|
PARAM(Solver.ACCURACY, 1e-7)
|
|
PARAM(Solver.NR_LOOPS, 300)
|
|
PARAM(Solver.DYNAMIC_TS, 1)
|
|
PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-7)
|
|
|
|
VS(vs, 0)
|
|
PARAM(vs.FUNC, "0.001 * sin(6.28 * pow(10, 1 + 10*T) * T)")
|
|
//PARAM(vs.FUNC, "0.001 * sin(6.28 * pow(10, trunc((1 + T * 4)*2)/2) * T)")
|
|
//PARAM(vs.FUNC, "1.001 * sin(6.28 * 100 * T)")
|
|
PARAM(vs.R, 0.001)
|
|
ALIAS(clk, vs.1)
|
|
NET_C(vs.2, GND)
|
|
ANALOG_INPUT(V12, 12)
|
|
ANALOG_INPUT(VM12, -12)
|
|
|
|
OPAMP(op,OPAMP_TEST)
|
|
|
|
NET_C(op.GND, VM12)
|
|
NET_C(op.VCC, V12)
|
|
|
|
/* Opamp B wired as inverting amplifier connected to output of first opamp */
|
|
|
|
RES(R1, 0.1)
|
|
RES(R2, 10000)
|
|
|
|
NET_C(op.PLUS, GND)
|
|
NET_C(op.MINUS, R2.2)
|
|
NET_C(op.MINUS, R1.2)
|
|
|
|
NET_C(clk, R1.1)
|
|
NET_C(op.OUT, R2.1)
|
|
|
|
RES(RL, 2000)
|
|
NET_C(RL.2, GND)
|
|
NET_C(RL.1, op.OUT)
|
|
|
|
AFUNC(f, 1, "A0 * 1000")
|
|
NET_C(f.A0, op.OUT)
|
|
#if 1
|
|
LOG(log_Y, R1.1)
|
|
LOG(log_Z, f)
|
|
#endif
|
|
NETLIST_END()
|