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.