Saltar a contenido

Aprendiendo con ejemplos

Netfiles

La forma básica de describir los circuitos y los análisis a realizar por SPICE es por medio de un archivo de texto plano. Para realizar esto con LTspice se debe crear un archivo con extensión .net, se puede realizar desde el mismo programa ( File -> Open... -> holamundo.net -> Do you want to create...? Yes) o utilizando un editor de texto externo.

Al querer analizar un circuito se deben enumerar todos los nodos, teniendo especial cuidado en nombrar la referencia como \(0\) (cero) e indicando los sentidos de circulación de corriente. Como en el siguiente esquema de circuito, y además se debe indicar que análisis se realizará.

Circuito

Teniendo en cuenta las siguiente equivalencias de Lenguaje de diagrama a Lenguaje de descripción de interconexión para los elementos R y V.

Resistor

Tensión

Se escribe el siguiente Netfile, donde se describe la interconexión de cada elemento en cada nodo, el nodo \(0\), será la referencia desde la cual se calcularán la diferencia de potencial hacia cada nodo. Por último, se le indica con .OP el análisis a realizar.

*holamundo.net
*Esto es un comentario. La primera línea debe ser un comentario.
R3 1 0 10k
R2 1 0 10k
R1 2 1 5k
V1 2 0 DC 10V
.op
.end
holamundo.net

Se corre la simulación y presionando Ctrl+R (si es que se ha generado el NETFILE dentro de LTspice) y se obtienen los resultados como se observa en la siguiente imagen.

Tensión

Como era esperado se obtiene como salida, un archivo con el punto de operación para todas las corrientes que atraviesan los elementos y todas las tensiones (referidas al nodo 0) en todos los nodos. \(I(V1)\), correctamente es negativa, ya que circulará en contraposición a la definición anterior.

Fuentes Dependientes

Estos tipos de fuentes son útiles en el modelado lineal de circuitos activos. Ya sean, generadores controlados por corrientes que circulan en alguna rama o potenciales en algún nodo. Con lo cual podemos tener cuatro tipos:

  • Voltage-controlled voltage source "E" (fuente de tension controlada por tension)
  • Current-controlled current source "F" (fuente de corriente controlada por corriente)
  • Voltage-controlled current source "G" (fuente de corriente controlada por tension)
  • Current-controlled voltage source "H" (fuente de tension controlada por corriente)

Luego podemos describir teniendo en cuenta las siguiente equivalencias de Lenguaje de diagrama a Lenguaje de descripción de interconexión para los cuatro elementos generadores.

Fuentes Dependientes

Teniendo en cuenta esto, se analizará el siguiente circuito.

Circuito CCCS

Observar que en este caso se tiene una fuente de corriente controlada por corriente (CCCS), elemento “F” en SPICE.

Luego podemos dibujar el siguiente equivalente poniendo en evidencia las características necesarias para poder describirlo en un Netfile.

Equivalente circuito CCCS

Observar la necesidad del agregado de una fuente de tensión de valor 0V. El siguiente es el Netfile:

*holamundo1b.net
*CIRCUITO CON FUENTES DEPENDIENTES (PUNTO DE TRABAJO)
Vs 1 0 DC 12
R1 1 2 1k
R2 0 3 2k
R3 0 4 500
Vdmy 2 3 0
F1 4 3 Vdmy 100
.OP
.END
holamundo1b.net

Que arroja los siguientes resultados.

Captura holamundo1b.net

.TF

Muchas veces es necesario conocer la ganancia de tensión entre dos puertos de un circuito, el análisis TF (Transfer function) es útil para estos casos.

Por ejemplo se desea hallar el equivalente de de Thévenin entre los puntos A y B del siguiente circuito.

Circuito Equivalente Thévenin

El objetivo es encontrar el generador de tensión equivalente y su resistencia serie. Con la simulación de,

*holamundo1c.net
*EQUIVALENTE THEVENIN
Vs 1 0 DC 12
R1 1 2 1k
R2 2 0 2k
R3 2 3 1k

.TF V(3) Vs
.END

*.TF (transfer function) variable_salida variable_entrada
holamundo1c.net

Se obtiene:

Captura holamundo1b.net

