En LTspice, y no solo, las expresiones condicionales como if()
tienden a introducir discontinuidades que van en contra del solucionador debido a la derivada en ese punto. Se pueden evitar algunas discontinuidades simples, pero, por lo general, se deben evitar.
Una solución sería tratar de suavizar la discontinuidad agregando un pequeño condensador (fF ~ pF) a través de la fuente que tiene los condicionales, lo que obligaría a la forma de onda a seguir una ruta más fluida, permitiendo así que el solucionador " vea "todos los puntos y pase por delante, mientras que, al mismo tiempo, no influya en el circuito introduciendo polos no deseados que podrían causar resultados erróneos.
Otra solución sería simplemente usar el A-devices
que viene con LTspice, o, con el LTspice XVII más reciente, el comando .machine
. Digo esto mirando su esquema, donde veo, en su mayoría, casos de if(cond, <one_voltage>, <another_voltage>)
, que pueden resolverse fácilmente con puertas lógicas.
Mientras estamos en ello, también puede evitar la histéresis positiva para el interruptor, que es conocido por causar problemas, y elegir un valor negativo, lo que haría que las transiciones fueran más fáciles de on
a off
y viceversa, en lugar de cambios bruscos.
Otra nota menor sería no basarse en los diodos predeterminados, que son ideales, y forzar un diodo "normal" especificando uno de los otros parámetros, como Is=1f
, por ejemplo. O bien, podría mantener el diodo ideal más rápido, pero no le hará daño agregar epsilon=<fraction of Vfwd>
y revepsilon=<fraction of Vfwd>
; agregan una región cuadrática simple a las rodillas de la función de transferencia.
Y, finalmente, los parásitos en C
sy L
s pueden hacer mucho para evitar grandes cantidades conmutadas (corrientes, en su mayoría) y para hacer que el circuito se comporte de forma más real.