mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
netlist: Add UJT example for 2N6027.
This commit is contained in:
parent
ed9c85904e
commit
43c6cad7dd
101
nl_examples/2N6027.cpp
Normal file
101
nl_examples/2N6027.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Couriersud
|
||||
|
||||
#include "netlist/devices/net_lib.h"
|
||||
|
||||
/*
|
||||
* Run with
|
||||
* ./nltool -t 1 -f nl_examples/2N6027.cpp -l PUT.A -l PUT.K -l PUT.G -v
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Library section header START
|
||||
* ---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __PLIB_PREPROCESSOR__
|
||||
|
||||
#define PUT_2N6027(_name) \
|
||||
NET_REGISTER_DEV(G501534_DIP, _name)
|
||||
|
||||
//NETLIST_EXTERNAL(ex2N6027)
|
||||
NETLIST_EXTERNAL(loc_lib)
|
||||
|
||||
#endif
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Library section header END
|
||||
* ---------------------------------------------------------------------------*/
|
||||
|
||||
NETLIST_START(ex2N6027)
|
||||
|
||||
/* This is a circuit pushing the solvers to the limits
|
||||
* 50,000 maximum NR loops.
|
||||
*/
|
||||
SOLVER(Solver, 48000)
|
||||
PARAM(Solver.ACCURACY, 1e-5)
|
||||
PARAM(Solver.DYNAMIC_TS, 1)
|
||||
PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-9)
|
||||
PARAM(Solver.NR_LOOPS, 50000)
|
||||
PARAM(Solver.METHOD, "MAT_CR")
|
||||
|
||||
LOCAL_SOURCE(loc_lib)
|
||||
INCLUDE(loc_lib)
|
||||
|
||||
ANALOG_INPUT(VB, 10)
|
||||
|
||||
PUT_2N6027(PUT)
|
||||
|
||||
// Figure 3 from datasheet
|
||||
RES(R1, RES_K(510))
|
||||
RES(R2, RES_K(16))
|
||||
RES(R3, RES_K(27))
|
||||
RES(R4, 20)
|
||||
CAP(C, CAP_U(0.1))
|
||||
|
||||
NET_C(VB, R1.1, R2.1)
|
||||
NET_C(R1.2, C.1, PUT.A)
|
||||
NET_C(PUT.K, R4.1)
|
||||
NET_C(PUT.G, R2.2, R3.1)
|
||||
|
||||
NET_C(GND, C.2, R4.2, R3.2)
|
||||
|
||||
NETLIST_END()
|
||||
|
||||
|
||||
NETLIST_START(PUT_2N6027)
|
||||
|
||||
NET_MODEL("2N6027_NPN NPN(IS=5E-15 VAF=100 IKF=0.3 ISE=1.85E-12 NE=1.45 RE=0.15 RC=0.15 CJE=7E-10 TF=0.6E-8 CJC=2.2E-10 TR=4.76E-8 XTB=3)")
|
||||
NET_MODEL("2N6027_PNP PNP(IS=2E-15 VAF=100 IKF=0.3 ISE=1.90E-12 NE=1.5 RE=0.15 RC=0.15 CJE=7E-10 TF=1.6E-8 CJC=2.2E-10 TR=5.1E-8 XTB=3)")
|
||||
|
||||
QBJT_EB(Q1, "2N6027_NPN")
|
||||
QBJT_EB(Q2, "2N6027_PNP")
|
||||
|
||||
/* The netlist transistor model currently doesn't support
|
||||
* BE and BC capacitances.
|
||||
* Adding those here significantly reduces NR loops.
|
||||
* FIXME: Needs to be removed when added to the
|
||||
* transistor EB model.
|
||||
*/
|
||||
#if 1
|
||||
CAP(CJE1, CAP_N(1))
|
||||
CAP(CJE2, CAP_N(1))
|
||||
|
||||
NET_C(CJE1.1, Q1.B)
|
||||
NET_C(CJE1.2, Q1.E)
|
||||
NET_C(CJE2.1, Q2.B)
|
||||
NET_C(CJE2.2, Q2.E)
|
||||
#endif
|
||||
NET_C(Q1.C, Q2.B)
|
||||
NET_C(Q1.B, Q2.C)
|
||||
|
||||
ALIAS(G, Q2.B)
|
||||
ALIAS(A, Q2.E)
|
||||
ALIAS(K, Q1.E)
|
||||
|
||||
NETLIST_END()
|
||||
|
||||
NETLIST_START(loc_lib)
|
||||
|
||||
LOCAL_LIB_ENTRY(PUT_2N6027)
|
||||
|
||||
NETLIST_END()
|
@ -914,6 +914,7 @@ nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity)
|
||||
if (factor != plib::constants<nl_double>::one())
|
||||
tmp = plib::left(tmp, tmp.size() - 1);
|
||||
// FIXME: check for errors
|
||||
//printf("%s %s %e %e\n", entity.c_str(), tmp.c_str(), plib::pstonum<nl_double>(tmp), factor);
|
||||
return plib::pstonum<nl_double>(tmp) * factor;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user