Forum: Analoge Elektronik und Schaltungstechnik LTspice Totzeit erzeugen


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin gerade dabei eine Simulation in LTspice zu entwerfen, welche aus 
einem Referenzsignal zwei Ansteuersignale für Highside und Lowside 
erzeugt, welche um eine Totzeit voneinander verschieden sind. Die 
Totzeit soll dabei im Betrieb veränderbar sein und wird abhängig vom 
Strom durch den Widerstand R2 eingestellt (Simulation siehe Anhang.

Mir ist bewusst, dass man so etwas auch mit BV-Quellen lösen kann. 
Allerdings habe ich die Erfahrung gemacht, dass Simulationen mit 
BV-Quellen und Delay-Funktionen die Simulation sehr langsam sind.

Da die Totzeiterzeugung später in einer größeren Simulation eingesetzt 
werden soll, bin ich deswegen auf der Suche nach einer Totzeiterzeugung, 
die in der Simulation richtig flott läuft. Ich verfolge deswegen einen 
Ansatz, bei dem ich die Totzeit mit Hilfe einer Signallaufzeit eines 
Logikgatters einstelle. Leider funktioniert die Simulation nicht mehr, 
wenn ich anstelle einer festen Totzeit die Totzeit mit Hilfe einer 
Wertetabelle abhängig vom Strom durch R2 wähle und es erscheint die 
Fehlermeldung "A1: Missing look-up table data". Anscheinend scheint 
LTspice nicht zu akzeptieren, dass ich die Gatter-Laufzeit in 
Abhängigkeit von einem anderen simulierten Wert einstellen möchte.

Wer kann mir weiterhelfen?
Eventuell gibt es auch einen anderen Lösungsweg, bei dem man die Totzeit 
im Betrieb abhängig von einem anderen simulierten Wert ändern kann.

Viele Grüße
Stefan

von Totzeit (Gast)


Lesenswert?

Hi,

ich nehme immer ein RC Glied (Tiefpass)mit Diode zum Entladen parallel 
zum R anstatt des Gatters, das Du vor dem Und hast.

Gruß Totzeit

von Helmut S. (helmuts)


Lesenswert?

Warum geht eigentlich die Tabelle nur bis 1A während der Strom bis 200A 
geht?

Soll die Verzögerungszeit also nur zwischen 0 und 1A variabel zwischen 
500ns und 10000ns sein und oberhalb 1A immer 1000ns?

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Helmut S. schrieb:
> Warum geht eigentlich die Tabelle nur bis 1A während der Strom bis 200A
> geht?
>
> Soll die Verzögerungszeit also nur zwischen 0 und 1A variabel zwischen
> 500ns und 10000ns sein und oberhalb 1A immer 1000ns?

Sehr gut erkannt. Da ist noch ein Fehler drin. Ich habe den Fehler 
entsprechend korrigiert (siehe Datei im Anhang).

Die Tabelle soll nur beispielhaft sein. Später wird die Tabelle 
wesentlich länger sein, also mehr Elemente enthalten. Ich möchte einfach 
abhängig von einem Strom eine Totzeit erzeugen. Wichtig ist, dass die 
Totzeit auf das Referenzsignal angewendet werden kann (ich möchte den 
Block nämlich in Kombination mit einer bereits bestehenden Simulation 
verwenden).

Das grundsätzliche Ziel von mir ist, dass die Simulation so schnell wie 
möglich läuft, also die Gesamtsimulation nicht extrem verlangsamt. 
Deswegen kommen BV-Quellen mit Delay-Funktion nicht infrage.

Ich habe mittlerweile etliche Wege mit der der table(...) probiert. Aber 
bei vielen Varianten ist das Problem, dass nur Parameter (.param ...) 
als Tabelleneingabevariable jedoch keine gemessenen Signale akzeptiert 
werden. Gibt es hierfür einen einfachen Lösungsweg bzw. eine alternative 
Lösungsvariante?

Viele Grüße
Stefan

von Helmut S. (helmuts)


Lesenswert?

.param ...table(....)

Alles mit .param wird einmalig vor dem Start der Simulation ausgewertet. 
Da kann also kein V() oder I() in table(...) stehen.

B-Quellen könnne natürlich ein table(V(..),....) haben.

Ob eine Realisierung der variablen Verzögerung mit einem RC-Glied 
schneller als eine B-Quelle mit delay() ist, müsste man ausprobieren.

: Bearbeitet durch User
von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

Hallo Stefan,
Probier es doch mal mit Bv-Quellen wie im Anhang.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Ich nehme für sowas gerne 2 Pulse-Spannungsquellen, die über den Tdelay 
Parameter entsprechend gegeneinander verschoben sind.
Tdelay und on/off Zeiten lassen sich ja parametrisieren.

: Bearbeitet durch User
von Stefan (Gast)



Lesenswert?

Joe F. schrieb:
> Ich nehme für sowas gerne 2 Pulse-Spannungsquellen, die über den Tdelay
> Parameter entsprechend gegeneinander verschoben sind.
> Tdelay und on/off Zeiten lassen sich ja parametrisieren.

Auch diesen Weg habe ich bereits probiert. Aber bei den normalen 
Spannungsquellen besteht das Problem, dass diese als Eingangsparameter 
nur Parameter aber keine simulierten Werte im Stil von I(N...) 
akzeptieren. Somit kann ich die normalen Spannungsquellen für meinen 
Anwendungszweck nicht einsetzen.

Helmut S. schrieb:
> Ob eine Realisierung der variablen Verzögerung mit einem RC-Glied
> schneller als eine B-Quelle mit delay() ist, müsste man ausprobieren.

Ich habe hierzu jetzt einmal zwei Simulationen aufgebaut. Eine mit 
BV-Quellen und eine mit RC-Gliedern, wo ich die Totzeit über die Ladung 
eines Kondensators einstelle. Um den Vergleich realistischer zu machen, 
habe ich die Wertetabellen mit realen Werten ausgefüllt. Die zu 
generierenden Totzeiten sind somit deutlich kleiner als bisher.

Das Ergebnis des Vergleichs ist ziemlich eindeutig. Die Simulation mit 
den BV-Quellen (Simulationsgeschwindigkeit 10 us/s) ist ca. 20 mal 
langsamer als die Simulation mit den RC-Gliedern 
(Simulationsgeschwindigkeit 200 us/s).

Ich habe beide Simulationen im Anhang angehängt.

Wie man am Vergleich der beiden Simulationen sieht, ist die Simulation 
mit den RC-Gliedern wesentlich schneller als die mit den BV-Quellen. 
Allerdings bin ich mit der Simulation mit den RC-Gliedern noch nicht 
restlos zufrieden, weil sich bei deiner Kapazitätsänderung (aufgrund 
einer Änderung des Stroms bzw. der Totzeit) auch die Spannung über der 
Kapazität ändert, weshalb dann die Totzeiten nicht mehr stimmen (siehe 
Screenshot im Anhang.

Hat hierfür jemand eine Idee wie man dieses Problem lösen kann? Bzw. 
gibt es für den Anwendungsfall noch eine andere schnelle 
Simulationsvariante außer den RC-Gliedern?

Viele Grüße
Stefan

von Hagen R. (hagen)


Angehängte Dateien:

Lesenswert?

Ich nehme eine Spannungsquelle die einen Sägezahn von 1Vpp erzeugt und 
mit der Frequenz der späteren PWM arbeitet. Eine BV() die mit IF() 
diesen Sägezahn mit deiner variablen Referenzspannung vergleicht und 
daraus wieder ein PWM Signal erzeugt. Also exakt so wie man es auch 
digital in Prozessoren macht.

Über die Parameter in den IF() Abfragen kannst du auch eine dynamsiche 
Quelle abfragen statt mit festen Werten zu arbeiten.

von Helmut S. (helmuts)



Lesenswert?

Hallo Stefan,

Q ist das Integral C()*x*du
Die Veränderung mittels Tabelle für Q halte ich für keine gute Idee. 
Mich wundert es nicht, wenn da eventuell komische Signale entstehen.

q=-(x*table(abs(I(R2)),0,1000n,1,800n,2,500n,3,400n,5,200n,6,150n,7,100n 
,8,90n,9,80n,10,70n,14,50n,20,40n,40,20n,50,15n,80,11n,100,10n,120,10n)) 
/(10*ln(0.5))

Mach den Vergleich lieber mit RC und variabler Schwelle mit einem 
Diffschmitt-gate. Siehe Anhang.

von Stefan (Gast)


Lesenswert?

Helmut S. schrieb:
> Mach den Vergleich lieber mit RC und variabler Schwelle mit einem
> Diffschmitt-gate. Siehe Anhang.

Vielen Dank für den guten Hinweis und den interessanten 
Simulationsansatz. Die Simulationsgeschwindigkeit ist mit 180 us/s sehr 
schnell. Es zeigt sich wieder mal, dass nicht die BV-Quellen an sich das 
Problem sind, sondern lediglich BV-Quellen mit delay-Funktionen zu einer 
starken Verlangsamung der Simulation führen.

Gibt es eigentlich einen speziellen Grund warum Du Dioden vom Typ "DD" 
einsetzt? Bzw. wie kann man diese Dioden überhaupt einsetzen (ich finde 
die nicht in der Bauteilauswahl)?

Viele Grüße
Stefan

von Helmut S. (helmuts)


Lesenswert?

Hallo Stefan,
Ich habe eine ideale Diode definiert, weil ich dachte das ist nur für 
die Simulation.
Die Diode vom Typ DD hat 0V Flussspannung.

.model DD D(Ron=1 Vfwd=0)

Wenn du das wirklich real aufbauen willst, könnte man wegen der 
Flussspannung von ca. 0,6V die Schaltung nur ab 1V bis 4V 
Schwellspannung sinnvoll nutzen. Das wäre dann für ca. 200ns bis 2000ns 
Verzögerung.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Noch ein kleiner Nachtrag. In der Simulation von Helmut ist noch ein 
kleiner Fehler drin. R3 ist dort nämlich 10 Ohm, sollte aber 1kOhm sein. 
Ich habe mich schon gewundert warum die Totzeit nur in der Highside 
angewendet wird:)

Nach der Änderung funktioniert alles einwandfrei.

Vielen Dank nochmal

Viele Grüße
Stefan

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

Stefan schrieb:
> Noch ein kleiner Nachtrag. In der Simulation von Helmut ist noch ein
> kleiner Fehler drin. R3 ist dort nämlich 10 Ohm, sollte aber 1kOhm sein.
> Ich habe mich schon gewundert warum die Totzeit nur in der Highside
> angewendet wird:)

Danke Stefan für die Fehlermeldung. Im Anhang die korrigierte Version 
mit R3=1kOhm.

: Bearbeitet durch User
von Traubensaft .. (increasingcurrant)


Lesenswert?

Um das Thema noch mal aufzugreifen, da ich da selbst gerade Bedarf 
hatte: Mir gefällt die Version von easylife; sie enthält jedoch noch 
einen Fehler in der Definition der Lowside-Pulsquelle.

Mit Anpassung der Lowside-Quelle und einer Erweiterung um eine 
Verzögerungszeig müsste die Definition der Highsidepulsequelle wie folgt 
aussehen:
1
PULSE(0 3.3 {tdelay} 10n 10n {DC*(1/fsw)-tdead} {1/fsw})

Die der Lowsidequelle:
1
PULSE(0 3.3 {tdelay+DC*(1/fsw)} 10n 10n {(1-DC)*(1/fsw)-tdead} {1/fsw})

Und die erforderlichen Parameter:
1
.param DC=0.15 fsw=15k tdead=1u tdelay=200u

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.