ngspice
Introducción
Ngspice es un programa de código abierto para la simulación de circuitos electrónicos. Es un simulador SPICE basado en el código desarrollado por la Universidad de California en Berkeley en la década de los setenta/ochenta.
En este tutorial me voy a centrar en el uso de ngspice en batch mode, que quiere decir que los circuitos y el tipo de análisis están definidos en un fichero que ngspice procesa desde la terminal.
La forma más sencilla de ejecutar un circuito es la siguiente:
ngspice -b mycircuit.cir
Aunque estoy usando .cir, a ngspice le da igual la extensión del
fichero. Para redirigir el output del programa a un fichero simplemente
usa la opción -o:
ngspice -b mycircuit.cir -o results.out
Y para guardar todo el raw data de la simulación:
ngspice -b mycircuit.cir -r output.raw
Cuando se especifica el resultado en formato raw, ngspice ignora
cualquier instrucción interna en mycircuit.cir especificando qué
variables guardar.
Formato del circuito
Los circuitos se definen usando el concepto de netlist. Una netlist
consiste en una lista de componentes o elementos que especifican a qué
nodos están unidos cada terminal del componente. Un nodo es una serie de
cables ideales que se encuentran al mismo voltaje. ngspice sigue el
convenio de usar el 0 para definir la tierra (ground), pero por lo
demás hay mucha flexibilidad a la hora de nombrar nodos. Un ejemplo
sencillo de netlist es el siguiente circuito describiendo un divisor de
tensión o voltaje:
Vin 2 0 1V
R1 div 0 10
R2 2 div 5
En este circuito, el voltaje del nodo div es proporcional al voltaje
del nodo 2. Vin es una fuente de voltaje, mientras que R1 y R2
son dos resistencias.
Una particularidad de spice es que el nombre the cada elemento tiene que comenzar con una letra que represente el tipo de elemento. R para resistencias, V para fuentes de voltaje, M para transistores, etc. La documentación de ngspice contiene una lista completa de todos los tipos de componentes.
Tipos de análisis
ngspice permite principalmente tres tipos de análisis: continuos (DC), análisis de frequencia (AC), y evolución en función del tiempo.
Análisis DC
Un ejemplo sencillo de un programa que analiza el divisor de voltaje es el siguiente:
Divisor de voltaje
Vin 2 0 DC 1V
R1 div 0 10
R2 2 div 5
.control
op
print v(div)
.endc
.end
Este programa establece varias reglas importantes en ngspice:
- ngspice ignora la primera línea de un programa y asume que es el título
- el programa termina con la instrucción
.end. - Las instrucciones están contenidas entre
.controly.endc - En este ejemplo tenemos dos instrucciones:
opcalcula el estado estacionario (operation point) del circuito.print v(div)imprime el voltaje del nododiv
Un análisis más interesante es estudiar la evolución del voltaje del nodo div en
función del valor en la fuente de voltaje. Para ello, usamos la instrucción dc.