LTSpice Automatización

Tengo un convertidor elevador alimentado por batería y estoy tratando de medir la caída máxima de voltaje de entrada (batería) en varias condiciones de carga de alto consumo de corriente (diferentes ciclos de trabajo/periodicidades) además de varios tipos de batería (varios voltajes/ resistencias internas). Dado que estoy simulando una cantidad tan grande (relativamente) de tiempo operativo, los archivos de simulación se están volviendo bastante sustanciales, sin mencionar que toman un tiempo. Me gustaría automatizar LTSpice para poder cambiar los valores de los componentes programáticamente y volver a ejecutar simulaciones y capturar datos (valores de cosas como voltaje o corriente). Yo sé eso:

  • Los archivos WAV se pueden usar para ingresar/salir datos del programa
  • El programa se puede ejecutar desde la línea de comandos.

Hasta ahora, mi mejor opción parece usar una combinación de estas dos opciones junto con mi propio código/script de una manera que logre mis objetivos, pero me pregunto si ya existe una mejor manera.

¿Alguien ha automatizado LTSpice o sabe si ha habido algún tipo de API de automatización escrita para él (ya sea por el fabricante o por terceros)?

Idealmente, me gustaría tener un solucionador, de modo que le diera los parámetros deseados y probara varios valores de componentes hasta que encontrara la solución "óptima" para mis limitaciones.

¿Qué dijo su FAE Lineal? Yo les preguntaría primero.
¿Conoces los comandos .STEP y .PARAM? No estoy seguro de si lograría exactamente lo que desea, pero publicaré una respuesta con un par de ejemplos si está interesado.
@OliGlaser: sé que existen, pero no estoy exactamente seguro de cómo usarlos en esta situación. Si tienes un ejemplo sería genial.
@Joel B: está bien, agregué una respuesta con un par de ejemplos.
¿Tiene que ser LT Spice? Creo que el corazón de SPICE es una herramienta de línea de comandos.
Esta pregunta parece estar fuera de tema porque no se trata de diseño electrónico.
@LeonHeller en ¿QUÉ planeta SPICE no es parte del diseño?
Descubrirá que las opciones de Monte Carlo se adaptan perfectamente a esto. Puede Schmoo diferentes parámetros y también puede mostrar las variaciones. LT-Spice PUEDE haberlo deshabilitado porque SPICE lo admite de forma nativa. empieza por ahi
Desafortunadamente para mí, tiene que ser LT-SPICE. Gracias por la sugerencia de Monte Carlo @placeholder

Respuestas (5)

Ejecutar una simulación varias veces y cambiar los valores de varios componentes es un poco más complicado que simplemente cambiar uno (que no es tan malo)

Aquí está el concepto para cambiar un valor:

  • Agregue una declaración .param usando el ícono de la directiva SPICE en el extremo derecho, por ejemplo, para un valor de resistencia.param X=R
  • Para usarlo, ingresaría {x} en el valor de la resistencia, luego incluiría, por ejemplo, .step param X 100 500 50para aumentar el valor entre 100 y 500 en incrementos de 50.

Ejemplo:

Ejemplo de paso

Resultado:

Grafico

Para valores múltiples, la única forma que encontré para trabajar fue usando una lista de valores para X y usando la declaración de la tabla. Esto probablemente se explique mejor con un ejemplo (leer la ayuda de los comandos utilizados probablemente sea útil aquí). Pero tenga en cuenta que la sintaxis del comando de tabla tiene el formato tabla (índice, x1, y1, x2, y2, .... xn, yn), toma el índice como entrada y devuelve un valor interpolado para x=índice basado en el x proporcionado ,y pares.

En una de mis simulaciones, necesitaba realizar 12 simulaciones mientras cambiaba 3 valores de componentes diferentes, aquí están los comandos:

.step param X list 1 2 3 4 5 6 7 8 9 10 11 12
.param Rin1 = table(X, 1, 1,1p, 2, 1p, 3, 1p, 4, 4478, 5, 4080, 6, 3400, 7, 2200, 8, 1p, 9, 1p, 10, 1p, 11, 1p, 12, 1p)
.param Rin2 = table(X, 1, 4997, 2, 4997, 3, 4997, 4, 499, 5, 897, 6, 1577, 7, 2777,  8, 4997, 9, 4997, 10, 4997, 11, 4997, 12, 4997)
.param Tval = table(X, 1, 56, 2, 56, 3, 27, 4, 1G, 5, 1G, 6, 1G, 7, 1G, 8, 1G, 9, 330, 10, 330, 11, 120, 12, 120)
.param Kval = table(X, 1, 316, 2, 147, 3, 147, 4, 6340, 5, 6340, 6, 6340, 7, 6340, 8, 6340, 9, 6340, 10, 825, 11, 825, 12, 316)

