¿Hay alguna manera de barrer el ciclo de trabajo a lo largo del tiempo en LTspice?

Puedo barrer la frecuencia en el tiempo usando modular, pero no pude encontrar ningún ejemplo sobre la creación de un ciclo de trabajo variable o un ciclo de trabajo que se barre de cero a 100% a una frecuencia dada f en un intervalo de tiempo.

¿Hay alguna forma/solución alternativa para barrer el ciclo de trabajo a lo largo del tiempo en LTspice?

Editar:

Tengo el siguiente circuito temporizador que puede hacer eso. Pero eso no era lo que buscaba, ya que este tipo de solución ralentiza mucho la simulación. Me preguntaba si hay una manera rápida de hacerlo con una sola función especial o comando SPICE.

ingrese la descripción de la imagen aquí

Haga clic con el botón izquierdo en el diagrama a continuación para ampliar y poder ver la variación del ciclo de trabajo:

ingrese la descripción de la imagen aquí

Para aclarar, ¿puede agregar un ejemplo de la forma de onda propuesta? ¿Y supongo que te refieres a una fuente de voltaje?
agregué un ejemplo

Respuestas (6)

No estoy muy seguro de si esto es lo que realmente quieres, pero intentémoslo de todos modos. Primero creamos una rampa de diente de sierra con una cierta frecuencia usando nuestra propia función de módulo definida con el tiempo (trazo verde):

.function mod(x,y) { (x/y)-int(x/y) }

Luego usamos el tiempo real y la función if como punto de corte para crear una onda cuadrada con una fuente de voltaje arbitraria:

V=if( (mod(time*10,1)) > time, 1, 0 )

ingrese la descripción de la imagen aquí

Esto debería darle un buen punto de partida para jugar y adaptarse a sus necesidades.

Después de crear mi propia solución, también entendí la tuya... Porque básicamente es lo mismo.

La mejor manera de hacerlo, tanto en términos de simulación como de manera eficiente, es con dispositivos A:

pwm

Esto le permite no solo variar el control y la portadora por separado, como desee, sino que también tiene acceso a vt(umbral) e vh(histéresis) para el comparador, tiene ayudas temporales como Rout/Cout, o tau, o trise/tfall(elija una opción de la tres), que también ayudan a la convergencia, puede configurar vhigh/vlowlos niveles que desee, y simulará lo más rápido que pueda sin ningún problema. La convergencia está garantizada.

Para las señales, recomiendo usar la fuente de voltaje básica, a menos que se generen dinámicamente en otra parte del circuito.


Me acabo de dar cuenta de que @Bimpelrekkie propuso lo mismo, pero, en mi defensa, señalé explícitamente los elementos a usar.

No soy usuario de LTspice, por lo que no sé si los componentes ideales necesarios están disponibles en LTspice.

Pero suponiendo que lo sean, puede construir su propio sistema para esto, así:

esquemático

simular este circuito : esquema creado con CircuitLab

Básicamente, el circuito compara una onda triangular (rápida) de 1 MHz con una rampa (lenta) de 100 ms. Cuando la lentitud es de 0,5 V, la salida del comparador tendrá un ciclo de trabajo del 50 %, ya que la onda triangular está por debajo de 0,5 V la mitad del tiempo y por encima de la otra mitad del tiempo.

Puede hacer un comparador ideal (cuando no está disponible) utilizando una VCVS (Fuente de voltaje controlado por voltaje) con una ganancia de, por ejemplo, 1000 y valores de salida limitados, por ejemplo, 0 y 1 V.

Tengo un circuito temporizador (ver mi edición) pero no estoy buscando un circuito; Estaba buscando una función rápida como modular para freq. barre Quiero usar el barrido del ciclo de trabajo como entrada a otro circuito.
Hmm, entonces realmente no preguntaste lo que querías preguntar ahora, ¿verdad? Dado que la respuesta de PlasmaHH proporciona una solución similar a la mía, concluyo que no es que no haya entendido correctamente. Que yo sepa, no existe un comando único para generar lo que desea. Pero mis soluciones y las de PlasmaHH seguramente funcionarán mucho más rápido que su circuito basado en NE555. Si el modelo del NE555 es complicado, ralentizará mucho las cosas.
Elija (Schmitt) A-devicessiempre que sea posible sobre cualquier cambio en la naturaleza. Su comportamiento es mucho mejor y también permiten cierto control de grano fino ( vt/vh, td, tau/Cout,Rout/trise,tfall, ...).

