[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: gEDA-user: zener diode modeling
On Monday 18 April 2011, yamazakir2 wrote:
> Does anybody have a nice and simple zener diode model they
> would like to share? The model that I am using has trouble
> with convergence in context of a complicated switching
> circuit with ngspice.
have you tried gnucap?
You will need the spice-diode plugin to get the reverse
breakdown, or use the parallel combo that Andy suggested,
because the "native" model doesn't do breakdown. Several
plugins do.
The two-diode and battery approach has an advantage that the
iteration limiting is better behaved that way. The spice
junction limiting doesn't work correctly for the breakdown
region. The code isn't there.
I don't expect the "B" device approach to help much if any.
Usually its convergence characteristics are worse than the "C"
models.
The reason I expect gnucap might work better here is the time
step control algorithm, which gives much tighter control than
the algorithm used in Spice.
In a later post, you said that the convergence failures are
occuring during the transient analysis. It runs for a while
then screws up.
Spice time step control is based on three things ..
1. Truncation error in numerical differentiation, storage
elements only.
2. Iteration count.
3. Pre-determined "break-points", but only in a few places.
The problems:
1. Non-storage devices do not participate in step control, at
all. In the simple case, it might not seem like a problem, you
just get a plot that is rough to look at, and manually reduce
the step size. In a complex case, the undersampled waveform
provides a very wrong input to the storage devices, causing
incorrect results. The familiar aliasing you get from sampling
is one example of this.
2. No handling of analog events.
3. Using iteration count as step control involves many
failure/recovery cycles. The failures are not completely
forgotten, so numeric problems can drive it to neverland.
Gnucap uses these methods as part of the algorithm, and where
used they work the same, but also has more.
1. Non-storage devices also participate in step control, based
on curve fitting. Step size is chosen such that common
interpolation will produce a curve, where the whole curve is
within an error bound. (Spectre method)
2. Some devices generate analog events, for example on a region
change. At an analog event, the time of crossing is error
controlled. Unfortunately not all devices do this, but you can
add switches (S device) to specify places in the circuit where
you need this extra control.
3. Behavioral devices, including spice-style sources (Sin, sffm,
etc) generate analog events sufficient that they can be modeled
correctly, including phase.
Most of the time, you can skip specifying a time step entirely,
and it will automatically step appropriately.
In this case, if I understand correctly, you have a circuit that
has some abrupt changes that occur at certain times, but before
and after that time activitity is slow.
With Spice time stepping, the steps will be large before the
abrupt change, skipping over it. In some cases, it seems to
work and you get believable wrong answers. In other cases, it
results in a convergence failure, triggering a step rejection,
and a retry with smaller time steps.
The Gnucap algorithm helps in several ways ..
First, since all components participate in time step control, it
is likely that a shape change in the waveform will cause a
reduction in step size, even if there are no storage devices.
Often this is enough.
In the future, the semiconductor devices will generate analog
events on region crossings, but they don't yet.
For now, you can do this explicitly by adding a switch to the
circuit. Recall .. the voltage controlled switch has an input
port, where crossing a threshold causes a resistance change on
the output port. The trick here is to just use it to detect the
crossing. Ground both output terminals, and connect the input
across the critical spot, for example across your zener. Set
the threshold (in the switch's .model statement) at the critical
voltage. It Spice, this won't do anything. In Gnucap, if you
use the Spice switch, it will work just like it does in Spice.
You need to use the Gnucap native switch model. What it does is
to force accurate time stepping around the crossing. There will
be extra time steps just before and after the crossing, so as to
provide additional accuracy in the region of the crossing. The
additional steps are such that the accuracy of the time of
crossing is error controlled to the specified tolerances.
How it helps in this case, is that rather than going past the
critical spot, then going into a recovery cycle, step size is
reduced leading up to the crossing, so it doesn't go by, and
doesn't need to fall back to the recovery cycle, hopefully
solving the convergence problem.
It's not perfect, there is still work to do, but I believe that
as it is, it provides a significant improvement over the
traditional algorithm. I have (in the test suite) several test
cases that show improvement over the standard algorithm. I have
used it to model oscillators. I have seen cases where spice
failed to converge, but gnucap simulated it accurately enough to
measure distortion of a supposedly sine wave oscillator. I have
another case, using a switch to make a relaxation oscillator,
where Gnucap models it accurately, (waveform and frequency are
correct) but NGspice and LTspice both give identical incorrect
results (strange waveform, incorrect frequency). If you just
look at the output quickly, you may not notice that it is wrong,
but looking at internal nodes and expanding the waveform around
critical points, it becomes clear that it is wrong.
Another factor, loosely related, is that it is possible that
"trapezoidal ringing" is sending it into a condition where you
get nonsense results. If this case, you may be able to get
better results by specifying Gear or Euler differentiation.
This applies to both gnucap and spice, but the step control in
gnucap makes it less likely that gnucap will have a problem with
it.
"Less likely" does not mean "guaranteed". When dealing with
iterative solution and dynamic step control, nothing is
guaranteed to work, and changes that help sometimes will hurt
other times. This is one reason that having two simulators that
really are different is a lot better than either one alone.
_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user