Fix a bug in simple diode, when ilimit is set, but not epsilon.
Make model more similar to LTSPICE Add an example
This commit is contained in:
parent
8d86aa84d8
commit
dc8c7db718
|
|
@ -0,0 +1,25 @@
|
||||||
|
simple diode automatic test
|
||||||
|
* 'set ngbehavior=lta' required in .spiceinit
|
||||||
|
V1 in 0 dc 0
|
||||||
|
|
||||||
|
D1 in out1 A
|
||||||
|
R1 out1 0 1u
|
||||||
|
D2 in out2 B
|
||||||
|
R2 out2 0 1u
|
||||||
|
D3 in out3 C
|
||||||
|
R3 out3 0 1u
|
||||||
|
|
||||||
|
.probe alli
|
||||||
|
|
||||||
|
.model A D(Ron=1 Roff=1Meg Vfwd=1 Vrev=2)
|
||||||
|
.model B D(Ron=1 Roff=1Meg Vfwd=1 Vrev=2 Ilimit=1 RevILimit=1)
|
||||||
|
.model C D(Ron=1 Roff=1Meg Vfwd=1 Vrev=2 Ilimit=1 RevILimit=1 epsilon=1 revepsilon=1)
|
||||||
|
|
||||||
|
.control
|
||||||
|
dc V1 -5 5 1m
|
||||||
|
display
|
||||||
|
set xbrushwidth=2
|
||||||
|
plot i(r1) i(r2) i(r3)
|
||||||
|
.endc
|
||||||
|
|
||||||
|
.end
|
||||||
|
|
@ -147,23 +147,22 @@ void cm_sidiode(ARGS) /* structure holding parms,
|
||||||
grev = 1./PARAM(rrev);
|
grev = 1./PARAM(rrev);
|
||||||
|
|
||||||
hRevepsilon = 0.5 * PARAM(revepsilon);
|
hRevepsilon = 0.5 * PARAM(revepsilon);
|
||||||
loc->Va = Va = Vrev - hRevepsilon;
|
loc->Va = Va = Vrev - PARAM(revepsilon); //hRevepsilon;
|
||||||
loc->Vb = Vb = Vrev + hRevepsilon;
|
loc->Vb = Vb = Vrev; //+ hRevepsilon;
|
||||||
|
loc->a2 = grev/Revilimit;
|
||||||
if(hRevepsilon > 0.0) {
|
if(hRevepsilon > 0.0) {
|
||||||
loc->a1 = (goff - grev)/PARAM(revepsilon);
|
loc->a1 = (goff - grev)/PARAM(revepsilon);
|
||||||
loc->a2 = grev/Revilimit;
|
|
||||||
loc->revepsi = MIF_TRUE;
|
loc->revepsi = MIF_TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
loc->revepsi = MIF_FALSE;
|
loc->revepsi = MIF_FALSE;
|
||||||
|
|
||||||
hEpsilon = 0.5 * PARAM(epsilon);
|
hEpsilon = 0.5 * PARAM(epsilon);
|
||||||
loc->Vc = Vc = Vfwd - hEpsilon;
|
loc->Vc = Vc = Vfwd; // - hEpsilon;
|
||||||
loc->Vd = Vd = Vfwd + hEpsilon;
|
loc->Vd = Vd = Vfwd + PARAM(epsilon); //hEpsilon;
|
||||||
|
loc->b2 = gon/Ilimit;
|
||||||
if(hEpsilon > 0.0) {
|
if(hEpsilon > 0.0) {
|
||||||
loc->b1 = (gon - goff)/PARAM(epsilon);
|
loc->b1 = (gon - goff)/PARAM(epsilon);
|
||||||
loc->b2 = gon/Ilimit;
|
|
||||||
loc->epsi = MIF_TRUE;
|
loc->epsi = MIF_TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue