Skip to content

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 .control y .endc
  • En este ejemplo tenemos dos instrucciones:
    • op calcula el estado estacionario (operation point) del circuito.
    • print v(div) imprime el voltaje del nodo div

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.