1 votos

Error 'Time step too small' al simular d-flip-flop en LTSpice

Estoy tratando de simular un contador de 3 bits en LTSpice y estoy recibiendo un error durante la simulación:

Analysis: time step too small; time = 1.1e-009, timestep = 1.125e-019: trouble with d-flop instance a3

así que el circuito que estoy simulando se ve así:

enter image description here

y los parámetros de reloj/simulación pueden verse aquí:

enter image description here

donde los parámetros de la fuente de tensión son los siguientes

enter image description here

¿podría alguien indicarme por qué se producen estos errores y cómo solucionarlos? Gracias.

2voto

dumfries Puntos 1

Es necesario prever un retardo para el dflop a través del parámetro td . La razón es que el estado en la salida y en la entrada coinciden sin retardo, y (cita del manual, LTspice > Circuit Elements > A. Special Functions ):

Por defecto, las compuertas y los dispositivos de disparo Schmitt no proporcionan información sobre el paso de tiempo al motor de simulación. Es decir, no miran cuando están a punto de cambiar de estado y se aseguran de que hay un paso de tiempo cercano a cada lado del cambio de estado.

Lo que ocurre es que si la salida cambia, debe ser porque la entrada ha cambiado de estado. Pero si la salida y la entrada están ligadas directamente, y no hay retardo entre los dos estados, entonces el solucionador ve un cambio simultáneo en la salida y en la entrada, pero eso no puede ser ya que la salida sólo puede cambiar si la entrada ha cambiado.

A continuación, el solucionador intenta reducir el paso de tiempo para detectar qué ha ocurrido para que tanto la entrada como la salida cambien de estado aparentemente al mismo tiempo. Y seguirá reduciendo el paso de tiempo, pero como ambos estados se reducen a uno, debido a la conexión directa, por mucho que lo reduzca no puede separar los dos estados. Cuando el paso de tiempo se ha vuelto demasiado pequeño para reducirlo, se queja.

La solución es muy sencilla: añada td=1...100n , td=10n es un valor suficientemente bueno. No dudes en añadirlo también a las otras puertas. Si hay un retardo, entonces la salida cambiará de estado sólo después de que td segundos, lo que significa que el solucionador tiene tiempo de ver que se produce un cambio en ambos estados, pero por separado, de forma que tenga sentido. Y, si lo piensas, en la vida real siempre hay cierto retraso, ningún cambio se produce instantáneamente (menos mal que existe la causalidad).

Además, no es necesario establecer el parámetro trise/tfall de la fuente a una millonésima parte más pequeña que el período; 100...1000 veces es suficiente, a menos que sus requisitos sean específicos (cosa que dudo).

Además de td Pero también hay otros parámetros temporales que sólo pueden ayudar a largo plazo. Dos de ellos, tau y tripdt son las que recomiendo encarecidamente a todo el mundo. En este caso, tau=10n tripdt=10n te ayudaría mucho. Lo que hacen es forzar al solver a reducir su paso de tiempo sólo si hay un cambio en la salida que ocurre en menos de tripdt segundos. tau obliga a una constante de tiempo RC de 1er orden de 10 ns, por lo que para tripdt segundos, el motor se ralentizará, calculará la salida y luego volverá a un paso de tiempo grande. Esto ayuda a mantener los bordes nítidos, pero lo suficientemente suaves como para evitar contratiempos en la derivada, mientras que también es muy rápido en otros lugares.

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