Hallo Zusammen, ich versuche gerade, in LtSpice das Modell eines idealen Multipliers zu erstellen. Weiß jemand, wie das geht?
du musst aufjedenfall noch serienwiderstände von 1mOhm nach der Spannungsversorgung einbauen
Hallo Chris, am einfachsten geht es mit einer Bv-Quelle. V=V(netz1)*V(netz2) oder V=V(netz1,netz2)*V(netz3,netz4) Das letzte is äquivalent zu V=(V(netz1)-V(netz2))*(V(netz3-V(netz4)) Gruß Helmut Nachtrag: LTspice schreibt mit großem "LT".
:
Bearbeitet durch User
Danke schön :-) Ich versuche, das Ganze in eine Bibliothek zu verpacken:
1 | * |
2 | * |
3 | * multiplier |
4 | .SUBCKT multiply v1 v2 vout |
5 | B1 vout 0 V(v1)*V(V2) |
6 | .ENDS |
7 | * |
8 | * |
9 | * subtract |
10 | .SUBCKT subtract v1 v2 vout |
11 | B1 vout 0 V(v1)-V(V2) |
12 | .ENDS |
13 | * |
14 | * |
Ist das richtig so ?
Für einen idealen Subtrahierer (Differenzverstärker) reicht doch eine E (VCVS) Quelle aus. Oder alternativ eine G (VCCS) Quelle mit einem Widerstand parallel, das hat bei mir manchmal Konvergenzprobleme behoben (Norton-äquivalent zur E-Quelle mit Serienwiderstand, nur eben einfacher zu berechnen).
Irgendwie ist mir der Syntax von LtSpice immer noch unklar. Ich versuche, eine Multiplikation mit einer Konstanten zu erstellen. Das Modell müsste meiner Meinung nach so aussehen:
1 | * |
2 | * multiply with constant |
3 | .SUBCKT multiplyconst v1 vout k=1 |
4 | B1 vout 0 V(v1)*V(k) |
5 | .ENDS |
6 | * |
aber es kommt eine Fehlermeldung, wenn ich auf "simulate" drücke.
Hier der nächste Versuch ..
1 | * |
2 | * multiply with constant |
3 | .SUBCKT multiplyconst input output k=1 |
4 | B1 output 0 V(input)*V(k) |
5 | .ENDS |
6 | * |
irgendwie scheint LtSpice die Konstante "k" nicht zu akzeptieren.
V(k) ist ein Netzname. Schreib einfach sowas: .param k=123 B1 output 0 V(input)*k
>V(k) ist ein Netzname.
Danke. So was habe ich mir schon gedacht.
Meine Version sieht jetzt so aus. Funktioniert aber auch nicht:
1 | * |
2 | * multiply with constant |
3 | .SUBCKT multiplyconst input output |
4 | .param k=1 |
5 | B1 output 0 V(input)*k |
6 | .ENDS |
7 | * |
Also das habe ich gerade laufen lassen und geht: v1 in 0 pulse(0 10 0 1) b1 out 0 v=v(in)* 2 .tran 1 .end
Schau dir die Attribute im Symbol-Editor an. Jetzt kannst du im Schaltplan z. B. auf k=2 ändern. * multiply with constant .SUBCKT MULTIPLYCONST input output k=1 B1 output 0 V=V(input)*k .ENDS
:
Bearbeitet durch User
Hallo Helmut, vielen Dank für Deine Antwort. Deine Version funktioniert gut. Obwohl ich den Teil der *.lib auch schon so hatte, ging es bei mir nicht. Ich meine also zu Verstehen, dass man das *.asy File auf jeden Fall von Hand erweitern muss und dass der Fehler in den folgenden, beim mir fehlenden Zeilen lag:
1 | SYMATTR SpiceLine k=1 |
2 | SYMATTR Description multiply with const value |
3 | SYMATTR ModelFile gprogch.lib |
4 | SYMATTR Value MULTIPLYCONST |
5 | SYMATTR Prefix X |
chris_ schrieb: > B1 output 0 V(input)*k Helmut S. schrieb: > B1 output 0 V=V(input)*k oder deswegen
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.