Eine Simulation in LTSpice beginnt mit der Erstellung des Schaltplanes. Dafür werden die Bauteile (resistor, capacitor, inductor, diode und andere Teile durch den Klick auf component) platziert und mit Leitungen (wire) miteinander verbunden. Die Bauteilwerte können durch Rechtsklick geändert werden. Bei jeder Schaltung muss mindestens ein Ground-Symbol platziert werden. Am Ende muss noch eine Simulationsmethode ausgewählt und richtig parametriert werden ([simulate -> edit simulation command] oder Drücken auf run).
Hinter dem graphischen Schaltplan verwendet LTSpice eine Netzliste (view -> spice netlist). Dabei kann man erkennen, das sämtliche Leitungen einfach durchnummeriert werden. Möchte man aussagekräftigere Namen verwenden, so kann man Labels (label net) vergeben.
Nachdem die Simulation gestartet und fertig durchlaufen wurde öffnet sich das Waveform-Fenster. Klickt man danach innerhalb der Schaltung auf eine Leitung, so kann man den Spannungsverlauf betrachten [V]. Für eine Spannungsdifferenz zweier Signale klickt man auf die erste Leitung, hält die Taste gedrückt und lässt sie bei der zweiten Leitung wieder los. Ein Klick auf ein Bauteil stellt den Strom dar [A]. Hält man auch die Alt-Taste gedrückt, so wird die Leistung dargestellt [W].
Zum Ablesen von Werten kann man Cursor hinzufügen (Klick auf Label im Waveform-Fenster). Für Differenzmessungen setzt man einfach den zweiten Cursor. Für ein grobes Ablesen reicht es auch aus, den Cursor auf den gewünschten Punkt zu positionieren und den X/Y-Wert in der Statusleiste abzulesen. Für die Anzeige einer Differenzzeit /-amplitude muss man ein Rechteck aufziehen und halten. Damit nach dem Loslassen der Taste die Anzeige nicht gezoomt wird, muss man die Auswahl mit Escape abbrechen.
Durch Rechts-Klick auf die Signal-Bezeichnung öffnet sich ein Fenster zum Einstellen der Signal-Farbe und zur Auswahl eines Cursors. Des Weiteren kann das dargestellte Signal mit einer Spice-Direktive ausgewählt werden.
Strg+Klick auf die Bezeichnung öffnet ein Fenster mit einfachen Berechnungs-Ergebnissen (Mittelwert, RMS)
Für bestimmte Messpunkte /-werte kann man die .meas-Anweisung verwenden. Man kann beliebig viele Messpunkte angeben. Die Ausgabe erfolgt in der Error-Log-Ausgabe (view -> spice error log).
Um Bauteilwerte nicht händisch berechnen zu müssen, kann man den Wert auch von LTSpice errechnen lassen. Dafür verwendet man die Funktion der Parametrierung. Innerhalb der Parameter-Angaben können auch Formeln platziert werden.
Für Simulationen mit benutzerdefinierten Signalen (z.B. real gemessene Signale) kann man bei den Quellen eine PWL-Datei angeben. Die Datei enthält eine Auflistung von Werten für bestimmte Zeitpunkte. Zwei benachbarte Punkte werden linear verbunden (piecewise linear = stückweise linear).
Wie man bei der Beispiel-Datei sieht, kann die Zeit und die Amplitude unterschiedlich angegeben werden (Ganzzahl, Reele Zahl mit Punkt, Reele Zahl in Exponentialdarstellung und Reele Zahl mit SI-Präfix (... T, G, Meg, k, m, u, n, p, f, ...)). Die Zeit wird von der Amplitude mit Leerzeichen bzw. mit Tabulatoren getrennt. Zur Verbesserung der Übersicht sollte jeder Zeit-Amplituden-Eintrag in einer neuen Zeile beginnen.
Benötigt man nur einige PWL-Punkte, so kann man diese auch direkt bei der Quelle eintragen. PWL statt PWL FILE.
Um diverse Schaltvorgänge (Taster, Controller-Ausgänge, ...) einfach simulieren zu können, eignen sich spannungsgesteuerte Schalter als Nachbildung sehr gut. Diese Schalter findet man in der Komponenten-Bibliothek unter den Namen "sw". Nach dem Hinzufügen des Symbols ändert man das Modell des Schalters durch Strg + Rechts-Klick auf ein Modell Namens "btn".
Das Modell "btn" definiert man mit dem Hinzufügen einer Spice-Direktive mit den Angaben für den Schalter (Ein-Widerstand, Aus-Widerstand, Schaltspannung, Schalthysterese, ...). Die Schaltzeitpunkte kann man durch eine Spannungsquelle defineren. Im unteren Beispiel wurde eine Quelle mit PWL Angaben (piecewise linear) verwendet.
Mit einer Transienten-Analyse kann man die Funktion des spannungsgesteuerten Schalters einfach kontrollieren. Das violette Signal gibt das Steuersignal des Schalters wieder. Das türkise Signal stellt das Signal an einem simulierten Taster mit Pullup-Widerstand und Entprellung dar.
Für die Simulation einer Zener Diode verwendet man das vorhandene Symbol in Kombination mit einer Spice Direktive. Bei den Modell Angaben für die Zener Diode kann unter anderem die Vorwärtsspannung und die Zener-Klemmspannung konfiguriert werden.
Nach einer einfachen Simulation des Arbeitspunktes erhält man das erwartete Resultat der Ausgangsspannung. Die Spannung an der Zener Diode wird mit 5V begrenzt. Dieses Verhalten kann als Fixspannungsquelle (einfach, aber nur für geringe Lasten) bzw. für den Überspannungsschutz verwendet werden.
Ein Transformator wird simuliert, indem man zwei Spulen mit der Angabe einer Gegeninduktion koppelt (K1 L1 L2 1.0). Die letzte Zahl gibt den Kopplungsfaktor an (zwischen 0 und 1), also umgekehrt proportional zu den Streuverlusten über die Streuinduktivität. Das Übertragungsverhältnis wird über die Angabe der Induktivitäten festgelegt (siehe Kommentare in Simulation).
Somit sind die Übertragungseigenschaften definiert. Die Spannung von Eingang zu Ausgang verhält sich wie die Windungszahl Primär zu Sekundär. Die Windungszahl Primär zu Sekundär zum quadrat ist gleich der Primär-Induktivität zur Sekundär-Induktivität. Die transformierte Impedanz ist gleich der Sekundär-Impedanz multipliziert mit dem Übertragungsverhältnis zum quadrat.
Die Simulationsergebnisse wiederspiegeln das zuvor angegebene Verhalten:
Viele Halbleiter-Hersteller stellen für die einfache Evaluierung ihrere Bauteile genaue Spice-Modelle zur Verfügung. Aufgrund vieler verschiedener Spice-Simulatoren können die Modelle nicht für sämtliche Spice-Anwendungen bereitgestellt werden. Daher konzentrieren sich die Halbleiter-Hersteller meistens auf einen Simulator. Da die Spice-Simulatoren eine große Kompatibilität aufweisen, kann man mit einigen Handgriffen die bereitgestellten Modelle für andere Spice-Simulatoren anpassen.
Als Beispiel für die Verwendung von Spice-Modellen wird eine BAV99-Diode von NXP Semiconductor eingebunden. Der Hersteller stellt eine ZIP-Datei mit der Datei "BAV99.prm" zur Verfügung (http://www.nxp.com/products/diodes/switching_diodes/BAV99.html). Diese Datei wird für LTSpice einfach auf "BAV99.sub" unbenannt und mit Hilfe eines Texteditors von nicht benötigten Kommentaren befreit. Danach wird sie in den aktuellen Projekt-Ordner bzw. in den "sub"-Ordner innerhalb des Installationsverzeichnisses (C:\Program Files (x86)\LTC\LTspiceIV\lib\sub) kopiert.
Das Dioden-Modell wird mit einer Spice-Direktive eingebunden (".lib "BAV99.sub"). Um sie danach verwenden zu können, muss zuerst eine Standard-Diode hinzugefügt werden. Danach wird bei den Parametern (Strg + Rechts-Klick) der Modell-Name eingetragen. Wichtig hierbei ist, dass bei Prefix ein X eingetragen wird. Da das Modell nur eine Diode modelliert, muss noch eine zweite Diode in Gegenrichtung platziert werden. Damit die Bezeichnung der zweiten Diode nicht weiter verwirrt, kann man unter den Parametern sämtliche Werte ausblenden (Spalte Visible).
Um die Funktion von diversen Bauteilen sicherzustellen, sollte man eine Test-Schaltung simulieren. Für die Doppel-Diode reicht eine Schaltung mit Vorwiderständen und einer Sinus-Quelle.
Die Signale der simulierten Schaltung können im Anschluss noch auf Korrektheit überprüft werden. Unterhalb sieht man, dass die Doppel-Diode die Spannung in beiden Richtungen korrekt begrenzt.
Nach dem Erstellen einer Spice-Simulation können die gewünschten Messwerte im Ausgabefenster abgelesen werden. Einfach erscheinende Messungen (Differenzwert bestimmter Punkte, Min./Max.-Werte, ...) sind über die Cursor-Messungen mit etwas Aufwand durchführbar. Eine einfachere Möglichkeit besteht darin die .meas-Funktion zu verwenden.
Für viele Schaltungen ist es hilfreich den Eingang mit Rauschen als Signalquelle zu simulieren. Eine Anwendung ist es z.B. den Frequenzgang eines Filters mit weißem Rauschen zu ermitteln.
LTSpice stellt 3 Funktionen für Zufallszahlen zur Verfügung (rand, random, white). Die Zufallsgenerator-Funktionen können bei der Komponente "Arbitriary behavioral voltage source" verwendet werden. Die Funktionen liefern nur eine Zufallszahl. Damit sie sich über der Zeit verändern, muss man die Simulationszeit angeben. Mit 1k*time erhält man jede 1ms eine neue Zufallszahl.
Bei den Simulations-Ergebnissen kann man die Arbeitsweise der Rauschgeneratoren leicht nachvollziehen. Rand und random generieren Zufallszahlen zwischen 0 und 1, white zwischen -0.5 und +0.5 (deshalb wird das Signal bei der Darstellung um 0.5V verschoben). Die Zufallszahlen von rand haben einen steilen Übergang. Der Übergang von random ist etwas weicher und der bei white noch etwas mehr.
Für die Simulation eines Frequenzganges ist die Funktion "white" am besten geeignet. Als Beispiel wird hier ein Tiefpass erster Ordnung simuliert. Damit die anschließende FFT-Analyse genügend Datenpunkte hat, wurde eine Mindest-Simulations-Schrittweite von 1ns verwendet. Die Simulation dauert aufgrund der hohen Datendichte ziemlich lange. Man sollte LTSpice währenddessen nicht zu anderen Aufgaben bewegen.
Nach der Transienten-Analyse kann man nach der Auswahl des Ausgabefensters unter View->FFT eine Fast-Fourier-Analyse starten. Bei den Parametern kann man die Analyse noch auf einen bestimmten Zeitbereich einschränken.
Das Ergebnis der FFT-Analyse gleicht nahezu dem der AC-Analyse. Die -3dB Grenzfrequenz liegt ungefähr bei den theoretischen 1.6kHz. Der weitere Knick bei 500kHz wurde durch die Glättung verursacht (Binomial Smoothing - Number of Points: 3).
Bei der Transienten-Analyse mit einer Rauschquelle sieht man die tatsächliche Reduktion der Amplitude. Die AC-Analyse wiederum berechnet den DC-Arbeitspunkt und führt dann eine Kleinsignal-Analyse (Berechnung der Spannung an den Knotenpunkten bei unterschiedlichen Frequenzen) durch. Diese Simulation entspricht einer Transienten-Simulation bei jeder Frequenz mit einer Verweildauer einiger Perioden.
Um eine gewünschte Schaltung mit verschiedenen Werten simulieren zu können, so verwendet man die .step-Anweisung. Verwendet man mehrere .step-Anweisungen, so werden sämtliche Wertekombinationen durchsimuliert (z.B.: Bauteil 1 Wert 1 mit sämtlichen Bauteil 2 Werten, Bauteil 1 Wert 2 mit sämtlichen Bauteil 2 Werten, usw.).
.step param Rvar list 10 20 30 |
Angabe einer Liste 10, 20, 30 |
.step param Rvar 10 100 10 |
Start-/ Endwert Angabe mit Schrittweite 10, 20, 30, ... , 100 |
.step lin param Rvar 10 100 10 |
Start-/ Endwert Angabe mit Schrittweite 10, 20, 30, ... , 100 |
.step dec param Rvar 10 1k 2 |
Angabe Schritte pro Dekade 10, 32, 100, 316, 1k |
.step oct param Rvar 10 100 1 |
Angabe Schritte pro Oktave 10, 20, 40, 80, 100 |
Damit nicht sämtliche Kombinationen durchsimuliert werden, kann man auch Tabellen anlegen. Somit werden diese Wertepaare verwendet (Bauteil 1 Wert 1 mit Bauteil 2 Wert 1, Bauteil 1 Wert 2 mit Bauteil 2 Wert 2, usw.).
Bei der Dimensionierung von Schaltungen ist es sehr wichtig die Toleranzen der Bauteile zu beachten. LTSpice bietet die Möglichkeit eine Monte-Carlo Simulation durchzuführen. Die Anweisung mc(10k, 0.1) gibt einen Nennwert von 10k mit einer 10% Toleranz (+/- 10%) an. Die Anzahl der Monte-Carlo Durchläufe gibt man mit dem run-Paramter an (1 100 1 weist run die Werte 1, 2, 3, ... 100 zu).
Bei der Berücksichtigung der Bauteil-Toleranzen ist es oft ausreichend, Simulationen mit den Randwerten einiger Bauteile durchzuführen. Diese Worst-Case Simulation ist in LTSpice nicht direkt enthalten. Mit einer Funktionsdefinition rüstet man diese Funktion einfach nach. Für 2 Bauteile benötigt man 4, für 3 Bauteile benötigt man 8, usw. Durchläufe. Mit einem weiteren Durchlauf kann man dann noch die Nominalwerte simulieren. Die Funktionsdefinition habe ich in einem Gästebuch-Eintrag unter k6jca.blogspot.co.at/... entdeckt:
.function bindigit(cnt, digit) floor(cnt/(2**digit)) - 2*floor(cnt/(2**(digit+1))) |
.function wc(nom, tol, partnr) if(run==lastrun, nom, if(bindigit(run, partnr), nom*(1+tol), nom*(1-tol))) |
Um nach der Monte-Carlo Simulation weitere Analysen machen zu können, wäre es oft hilfreich die Bauteilwerte zu kennen. Da die Werte nicht aufgelistet werden, müssen sie über Mess-Anweisungen ermittelt werden. Einen Widerstandswert erhält man durch R=U/I. Den Wert einer Spule erhält man mittels L=(U/I)/(2 PI f). Und den Wert eines Kondensators mittels C=1/(2 PI f (U/I)).
.meas R1 find mag((V(TP1)-V(TP2))/I(R1)) at 1Meg
.meas L1 find mag((((V(TP2)-V(TP3))/I(L1))/(2*pi*frequency))) at 1Meg
.meas C1 find abs(1/((V(TP3)/I(C1))*(2*pi*frequency))) at 1Meg
Mit Hilfe der Option meascplxfmt=polar stellt man die Darstellung innerhalb der Ausgabe um.
Das Temperaturverhalten vieler elektronischer Bauelemente beeinflusst das Verhalten von Schaltungen oft enorm. Um mögliche Designprobleme vorab feststellen zu können, kann die Simulation um den Parameter Temperatur erweitert werden. Das Beispiel unterhalb wiederspiegelt das Temperaturverhalten von NPN-Transistoren.
Eine Zweitor-Messung kann mit der .net Spice-Funktion durchgeführt werden. Nach der Angabe des Eingangs- und Ausgangstors werden die H, S, Y und Z Parameter berechnet.
Nach der erfolgreichen Simulation können die Zweitor-Parameter den Plot-Ausgaben hinzugefügt werden (Plot-Fenster, Rechts-Klick -> Add Trace).
Bei der Parametrierung eines Modells fügt man das Modell hinzu und gibt eine Liste mit den gewünschten Werten an (z.B. min./typ./max. DC-Verstärkung eines Transisors).
Das mit .lib hinzugefügte Modell ergänzt man um den Parameter-Namen. Der Wert bei BF=... wird mit dem Parameter-Namen {hFEvar} ersetzt.
Attachment | Size |
---|---|
LTSpice Simulations-Dateien | 12.09 KB |