Forum: Analoge Elektronik und Schaltungstechnik LtSpice: Multiplier ?


von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich versuche gerade, in LtSpice das Modell eines idealen Multipliers zu 
erstellen.
Weiß jemand, wie das geht?

von Lutz (Gast)


Lesenswert?

du musst aufjedenfall noch serienwiderstände von 1mOhm nach der 
Spannungsversorgung einbauen

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

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
von chris_ (Gast)


Lesenswert?

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 ?

von Marian (phiarc) Benutzerseite


Lesenswert?

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).

von Helmut S. (helmuts)


Lesenswert?

chris_ schrieb:
>..
>
> Ist das richtig so?

Ja.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

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.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

V(k) ist ein Netzname. Schreib einfach sowas:
.param k=123
B1 output 0 V(input)*k

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>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
*

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch die Fehlermeldung.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

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
von chris_ (Gast)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

chris_ schrieb:
> B1 output 0 V(input)*k

Helmut S. schrieb:
> B1 output 0 V=V(input)*k

oder deswegen

von chris_ (Gast)


Lesenswert?

ahh .. mein visueller Syntaxcheck ist wohl etwas zu grob ;-)

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
Noch kein Account? Hier anmelden.