Gibt es eine Möglichkeit, den Arbeitszyklus in LTspice über die Zeit zu fegen?

Ich kann die Frequenz mit Modulate zeitlich verschieben, aber ich konnte kein Beispiel zum Erstellen eines variierenden Tastverhältnisses finden, oder ein Tastverhältnis wird bei einer bestimmten Frequenz f in einem Zeitintervall von null auf 100 % verschoben.

Gibt es eine Möglichkeit / Problemumgehung, um den Arbeitszyklus in LTspice über die Zeit zu fegen?

Bearbeiten:

Ich habe die folgende Timer-Schaltung, die das tun kann. Aber das war nicht das, wonach ich gesucht habe, da diese Art von Lösung die Simulation stark verlangsamt. Ich habe mich gefragt, ob es einen schnellen Weg gibt, dies mit einer einzigen Spezialfunktion oder einem SPICE-Befehl zu tun.

Geben Sie hier die Bildbeschreibung ein

Bitte klicken Sie mit der linken Maustaste auf das Diagramm unten, um es zu vergrößern und die Schwankungen des Arbeitszyklus zu sehen:

Geben Sie hier die Bildbeschreibung ein

Können Sie zur Verdeutlichung ein Beispiel für die vorgeschlagene Wellenform hinzufügen? Und ich nehme an, du meinst eine Spannungsquelle?
Ich habe ein Beispiel hinzugefügt

Antworten (6)

Ich bin mir nicht ganz sicher, ob Sie das wirklich wollen, aber versuchen wir es trotzdem. Zuerst erzeugen wir eine Sägezahnrampe mit einer bestimmten Frequenz, indem wir unsere selbst definierte Modulo-Funktion mit der Zeit verwenden (grüne Kurve):

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

Dann verwenden wir die tatsächliche Zeit und die if-Funktion als Grenzpunkt zum Erzeugen einer Rechteckwelle mit einer beliebigen Spannungsquelle:

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

Geben Sie hier die Bildbeschreibung ein

Dies sollte Ihnen einen guten Ausgangspunkt bieten, um daran herumzubasteln und es an Ihre Bedürfnisse anzupassen.

Nachdem ich meine eigene Lösung erstellt habe, habe ich Ihre auch verstanden ... Weil es im Grunde dasselbe ist.

Der beste Weg, sowohl simulativ als auch effizient, ist mit A-Geräten:

pwm

Damit können Sie nicht nur Ansteuerung und Träger nach Belieben separat variieren, sondern haben auch Zugriff auf vt(Schwelle) und vh(Hysterese) für den Komparator, Sie haben zeitliche Hilfsmittel wie Rout/Cout, oder tau, oder trise/tfall(wählen Sie eine Option aus der drei), die auch zur Konvergenz beitragen, können Sie vhigh/vlowauf beliebige Stufen einstellen, und es wird ohne Probleme so schnell wie möglich simuliert. Konvergenz ist garantiert.

Für die Signale empfehle ich, die Grundspannungsquelle zu verwenden, sofern sie nicht an anderer Stelle in der Schaltung dynamisch erzeugt werden.


Ich habe gerade festgestellt, dass @Bimpelrekkie ungefähr dasselbe vorgeschlagen hat, aber zu meiner Verteidigung habe ich ausdrücklich auf die zu verwendenden Elemente hingewiesen.

Ich bin kein LTspice-Benutzer, daher weiß ich nicht, ob die erforderlichen idealen Komponenten in LTspice verfügbar sind.

Aber vorausgesetzt, sie sind es, können Sie Ihr eigenes System dafür bauen, etwa so:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Grundsätzlich vergleicht die Schaltung eine (schnelle) 1-MHz-Dreieckswelle mit einer (langsamen) Rampe von 100 ms. Wenn langsam 0,5 V beträgt, hat der Ausgang des Komparators ein Tastverhältnis von 50 %, da die Dreieckswelle die Hälfte der Zeit unter 0,5 V und die andere Hälfte der Zeit über 0,5 V liegt.

