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
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
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.
:
Bearbeitet durch User
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
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.