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
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?
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
.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.
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.
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
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.
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.
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
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.
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
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.
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: