Fixed PNP model and added test netlist (bjt.c) [Couriersud]

This commit is contained in:
Couriersud 2014-01-01 20:28:59 +00:00
parent 1006bc5bd9
commit 3b28221fd3
6 changed files with 56 additions and 7 deletions

1
.gitattributes vendored
View File

@ -348,6 +348,7 @@ keymaps/km_se_LINUX.map svneol=native#text/plain
keymaps/km_se_OSX.map svneol=native#text/plain
/makefile svneol=native#text/plain
nl_examples/7400_astable.c svneol=native#text/plain
nl_examples/bjt.c svneol=native#text/plain
nl_examples/ne555_astable.c svneol=native#text/plain
nl_examples/opamp.c svneol=native#text/plain
src/build/build.mak svneol=native#text/plain

46
nl_examples/bjt.c Normal file
View File

@ -0,0 +1,46 @@
/*
* bjt.c
*
*/
#include "netlist/devices/net_lib.h"
NETLIST_START(bjt)
/* Standard stuff */
NETDEV_CLOCK(clk)
NETDEV_PARAM(clk.FREQ, 1000) // 1000 Hz
NETDEV_SOLVER(Solver)
NETDEV_PARAM(Solver.FREQ, 48000)
NETDEV_ANALOG_CONST(V5, 5)
NETDEV_ANALOG_CONST(V3, 3.5)
/* NPN - example */
NETDEV_QNPN(Q, BC237B)
NETDEV_R(RB, 1000)
NETDEV_R(RC, 1000)
NET_C(RC.1, V5)
NET_C(RC.2, Q.C)
NET_C(RB.1, clk)
NET_C(RB.2, Q.B)
NET_C(Q.E, GND)
/* PNP - example */
NETDEV_QPNP(Q1, BC556B)
NETDEV_R(RB1, 1000)
NETDEV_R(RC1, 1000)
NET_C(RC1.1, GND)
NET_C(RC1.2, Q1.C)
NET_C(RB1.1, clk)
NET_C(RB1.2, Q1.B)
NET_C(Q1.E, V3)
//NETDEV_LOG(logB, Q1.B)
//NETDEV_LOG(logC, Q1.C)
NETLIST_END()

View File

@ -228,10 +228,7 @@ NETLIB_UPDATE_PARAM(QBJT_switch<_type>)
// Assume 5mA Collector current for switch operation
if (_type == BJT_NPN)
m_V = d.V(0.005 / alpha);
else
m_V = - d.V(0.005 / alpha);
m_V = d.V(0.005 / alpha);
m_gB = d.gI(0.005 / alpha);
if (m_gB < NETLIST_GMIN)

View File

@ -314,13 +314,14 @@ public:
{
double vE = INPANALOG(m_EV);
double vB = INPANALOG(m_BV);
double m = (_type == BJT_NPN) ? 1 : -1;
int new_state = (vB - vE > m_V ) ? 1 : 0;
int new_state = ((vB - vE) * m > m_V ) ? 1 : 0;
if (m_state_on ^ new_state)
{
double gb = m_gB;
double gc = m_gC;
double v = m_V;
double v = m_V * m;
if (!new_state )
{
// not conducting

View File

@ -62,6 +62,10 @@ void netlist_parser::parse(const char *buf)
netdev_device(n, "R");
else if (n == "NETDEV_D")
netdev_device(n, "model", true);
else if (n == "NETDEV_QNPN")
netdev_device(n, "model", true);
else if (n == "NETDEV_QPNP")
netdev_device(n, "model", true);
else if ((n == "NETDEV_TTL_CONST") || (n == "NETDEV_ANALOG_CONST"))
netdev_const(n);
else if (n == "NETLIST_START")

View File

@ -21,7 +21,7 @@ static NETLIST_START(base)
NET_MODEL(".model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
NET_MODEL(".model 1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
NET_MODEL(".MODEL BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
NETLIST_END()