4 votos

¿Cómo medir la fase con precisión utilizando LTSpice?

Estoy intentando, y sin éxito, medir la fase en LTSpice. He utilizado la sugerencia aquí

.tran 0.00001 0.5
.meas TRAN time_1 TRIG V(N001)=0 RISE=1 TD=0.4 TARG V(N001)=0 RISE=2 TD=0.4
.meas TRAN time_2 TRIG V(N001)=0 RISE=1 TD=0.4 TARG V(N002)=0 RISE=1 TD=0.4
.meas phase param 360*time_2/time_1

pero el resultado no es muy preciso, ni siquiera para el sencillo filtro RC de la imagen inferior.

LTSpice RC filter

Cómo debe ¿Lo hago yo?

Ten en cuenta que la fase real que necesito medir está en un circuito algo más complejo, pero lo he reducido a un circuito sencillo que parece tener el mismo problema.

5voto

dumfries Puntos 1

Las medidas deberían estar bien, no hay una forma que valga para todos. Puedes usar:

.meas t1 when v(1)=0 rise=1 td=0.4
.meas t2 when v(2)=0 rise=1 td=0.4
.meas phase param 360*(t2-t1)*500

igual de bien y te dará lo que quieres. Se supone que usted está en el estado estacionario (la razón para añadir td ).

El problema es que está utilizando .tran 10u 0.5 probablemente pensando que estás imponiendo un paso de tiempo, pero eso no es lo que hace. Es puede inducir a error Estoy de acuerdo. Para un paso de tiempo impuesto, usted tiene que utilizar:

.tran 0 0.5 0 10u

Esto, por sí mismo, ayudará, pero no mucho. Por defecto, LTspice utiliza un algoritmo de compresión de forma de onda que limita el número de puntos trazados a 1024. Para su caso, 0.5/10u = 50k puntos, que se reducirán, por lo que para desactivar la compresión de la forma de onda, modifique la opción en Control Panel > Compression > Window size(No. of Points) (el ajuste es no recordado durante las sesiones), o añadir:

.opt plotwinsize=0

al esquema. Esta es la forma preferida, ya que se recuerda para cualquier esquema que utilice la opción (y se puede alternar fácilmente entre una directiva SPICE y un comentario). La desventaja es que, con la compresión de forma de onda desactivada, la directiva .raw archivo crecerá y crecerá. Un remedio para ello es utilizar la función .save mando.

Otra cosa que puedes hacer para aumentar la precisión es utilizar:

.opt numdgt=7 measdgt=13

Cualquier número superior a 6 para numdgt permite double puntos de datos de precisión, mientras que measdgt establece el número de dígitos del .meas .


En .AC para las mediciones en el dominio de la frecuencia (como menciona Bimpelrekkie ), si es posible (hay veces que no lo es). Si es posible, utilice .ac list 500 funcionará en este caso. Una cosa que hay que recordar es que el número de .AC puntos está limitado a 65536.

Para los casos en los que no es posible, en cuanto a imponer un paso de tiempo aún más pequeño, hay una solución. Si tu circuito tiene un tiempo de asentamiento largo, imponer un paso de tiempo muy pequeño significará posibles horas de simulación y muchos GB de almacenamiento. Puede haber un truco para evitarlo: no establezcas un paso de tiempo, en su lugar establece un PULSE() fuente con retardo >= tiempo de asentamiento, y con un periodo <= el paso de tiempo más pequeño deseado. De este modo, la simulación volará durante el transitorio y se arrastrará durante el estado estacionario.

Por ejemplo, dado el circuito de tu imagen, el tiempo de establecimiento del 1% debería ser después de unos 46 ms, así que configura una fuente con PULSE 0 1 50m 1u 1u 1u 4u . Esto impondrá un paso de tiempo de 1 µs ya que los puntos de tiempo para la fuente son conocidos, lo que significa que el solucionador tendrá que reducir el paso de tiempo para acomodarlos.

La ventaja es que también se puede activar o desactivar:

  • Si sólo tiene que ser desactivado, entonces especificar el número de períodos será suficiente, pero tenga cuidado con esto: ya que los puntos de tiempo tienen que ser conocidos, eso significa que habrá un retraso antes de que la simulación comience causado por el cálculo de estos puntos de tiempo. Esto sólo ocurre si el número es grande (es decir, si hay que calcular muchos puntos temporales). Si no se especifica el número de periodos, el motor sabe que sólo necesita un patrón de repetición simple de unos pocos puntos temporales.

  • Si necesita encenderse y apagarse, utilice la palabra clave trigger : PULSE 0 1 50m 1u 1u 1u 4u trigger V(x)>0.3 donde V(x) es una tensión de control. Es bastante auto-explicativo, pero por el bien de los futuros lectores, si V(x) procede de otra fuente, por ejemplo SIN 0 1 10 entonces el PULSE() fuente se encenderá cada vez que ` V(x)>0,3, y desactivado en caso contrario.

2voto

trideceth12 Puntos 244

En Bimpelrekkie sugerido en los comentarios, y a concerned citizen mencionado en su respuesta, al final obtuve resultados precisos utilizando .ac análisis.

Al final usé:

.ac list 499 500 501

en lugar de una única frecuencia... porque no conseguí que la función cursor de LTSpice funcionara con una única frecuencia. Sin embargo, añadiendo los dos extra (uno extra podría haber sido suficiente) permitía mostrar un valor distinto de cero en la ventana del cursor.

LTSpice screenshot

Y esta versión es exacta hasta el número de cifras significativas que yo quería.

Para los interesados, este es un vídeo de el circuito real que me interesaba resolver.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X