De aquí se deduce que \(R_{TH}=1,66\) \(k\Omega\), \(\frac{V(3)}{Vs}=0,666667\), luego \(V_{TH}=V(3)=12 \times 0,666667= 8\) \(V\)

.DC

El análisis DC o análisis de continua, realiza el barrido del valor de una fuente de un valor inicial a un valor final, de a pasos, veamos un ejemplo donde se desea conocer la curva característica de dos diodos un 1N4001 (cuyo modelo fue realizado por un fabricante) y el diodo por defecto de SPICE, modelado solo por una tensión de juntura de \(0,7\) \(V\). Conceptualmente el circuito sería el siguiente:

Captura holamundo1b.net

*holamundo2.net
V1 1 0 DC
*DX A K MODELO
D1 1 0 DMIO
D2 1 0 D1N4001
* .DC FUENTE INICIO FIN PASO
.DC V1 -1.2 1.2 .005

.MODEL DMIO  D(VJ=0.7)

.MODEL D1N4001 D(IS=29.5E-9 RS=73.5E-3
+N=1.96 CJO=34.6P VJ=0.627
+M=0.461 BV=60 IBV=10U)
.end
holamundo2.net

Se obtiene:

Captura holamundo2.net

NOTA 1: Para seleccionar las curvas a realizar, hace clic derecho sobre el gráfico y seleccionar “Visibles Traces” que aparecerá la ventana “Select Visible Waveforms”*, donde no sólo se pueden seleccionar los vectores a graficar, sino que también pueden aplicarse alguna expresión algebraica.

NOTA 2: El eje de ordenadas al origen, se debe modificar para observar ambas curvas en simultáneo.

Vertical Axis

.TEMP

El parámetro TEMP, realiza el análisis del comportamiento del circuito, para diferentes temperaturas en grados Celsius. Realizando cualquier análisis, para cada valor de temperatura indicado. Como en el ejemplo del circuito anterior analizar la variación de corriente de fuga de un diodo 1N4001 cuando se encuentra polarizado en inversa para los valores de temperatura \(30\), \(40\), \(50\) y \(60\) \(^{\circ}C\).

*diodotemperatura.net
V1 1 0 DC
D1 1 0 D1N4001
.DC V1 -5 0 .05
.TEMP 30 40 50 60

.MODEL D1N4001 D(IS=29.5E-9 RS=73.5E-3
+N=1.96 CJO=34.6P VJ=0.627
+M=0.461 BV=60 IBV=10U)
.end
diodotemperatura.net

Captura diodotemperatura.net

.TRAN

El parámetro TRAN, realiza el análisis temporal del circuito, como argumentos se le dan el paso de tiempo (tiempo entre muestra y muestra), cuándo finalizar la simulación y opcionalmente el tiempo de inicio de la misma.

Circuito holamundo3

Del anterior circuito se desea conocer su respuesta temporal de tensión sobre \(R_1\), cuando se aplica una tensión \(V_1\) sinusoidal de \(8,46\:Vp\) y \(50\:Hz\).

Captura holamundo3.net

.STEP

Otro tipo de análisis complementario, como el de la variación de la temperatura, podría ser el de variar algún otro parámetro del circuito y visualizar cómo se modifican los análisis en función de dicho cambio. Como por ejemplo el comportamiento de en un rectificador de media onda, ante la variación del capacitor de filtrado. El circuito sería el siguiente:

Circuito circuitomediaonda2

*mediaonda2.net
V1 1 0 SIN(0 8.46 50 0 0)
* SIN (OFFSET AMPLITUD_PICO FRECUENCIA RETARDO AMORIGUAMIENTO)
D1 1 2 D1N4001
R1 2 0 82ohm
C1 2 0 CFILTRO 1
.TRAN 1us 80ms
.MODEL CFILTRO CAP(C)
.STEP LIN CAP CFILTRO(C)250uF 1000uF 250uF
* VARIAR CAPACIDAD DESDE .25mF a 1mF CON PASOS DE .25mF


.MODEL D1N4001 D(IS=29.5E-9 RS=73.5E-3
+N=1.96 CJO=34.6P VJ=0.627
+M=0.461 BV=60 IBV=10U)
.end
mediaonda.net

