Tengo el siguiente circuito. Trato de encontrar una manera de combinar todas las parcelas en una sola (como la tarjeta .step de ltspice). Desafortunadamente, no pude obtener el ejemplo del trabajo manual de ngspice.
Estaría agradecido si alguien pudiera ayudarme a entender la lógica detrás de lo que estoy tratando de lograr. Creo que necesito forzar que mis vectores se almacenen en una sola trama, pero a partir de mi investigación encontré más de una forma de hacerlo (simplemente no puedo entender la lógica de esos ejemplos, así que no pude adaptarlos para mi circuito)
yo uso ngspice 35
.TITLE AC test
.INCLUDE ../../lib/lm393.sub
x1 in 0 1 0 out lm393
c1 in 0 100n
r1 1 in 100k
c2 out 0 100n
r2 1 out 4.7k
vsup 1 0 DC 5
vin in 0 AC 1
.CONTROL
*foreach x 1n 10n 50n 100n
* alter c1 = $x
* ac dec 100 1 100k
*end
alter c2 = 10n
ac dec 100 1 1Meg
alter c2 = 100n
ac dec 100 1 1Meg
alter c2 = 1u
ac dec 100 1 1Meg
alter c2 = 10u
ac dec 100 1 1Meg
plot db(ac1.out) db(ac2.out) db(ac3.out) db(ac4.out)
.ENDC
Encontré una manera de resolver mi problema.
set curplot = new *We create a new plot to store our vectors
set acplot = $curplot *We "store" our plot in a variable for further use
foreach x 1n 10n 50n 100n *Loop through our desired value
alter c2 = $x
ac dec 100 1 1Meg
foreach y 1k 10k 50k 100k *Loop through our desired value
alter r2 = $y
ac dec 100 1 1Meg
set aux = $curplot *Each analysis will create its own plot
*We need to remember every analysis each time to retrieve our data
set curplot = $acplot *Now we set the plot we want to store data into
*In our case the plot created previously
let 'db out c2: $x r2: $y' *Using let we will create a new vector with a user defined name
+ = db({$aux}.out) *Now we use the use the plot "stored" in aux to get our data
*The + sign is used the instruction continues on another line, not to append
*The {} is used to "delimit" the variable to $aux, without {} it would be seen as $aux.out
end
end
set curplot = $acplot *Set current plot as the plot generated by us
plot all vs ac1.frequency *User created plot are of type 'unknown' so it will not know to plot frequency as xaxis by default.
*Furthermore we have not stored the frequency vector inside our plot so I used any ac analysis to get the data
Espero que esta solución ayude a otros y si alguien conoce otras soluciones o tiene alguna mejora con respecto a la mía, me gustaría saber
Si eres bueno para trazar dentro de Octave o Python, entonces puedes hacer lo que yo hago, que es guardar tus datos de ngspice y luego leer los datos en Octave o Python y trazarlos desde allí de la forma que quieras. Hay algunas bibliotecas, pero las que uso para leer los datos están escritas por Werner Hoch, llamadas spice_read.py para python y spice_readfile.m para Octave (o Matlab). Un poco de google debería encontrar las últimas versiones. Primero ejecuta su simulación con:
ngspice -b -rmy_output_filename myspicefile.cir
y luego carga "my_output_filename" en su programa python u octave. Si no sabe mucho sobre python u octave, habrá una curva de aprendizaje, pero hay muchas recompensas al aprender un entorno de programación tan científico. Más allá del trazado, puede filtrar, procesar y automatizar su análisis.
un ciudadano preocupado