LTSpice: Wie übergebe ich einer Funktion einen Komponentennamen als Parameter?

Guten Morgen alle. Ich implementiere eine Teilschaltung in LTspice und möchte auch die plot.defs ändern, um einige Größen mit den Spannungen/Strömen innerhalb der Teilschaltung zu berechnen. Somit habe ich eine Funktion wie:

.func A(x) V(x:Vo)/V(x:Vin)

wobei die Funktion "A" den Instanznamen der Teilschaltung als Parameter nehmen sollte, um auf ihre Knoten zuzugreifen (in der Teilschaltung mit Vo und Vin gekennzeichnet, wobei eine Verhaltensspannungsquelle verwendet wird, um den Knotennamen immer gleich zu machen).

Die oben geschriebene Syntax funktioniert nicht, ich bekomme den Fehler:

undefiniertes Symbol in: "A(<>)"

Wobei "X1" natürlich der Name ist, den Spice der Instanz meines Subcircuits gegeben hat. Was könnte das Problem sein? Bitte beachten Sie, dass durch explizites Schreiben des Ausdrucks von "A" in das Plot-Panel alles funktioniert, also ist es eine Frage, wie der Instanzname als Parameter übergeben wird.

Danke allen im Voraus!

Siehe diese Antwort und Kommentare.
Ich habe den Thread durchgelesen, aber ich sehe keinen Hinweis auf mein Problem ... Wenn ich richtig verstanden habe, geht es in diesem Thread hauptsächlich darum, einen Strom innerhalb des Modells zu referenzieren, stattdessen habe ich alle verfügbaren Größen, d Ich möchte nur in der Lage sein, den Komponentennamen (kein Pin, die gesamte Teilschaltung) an die Funktion zu übergeben. Oder schlagen Sie vor, dass ich dies nicht tun kann, weil dies das Analysieren eines Stroms innerhalb des Teilkreises impliziert?
Wegen des Parsens, ja, obwohl ich froh wäre, wenn ich mich in diesem Fall als falsch erweisen könnte.

Antworten (2)

Anscheinend funktioniert es sowohl mit Spannungen als auch mit Strömen, aber das Format der Definition ist anders, das habe ich vermisst:

.func Vx()=V(X1:Vo)/V(X1:Vin)

Und wenn Sie es plotten möchten, rufen Sie einfach an Vx(). Es funktioniert tatsächlich auch für Ströme in/aus Pins, dann ist es Ix(X1,R1)zum Beispiel , aber beachten Sie, dass der Bezeichner auch die Nummer enthalten muss, dh X1nicht einfach X. Außerdem ist der Knoten der Pin des Symbols, nicht die Definition der Teilschaltung. Wenn Sie z. B. haben .subckt xxx 1 2, aber das Symbol die Pins mit den Namen Aund hat B, dann sollte der Strom sein Ix(U1:A), nichtIx(U1:1)

Damit dies funktioniert, müssen Sie eine oder beide Optionen in aktiviert haben Control Panel > Save Defaults > Save subcircuit [...].

Die schlechte Annahme (mea culpa), die ich in den Kommentaren gemacht habe, betraf das Parsing, aber das ist nicht mehr relevant, da das Plotten nach der Simulation erfolgt, die plot.defsDatei wird erst danach benötigt.

Hier gibt es zwei Probleme: Ich konnte keine benutzerdefinierte Funktion im Diagramm zum Laufen bringen. Der andere ist Ihr Versuch, eine Funktion zu erstellen, die einen Parameter übergibt, wenn Sie sie nur verwenden können, um numerische Informationen zu übergeben.

Das andere ist, dass Sie nur in einem Diagramm auf einen Pin-Strom verweisen können. Wenn Sie also die Doppelpunkte verwenden, funktioniert das nicht. Die Art und Weise, einen Pin-Strom zu referenzieren, wird in einigen Antworten wie dieser beschrieben . Die kurze Antwort lautet, wenn Sie einen Pin-Strom mit einem Null-Ohm-Widerstand oder einer 0-V-Spannungsquelle referenzieren und dann den Strom messen möchten (dh: für einen Widerstand namens R2 können Sie dies I (R2) tun, aber nicht dieses I ( R2:1))

Sie können benutzerdefinierte Funktionen nicht grafisch verwenden, Sie können sie in b-Quellen und anderen Bereichen in der Spice-Datei verwenden. Wenn eine Funktion grafisch dargestellt werden muss, verwenden Sie eine B-Quelle, um die Funktion in Daten umzuwandeln, die grafisch dargestellt werden können. Unpraktisch, aber so ist es, und es ist unwahrscheinlich, dass sich die Wirkungsweise von LT Spice ändert.

Geben Sie hier die Bildbeschreibung ein

Ok danke, ich hatte Angst davor .... Also könnte ich einfach eine ".func A () ..... " in meinen Unterschaltkreis einfügen und eine Verhaltensquelle anhängen, die die Funktion implementiert, und dann die Spannung am Ausgang darstellen dieser Quelle?
Ja, genau wie auf dem Bild. Wenn Sie jedoch versuchen, auf einen Pin-Strom zu verweisen, sehen Sie sich die Bearbeitung an. meta.stackexchange.com/questions/126180/…
Oh, eine andere Sache, verwenden Sie die Begrenzungsfunktion, wenn Sie eine Division wie A / B verwenden, da die Werte schnell sehr groß werden können, wenn B gegen Null (oder unendlich) geht, wenn Sie die Ausgabe der b-Quelle auf etwa ± 100 k begrenzen besser geeignet für die grafische Darstellung Ich denke, die Funktion wäre b=limit(input,-100k,100k)
Vielen Dank! Jetzt, da ich das weiß, werde ich eine neue Frage in einem separaten Thema über GFT stellen.