Tutorial de gnucap - GNU Circuit Analisis Package

Imagen/borrador-avatar.png

Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia ;)

Introducción

Gnucap es un simulador de circuitos de propósito general, puede realizar análisis no lineal en CD y transitorio, análisis de Fourier y análisis CA. Aunque soporta modelos de spice no esta basado en spice.

GNUCAP es acrónimo de GNU Circuit Analysis Package

El sitio oficial:

gnucap en geda:

Esto no pretende ser un reemplazo del tutorial de gnucap (acs tutoria) ni del manual, por lo que no se encuentran todas las opciones posibles del simulador, se recomienda siempre tener en cuenta la documentación oficial que se distribuye en el paquete.

Antes de empezar...

Lo primero que debemos saber antes de usar gnucap es que este es "solo" el simulador y que no vamos a encontrar una interfaz gráfica para ir seleccionando y añadiendo componentes al circuito que queremos simular, esto es posible por medio de otras herramientas como gschem, xcircuit, oregano, etc. De manera similar las señales que proporciona el simulador para mostrar la salida de un análisis se hacen en forma de lista de puntos y para poder visualizarlas se debe usar otros programas como gwave, gnuplot u octave para hacer un análisis posterior, y no se explicara como usar el simulador con alguno de estos programas, salvo algunos comentarios acerca de como hacerlo.

Instalación

Descargar la última versión de desarrollo o instalar la versión estable como se indica más adelante.

Descomprimir, compilar e instalar

$ tar xzvf gnucap-2007-03-29.tar.gz
$ cd gnucap-2007-03-29
$ ./configure
$ make
# make install

Esto lo instala por defecto en /usr/local

Para los usuarios de Debian y Ubuntu lo habitual, se instala la versión estable.

# apt-get install gnucap

Descripción del circuito

El circuito debe ser descrito en un archivo netlist, que es una lista de los componentes del circuito en la que se describe como están interconectados.

Estructura general de un archivo netlist para gnucap:

  1. La primera linea es para escribir el nombre del circuito.
  2. Las lineas de comentarios empiezan con el símbolo "*".
  3. Las lineas de componente empiezan con una letra que indica que componente es.
  4. Para la continuación de lineas largas se usa el símbolo "+".
  5. Las lineas de comando pueden o no empezar con ".", esto es para compatibilidad con otros simuladores.

En la sección anterior nombre algunas herramientas con las que se puede hacer captura esquemática; gnucap no "entiende" el formato en el que se almacenan estos esquemáticos así que es necesario que se exporten a un netlist valido para gnucap. Por ejemplo para generar el netlist para gnucap desde un diagrama echo con gschem se usa gnetlist con la siguiente sintaxis:

$ gnetlist -s -g spice-sdb -o netlist.ckt diagrama.sch

y el archivo que genera es netlist.ckt; este el que usaremos con gnucap.

Creación y edición de circuitos

Este simulador lo podemos usar de dos formas en modo interactivo o no interactivo (batch, no hay necesidad de iniciar el interprete del simulador). La forma de sacar el máximo provecho es usándolo en el modo interactivo, el análisis de un circuito es más flexible y comprensible de esta manera.

Creando circuitos desde gnucap

Para crear circuitos desde gnucap debemos usarlo en modo interactivo, en el que iremos ingresando comandos adecuados para la labor que queramos llevar a cabo; los comandos se pueden escribir en mayúscula o en minúsculas y también se pueden abreviar, por ejemplo el comando log lo podemos usar como lo; por ejemplo LOG, LO, log, lo son equivalentes.

Entonces ejecutamos gnucap sin argumentos:

$ gnucap
Gnucap 2008.10.10 RCS 26.97
The Gnu Circuit Analysis Package
Never trust any version less than 1.0
Copyright 1982-2002, Albert Davis
Gnucap comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome
to redistribute it under certain conditions
according to the GNU General Public License.
See the file "COPYING" for details.
gnucap>

Para llevar un log de los comandos que usamos en el simulador usamos el comando log

gnucap> lo log

Una vez en el interprete de gnucap tenemos dos opciones para crear nuestro circuito el comando build o con el comando edit.

Construcción de circuitos con el comando build

Veamos como construir un circuito con el comando build. Entramos el comando build seguido de enter y veremos el símbolo ">" que nos indica que podemos empezar a describir nuestro circuito. En este punto aun hay preguntas por resolver respecto a gnucap, y una de ellas es acerca de la sintaxis que se sigue para describir los circuitos, pues bueno, en general se usa una letra al principio de la linea que describe que tipo de elemento es seguido de un identificador para este en particular, luego a que nodos esta conectado y por ultimo el valor y sus respectivos parámetros. Veamos con un ejemplo como crear un divisor de voltaje.

divol.png

gnucap> build
>Ve a 0 5
>R1 a b 1K
>R2 b 0 2K
>

Luego de terminar de describir cada uno de los elementos que irán en nuestro circuito debemos acabar con enter y cuando terminemos en el último ">" finalizamos de nuevo con enter.

En la segunda linea vemos Ve a 0 5 que nos da cuentas de un elemento en el circuito, V es el identificador del elemento, en este caso una fuente independiente de voltaje, e el nombre que se le asigna, bien pudo haber sido in (Vin) o cualquier combinación de caracteres alfanuméricos, la idea es que podamos identificar la fuente como nos sea más cómodo, luego tenemos la letra a y el número 0 estos dos son los nodos a los que esta conectado el dispositivo, el 0 se usa para identificar el nodo de referencia (tierra), seguido esta el número 5 que indica el valor en voltios de la fuente (5 voltios), por ahora sin ningún otro parámetro el voltaje es en CD.

