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á.
Teniendo en cuenta las siguiente equivalencias de Lenguaje de diagrama a Lenguaje de descripción de interconexión para los elementos R y V.
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
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.
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.
Teniendo en cuenta esto, se analizará el siguiente circuito.
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.
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
Que arroja los siguientes resultados.
.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.
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
Se obtiene:
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:
*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
Se obtiene:
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.
.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
.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.
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\).
.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:
*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
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 (.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:
V(1)
en t=5ms
etiquetarlo como respuesta1
.
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
.
Imprimir el valor de V(out)
la segunda vez que se cumpla la condición V(1)=V(2)
. Etiquetarlo como respuesta3
.
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
.
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
.
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
.
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:
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
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.
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
.
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:
auxiliar
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.
.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.
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
- 1. Abrir
LM7805.lib
- 2. Localizar la línea
.SUBCKT LM7805 1 2 3
- 3. Clic derecho sobre LM7805 Create Symbol yes
... y nombrarlo como LM7805.asy
- 4. Acomodar y nombrar los pines
1 2 3
comoIN GND OUT
respectivamente.
- 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
por último puede probar el funcionamiento del componente dentro del circuito.
.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.
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\).
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
.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
- https://ltwiki.org/LTspiceHelp/LTspiceHelp/_MEASURE_Evaluate_User_Defined_Electrical_Quantities.htm
- LTspice Help provisto en el software.