Captura mediaonda2.net

En la gráfica se observa como incrementando la capacidad se obtiene un mejor filtrado, pero también, picos más abruptos de corriente que tendrán que ser soportados por el diodo, también observar que en el instante cero, es decir cuando la tensión en el capacitor es nula, el pico inicial de corriente es muy superior a la repetitiva.

.MEASURE

Existen dos tipos declaraciones .MEASURE. Las que refieren a un punto de la abscisa y las que se refieren a un rango sobre la misma. Las primeras, se utilizan para imprimir un valor o una expresión matemática cuando se cumple una condición. La sintaxis es la siguiente:

Sintaxis: .MEAS[URE] [AC|DC|OP|TRAN|TF|NOISE] <name>
 + [<FIND|DERIV|PARAM> <expr>]
 + [WHEN <expr> | AT=<expr>]]
 + [TD=<val1>] [<RISE|FALL|CROSS>=[<count1>|LAST]]

Opcionalmente, se puede indicar el tipo de análisis al que se aplica la declaración .MEAS[URE] ([AC|DC|OP|TRAN|TF|NOISE]). Esto permite utilizar ciertas declaraciones .MEAS[URE] sólo para ciertos tipos de análisis. El nombre () es necesario para darle al resultado una denominación y se podrá usar en otras declaraciones .MEAS[URE]. A continuación se muestran ejemplos de declaraciones .MEAS[URE] que se refieren a un solo punto a lo largo de la abscisa:

.MEAS TRAN respuesta1 FIND V(1) AT 5ms
Imprimir el valor de V(1) en t=5ms etiquetarlo como respuesta1.
.MEAS TRAN respuesta2 FIND V(out)*I(R2) WHEN V(1)=V(2)
Imprimir el valor de la expresión V(out)*I(R2) la primera vez que se cumple la condición V(1)=V(2). Etiquetarlo como respuesta2.
.MEAS TRAN respuesta3 FIND V(out) WHEN V(1)=V(2) cross=2
Imprimir el valor de V(out) la segunda vez que se cumpla la condición V(1)=V(2). Etiquetarlo como respuesta3.
.MEAS TRAN respuesta4 FIND V(out) WHEN V(1)=V(2) rise=last
Imprimir el valor de V(out) la última vez que se cumple la condición V(x)=V(y) y pendiente positiva de V(1). Etiquetarlo como respuesta4.
.MEAS TRAN respuesta5 FIND V(out) WHEN V(1)=V(2) cross=2 TD=5 ms
Imprimir el valor de V(out) la segunda vez que se cumpla la condición, V(1)=V(2), pero no comenzar a contar hasta que haya transcurrido el tiempo de \(5\:ms\). Etiquetarlo como respuesta5.
.MEAS TRAN respuesta6 PARAM 3*respuesta3/respuesta4
Imprimir el valor de 3*respuesta3/respuesta4. Este criterio útil para imprimir expresiones de otros resultados .MEAS[URE]. Observar que no utiliza un valor basado en datos de simulación directa, como V(out). El resultado se etiquetará como respuesta6.

meas1.net Captura meas1.net

Tener en cuenta que en los ejemplos anteriores, si bien se hace referencia a un punto de la abscisa, el resultado solicitado se basa en el valor de las ordenadas. De no solicitarse información de ordenadas, entonces .MEAS[URE] imprimirá el punto en la abscisa en el que se produce la condición de medición.

El otro tipo de declaración .MEAS se refiere a un rango sobre la abscisa. Se utiliza la siguiente sintaxis:

Sintaxis: .MEAS [AC|DC|OP|TRAN|TF|NOISE] <name>
 + [<AVG|MAX|MIN|PP|RMS|INTEG> <expr>]
 + [TRIG <lhs1> [[VAL]=]<rhs1>] [TD=<val1>]
 + [<RISE|FALL|CROSS>=<count1>]
 + [TARG <lhs2> [[VAL]=]<rhs2>] [TD=<val2>]
 + [<RISE|FALL|CROSS>=<count2>]