En la tercera línea de manera similar encontramos R1 a b 1K, lo que nos indica que una resistencia (R) con identificador 1 que esta conectada entre los nodos a y b y que tiene un valor de 1000 Ohmios, la K denota Kilo (para ver como usar unidades ver el apéndice Identificadores de unidades, y la siguiente línea indica una resistencia R2 conectada a los nodos b y 0 de 2K Ohmios.

Mostrando el circuito

Ahora veamos como esta definido nuestro circuito en memoria con el comando list que nos muestra esto:

gnucap> list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.K
R2 ( b 0 )  2.K
gnucap>

El comando list puede ser usado para mostrar elementos en particular por ejemplo podemos ver solo la fuente de voltaje con list Ve y las resistencias con list R*.

gnucap> list Ve
Ve ( a  0 )  DC  5.
gnucap> list R*
R1 ( a  b )  1.K
R2 ( b  0 )  2.K
gnucap>

Ajustando el título del circuito

Ahora podemos pensar en ponerle título a nuestro circuito, esto lo podemos hacer con el comando title.

gnucap> title Divisor de voltaje
gnucap>

El comando title sin argumentos muestra el título del circuito.

gnucap> title
Divisor de voltaje
gnucap>

Guardando el circuito a disco

En este punto el circuito que hemos creado se encuentra en memoria y lo más posible es que queramos poder usarlo de nuevo, entonces lo que debemos hacer es guardarlo en el disco con el comando save.

gnucap> save divol.net
gnucap>

Podemos usar el comando save con el nombre que queremos guardar nuestro circuito en el disco, incluso con la ruta en la que lo deseamos hacer, si no especificamos esto nos pedirá un nombre para salvarlo.

Saliendo del modo interactivo

Para salir del modo interactivo tenemos varias opciones los comandos exit, quit y end, de este último hablaremos más adelante.

gnucap> quit
$

Construyendo circuitos con el comando edit

Otra opción que tenemos para crear circuitos es con el comando edit, para poder usarlo debemos tener configurada la variable de entorno EDITOR con el valor igual al editor de texto que se desee usar para este fin. Se puede usar de varias formas, para el ejemplo que estamos siguiendo podriamos escribir las mismas lineas que usamos con el comando build pero desde el editor de texto que configuramos y salvarlo como ya vimos en la sección Guardando el circuito a disco, o también podríamos haber invocado edit con el nombre del archivo que queremos que este guardado en el disco.

Trabajando con archivos netlist previamente creados

Los circuitos en su gran mayoría por lo general tiene muchos elementos y crearlos desde el modo interactivo del simulador puede llegar a ser una labor muy dispendiosa, por eso muchas veces se usa un capturador esquemático para hacer el diagrama del circuito y luego generar el archivo netlist adecuado para el simulador, para usar uno de estos archivos netlist previemente creados tenemos dos opciones, una sería invocando gnucap desde la linea de comandos con el nombre del archivo netlist que contiene el circuito que queremos simular como parámetro y otra desde el modo interactivo con el comando get.

Invocando gnucap para usar un archivo netlist previmente creado

Por ejemplo si queremos usar de nuevo el divisor de voltaje que habíamos creado previamente, la primera opción mencionada en la sección anterior sería así:

$ gnucap divol.net
Gnucap 2008.10.10 RCS 26.97
The Gnu Circuit Analysis Package
Never trust any version less than 1.0
Copyright 1982-2002, Albert Davis
Gnucap comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome
to redistribute it under certain conditions
according to the GNU General Public License.
See the file "COPYING" for details.
Divisor de voltaje
gnucap>

Aquí podemos ver que antes del indicador del prompt de gnucap gnucap> se ve el título del circuito cargado, en este caso Divisor de voltaje. Podemos usar de nuevo el comando list para ver el netlist cargado.

gnucap> list
Ve ( a 0 )  DC 5.
R1 ( a b )  1.K
R2 ( b 0 )  2.K
gnucap>

Cargando un archivo netlist previamente creado con el comando get

Para cargar el circuito desde el modo interactivo usamos el comando get pasándole como argumento el nombre del archivo netlist en el que esta guardado el circuito. Cuando estamos usando gnucap en modo interactivo y nos referimos a información que esta guardada en nuestro disco podemos usar la forma habitual de auto-completar en bash.

gnucap> get divol.net
Divisor de voltaje
gnucap>

De nuevo observamos que gnucap nos indica el título del circuito cargado. Ahora podemos ver el contenido del archivo netlist cargado.

gnucap> list
Ve ( a 0 )  DC 5.
R1 ( a b )  1.K
R2 ( b 0 )  2.K
gnucap>

Editando un circuito

En este momento puede que se cometieran errores en la creación del circuito y se quieran cambiar algunos valores de los elementos o modificar cualquier parte del circuito, entonces siempre podemos usar el comando edit para modificar el circuito que esta en memoria, pero veamos algunas opciones para modificar partes del del circuito con el que estamos trabajando.

Añadir un nuevo elemento al circuito

Para añadir un componente al circuito usamos el comando build y luego describimos el nuevo dispositivo como se hace con cualquier otro. Por ejemplo para añadir un capacitor en paralelo a la resistencia R2 debemos usar la letra C para indicar que es un condensador seguido de un identificador y que debe estar conectado entre los nodos b y 0.

gnucap> build
>C1 b 0 1u
>
gnucap>

Ahora podemos ver que tenemos un capacitor C1 de 1 micro Faradio en paralelo con la resistencia R1.

gnucap> list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.K
R2 ( b 0 )  2.K
C1 ( b 0 )  1.u
gnucap>

Editar un componente del circuito

Ahora piense en que la resistencia R2 no debe estar en paralelo con el capacitor C1, en vez de esto debe estar en serie con este y la resistencia R1; entonces para hacer esto primero se debe borrar el componente con el comando delete seguido del identificador del componente y luego crearlo con el comando build con la nueva ubicación.

gnucap> delete R2
gnucap> build
>R2 b c 2K
>
gnucap>

Pero ahora el capacitor no esta conectado a los nodos adecuados para que este en serie con las resistencias, entonces procedemos de la misma manera.

gnucap> list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.K
C1 ( b 0 )  1.u
R2 ( b c )  2.K
gnucap> delete C1
gnucap> build
>C1 c 0 1u
>
gnucap>list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.K
R2 ( b c )  2.K
C1 ( c 0 )  1.u
gnucap>

Ahora si tenemos los tres elementos pasivos en serie.

Eliminar un componente del circuito

Ahora supongamos que queremos eliminar la resistencia R2 para tener solo R1 y C1 en serie, entonces usamos el comando delete con el identificador del elemento que se quiere eliminar, igual que en la sección anterior.

gnucap> delete R2
gnucap> list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.K
C1 ( c 0 )  1.u
gnucap>

Pero ahora el condensador esta conectado a un nodo que no debería entonces lo modificamos como se indicó en la sección anterior.

gnucap> delete C1
gnucap> build
>C1 b 0 1u
>
gnucap> list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.K
C1 ( b 0 )  1.u
gnucap>

Cambiar el valor de un componente

Para cambiar el valor de un componente del circuito se usa el comando modify indicando el dispositivo y el nuevo valor, por ejemplo si queremos cambiar el valor de la resistencia R1 a 1M Ohmios procedemos de la siguiente manera.

gnucap> modify R1=1Meg
gnucap> list
Ve ( a 0 )  DC  5.
R1 ( a b )  1.Meg
C1 ( b 0 )  1.u
gnucap>

Hay que tener en cuenta que para indicar unidades en Megas se usa Meg y no solo la letra M porque gnucap no es sensible a myúsculas y minúsculas entonces entendera m mayúscula como milésimas.

Ahora guardamos nuestro nuevo circuito sin olvidar indicar un nuevo título para el circuito.

gnucap> title Circuito RC
gnucap> save rc.net
gnucap>

Borrar todo el circuito de la memoria

Para borrar todo el circuito que esta en memoria tenemos carias opciones por medio del comando delete y del comando clear, veamos.

Con el comando delete borramos todos los componentes pero no el título del circuito.

gnucap> delete all
gnucap> title
Divisor de voltaje
gnucap>

Ó con el comodin *, delete *.

Y con el comando clear borramos todo incluyendo el título.

gnucap> clear
gnucap> title
gnucap>

Hasta este punto solo se ha usado el interprete de gnucap para crear, editar y/o borrar partes de un circuito o el circuito completo. Ahora algunos ejemplos para simular circuitos.

Simulación

Con gnucap podemos hacer cinco tipos de simulación op (punto de operación), ac, dc, transitoria (análisis en el tiempo) y de Fourier.

Para simular primero debemos indicar que resultado deseamos que nos muestre el simulador, un voltaje, una corriente, etc... Para esto podemos usar el comando print con la siguiente sintaxis.

print modo puntos

En donde modo es el tipo de simulación que queremos llevar a cabo (op, ac, dc, transient, fourier) y puntos es en donde indicamos el tipo de prueba que queremos analizar y en donde<<FooteNote(Esta es una explicación muy superficial del comando print, por favor revise el manual de gnucap.)>>. Por ejemplo para indicar que se va a probar el voltaje sobre los nodos a y b en el modo de punto de operación op para el circuito Divisor de voltaje se usa el comando print con la siguente sintaxis.

gnucap> print modo v(a) v(b)

Lo mismo se puede indicar con la opción v(nodes) en lugar de v(a) v(b), que indica el voltaje sobre todos los nodos, que para este caso son solo a y b, pero que si fuesen más pues seleccionaria todos los nodos del circuito, igual lo podemos hacer separnado por comas los nombres de los nodos v(a,b). Otras formas de indicar sobre que parte del circuito se quiere probar es usando los identificadores de los componentes o comodines, por ejemplo:

gnucap> print op v(R1,R2)

Nos indica que se probará el voltaje sobre las resistencias R1 y R2. Ahora si se quiere seleccionar todas las partes posibles del circuito para probar el voltaje en el punto de operación se puede usar el comodin * como se muestra a continuación.

gnucap> print op v(*)

Con esto tenemos seleccionados para probar el voltaje en todos los nodos y componentes del circuito en el punto de operación, pero se sabe que no es necesaria la prueba de la resistencia R2 si tenemos el voltaje sobre el nodo b, entonces se puede quitar de la selección de pruebas anteponiendo el simbolo - a la prueba de la resistencia o del nodo si fuese el caso.

gnucap> print op -v(R2)

Así podemos quitar la prueba deseada del tipo de simulación a la que se a indicado. De manera similar podemos añadir pruebas a la lista existente el modo seleccionado anteponiendo el simbolo +. Para ver las pruebas seleccionadas se usa el comando print sin ninguna opción.

gnucap> print
tran
ac
dc
op      v(a) v(b) v(Ve) v(R1)
fourier
gnucap>

Se puede observar que estan seleccionados todos los nodos y elementos excepto R2 que previamente se había deseleccionado, en los modos diferentes a op no encontramos ningún tipo de prueba pues no se ha seleccionado ninuna.

Una vez que se a indicado en donde tomar pruebas y en que modo se procede a hacer el tipo de simulación que se desea con los respectivos parámetros.

Simulación en el punto de operación (OP)

La simulación en el punto de operación es una simulación no lineal en CD y se hace con el comando op con la siguiente sintaxis:

op temperatura

Donde escogemos la temperatura en grados celsius, por omisión la temperatura es de 27 grados, que se usará en caso de no indicar ninguna. Por ejemplo para hacer la simulación se usa el comando op sin opciones y se obtendrán los valores de voltaje en los puntos seleccionados anteriormente<<FooteNote(Esta es una explicación muy superficial del comando op, por favor revise el manual de gnucap.)>>.

gnucap> op
#           v(a)       v(b)       v(Ve)      v(R1)
 27.        5.         3.3333     5.         1.6667
gnucap>

Ahora se muestra el voltaje de la fuente dos veces porque el voltaje sobre el nodo a es el mismo de esta, entonces se puede proceder para presincidr de la prueba sobre la fuente.

gnucap> print op -v(Ve)
gnucap>

Más bien se puede medir la corriente atravez de la fuente que es la corriente de la malla.

gnucap> print op +i(Ve)
gnucap> op
#           v(a)       v(b)       v(R1)      i(Ve)
 27.        5.         3.3333     1.6667    -0.0016667

Simulación en el tiempo (transitoria)

Para hacer una simulación en el tiempo se usa el comando transient con la siguiente sintaxis.

transient inicio parada salto opciones

En donde inicio es el punto de partida del barrido, parada es el punto final del barrido, salto es el valor de cada salto para el barrido y opciones son las diferentes opciones para la simulación. Por ejemplo para ver la carga del condensador en el tiempo del Circuito RC usamos el comando transient haciendo un barrido desde 0 segundos hasta 6 segundos en intervalos de 0.2 segundos añadiendo la opción uic (Use Initial Conditions) que permite usar los valores iniciales de los elementos, por omisión para el capacitor es de cero voltios.

gnucap> get rc.net
gnucap> print transient v(C1)
gnucap> transient 0 6 0.2 uic
#Time       v(C1)
 0.         0.
 0.2        0.90712
 0.4        1.6513
 0.6        2.2601
 0.8        2.7583
 1.         3.1659
 1.2        3.4994
 1.4        3.7722
 1.6        3.9954
 1.8        4.1781
 2.         4.3275
 2.2        4.4498
 2.4        4.5498
 2.6        4.6317
 2.8        4.6986
 3.         4.7534
 3.2        4.7983
 3.4        4.8349
 3.6        4.865
 3.8        4.8895
 4.         4.9096
 4.2        4.926
 4.4        4.9395
 4.6        4.9505
 4.8        4.9595
 5.         4.9668
 5.2        4.9729
 5.4        4.9778
 5.6        4.9818
 5.8        4.9851
 6.         4.9878
gnucap>

La salida del simulador, como ya se indico al principio de este documento, es una lista de puntos, en este caso indican para cada valor de salto de tiempo el voltaje en el condensador, se puede observar como aumenta el voltaje en el condensador al avanzar el tiempo, pero como dice el dicho una "imagen vale más que mil palabras", entonces lo que se debe hacer es enviar la respuesta obtenida a un archivo para poder visualizarla con una otra aplicación como gwave, gnuplot.

gnucap> tr 0 6 0.2 uic > rc_transient_vC1.data
gnucap> !gwave rc_transient_vC1.data &
gnucap>

La primera linea muestra la simulación normal más > rc_transient_vC1.data que indica que la salida se envía al archivo rc_transient_vC1.data. En la segunda linea el simbolo ! indica que se esta ejecutando un comando externo al simulador, en este caso gwave para visualizar el voltaje del condensador en el tiempo (carga del condensador) y el simbolo & es para seguir en el simulador luego de ejecutar la aplicación.

rc_gwave.png

Simulación DC (sweep)

Para hacer una simulación haciendo un barrido en CD usamos el comando dc con la siguiente sintaxis:

gnucap> dc fuente inicio parada salto

en donde fuente es la fuente con la que vamos a hacer el barrido en dc, inicio es el punto de partida del barrido, parada es el punto final del barrido y salto es el valor de cada salto para el barrido.

Apendices

Modelos para spice pero que igual sirven para gnucap

Para diodos:

Identificadores de unidades

T = Tera = e12
G = Giga = e9
Meg = Mega = e6
K = Kilo = e3
m = milli = e-3
u = micro = e-6
n = nano = e-9
p = pico = e-12
f = femto = e-15


CategoryProyectoTale

ProyectoTale/Tutoriales/gnucap (last edited 2009-03-31 08:39:24 by jegc)