🚀 SPICE
Die Simulation elektronischer Schaltungen wird häufig mit dem "Simulation Program with Integrated Circuit Emphasis", kurz SPICE, durchgeführt. SPICE ist ein leistungsfähiges Tool aus den 1970er Jahren, das sich zu einem Industriestandard für die Simulation von analogen und digitalen Schaltungen entwickelt hat. Dadurch wird es möglich, das Verhalten einer Schaltung zu analysieren, ohne sie aufzubauen, wodurch Zeit, Kosten und Ressourcen im Entwicklungsprozess eingespart werden können. Die Funktionsweise von SPICE basiert auf der Beschreibung der Schaltung in Form einer Netzliste, welche anschließend auf ihr zeitliches Verhalten, ihre Frequenzabhängigkeit oder ihre Abhängigkeit von einem Bauteilwert untersucht wird.
Was ist eine Netzliste?
Beim Zeichnen einer elektronischer Schaltung verwenden wir gerne abstrahierte Schaltpläne zur Darstellung der Schaltung. Schaltpläne sind vereinfachte Visualisierungen, bei denen die Funktion der Schaltung im Vordergrund steht. Alle in der Schaltung enthaltenen Bauteile und ihre Verbindungen untereinander werden in einer vereinfachten Form dargestellt sodass auf den ersten Blick erkennbar wird, welche Funktion die Schaltung erfüllt. Informationen über die wahre Geometrie der Schaltung werden dabei vernachlässigt: Aus dem abstrahierten Schaltplan lässt sich z.B. nicht abschätzen, wie groß die Bauteile sind, wie sie auf einer Platine angeordnet werden oder wie die Kupferleitungen zwischen den Bauteilen verlaufen.
Schaue wir uns dazu ein Beispiel an, indem wir aus dem Versuch Signale in Leitungen den Tiefpass-Filter betrachten. In Abb. 1 ist der Schaltplan des Tiefpass-Filters zu sehen, welcher nach dem gewohnten Schema gezeichnet ist. Dabei sind die Verbindungen von Eingangssignal zum Widerstand R1 sowie die Verbindung vom Widerstand R1 zum Kondensator C1 als auch zum Ausgangssignal absichtlich als durch linken dargestellte Leitungen dargestellt, wie es in einem Schaltplan üblich ist. Im Vergleich zu einer realen Schaltung sind diese Verbindungen aber idealisiert: Wir nehmen an, dass die Leitungen keinen Widerstand, keine Induktivität und keine Kapazität besitzen und sich nicht auf das Verhalten der Schaltung auswirken.
Abb. 1: Konventioneller Schaltplan eines Tiefpass-Filters, bestehend aus einem Widerstand R1 und einem Kondensator C1. Die Leitungen sind idealisiert und besitzen keinen Widerstand, keine Induktivität und keine Kapazität.
Eine Leitung ist in einer Simulation nichts weiteres als eine Verbindung zwischen Bauteilen, die alle auf demselben elektrischen Potential liegen. Daher lassen sich die Leitungen in einer Simulation auf ein Minimum reduzieren, da sie keine weiteren Eigenschaften besitzen. Stattdessen verwenden wir zur Beschreibung der Schaltung lieber einen Punkt, an dem alle an eine Leitung angeschlossenen Bauteile miteinander zu verbunden sind und geben diesem Punkt einen Namen. Dieser Punkt wird als Knotenpunkt bezeichnet.
Abb. 2 stellt dieselbe Schaltung aus Abb. 1 dar, jedoch mit einer Beschreibung der Knotenpunkte. Auf die Darstellung von Leitungen wurde in der Skizze verzichtet, um die Knotenpunkte besser hervorzuheben. Alle Knotenpunkte sind mit einer Bezeichnung \(V_\text{xxx}\) versehen, da an jedem Knotenpunkt zu jedem Zeitpunkt eine Spannung \(V_\text{xxx}\) anliegt.
Abb. 2: Der gleiche Tiefpass-Filter wie in Abb. 1, jedoch in einer anderen Anordnung der Bauteile und mit Beschrifteten Knotenpunkten. Die "Leitungen" wurden weggelassen, um die Knotenpunkte besser hervorzuheben. An allen Knotenpunkten liegt zu jedem Zeitpunkt eine bestimmte Spannung \(V_\text{xxx}\) an. Das Ausgangssignal des Tiefpass-Filters wird zwischen den Knoten \(V_\text{out}\) und \(V_\text{GND}\) abgegriffen.
Hinweis
Es ist nicht zwingend erforderlich, die Knotenpunkte nach dem hier verwendeten Schema zu benennen. In diesem Beispiel wurde die Bezeichnung \(V_\text{xxx}\) gewählt, um die Spannung an den Knotenpunkten zu verdeutlichen. In der Praxis werden Knotenpunkte häufig mit einfachen Zahlen oder Buchstaben bezeichnet, z.B. 1, 2, 3 oder A, B, C. Alternativ können auch Namen verwendet werden, mit denen die Bedeutung eines Knotenpunktes in der Schaltung beschrieben wird, z.B. \(V_\text{out}\). Wichtig ist wiederum, dass jeder Knotenpunkt einen eindeutigen Namen erhält.
Um die Schaltung in einer Simulation zu beschreiben, werden nun alle verwendeten Bauteile in einer sog. Netzliste beschrieben, die folgende Informationen über die Schaltung enthält:
- Welche Bauteile werden in der Schaltung verwendet?
- An welchen Knotenpunkten sind die Bauteile miteinander verbunden?
Das hier verwendete Beispiel wurde bewusst einfach gehalten. Im weiteren Verlauf dieser Einführung werden die Beispiele kompliziertere Schaltungen beschreiben, bei denen die Knotenpunkte zu verbindungssträngen von mehr als zwei Bauteilen werden. Davor ist es sinnvoll, zu verstehen, wie die Syntax einer Netzliste aufgebaut ist.
Wie werden Bauteile in eine Netzliste eingetragen?
Bei einer Netzliste handelt es sich um eine Textdatei mit der Dateiendung .cir, die in einem Texteditor bearbeitet werden kann. Jedes Bauteil wird in einer eigenen Zeile instanziiert, wobei die Bauteilbezeichnung mit einem Buchstaben beginnt und anschließend den Bauteilnamen vervollständigt. Bei den Beispielen R1, C1, L1 und V1 handelt es sich um einen Widerstand, einen Kondensator, eine Spule und eine Spannungsquelle. Der Tiefpassfilter aus Abb. 2 wird über die zwei Widerstände R1 und R2 beschrieben. Eine grobe Übersicht über die wichtigen Bauteile ist in Tab. 1 zu sehen.
| Bauteil | Bauteilbezeichnung |
|---|---|
| Widerstand | R |
| Kondensator | C |
| Spule | L |
| Spannungsquelle | V |
| Stromquelle | I |
| Diode | D |
Tab. 1: Wichtige Bauteile in SPICE und ihre Bezeichnungen. Die Bezeichnung eines Bateils beginnt mit einem Buchstaben, der das Bauteil beschreibt, gefolgt vom restlichen Namen, der das Bauteil eindeutig identifiziert. In der Netzliste werden ale Bauteile in jeweils einer eigenen Zeile instanziiert.
Bei der Instanziierung der Bauteile werden anschließend die Knotenpunkte angegeben, an denen das Bauteil angeschlossen ist. Die dabei verwendeten Knotenpunkte müssen nicht vorher instanziiert werden, sie werden automatisch erstellt sobald sie in der Netzliste verwendet werden. Für die Schaltung in Abb. 2 greifen wir auf die fiktiven Knotenpunkte Vsource, Vout und 0 zurück, wobei die 0 unseren Ground darstellt.
Hinweis
In SPICE wird der Ground-Knotenpunkt immer mit der Zahl 0 bezeichnet. Es ist nicht möglich, einen anderen Namen für den Ground-Knotenpunkt zu verwenden. Die Angabe dieses Knotenpunktes ist zwingend erforderlich, da in SPICE alle Spannungen relativ zu Ground angegeben werden.
Zum Schluss müssen wir noch angeben, welchen ** Wert** das Bauteil besitzt. Dafür ist der letzte Parameter bei der Instanziierung des Bauteils vorgesehen. Eine Netzliste für den Tiefpassfilter aus Abb. 2, mit einem Widerstand von R1 = 1 kΩ und einem Kondensator von C1 = 0.1 μF, würde wie folgt aussehen:
| Tiefpassfilter.cir | |
|---|---|
Bei der Angabe der Bauteilwerte kann auf folgende Abkürzungen zurückgegriffen werden:
kfür KiloMfür MegaGfür Gigamfür Milliufür Mikronfür Nanopfür Pico
Die Angabe der Einheiten (Ohm, Farad, Henry, Volt, ...) ist nicht erforderlich, da SPICE die Einheiten implizit aus der Bauteilbezeichnung ableitet. Die in diesem Abschnitt erklärte Netzliste reicht aber noch nicht aus, um eine Simulation durchzuführen. Dazu müssen wir noch äußere Parameter angeben, die die von außen anliegenden Eingangssignale, die Art der Simulation und die zu untersuchenden Größen beschreiben.
Spannungs- und Stromquellen
Wenn äußere Spannungs- oder Stromquellen in einer Schaltung verwendet werden, müssen diese ebenfalls in der Simulation angegeben werden. Eine konstante Spannungsquelle wird, ähnlich wie die im vorherigen Abschnitt beschriebenen passiven Bauteile, mit der Bauteilbezeichnung V instanziiert:
| DC-Spannungsquelle.cir | |
|---|---|
In diesem Beispiel ist die Spannungsquelle mit den Knotenpunkten Vsource und 0 verbunden. Im Vergleich zu passiven Bauteilen ist hier die Reihenfolge der Knotenpunkte relevant, da ansonsten die Spannung in die andere Richtung anliegt. Das Ausgangssignal ist eine DC Gleichspannung von 5 V.
Interessanter sind für uns aber die zeitlich veränderlichen Signale, z.B. Sinusförmige Signale. Diese können mit der SIN-Funktion beschrieben werden. Diese nimmt eine Reihe von Parametern entgegen, die die Eigenschaften des Sinussignals beschreiben. Die Syntax lautet:
Alle Parameter, die in eckigen Klammern angegeben sind, sind optional. Die Parameter erfüllen folgende Funktionen:
Voffsetbeschreibt die Gleichspannung, die auf das Signal aufaddiert wird.Vamplitudebeschreibt die Amplitude des Sinussignals.Vfrequencybeschreibt die Frequenz des Sinussignals.Tdbeschreibt die Zeitverzögerung, mit der das Signal startet.Thetabeschreibt die Dämpfung des Signals.Phibeschreibt die Phasenverschiebung des Signals.nbeschreibt die Anzahl der Perioden, die simuliert werden sollen.
Häufig werden nur die ersten drei Parameter verwendet, um ein einfaches Sinussignal zu erzeugen. Ein Beispiel für eine Sinus-Spannungsquelle mit einer Amplitude von 9 V und einer Frequenz von 1 kHz ist in der folgenden Netzliste zu sehen:
| AC-Spannungsquelle.cir | |
|---|---|
Für die Simulation von Dreieck- und Rechtecksignalen kann die PULSE-Funktion verwendet werden. Wenn wir der Simulation des Tiefpassfilters aus Abb. 2 eine Rechteck-Spannungsquelle mit einer Amplitude von 9 V und einer Frequenz von 1 kHz hinzufügen, sieht die Netzliste wie folgt aus:
| Tiefpassfilter.cir | |
|---|---|
Die PULSE-Funktion nimmt der Reihe nach die folgenden Parameter entgegen:
V1beschreibt die untere Spannung des Rechtecksignals.V2beschreibt die obere Spannung des Rechtecksignals.Tdbeschreibt die Zeitverzögerung, mit der das Signal startet.Trbeschreibt die Anstiegszeit des Signals ("Rise Time") undTfbeschreibt die Abfallzeit des Signals ("Fall Time").- Diese werte dürfen nicht Null sein, da sonst die Simulation fehlschlägt. Stattdessen wird ein kleiner Wert verwendet, der sich mehrere Größenordnungen unterhalb der Periodendauer des Signals befindet, z.B.
1 μs.
- Diese werte dürfen nicht Null sein, da sonst die Simulation fehlschlägt. Stattdessen wird ein kleiner Wert verwendet, der sich mehrere Größenordnungen unterhalb der Periodendauer des Signals befindet, z.B.
Tonbeschreibt die Zeit, die das Signal auf der oberen Spannung verweilt.Tperiodbeschreibt die Periodendauer des Signals.- optional:
Ncyclesbeschreibt die Anzahl der Perioden, die simuliert werden sollen.
Die Anzahl der Parameter für die PULSE-Funktion ist größer als bei der SIN-Funktion, um die Beschreibung komplizierterer Signale zu ermöglichen. Dieselben Funktionen können auch bei der Instanziierung von Stromquellen verwendet werden, indem der Bauteilbezeichner I angegeben wird. Für die Durchführung der Simulation fehlt nur noch die Angabe des Simulationstyps und der zu untersuchenden Größen.
Transiente Simulation
Bei einer Transienten Simulation wird das zeitliche Verhalten der Schaltung untersucht. Dazu muss abschließend die .tran Direktive angegeben werden, die die Parameter für die Simulation entgegennimmt. Die Syntax lautet:
| TRAN-Direktive.cir | |
|---|---|
Die interessanten Ergebnisse der Simulation ist im Falle des Tiefpassfilters aus Abb. 2 die Spannung am Ausgangsknotenpunkt Vout. Um als Ausgabe der Simulation den zeitlichen Verlauf der Spannung am Ausgangsknotenpunkt zu erhalten, müssen ein paar zusätzliche Kontroll-Direktiven zwischen .control und .endc angegeben werden:
Eine Netzliste wird abschließend immer mit einer .end Direktive abgeschlossen. Es ist möglich, mehrere Plots zu erstellen, die anschließend in separaten Diagrammen dargestellt werden. Die vollständige Netzliste für die Simulation des Tiefpassfilters aus Abb. 2 sieht wie folgt aus:
Ausführen der Simulation
Zuerst muss das Programm ngspice installiert werden. Die zu simulierende Netzliste wird hier beispielsweise in der Datei Tiefpassfilter.cir gespeichert. Anschließend kann die Simulation über die Kommandozeile gestartet werden:
Nachdem die Berechnung abgeschlossen wurde, sollte ein Fenster mit dem Diagramm der Spannungen am Eingangssignal Vsource und Ausgangsknotenpunkt Vout erscheinen. Das Diagramm zeigt den zeitlichen Verlauf der Spannungen, wobei das Eingangssignal als Rechtecksignal dargestellt wird und das Ausgangssignal die charakteristische Dämpfung des Tiefpassfilters aufweist.
Hinweis für Linux-Nutzer
Unter Linux kann es vorkommen, dass das Speichern des Diagramms als Bild nicht funktioniert, da der Ordner ~/tmp nicht existiert. In diesem Fall kann der Ordner mit dem Befehl mkdir ~/tmp erstellt werden, bevor die Simulation gestartet wird.
Das Diagramm kann als Bild gespeichert werden und ist in Abb. 3 zu sehen. Weiterhin stellt ngspice auch eine Cursor-Funktion mit der Maus zur Verfügung, mit der die Spannungen an den Knotenpunkten zu einem bestimmten Zeitpunkt abgelesen werden können. In der Kommandozeile kann ngspice mit dem Befehl exit beendet werden. Falls die Eingabe von exit nicht möglich ist, kann mit der Tastenkombination CTRL + C die Eingabezeile zurückgesetzt werden.
Abb. 3: Simulation des Tiefpassfilters aus Abb. 2. Das Eingangssignal ist ein Rechtecksignal mit einer Amplitude von 9 V und einer Frequenz von 1 kHz. Das Ausgangssignal zeigt die charakteristische Dämpfung des Tiefpassfilters.
Anmerkung d. Redaktion
Die Bilder sind initial nicht gut für die Weiterverwendung geeignet. Daher werden sie im Verlauf dieses Dokumentes vorher in Inkscape für eine bessere Darstellung nachbearbeitet.
Komplexes Beispiel
Als Beispiel für die Simulation eines größeren Aufbaus wird im Folgenden ein Frequenzkompensierter Spannungsteiler mit Offset-Spannung betrachtet. Der Schaltplan ist in Abb. 4 zu sehen.
Abb. 4: Schaltplan eines frequenzkompensierten Spannungsteilers mit Offset-Spannung.
Die Netzliste für die Simulation sieht wiefolgt aus:
Das Ergebnis der Simulation ist in Abb. 5 zu sehen.
Abb. 5: Simulation des frequenzkompensierten Spannungsteilers mit Offset-Spannung aus Abb. 4.
Bauteil-Bibliotheken
Bauteile, die kompliziertere Eingenschaften besitzen, wie z.B. Dioden, Transistoren oder Operationsverstärker, können nicht mehr mit einer einfachen Bauteilbezeichnung instanziiert werden. Häufig sind diese Parameter nur den Herstellern bekannt und können nicht einfach in der Netzliste angegeben werden. Für Dioden ist der Parameterraum noch überschaubar, sodass die Definition der Bauteile von den Herstellerwebseiten kopiert werden kann. Andernfalls stellen die Hersteller häufig Bauteil-Bibliotheken zur Verfügung, die eingebunden werden können.
Als Beispiel wird hier wieder der Frequenzkompensierte Spannungsteiler mit Offset-Spannung betrachtet. Jedoch wird die Offset-Spannung nicht mehr über eine Spannungsquelle, sondern über einen Spannungsteiler und einen Impedanzwandler erzeugt. Der Schaltplan ist in Abb. 6 zu sehen.
Abb. 6: Schaltplan eines frequenzkompensierten Spannungsteilers mit Offset-Spannung, der einen Impedanzwandler mit einem Operationsverstärker verwendet, um die Offset-Spannung zu erzeugen.
Für die Simulation wird ein Modell des Operationsverstärkers vom Typ LM358 benötigt, welches auf der Webseite des Hersteller heruntergeladen werden kann. In diesem Beispiel wurde die Datei unter dem Namen LM358.cir gespeichert. Die Netzliste für die Simulation sieht wiefolgt aus:
Hier besteht eine Besonderheit darin, dass die Spannungsversorgung des Operationsverstärkers (hier \(\pm12\ \mathrm{V}\)) über zusätzliche Spannungsquellen und Knoten in der Netzliste bereitgestellt werden muss. Das Bauteil wird über die Bibliothek eingebunden und anschließend in der Netzliste instanziiert. Für alle Bauteilbibliotheken ist es wichtig, vorher nachzuschauen, wie die Instantiierung durchzuführen ist. Dazu gibt es Hinweise auf den Herstellerwebseiten oder im Quelltext der Bibliothek selbst. Das Ergebnis der Simulation ist im zugehörigen Kapitel über den Frequenzkompensierten Spannungsteiler mit Offset-Spannung zu sehen.



