Ich habe mit dem Entwerfen eines Modells für ein dreipoliges Potentiometer in LTspice begonnen, da keine enthalten sind und es sich um eine so häufige Komponente handelt. Als ich das .asy-Symbol und den Wischeranschluss zeichnete, dämmerte mir, dass dies komplizierter sein würde, als es den Anschein hatte. Wie würden die verschiedenen Verjüngungen modelliert? Wie würde diese Verjüngung während der Simulation "gesteuert" werden? Es sieht so aus, als ob zumindest ein Subcircuit und eine Bibliothek in Ordnung sind.
Bevor ich das Rad neu erfinde, hat das schon jemand gemacht ? Danke schön.
...hat das schon jemand gemacht?
Ja, das hat schon mal jemand gemacht. (Ich glaube, sein Name ist Helmut Sennewald).
Die Yahoo LTSpice-Gruppe hat eine Reihe von Potentiometern, die sehr gut funktionieren. Sie müssen ein Yahoo-Konto registrieren und der Gruppe beitreten, um sie herunterzuladen (übrigens empfehle ich dies dringend, wenn Sie LTSpice verfolgen möchten, die Yahoo-Gruppe hat eine der größeren Sammlungen von LTSpice-Modellen von Drittanbietern).
Die relevanten Dateien sind potentiometer_standard.lib
und potentiometer_standard.asy
sowie einige andere unterstützende Dateien.
Die Modelle bieten lineare, logarithmische und andere Modelle sowie ein Potentiometersymbol. Nachfolgend ein Auszug aus der Readme-Datei.
pot_lin : ideal linear resistance dependency
pot_pow : ideal power function resistance dependency
pot_plog : ideal positive logarithm function resistance dependency
pot_nlog : ideal negative logarithm function resistance dependency
potr_tab: arbitrary(table) based resistance dependency
pot_piher_plog : pseudo logarithm function resistance dependency, Piher
pot_radiohm_plog : measured pseudo logarithm fucntion resistance dependency, Radiohm
Wie würde diese Verjüngung während der Simulation "gesteuert" werden?
Diese Potis haben eine wiper
Eigenschaft, die einfach als regulärer LTSpice-Parameter parametrisiert werden kann. Sie könnten beispielsweise sagen wiper={GAIN}
und dann eine Direktive wie hinzufügen .step param GAIN 0 1.0 0.25
.
Ich habe versucht, den obigen Vorschlägen zu folgen, aber es hat sehr lange gedauert, bis ich ein Potentiometer erstellt habe, das wie ein Potentiometer aussieht und das aus dem Hauptschaltplan instanziiert werden kann. Also, zum Wohle aller, die vielleicht so dumm sind wie ich ...
Kopieren Sie einfach diese 3 Dateien in ein Verzeichnis im LTspice-Suchpfad (löschen Sie alle anfänglichen Leerzeichen in jeder Zeile). Hoffe die Namen sind selbsterklärend.
potentiometer_test.asc
Version 4
SHEET 1 880 680
WIRE 272 48 0 48
WIRE 528 48 272 48
WIRE 272 80 272 48
WIRE 528 80 528 48
WIRE 0 96 0 48
WIRE 0 192 0 176
WIRE 272 208 272 176
WIRE 528 208 528 176
FLAG 272 208 0
FLAG 0 192 0
FLAG 320 128 out1
FLAG 528 208 0
FLAG 576 128 out2
SYMBOL voltage 0 80 R0
SYMATTR InstName V1
SYMATTR Value 10
SYMBOL potentiometer 272 176 M0
SYMATTR InstName U1
SYMATTR SpiceLine2 wiper=0.2
SYMBOL potentiometer 528 176 M0
SYMATTR InstName U2
SYMATTR SpiceLine R=1
SYMATTR SpiceLine2 wiper=0.8
TEXT 140 228 Left 2 !.op
Potentiometer.einfach
Version 4
SymbolType BLOCK
LINE Normal 16 -31 -15 -16
LINE Normal -16 -48 16 -31
LINE Normal 16 -64 -16 -48
LINE Normal 1 -9 -15 -16
LINE Normal 1 0 1 -9
LINE Normal 1 -94 1 -87
LINE Normal -24 -56 -16 -48
LINE Normal -24 -40 -15 -48
LINE Normal -47 -48 -15 -48
LINE Normal -16 -80 16 -64
LINE Normal 1 -87 -16 -80
WINDOW 0 30 -90 Left 2
WINDOW 39 30 -50 Left 2
WINDOW 40 31 -23 Left 2
SYMATTR Prefix X
SYMATTR ModelFile potentiometer.lib
SYMATTR SpiceLine R=1k
SYMATTR SpiceLine2 wiper=0.5
SYMATTR Value2 potentiometer
PIN 0 -96 NONE 8
PINATTR PinName 1
PINATTR SpiceOrder 1
PIN 0 0 NONE 8
PINATTR PinName 2
PINATTR SpiceOrder 2
PIN -48 -48 NONE 8
PINATTR PinName 3
PINATTR SpiceOrder 3
potentiometer.lib
* This is the potentiometer
* _____
* 1--|_____|--2
* |
* 3
*
.SUBCKT potentiometer 1 2 3
.param w=limit(wiper,1m,.999)
R0 1 3 {R*(1-w)}
R1 3 2 {R*(w)}
.ENDS
Google LTSpice Potentiometer, es gibt viele Beispiele mit unterschiedlichem Komplexitätsgrad. Die meisten verwenden eine Unterschaltung in dieser Richtung:
* This is the potentiometer
* _____
* 1--|_____|--2
* |
* 3
*
.SUBCKT potentiometer 1 2 3
.param w=limit(wiper,1m,.999)
R0 1 3 {Rtot*(1-w)}
R1 3 2 {Rtot*(w)}
.ENDS
Um einen Parameter (z. B. einen Komponentenwert) zu variieren, können Sie den Befehl .step verwenden, um einen Parameter-Sweep durchzuführen. Wenn Sie nur einen variablen Widerstand mit zwei Anschlüssen wollen, können Sie dafür einen normalen Widerstand verwenden. Wenn Sie drei Terminals benötigen, scheint Steves Antwort gut zu sein.
Unter "Sonderfunktionen" gibt es einen spannungsgesteuerten Varistor, den Sie stattdessen verwenden könnten.
IC_Eng