Sie können einen idealen Komparator herstellen (wenn er nicht verfügbar ist), indem Sie eine VCVS (Voltage Controlled Voltage Source) mit einer Verstärkung von beispielsweise 1000 und begrenzten Ausgangswerten verwenden, beispielsweise 0 und 1 V.

Ich habe eine Timer-Schaltung (siehe meine Bearbeitung), aber ich suche keine Schaltung. Ich suchte nach einer schnellen Funktion wie modulate for freq. fegt. Ich möchte den Arbeitszyklus-Sweep als Eingang für eine andere Schaltung verwenden.
Hmm, dann hast du nicht wirklich gefragt, was du jetzt fragen wolltest, oder? Da die Antwort von PlasmaHH eine ähnliche Lösung wie meine Antwort bietet, komme ich zu dem Schluss, dass ich sie nicht richtig verstanden habe. Soweit ich weiß, gibt es keinen einzelnen Befehl, um das zu generieren, was Sie wollen. Aber meine und die Lösungen von PlasmaHH werden mit Sicherheit viel schneller laufen als Ihre NE555-basierte Schaltung. Wenn das Modell des NE555 kompliziert ist, wird es die Dinge sehr verlangsamen.
Wählen Sie (Schmitt) A-deviceswann immer möglich über alles Schalten in der Natur. Ihr Verhalten ist viel besser und sie ermöglichen auch eine feinkörnige Steuerung ( vt/vh, td, tau/Cout,Rout/trise,tfall, ...).

Dies ist keine vollständig perfekte Antwort, sollte Ihnen aber einen guten Ausgangspunkt geben (hoffe ich).

Was ich versucht habe, ist die Verwendung einer willkürlichen Verhaltensspannungsquelle.

Das ist meine Netzliste:

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

Und der Screenshot mit dem Ergebnis:Variierende Impulsbreite mit der Zeit mit einer einfachen Spannungsquelle


Aufschlüsselung der Verhaltensspannungsquellenfunktion:

Beachten Sie zunächst, dass Verhaltensspannungsquellen Zugriff auf die Simulationszeit haben, indem sie timeals Parameter für Funktionen verwendet werden. .paramDies ist in Anweisungen nicht verfügbar .

Zuerst brauchen wir eine Funktion, die es uns ermöglicht, eine PWM-Funktion basierend auf der aktuellen Zeit zuzulassen. Hierfür if(x,y,z)ist das Konstrukt hilfreich. Aber ein einfacher if(time<{ontime},3,0)wird kein wiederkehrendes Signal erzeugen, sondern nur einen Impuls am Anfang.

Hier kommen die nächsten Konstrukte ins Spiel: (time/{period})-int(time/{period})Dies ist im Grunde nur Zeitmodulperiode, aber es gibt keinen Modulusoperator, also muss ich den Weg gehen, um den ganzzahligen Teil der Zeit dividiert durch Periode von der Division von Zeit und Periode zu subtrahieren. Duh.

Dann müssen Sie die Einschaltzeit zeitlich variieren. In diesem Beispiel habe ich einfach die Zeit mit einem Faktor von 1/100 verwendet. ...<time*{ontime}Nun, das ontimeist wahrscheinlich nicht der beste Name für diesen Parameter - es ist eher ein Skalierungsfaktor.

Ich habe es mit einer Verhaltensspannungsquelle gemacht. Das Ergebnis ist dasselbe wie bei Verwendung des Komparators, die Änderung des Arbeitszyklus erfolgt durch V2:PWM mit BV und Komparator

Hier ist der .asc-Code:

    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

Hier ist eine gewobbelte Sinuswelle mit einer B-Signalquelle in LTspice. Der Wert von f und die Spannung v(a) bestimmen die Frequenz zu jedem Zeitpunkt.

Willkommen bei EE.SE! Das ist nah, aber OP fragte nach dem Arbeitszyklus. Können Sie Ihre Antwort leicht ändern, um dies widerzuspiegeln?