Esta no es una respuesta totalmente perfecta, pero debería darle un buen punto de partida (espero)
Lo que intenté es usar una fuente de voltaje de comportamiento arbitrario.
Esta es mi lista de redes:
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:
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 utilizando time
como parámetro para las funciones. Esto no está disponible en las declaraciones .param
.
Primero necesitamos una función que nos permita permitir una función PWM basada en la hora actual. Para esto, la construcción if(x,y,z)
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 un período de módulo de tiempo, pero no hay un operador de módulo, por lo que tengo que ir por la ruta para restar la parte entera del tiempo dividido por período de la División del tiempo y período. Duh.
Entonces tienes que variar el tiempo en relación con el tiempo. En este ejemplo simplemente usé el tiempo con un factor de 1/100. ...<time*{ontime}
Well ontime
no es probablemente el mejor nombre para ese parámetro, es más como un factor de escala.