El rango sobre la abscisa se especifica con los puntos definidos por TRIG y TARG. El punto TRIG por defecto es el inicio de la simulación, el punto TARG por defecto es final de la simulación. Si se omiten los tres puntos TRIG, TARG y WHEN, entonces .MEAS[URE] opera en todo el rango de simulación. Los tipos de operaciones de medición que se pueden realizar en un intervalo son:

  • AVG: Calcular el promedio.
  • MAX: Encuentra el valor máximo.
  • MIN: Encuentra el valor mínimo.
  • PP: Encuentra el pico a pico.
  • RMS: Calcular la raíz cuadrática media.
  • INTEG: Realizar la integración.

Si no se especifica ninguna operación de medición, el resultado de .MEAS[URE] es la distancia a lo largo de la abscisa entre los puntos TRIG y TARG. A continuación se muestran ejemplos:

.MEAS TRAN respuesta7 AVG V(out)
+ TRIG V(1) VAL=1.4 TD=1.8m FALL=1
+ TARG V(1) VAL=1.4 RISE=3
Imprimir el valor promedio de V(out) desde la primer caída (flanco descendente) de V(1) a \(1,4\:V\) después de \(1,8\:ms\) del inicio del rango y la tercer subida (flanco ascendente) de V(1) a \(1,4\:V\). Etiquetar como respuesta7.

.MEAS TRAN respuesta8 AVG V(out)
+ TRIG V(1) VAL=1.4 TD=1.8m FALL=1
+ TARG V(1) VAL=1.4 TD=1.8m RISE=1
Imprimir el valor promedio de V(out) desde la primer caída (flanco descendente) de V(1) a \(1,4\:V\) después de \(1,8\:ms\) del inicio del rango y la primer subida (flanco ascendente) de V(1) a \(1,4\:V\) después de \(1,8\:ms\) del inicio del rango. Etiquetar como respuesta8.

.MEAS TRAN respuesta9 AVG V(out)
+ TRIG 1.6 V(1) TD=2.2m
+ TARG V(1) VAL=1.4 TD=1.8m RISE=1
Imprimir el valor promedio de V(out) en el siguiente intervalo: Demorar \(2,2\:ms\) del inicio del rango, esperar que V(1) corte a \(1,6\) \(V\) hasta la primer subida (flanco ascendente) de \(V(1)\) a \(1,4\:V\) después de \(1,8\:ms\) del inicio del rango. Etiquetar como respuesta9.

meas2.asc Captura meas2.asc

Para los análisis .AC, las expresiones condicionales de datos complejos se traducen a condiciones reales convirtiendo la expresión a su magnitud. Además, el resultado de una declaración .MEAS[URE] se puede utilizar en otra. Esto es útil, por ejemplo, para calcular el ancho de banda:

.MEAS AC auxiliar max mag(V(out))/sqrt(2)
Buscar el máximo y nombrarlo auxiliar
.MEAS AC BW trig mag(V(out))=auxiliar rise=1
+ targ mag(V(out))=auxiliar fall=last
Imprimir la diferencia de frecuencia entre los dos puntos \(3\:dB\) por debajo de la respuesta máxima.

NOTA: Los datos de un análisis .AC son complejos y también lo son los resultados de las declaraciones de medición. Sin embargo, la igualdad se refiere sólo a la parte real del número complejo.

measbw.asc Captura measbw.asc

.MEAS[URE] se realiza en el posprocesamiento (una vez completada la simulación). Esto permite escribir un script de declaraciones .MEAS[URE] y ejecutarlas en un conjunto de datos. Para hacer esto, haga que la ventana de la señal sea la ventana activa y ejecute el comando de menú FILE=>Execute .MEAS Script.

Execute .MEAS Script

measbw.asc

Otra consecuencia de que las declaraciones .MEAS[URE] se realicen en el posprocesamiento después de la simulación es que la precisión de la salida está limitada por la precisión de los datos luego de la compresión.

.SUBCKT

Sea que se desea incorporar un componente definido como subcircuito que se encuentra en un archivo externo a LTspice, por ejemplo el siguiente archivo LM7805.lib

