Verwendung von .step param mit mehr als zwei Parametern in LTSpiceIV

Ich muss jeweils drei transiente Simulationen mit unterschiedlichen Werten bestimmter Widerstände (praktisch R1 und R2 genannt) durchführen. Was ich genau vorhabe ist folgendes:

  • Sim. 1: R1 = 1k Ω , R2 = 10k Ω
  • Sim. 2: R1 = 1 M Ω , R2 = 10 M Ω
  • Sim. 3: R1 = 1k Ω , R2 = 1 M Ω

Wenn es nur einen Widerstand gäbe, dessen Widerstand zu variieren wäre, dann würde ich seinen Widerstand einfach auf "{r1}" setzen (ich verwende Kleinbuchstaben, um ihn zu einer anderen Variablen/einem anderen Parameter als R1 zu machen) und einen Befehl verwenden wie:

.step param r1 list 1k 1meg 1k

Da ich jedoch zwei Parameter (zusammen) jeweils zweimal ändern muss, habe ich hier gelesen , dass (zumindest auf LTSpiceIV) eine Problemumgehung für mein Problem so aussehen könnte:

.step param X list 1 2 3

.param r1 = table(X, 1k, 1meg, 1k)

.param r2 = table(X, 10k, 1meg, 10meg)

Beim Durchführen der Simulation erhalte ich die folgenden Warnungen:

WARNING: Can´t resolve .param r2 = table(X, 10k, 1meg, 10meg)
Select OK to continue the simulation with the default model or Cancel to quit now.

Gleiches gilt für r1.

Aus irgendeinem Grund "bricht" die Simulation nicht, wenn ich der Tabelle ein zusätzliches Element hinzufüge. In diesem Fall dauert die Simulation zu lange und schreitet jedes Mal langsamer voran, da sie nie enden würde. Ich habe versucht, X auf 0 1 2 statt 1 2 3 zu setzen, aber das funktioniert auch nicht.

Hier sind einige Bilder:

Schaltung + Befehle

Fehlermeldung

Ihre Hilfe wäre sehr willkommen.

Ich bin verwirrt, möchten Sie 3 oder mehr Situationen simulieren? Wenn Sie nur die 3 Szenarien simulieren möchten, würde ich es nicht mit Spice machen.
Und was soll die X-Achse sein?
Ich möchte diese drei Situationen simulieren und zusammen darstellen. Ich weiß, ich könnte einfach eine CSV-Datei exportieren und sie mit Octave oder Excel plotten, aber es wäre so viel nützlicher, dies direkt auf LTSpice zu tun. In diesem Beitrag ( electronics.stackexchange.com/questions/20811/… ) hat jemand gesagt, wie es geht, aber es funktioniert bei mir nicht. In diesem Beispiel habe ich drei Szenarien eingefügt, aber ich muss möglicherweise mehr einfügen.
In Bezug auf Ihre zweite Frage wären X die verschiedenen Indizes, mit denen ich auf die Werte der Tabelle zugreifen kann. Da mir LT (anscheinend) nur erlaubt, jeweils eine Variable zu durchsuchen, gehe ich durch X und versuche dann, entsprechend dem Wert, den X in diesem Schritt angenommen hat, auf die Werte der Tabelle zuzugreifen. Ich hoffe, ich bin klar. Danke dir.
Nun, zum einen verlangt der Tabellenbefehl einen Index, der X ist, und dann eine Menge von xy-Paaren. Jeder Parameter sollte 3 Paare enthalten, nicht drei Werte.
Ich verstehe nicht wirklich gut. Warum benötigt der Tabellenbefehl x, dann x und y als Eingaben? Könnten Sie bitte ein kurzes Beispiel schreiben, wie man die Funktionen param und table zusammen verwendet? Danke dir.
Bitte fügen Sie eine .asc-Datei hinzu, um das Leben einfacher zu machen. Ich würde gerne ausprobieren.

Antworten (4)

In LTSpice erstellt der Tabellenbefehl wirklich eine Art Wörterbuch, in dem Sie Schlüssel-Wert-Paare angeben müssen. Die richtige Direktive für Ihren Fall wäre dann:

.step param Rx list 1 2 3
.param R1 table(Rx,1,1k,2,1Meg,3,1k)
.param R2 table(Rx,1,10k,2,1Meg,3,10Meg)

und stellen Sie den Wert der Widerstände auf {R1}bzw. {R2}ein.

Wenn Sie die Werte eines Widerstands in der Nähe haben möchten, können Sie auch eingeben (statt Wert, wenn Sie mit der rechten Maustaste darauf klicken)

R=table(Rx,1,10k,2,1Meg,3,10Meg)

in das Widerstandswertfeld. Dies funktioniert für alle Arten von Komponenten auf die gleiche Weise und mit einem externen Skript zum Erstellen von .asc-Dateien kann es als Krücke für LTspices verwendet werden, dem die Monte-Carlo-Funktionalität fehlt.

Ein Parameter-Sweep/Step kann mehrere Komponentenwerte durch Ausdrücke steuern.

Ihre Steuervariable, die Sie steppen, könnte ein Phasenwinkel oder eine Zeitverzögerung oder ähnliches sein, die Sie in eine oder mehrere Formeln/Ausdrücke eingeben, um resultierende Komponentenwerte oder Parameter zu erhalten, die im Design als {Parameter} angewendet werden sollen.

