Helmut S. schrieb:
> hast du Help-Seiten in LTspice schon gelesen?
Hallo Helmut, ja habe ich. Aber auf diesen Seiten werden hauptsächlich
die verschiedenen mathematischen und logischen Funktionen in Kurzform
erklärt.
Helmut S. schrieb:
> Prinzip:
> IF(condition, true, false)
>
> Die Funktion die für true oder false steht kann natürlich wieder ein
> IF() sein, beliebig tief geschachtelt.
Das weiß ich bereits und habe auch schon Beispiele damit gemacht. Aber
was ich gern wissen würde ist, ob man ähnlich C auch mehrere Anweisungen
in einer IF ausführen kann.
D.h. etwas, was man in C folgendermaßen programmieren würde:
IF(statement < wert)
{
zustand=10*wert; //erste Anweisung wenn true
wert=5; //zweite Anweisung wenn true
}
Genau genommen habe ich folgendes Problem in LTSpice: Ich möchte eine
Stromsenke mit einem MOSFET simulieren, welche konstant 2 A Strom ziehen
soll. Die Simulation habe ich im Anhang an diesen Beitrag mitangehängt.
Zuerst habe ich dabei versucht die BV-Quelle so zu programmieren:
V=IF(Id(M1)<2, V(G)= delay(V(G),1u)+0.1, V(G)= delay(V(G),1u)-0.1)
Da LTSpice aber offensichtlich ein Problem mit Zuweisungen hat, habe ich
das Ganze dann so programmiert:
V=IF(Id(M1)<2, delay(V(G),1u)+0.1, delay(V(G),1u)-0.1)
Dieser Code funktioniert jetzt im Prinzip, allerdings ist es nun so,
dass die Simulation extrem langsam wird, da LTSpice die ganze Zeit den
Wert für die BV-Quelle neu berechnet.
Aus diesem Grund habe ich nun probiert, die Berechnung nur alle 100 µs
neu auszuführen. Mein Versuch dazu ist dieser:
V=IF((time*10^6)/100=int((time*10^6)/100)),Id(M1)<2, delay(V(G),1u)+0.1,
delay(V(G),1u)-0.1)
Aber wenn ich das probiere kommt nur die Fehlermeldung "Unexpected equal
sign in expression".
Eine andere Variante dies zu realisieren wäre, das Ganze mit einer
lauf-Variablen zu realisieren, welche bei jeder Aktualisierung der
BV-Quelle um 1 inkrementiert wird.
V=IF((lauf=lauf+1)>=100, IF(Id(M1)<2, delay(V(G),1u)+0.1,
delay(V(G),1u)-0.1) lauf=0, )
Hier habe ich allerdings wieder das Problem, dass ich die lauf-Variable
im selben Anweisungsschritt zurücksetzten will, in dem ich die
Neuberechnung der BV-Quelle durchführen möchte. Da auch das zu einem
Kompilierungsfehler führt, wäre ich sehr dankbar, wenn mich jemand über
folgendes aufklären könnte:
-wie macht man eine einfache Variablenzuweisung in LTSpice?
-warum geht das ganz normale Gleichheitszeichen (=) nicht?
-wie schafft man es mehrere Anweisungen in einem Zweig (=true) der
IF-Schleife auszuführen?
Vielen Dank schon mal im Voraus für eure Hilfe.
Andi