LTSpice: ¿cómo paso a una función un nombre de componente como parámetro?

Buenos dias a todos. Estoy implementando un subcircuito en LTspice, y también quiero modificar plot.defs para calcular algunas cantidades con los voltajes/corrientes dentro del subcircuito. Por lo tanto, voy a tener una función como:

.func A(x) V(x:Vo)/V(x:Vin)

donde la función "A" debe tomar como parámetro el nombre de instancia del subcircuito, para poder acceder a sus nodos (etiquetados como Vo y Vin en el subcircuito, usando una fuente de voltaje de comportamiento para que el nombre del nodo sea siempre el mismo).

La sintaxis escrita arriba no funciona, me sale el error:

símbolo indefinido en: "A(<>)"

Donde, por supuesto, "X1" es el nombre que da Spice a la instancia de mi subcircuito. ¿Cual podría ser el problema? Tenga en cuenta que al escribir explícitamente la expresión "A" en el panel de gráficos, todo funciona bien, por lo que se trata de cómo pasar el nombre de la instancia como parámetro.

¡Gracias a todos de antemano!

Ver esta respuesta y comentarios.
Leí el hilo, pero no veo una referencia a mi problema ... Si entendí correctamente, la principal preocupación en ese hilo es cómo hacer referencia a una corriente dentro del modelo, en cambio, tengo todas las cantidades disponibles, yo solo quiero poder pasar el nombre del componente (no un pin, todo el subcircuito) a la función. ¿O está sugiriendo que no puedo hacer esto porque implica analizar una corriente dentro del subcircuito?
Por el análisis, sí, aunque me alegraría si pudiera demostrarse que estoy equivocado en este caso.

Respuestas (2)

Aparentemente funciona tanto con voltajes como con corrientes, pero el formato de la definición es diferente, eso es lo que me he perdido:

.func Vx()=V(X1:Vo)/V(X1:Vin)

Y cuando quieras trazarlo, simplemente llama a Vx(). En realidad, también funciona para las corrientes de entrada/salida de los pines, entonces es Ix(X1,R1), por ejemplo, pero tenga en cuenta que el designador también debe incluir el número, es decir X1, no simplemente X. Además, el nodo será el pin del símbolo, no la definición del subcircuito. Por ejemplo, si tiene .subckt xxx 1 2, pero el símbolo tiene los pines nombrados Ay B, entonces la corriente debería ser Ix(U1:A), noIx(U1:1)

Para que esto funcione, debe haber marcado una o ambas opciones en Control Panel > Save Defaults > Save subcircuit [...].

La mala suposición (mea culpa) que hice en los comentarios fue sobre el análisis, pero eso ya no es relevante ya que el trazado es posterior a la simulación, el plot.defsarchivo solo se necesita después.

Hay dos problemas aquí, no pude obtener una función definida por el usuario para trabajar en el gráfico. El otro es intentar hacer una función que pase un parámetro, cuando solo puede usarlos para pasar información numérica.

El otro es que no puede hacer referencia a una corriente de pin en ningún otro lugar que no sea un gráfico, por lo que si usa los dos puntos, eso no funcionará. La forma de hacer referencia a una corriente de pin se describe en algunas respuestas como esta . La respuesta corta es si desea hacer referencia a una corriente de pin con una resistencia de cero ohmios o una fuente de voltaje de 0 V y luego medir la corriente (es decir, para una resistencia llamada R2, puede hacer esto I (R2), pero no este I ( R2:1))

No puede usar funciones definidas por el usuario gráficamente, puede usarlas en fuentes b y otras áreas en el archivo de especias. Si surge la necesidad de graficar una función, use una fuente b para convertir la función en datos que se puedan graficar. Inconveniente, pero así es, y es poco probable que cambie la forma en que funciona la especia LT.

ingrese la descripción de la imagen aquí

Ok, gracias, tenía miedo de esto... Así que podría simplemente poner en mi subcircuito un ".func A() ..... " y adjuntar una fuente de comportamiento que implemente la función, luego trazar el voltaje en la salida de esta fuente?
Sí, tal como en la imagen. Sin embargo, si está tratando de hacer referencia a un pin actual, vea la edición. meta.stackexchange.com/questions/126180/…
Oh, otra cosa, use la función de límite si usa una división como A / B, porque los valores pueden volverse muy grandes rápidamente a medida que B se acerca a cero (o infinito) si limita la salida de la fuente b a ± 100k puede ser más adecuado para graficar creo que la función sería b=limit(input,-100k,100k)
¡Muchas gracias! Ahora, al saber esto, publicaré una nueva pregunta en un tema separado sobre GFT.