Dies ist nützlich, wenn Sie eine Beziehung beibehalten oder eine indirekte physikalische Eigenschaft des Designs wie eine Strom- oder Filtereigenschaft steuern möchten.

Im "op"-Befehlseditor können Sie etwa Folgendes eingeben:

.STEP param Imax 0.1 0.3 0.1 
.PARAM Uin= 5
.PARAM R = (Uin-0.84954605)/Imax

Es erhöht Imax in Schritten von 0,1 von 0,1 auf 0,3 und berechnet einen Widerstandswert R unter Verwendung der Parameter Imax, Uin, eines angenommenen Spannungsabfalls von 0,85 ... einer Diode.

Auf PARAM R kann in einem Komponentenwert unter Verwendung der {R}-Notation verwiesen werden. Beachten Sie, dass Uin als {Uin} in einer Spannungsquelle oder ähnlichem usw. verwendet werden könnte.

Verwenden Sie für mehrere Zeilen im Editorfenster "op" STRG + M, um alle Parameter im selben Textfeld zu behalten.

Dies funktioniert für meine Schaltung

.step param n liste 2 3 4

.param Rf=Tabelle(n,1,1,3k,2,1,1k,3,1,2k,4,1k)

.param Cf=Tabelle(n,1,54p,1,64p,2,64pF,4,64pF)

Rf erhält also den Wert des aktuellen Index (definiert in der .step-Direktive). Die Tabelle der Werte beginnt also mit der Indexkennung (hier n) und folgt dann dem Paar index, value . Wenn ich den Index in den Tabellen nicht verwende, bekomme ich den gleichen Fehler wie im ersten Beitrag angegeben

Die Arbeitslösung wurde nach dem Lesen der LTspice-Tabellenfunktion gefunden

Nach langem Herumprügeln fand ich, dass es zwei Aspekte dieses Problems gibt, die untersucht werden müssen. Zuerst muss der zu variierende Parameter bestimmt werden.

Wenn Sie beispielsweise einen Widerstand R5 in Ihrem LTSpice-Schaltplan haben, klicken Sie mit der rechten Maustaste auf die Komponente, um das Dialogfeld „Komponentenattribute“ aufzurufen. Wahrscheinlich haben Sie ihm bereits einen Wert gegeben, zB 1k0. Sie müssen dies durch Ihren Parameterbezeichner ersetzen; Setzen Sie das in {} Klammern, zB {R5}, dann Speichern.

Um klar zu sein, ich habe {R5} für meine Bequemlichkeit und mein Verständnis verwendet. Es könnte {Pickle1} sein und es würde immer noch funktionieren.

Jetzt weiß LT spice, wovon Sie sprechen, wenn Sie mit dem Schreiben Ihrer Skripte beginnen.

Jetzt können Sie mit der Verwendung des Spice-Directive-Dialogfelds (.op-Symbol oben rechts) beginnen und Ihr Skript eingeben. Z.B:

.step param Rx 1 5000 100
.param R5=Rx
.param R6=Rx
.op

In diesem Beispiel möchte ich zwei Widerstände (R5 und R6) modifizieren, damit ich den Ausgang meiner Regler sehen kann, vorausgesetzt, ich ändere die Werte von 1 Ohm auf 5000 Ohm über 100 Schritte. Ich habe den Parameter Rx genannt: Die 1. Zeile definiert die Schritte, die ich wie oben beschrieben ausführen möchte.

.step param Rx 1 5000 100

Jetzt möchte ich diesen Parameter nehmen und auf meine Komponenten anwenden. Ich habe den Trick mit dem Dialogfeld "Komponentenattribute" bereits für beide Komponenten durchgeführt. Denken Sie daran, dass sich R5 auf den Parameterbezeichner bezieht. Wenn ich {Pickle} verwendet hätte, würde die Zeile lauten:

.param Pickle=Rx

Die nächsten beiden Zeilen im obigen Skript teilen LTSpice mit, dass die Parameter für R5 und R6 den als Rx bezeichneten Schritten folgen sollten.

.param R5=Rx
.param R6=Rx

Schließlich steuert der Befehl .op die Operation.

Das Endergebnis ist, dass meine Schaltung, die sich außer diesen beiden Werten in einem festen Zustand befindet, jetzt vollständig ist und ich in dem Beispiel, zu dem ich gelangen wollte, die Auswirkung auf den geregelten Ausgang sehen kann.

Die oben beschriebenen Listenbeispiele sind eine andere Möglichkeit, das erforderliche Endergebnis zu erzielen, aber es sieht so aus, als ob einige der Kommentare darauf zurückzuführen sind, dass, wie bei mir, nicht verstanden wurde, dass Sie die Komponentenbezeichner nicht verwenden können, ohne dies zu tun {} Sache. LTSpice weiß nicht, wovon Sie sprechen, bis Sie das tun.

Ich hoffe, diese Erklärung hilft jemand anderem, damit sie nicht drei Stunden damit verbringen, herauszufinden, warum der aus den Beispielen hier entnommene Code möglicherweise nicht funktioniert.

Das ist nicht das, wonach OP fragt. Ihre Antwort ist ein einfaches Tutorial zu einem grundlegenden LTspice-Konzept.