Esta no es una respuesta completamente perfeccionada, pero debería darle un buen punto de partida (espero)

Lo que probé es usar una fuente de voltaje de comportamiento arbitrario.

Esta es mi netlist:

B1 NC_01 0 V=if((time/{period})-int(time/{period})<time*{ontime},{Von},{Voff})
.param period 1
.param ontime=1/100
.param Von 3
.param Voff 0
.tran 100
.backanno
.end

Y la captura de pantalla con el resultado:Ancho de pulso variable con el tiempo con una fuente de voltaje simple


Desglose de la función de fuente de voltaje de comportamiento:

Primero tenga en cuenta que las fuentes de voltaje de comportamiento tienen acceso al tiempo de simulación usando timecomo parámetro a las funciones. Esto no está disponible en .paramdeclaraciones.

Primero necesitamos alguna función que nos permita permitir una función PWM basada en la hora actual. Para esto, la if(x,y,z)construcción es útil. Pero un simple if(time<{ontime},3,0)no producirá una señal recurrente sino solo un pulso al principio.

Aquí es donde entran las siguientes construcciones: (time/{period})-int(time/{period})esto es básicamente solo un período de módulo de tiempo, pero no hay un operador de módulo, por lo que tengo que seguir la ruta para restar la parte entera del tiempo dividida por el período de la división de tiempo y período. Duh.

Entonces tienes que variar el ontime con respecto al tiempo. En este ejemplo, simplemente usé el tiempo con un factor de 1/100. ...<time*{ontime}Bueno ontime, probablemente no sea el mejor nombre para ese parámetro, es más como un factor de escala.

Lo hice con una fuente de voltaje conductual. El resultado es el mismo que con el comparador, la modificación del ciclo de trabajo se realiza mediante V2:PWM usando BV y comparador

Aquí está el código .asc:

    Version 4
SHEET 1 880 680
WIRE 32 144 -48 144
WIRE 80 144 32 144
WIRE 272 144 144 144
WIRE 48 176 32 176
WIRE 80 176 48 176
FLAG 32 256 0
FLAG -48 224 0
FLAG 48 176 t1
FLAG 32 144 t2
FLAG 352 224 0
FLAG 352 144 u2
FLAG 272 144 u1
SYMBOL Digital\\diffschmitt 80 96 R0
WINDOW 3 8 32 Left 2
SYMATTR InstName A1
SYMATTR Value vt=0 vh=0 vhigh=3.3
SYMBOL voltage 32 160 R0
WINDOW 3 24 96 Left 1
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V1
SYMATTR Value PULSE(0 3.3 1p {0.5/freq} {0.5/freq} 1p {1./freq})
SYMBOL voltage -48 128 R0
WINDOW 3 24 96 Left 1
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V2
SYMATTR Value SINE(01.65 1.65 {freq2})
SYMBOL bv 352 128 R0
SYMATTR InstName B1
SYMATTR Value V=if(V(t2)>V(t1),3.3,0)
TEXT 296 64 Left 2 !.param freq=2khz freq2=freq/20
TEXT 16 72 Left 2 !.tran {25/freq}
TEXT -72 280 Left 1 !.OPTIONS METHOD=GEAR ABSTOL=1e-6 CHGTOL=1e-12 GMIN=1e-9 ITL1=1000 ITL2=1000 ITL4=1000 ITL6=1000 RELTOL= 0.001 VNTOL=1e-3 NOOPITER

Aquí hay una onda sinusoidal barrida usando una fuente de señal B en LTspice. El valor de f y el voltaje v(a) determina la frecuencia en cualquier momento.

¡Bienvenido a EE.SE! Esto está cerca, pero OP preguntó sobre el ciclo de trabajo. ¿Puedes modificar tu respuesta ligeramente para reflejar esto?