LTSpice: Pasa / falla en el registro de errores si se hace referencia a la constante de voltaje

1

Estoy buscando una forma de que LTSpice informe un "Pase" o "Fallo" ("1" o "0") en el registro de errores si un voltaje medido cae por debajo de un valor de referencia constante preestablecido.

Tengo un modelo que hice de una línea de transmisión y me gustaría que LTSpice pudiera identificar cuándo la amplitud de la señal que se transmite a través del cable simulado cae por debajo del umbral de detección del receptor. ¿Hay un método para hacer esto en LTSpice, quizás usando el comando CROSS ? He intentado resolver esto durante algún tiempo, pero aún no he tenido éxito.

EDITAR: Para aclarar, me gustaría tener una variable etiquetada "test_result" que se establecería en "1" si la señal no cae por debajo del umbral, y se establecería en "0" si lo hace, y el valor de "test_result" se debe mostrar en el registro de errores de LTSpice.

    
pregunta DerStrom8

1 respuesta

-1

Hice esto con 1 bsource y un SR-latch. Los resultados se muestran a continuación, la primera fuente es solo una onda sinusoidal con amplitud creciente. La segunda fuente b detecta si el umbral está por encima de 7 mV (nodo vout2) y el pestillo se dispara la primera vez que vout2 pasa a nivel alto y luego se mantiene alto. Luego mídelo al final del archivo.

Esta no es la misma lógica que desea, pero la funcionalidad es la misma. No veo una forma de hacer esto solo con las fuentes B, mis intentos al usar un retraso produjeron resultados con los NaN (que ni siquiera sabía que la especia LT podría producir hasta ahora).

* C:\Draft7.asc
B1 Vout 0 V=time*0.01*sin(2*pi*time*10)
B2 Vout2 0 V=if(V(vout)<0.007,0,1)
A1 Vout2 0 0 0 0 0 Vout3 0 SRFLOP
.tran 1
.backanno
.end

Si quisiera, podría usar la lista de redes a continuación para generar una parte, de manera que pueda incluirla en otros archivos y contenerla.

B2 Vinternal 0 V=if(V(Vin)<V(condition),0,1)
A1 Vinternal 0 0 0 0 0 test_result 0 SRFLOP

No puede hacer lo que describe con una declaración .meas (por eso publiqué el primer ejemplo):

La única opción con una declaración .meas es tener un condicional

.meas TRAN x FIND time WHEN V(vout)=0.007 CROSS=1

o subir también funcionaría (lo que mide el tiempo del flanco ascendente)

.meas TRAN x FIND time WHEN V(vout)=0.007 RISE=1

en el ejemplo anterior, esto imprime el momento del primer cruce de vout, eso no es lo que quieres, quieres un pase / falla.

Así que ejecuta la cruz

.meas TRAN xx FIND if(time<1,0,1) WHEN V(vout2)=0.007 CROSS=1

Esta es la salida del simulador no exactamente lo que quieres pero tiene un condicional

  

xx: if (time < 1,0,1) = 0 en 0.721136

Sin embargo, ¿qué pasa si no hay un cruce? Si cambiamos la cruz a 8 (solo hay seis cruces) no cumple con la condición.

.meas TRAN x FIND time WHEN V(vout)=0.007 CROSS=8

Esto es lo que produce el simulador:

  

Medida "x" FALLIDA

No hay una manera de medir cuando un CRUZ o un PELIGRO RISE porque la declaración .meas no encuentra la condición, falla la condición completa, por lo que solo hay una manera de encontrar si se cumple una condición utilizando. Declaraciones de Meas. Si la condición falla, no sabes por qué solo falló que sí.

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas