====== Things that can go wrong ======
===== Voltage sources in parallel =====
eg4.ckt
VOLTAGE SOURCES IN PARALLEL
V1 1 0 10.0
V2 1 0 10.2
.print dc v(1) i(V1) i(V2)
.dc
.end
Here we have V1 and V2 both driving the same node at about 10 volts.
Actually, V2 is very slightly higher than 10 volts so there will be
some argument between V1 and V2 as to exactly what the final voltage
at node 1 really is. You should see that huge currents are flowing
through the supplies (10,000 amps) just due to this small voltage
difference. Also note that gnucap does not throw in the towel and give
up, nor does it fail to converge... the answer that it gets for v(1)
is a compromise, halfway between the two sources.
What is does is introduce a slight imperfection in the voltage sources
so that they do have a small internal series resistor. This allows it
to make the best guess that it can in a difficult situation. How much is
this resistance? You can find out like so:
acs
options
Look at the value of the option called "short" (near the middle of
the block of options), this is the value (in ohms) of the internal
resistance of a voltage source. The "u" character means "micro"
or 1e-6 so the default value of a short circuit is 1e-5 ohms. You
might decide that a different short circuit value is more appropriate
for running the above circuit so you can type (from the prompt):
options short=0.5
get eg4.ckt
dc
exit
Which should show you the same voltage (10.1) but now the current
has reduced to only one fifth of an Amp (still not small but a lot
more reasonable if you were building this with real supplies).
Other option values can be altered in much the same way and input
files can contain ".options" command lines in order to set these
options whenever the circuit is loaded.
===== Current sources in series =====
eg5.ckt
CURRENT SOURCES IN SERIES
I1 0 1 2.0001
I2 1 0 2.0
.print dc v(1) i(I1) i(I2)
.dc
.end
The case of putting two current sources in series is much the same
concept as two voltage sources in parallel. However notice that gnucap
copes with it in a different manner. It cannot find a compromise current
that is partway between the two sources and it always gives a huge
value for the voltage at node 1. At least it doesn't crash and it does
give results that give some suggestion as to where the problem might
be. There is an option "gmin" that introduces resistance into a current
source, or you can explicitly add these resistors if you like by putting
the resistor in parallel with the current source.
What if you had a big, complex circuit, you messed up by putting
two current sources in series but you never thought about checking
the strange node? How would you ever know that the circuit was broken?
Try this exercise:
acs
get eg5.ckt
alarm dc v(*)(-1e3,1e3)
dc
quit
Now you get a warning whenever any component gets more that 1000 volts
across it. This can be used to test component breakdown if you know
that you are using components that cannot tolerate high voltages. It can
also be used to ensure that your simulated circuit stays within what you
might expect to be the absolute maximum values.