Resultado:

Ejemplo de ganancia

Esperemos que capte la idea, tal vez podría producir un script que produzca los comandos SPICE necesarios cuando complete los valores deseados. O simplemente cree una plantilla (por ejemplo, copié y pegué lo anterior en algunas simulaciones diferentes y cambié los valores)

Si lo anterior no hace lo que desea, entonces tal vez busque algo como el multisim de NI (creo que tiene algunas opciones de simulación por lotes, aunque no estoy seguro de cuán útiles son). También puede ser útil preguntar en LTSPice foro y ver si alguien sabe de una mejor manera de hacer las cosas.

Esto no es tan limpio como me gustaría que fuera, pero para el software libre, solo puedo estar agradecido de que me hayan tirado un hueso. Gracias por demostrar esta técnica. Esto definitivamente me acercará a lo que estoy buscando.
Gracias, esto me ayudó a descifrar mi simulación. Ahora tengo que averiguar cómo poner una leyenda en la trama para poder decir qué simulación es cuál.

Creo que en realidad es posible ejecutar LTSpice desde la línea de comando y hacer que ejecute una simulación transitoria:

En Windows:

cd <wherever LTSpice is installed on your computer>
scad3.exe -Run -b MyCircuit.asc

En Linux:

cd ~/.wine/drive_c/Program Files (x86)/LTC/LTspiceIV
wine ./scad3.exe -Run -b MyCircuit.asc
¡Este es un excelente hallazgo! Ahora estoy pensando en cómo puedo usar esto para el diseño automatizado.
@JoelB: sí, también lo uso para eso. Desafortunadamente, hay algunas deficiencias: 1) A diferencia de la GUI, el solucionador se ejecuta en un solo subproceso, por lo que es más lento 2) No tiene ningún "informe de progreso" como en la GUI

LTSpice se puede ejecutar en modo por lotes con el -binterruptor de línea de comando.

Desde el archivo de ayuda de LTSpice:

-b: Ejecutar en modo por lotes. Por ejemplo, "scad3.exe -b deck.cir" dejará los datos en el archivo deck.raw

Cómo leer e interpretar la salida .raw se deja como ejercicio para el lector.

También tenga en cuenta, entre los modificadores de la línea de comandos:

-ascii: Usa archivos ASCII .raw. Degrada gravemente el rendimiento del programa.

Sin embargo, ¿cómo lo ejecuto exactamente? En el modo de línea de comando que es. Por lo general, no soy un usuario de Windows y no tengo idea de cómo hacer esto en una máquina con Windows.
Nunca lo he manejado de esa manera. Tendrás que probarlo por ti mismo. Puede abrir una ventana de comando ('cmd.exe' en el menú Inicio) o ejecutarlo desde cualquier idioma que esté usando para secuenciar sus pruebas.
Si usa matlab, tienen un script para convertir archivos .raw mathworks.com/matlabcentral/fileexchange/…

¿Ya revisó en " LTSpice Queue Manager "? ( El enlace redirige a mi propio sitio web donde puede descargar el software pero no soy su autor, quien originalmente compartió el programa en un foro que hoy está cerrado. Compartirlo a través de mi sitio web es una forma de revivirlo ).

Esta herramienta me ha sido de mucha ayuda en el pasado. Puede preparar muchos archivos de simulación y ejecutarlos en cola.

administrador de colas LTSpice

Hacer cola no es automatización.
Si la automatización que necesita es hacer cola, ¡ciertamente lo es! Esto aborda el problema de OP directamente.
Si este es un software de código cerrado que usted no escribió, esperaría que los usuarios desconfíen comprensiblemente de ejecutarlo.

Si solo tiene que ser LT Spice y no puede pasar la GUI, recomendaría el programa de script AutoIt. Lo he usado para automatizar algunas aplicaciones críticas de Windows que carecían de active-x-DDE-COM.dll-lo que sea. Puede configurarlo para esperar archivos, presionar botones de Windows, elementos de menú, llamar a programas con argumentos, etc.

Mira esto:

http://www.autoitscript.com/sitio/

http://www.autoitscript.com/forum/

Yo optaría por Winbatch si desea pagar por un programa de script.