Das Einfügen einer unbenutzten Spannungsquelle in LTspice bringt transiente Ergebnisse durcheinander

Ich habe drei Tage gebraucht, um das herauszufinden. Betrachten Sie diese einfache Schaltung in LTspice:

Geben Sie hier die Bildbeschreibung ein

Sieht ziemlich unschuldig aus. Der Ausgang ist wie erwartet eine 1-V-Sinuswelle. Gehen Sie zu View->FFT, setzen Sie die Anzahl der Datenpunkte auf 5000, Startzeit 50u, Endzeit 100us. Keine Filterung. Dies ist die Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Ein Ausgang wie dieser macht für einen Sinusausgang und/oder ein schwach nichtlineares System, in dem die Oberwelle sanft abfallen soll, keinen Sinn.

Löschen Sie nun V6 und führen Sie es erneut aus. Voila, das Spektrum macht mehr Sinn.

LTspice erlaubt kein "Auskommentieren" bestimmter Blöcke und merkt sich nicht einmal die Parameter. Wenn ich also zwischen Sinus- und Impulseingang umschalte, muss ich immer den gesamten Parametersatz neu erstellen und mir einprägen. Daher ist es sinnvoll, alle Quellen auf dem Schaltplan zu platzieren und nur diejenige anzuschließen, mit der ich gerade arbeite.

Ich habe den Verdacht, dass es mit den zeitdiskreten Zeitschritten zu tun hat, die durch bloßes Platzieren einer Impulsquelle erzwungen werden.

Meine Frage ist:

  • Was habe ich falsch gemacht?
  • Wie kann dies vermieden werden? Mit anderen Worten, wie kann ich der Ausgabe einer transienten Analyse vertrauen?
  • Leider wirkt LTspice so spartanisch: Gibt es Möglichkeiten, einen festen Sample-Schritt zu erzwingen? Gibt es Optionen, um die transiente Ausgabe so neu abzutasten, dass sie für eine DFT geeignet ist?
Ich frage mich, ob Sie V6 über einen Widerstand mit Masse verbinden, anstatt ihn schwebend zu lassen, was einen Unterschied machen würde? In jedem Fall sind die Harmonischen -120 dB, also frage ich mich, warum Sie das für ein Problem halten?
Gehen Sie zur Systemsteuerung und sehen Sie sich dort die Gewürzregisterkarte an. Viele interessante Dinge zum Anpassen - wie zum Beispiel gmin. Aber ich denke, Sie haben die Schrittgröße richtig erraten. Versuchen Sie es mit 1e-10 statt 10e-9. Schau was passiert.
Siehe auch diese Antwort , aber es gibt einige Details, die separat angesprochen werden können.

Antworten (2)

Es ist nichts falsch an dem, was Sie getan haben, aber es kann verbessert werden. Gemäß den Kommentaren und der Antwort von @ HKOB hat die zusätzliche Quelle eine 1psAnstiegs- / Abfallzeit im Vergleich zu ihrem Arbeitszyklus von 0.5us. Während die PULSEQuellen intern pro Zeitschritt bewertet werden – das heißt, während der gesamten Simulation weiß LTspice jederzeit, welche Werte zu welchen Zeiten vorliegen – muss der Solver seinen Zeitschritt noch reduzieren, um den sehr starken Anstieg/Abfall zu berücksichtigen mal. Dies liegt in diesem Fall vor allem an der sehr glatten Natur der Signale (Sinuseingang, Sinusausgang). Dies, zusammen mit Ihrem auferlegten Zeitschritt von 10nsfür einen Zeitraum von 1us, führt dazu, dass LTspice trotzdem zusätzliche Geräusche erzeugt.opt plotwinsize=0, aber beachten Sie auch, dass die Werte des induzierten Rauschens sehr klein sind, vergleichbar mit denen für die fehlende Quelle.

Übrigens können Sie 0am Anfang des Impulses ein hinzufügen, gefolgt von einem Kommentar: 0;pulse ..., dadurch wird die Quelle nullwertig. Oder Sie können es so vorbereiten, dass es für Folgendes bereit ist .step: pulse {-a*0.8} {a*0.8} 0 {1p*a} {1p*a} {0.5u*a} {1u*a}, wo sich beispielsweise abefinden kann . .step param a list 1 0Hier ist das Ergebnis mit diesen Einstellungen:

Komp

Beachten Sie, dass das Rauschen (bis 100 MHz) aufgrund des relativ großen Zeitschritts tatsächlich geringer ist als die Oberschwingungen, was bedeutet, dass es sicher ist, sie zu ignorieren, oder verbessern Sie die Simulation: Machen Sie einfach den Zeitschritt (1000-mal kleiner 1nsals die Periode) und führen Sie ihn erneut aus.

weniger

Sie können niedriger gehen, aber für die Zeit, die Sie simulieren, wird es sehr langsam für wenig zusätzlichen Nutzen, was bedeutet, dass Sie die Gesamtsimulationszeit auf 8-10 Perioden oder ähnliches reduzieren können (es sei denn, Sie wollen wirklich genau das erfassen auch niedrige Frequenzen) und das Ergebnis wird schneller und mit der gleichen Relevanz sein.

Leider (und zumindest meines Wissens) gibt es keinen SPICE-Simulator, der einen echten festen Zeitschritt hat, und das liegt an der Natur des Lösers. Welchen Zeitschritt Sie auferlegen, hat nur den Effekt, dass der Solver auf das Maximum dieser Zeitschritte beschränkt wird, aber er wird niedriger, wenn dies erforderlich ist.

Numdgt sollte auch hier helfen
Danke! Ja, ich habe bereits in meiner Frage Anstiegs- / Abfallzeiten des Vpulses vermutet. Zu Deinem Wissen: Ich habe mit Spectre recht gute Erfahrungen und Kontrolle gemacht. Ich hatte dort ähnliche Probleme, kann aber entweder einen festen Zeitschritt für das Strobing erzwingen. Außerdem ist es viel mächtiger, nur eine einzelne Variable hinzuzufügen und sie zum Laufen zu bringen, während es in LTspice so aussieht, als müsste man ständig Dinge hinzufügen/entfernen/merken, Sweeps manuell ausführen, Daten extrahieren usw. Auf jeden Fall ist der Trick mit .step nett .

Mit der zusätzlichen Quelle fügen Sie aufgrund der Anstiegs- und Abfallzeit von 1 ps zusätzliche erzwungene Zeitpunkte hinzu. Die zusätzlichen Zeitpunkte führen zu geringfügigen numerischen Abweichungen in den Lösungen. Zwei Dinge sind zu beachten: (1) Wenn numerische Fehler auf Konvergenz zurückzuführen sind, ist reltol normalerweise die Option zur Reduzierung. Beispiel: ".option reltol=1e-6". Auch das Reduzieren von dTmax in der .tran-Anweisung sollte zu genaueren Ergebnissen führen. Der typische Rat ist, diese beiden etwas zu reduzieren und sie dann zu lockern, bis Sie zufrieden sind, dass Ihre Lösung genau genug ist. Ich kann es jetzt nicht testen, aber ich denke (2), wenn die Zeitpunkte das FFT-Sampling stören, können Sie in LTspice Tstep (Druckschritt) auf einen festen Wert setzen, z. B.: ".tran 10e-9 100u 0 10e- 9".