.SUBCKT LM7805  1    2    3
* In GND Out
QT6          23  10  2   Q_NPN 0.1
QT7          5   4   10  Q_NPN 0.1
QT5          7   6   5   Q_NPN 0.1
QT1          1   9   8   Q_NPN 0.1
QT3          11  8   7   Q_NPN 0.1
QT2          11  13  12  Q_NPN 0.1
QT17         1   15  14  Q_NPN 10
C2           10  23      4P
R16          12  5       500
R12          16  2       12.1K
QT18         17  23  16  Q_NPN 0.1
D1           18  19      D_D 
R11          20  21      850
R5           22  3       100
QT14         24  18  2   Q_NPN 0.1
R21          6   2       2.67K
R20          3   6       640
DZ2          25  26      D_5V1 
R19          1   26      16K
R18          14  3       250M
R17          25  14      380
R15          25  15      1.62K
QT16         1   20  15  Q_NPN 1
QT15         2   24  21  Q_PNP 0.1
*OFF
R14          21  24      4K
C1           27  24      20P
R13          19  2       4K
QT13         24  27  18  Q_NPN 0.1
QT12         20  25  22  Q_NPN 1 
*OFF
QT11         20  28  2   Q_NPN 0.1
*OFF
QT10         20  11  1   Q_PNP 0.1
R10          17  27      16.5K
R9           5   4       1.9K
R8           4   23      26
R7           10  2       1.2K
R6           29  2       1K
QT9          11  11  1   Q_PNP 0.1
QT8          27  16  29  Q_NPN 0.1
QT4          15  6   17  Q_NPN 0.1
DZ1          2   9       D_5V6
R4           1   9       80K
R3           28  2       830
R2           13  28      4.97K
R1           8   13      7K
*
.MODEL D_5V1 D( IS=10F N=1.16 BV=5.1 IBV=0.5M CJ0 = 1P TT = 10p )
.MODEL D_5V6 D( IS=10F N=1.16 BV=5.6 IBV=5U CJ0 = 1P TT = 10p )
.MODEL Q_NPN NPN( IS=10F NF=1.16 NR=1.16 BF=80 CJC=1P CJE=2P  
+       TF=10P TR=1N )
.MODEL Q_PNP PNP( IS=10F NF=1.16 NR=1.16 BF=80 CJC=1P CJE=2P  
+      TF=10P TR=1N )
.MODEL D_D D( IS=1F N=1.16 CJ0 = 1P TT = 10p )

.ENDS LM7805
Una vez creado el archivo, abrirlo con LTspice, para generar el símbolo del componente:
  • 1. Abrir LM7805.lib
  • 2. Localizar la línea .SUBCKT LM7805 1 2 3
  • 3. Clic derecho sobre LM7805 Create Symbol yes

Captura Create Symbol

... y nombrarlo como LM7805.asy

Captura Create Symbol

  • 4. Acomodar y nombrar los pines 1 2 3 como IN GND OUT respectivamente.

Captura Create Symbol

  • 5. Guardarlo

Luego cerrar y abrir nuevamente LTspice y construir el circuito deseado dónde colocar el componente recientemente creado, el mismo se encontrará dentro de "Top Directory" en la carpeta dónde se guardó LM7805.asy

Captura Create Symbol

por último puede probar el funcionamiento del componente dentro del circuito.

Captura Create Symbol

.NET

Se utiliza en conjunto con el análisis a pequeña señal pequeña (.AC) para determinar los parámetros Y, Z, H y S de una red de 2 puertos. También se puede utilizar para calcular la admitancia y la impedancia de una red de 1 puerto.

Sintaxis: .net [V(out[,ref])|I(Rout)] < Vin|Iin> [Rin=<val>] [Rout=<val>]

La entrada de red se especifica mediante una fuente de tensión independiente, <Vin>, o una fuente de corriente independiente, <Iin>. El puerto de salida opcional se especifica con un nodo, V(out), o una resistencia, I(Rout). Los puertos poseen impedancias características Rin y Rout. Si no se especifican, las impedancias de características de estos puertos se establecen de manera predeterminada en \(1\:\Omega\), excepto en el caso de la fuente de tensión tenga un Rser especificado y/o el puerto de salida especificado sobre una resistencia. En estos casos, las impedancias características se establecen de manera predeterminada en la impedancia del dispositivo (la del generador, y la de la carga). Los valores de Rin y Rout declarados en .NET se priorizan ante las del circuito para los cálculos, pero no para las tensiones y corrientes de nodo en el análisis .AC.

Graficar los parámetros s de una red

En el ejemplo se desea graficar los parámetros \(s_{11}\) y \(s_{21}\) del modelo equivalente de un oscilador de cuarzo, especificado para \(10\:MHz\).

sparams.asc Circuito para obtener los parámetros de una red

En el circuito, se observa que Rser está establecido en la de fuente y se ha fijado una resistencia, Rout, para establecer la terminación de salida. Por lo tanto, es suficiente que la declaración .NET diga simplemente .net I(Rout) V1. No es necesario especificar valores para Rin o Rout ya que los dispositivos de entrada (V1) y salida (Rout) los proporcionan y en ambos casos, es \(50\:\Omega\).

En la siguiente imagen se muestra todas las variables generadas por .NET Variables a parámetros de red

.TEXT

La directiva .text, permite definir cadenas de texto personalizadas que se pueden usar dentro de un circuito para sustituir de forma dinámica ciertos valores o cadenas de texto durante la simulación.

Sintaxis de .text:

.text <nombre>=<cadena de texto>

Ejemplo:

.text DIODO = "1N4001"

Esto define una cadena de texto llamada DIODO y se le asigna el valor "1N4001". Entonces, se puede usar DIODO para hacer referencia a esta cadena de texto. El objetivo principal de la directiva .text es asociar nombres a cadenas de texto. Esto es útil porque permite:

  • Cambiar de manera sencilla un modelo o subcircuito en toda la simulación, sin tener que modificar cada referencia individualmente.
  • Realizar sustituciones de texto en cualquier parte del netlist o de un subcircuito.

Definición global o local:

  • Si se define .text fuera de un subcircuito, la cadena tiene alcance global.
  • Si se define dentro de un subcircuito, el alcance de la cadena es limitado solo a ese subcircuito.

Evaluación de expresiones:

Si se desea usar expresiones dentro de las cadenas de texto que deben ser evaluadas se realiza rodeando la expresión con caracteres de barra vertical (|).

Ejemplo:

R100 1 0 |"10" + "MEG"|

El resultado será:

R100 1 0 10MEG

NOTA: El carácter de barra vertical (|) solo tiene un significado especial si hay al menos una declaración .text en el netlist. Si no se usan declaraciones .text, las barras verticales no se interpretan como un comando especial y no causan ningún cambio en la simulación.

.INCLUDE

La tarjeta .INCLUDE permite incluir otros archivos dentro de un netlist. Es útil para organizar y reutilizar componentes o modelos, ya que permite incluir bibliotecas externas, subcircuitos o modelos que no se necesitan escribir directamente en el archivo principal de la simulación.

Sintaxis de .INCLUDE:

.include <archivo>

Donde <archivo> es el nombre del archivo que se desea incluir. Se procesa el archivo como si su contenido estuviera escrito directamente en el netlist, sustituyendo la directiva .include con el contenido del archivo especificado.

El propósito principal de esta directiva es incluir archivos externos que contengan:

  • Modelos de componentes.
  • Subcircuitos (circuitos definidos por el usuario o predefinidos).
  • Bibliotecas completas de modelos.

Por ejemplo, si se tiene un modelo de un diodo o un amplificador en un archivo externo, se puede incluir ese archivo en la simulación para usar ese modelo sin tener que escribirlo cada vez.

Ruta del Archivo: Se puede usar una ruta absoluta para especificar el archivo. Esto permite referenciar cualquier archivo, incluso si no está en la misma carpeta que que el netlist. De no ser así, buscará el archivo en: * %LOCALAPPDATA%\LTspice\lib\sub: Este es un directorio predeterminado de LTspice donde se almacenan archivos de subcircuitos y modelos. * La carpeta que contiene el netlist: LTspice también buscará el archivo en el mismo directorio que el archivo de simulación. * La lista de directorios en el Library Search Path: Esta es una lista configurada en LTspice donde se encuentran otros directorios adicionales que pueden contener archivos de simulación.

Extensiones de Archivos: No se asume una extensión de archivo por defecto. Por ejemplo: Si tiene un archivo llamado myfile.lib, se debe escribir .include myfile.lib.

Fuentes