Warum Versuchsschaltungen löten, wenn es auch in Software geht? Mit der Geda-Toolsuite halten Sie ein mächtiges Werkzeug für die Simulation elektronischer Schaltungen in der Hand. Der Workshop erklärt die Analog-Analyse anhand einer Verstärkerschaltung.
Des Menschen Hirn ist nicht sonderlich gut geeignet, um eine umfangreiche elektronische Schaltung auf dem Papier zu verstehen, zu komplex ist das Zusammenspiel der Bauelemente, zu tückisch mancher Seiteneffekt. Elektroniker arbeiten darum mit Versuchsaufbauten und Messtechnik – was dauert und Kosten erzeugt. Besser ist, die Schaltung am PC zu simulieren. Unzulänglichkeiten im Design fallen frühzeitig auf und Bauteile sind sehr einfach auszutauschen.
Linux-Nutzer finden mit der Geda (GPL\’d Suite of Electronic Design Automation, [1]) eine Toolsuite, die den Vergleich mit kommerzieller Software nicht scheut. Sie beschränkt sich nicht aufs Simulieren, Sie können damit alle Entwicklungsarbeiten für elektronische Schaltungen am PC absolvieren, einschließlich der Simulation von gemischten analog/digitalen Schaltungen, der Konstruktion der Schaltbilder und automatischer Stücklisten [2]. Tabelle 1 gibt einen Überblick.
|
Tabelle 1: Die |
|
|---|---|
|
Tool-Name |
Beschreibung |
|
geda |
Zentrales Programm zur Projektverwaltung |
|
gschem |
Schaltungs- und Bauteile-Editor. |
|
gattrib |
Ein tabellarischer Attribute-Editor, der Gschem-Dateien |
|
gnetlist |
Erstellt Eingabedateien für die Simulationsprogramme |
|
gsymcheck |
Tool zur Verifikation von Gschem-Symboldateien |
|
ngspice |
Simulation von gemischten analogen/digitalen Schaltungen |
|
gnucap |
Alternativer Schaltungssimulator zu NG Spice |
|
gwave |
Betrachter für analoge Simulationsergebnisse |
|
gtkwave |
Betrachter für digitale Simulationsergebnisse |
|
iverilog |
Icarus-Verilog-Compiler |
|
vbs |
Einfacher Verilog-Simulator |
|
pcb |
Leiterplatten-Editor, der Gerber-Daten erzeugt. |
|
gsch2pcb |
Konverter von Gschem nach PCB |
|
gerbv |
Betrachter für Gerber-Daten |
|
gspiceui |
Grafisches Frontend für NG Spice und Gnucap |
|
wcalc |
Mechanische und physikalische Analyse und Synthese von |
|
mcalc |
Browser-basiertes »wcalc«-Äquivalent |
Unter [3] stehen die neuesten Sourcen als ISO-Image nebst Anleitung bereit. Für Debian, Fedora, Red Hat, Suse und Mac OS X gibt\’s auch kompilierte Pakete. Der Autor dieses Beitrags entschied sich für das Quellcode-ISO und Open Suse 10.0. Das »installer«-Skript startet grafisch, prüft Systemabhängigkeiten und bietet an, fehlende Software nachzuinstallieren. Nach Angabe der Verzeichnisse für Quellen und Kompilate starten Übersetzung und Installation der Suite. Ist die Installation abgeschlossen, wollen die Umgebungsvariablen aktualisiert sein, beispielsweise in »~/.bashrc«:
PATH=$PATH:/home/User/geda-install/bin LD_LIBRARY_PATH=/home/User/geda-install/lib
Wenn Sie das Verhalten des Schaltungseditors Gschem sofort oder später feintunen wollen, geht das über Konfigurationsdateien, die das Programm beim Starten in folgender Reihenfolge abarbeitet: »share/gEDA/system-gschemrc« im Installationsverzeichnis, »~/.gEDA/gschemrc« (Benutzer-Einstellungen) und »gschemrc« im Projektverzeichnis (Projekt-Einstellungen). Die Gschem-Hilfe und die Kommentare in der installierten »system-gschemrc« liefern Details. Nach Studium der ebenso umfangreichen wie nützlichen Dokumente in »~/geda-install/share/doc« kann es losgehen. Abbildung 1 zeigt die Arbeitsschritte. Dieser Artikel geht den braun markierten Weg.

Abbildung 1: Von der Idee über Schaltplan und Simulation zur fertigen Leiterplatte – die grundlegenden Arbeitsschritte in Geda.
Schaltung aus der Praxis
Als Beispiel dient eine einfache Verstärkerschaltung, wie sie zum Beispiel als Mikrofonverstärker oder in einer Datenübertragungsstrecke als Signalverstärker vorkommt. Die Spannungsquelle Vvin repräsentiert das Eingangssignal. Das R1-C1-Hochpassfilter am Eingang dient zur Gleichspannungsentkopplung von der Signalquelle und schützt den Eingang des Operationsverstärkers vor statischen Aufladungen.
Die Widerstände geben den Verstärkungsfaktor der Schaltung vor: v=R2/(R2+R3)=2. Wer ihn variieren will, verwendet statt R2 und R3 ein Potenziometer. Der Kondensator C2 entkoppelt den Ausgang gegenüber nachfolgenden Schaltungen. R4 repräsentiert deren Eingangswiderstand. Die Spannungsquellen Vvcc und Vncc versorgen den Operationsverstärker mit +5 Volt und -5 Volt.
Schaltpan per Gschem
Im Folgenden werden Sie die in Abbildung 2 dargestellte Schaltung schrittweise mit Gschem erstellen. Hierzu legen Sie den Ordner »~/opamplifier« für das Projekt an, wechseln dorthin und starten »gschem«. Das Programm erstellt eine Datei, die Sie gleich im Projektordner als »opamplifier.sch« speichern.

Abbildung 2: Der mit Gschem erstellte Beispiel-Schaltplan eines nicht-invertierenden Verstärkers. Ein- und Ausgänge sind galvanisch entkoppelt.
Gschem kennt drei Modi: Auswahlmodus (Standard), Kopier- und Verschiebemodus. Je nach Aktion wechseln die Modi teils automatisch. Tabelle 2 gibt einen Überblick über wichtige Befehle, Abbildung 3 über Gschems Tool-Leiste. Als Erstes erstellen Sie die beiden Spannungsquellen. Der Klick auf den Button »Bauteile auswählen« öffnet ein Fenster, in dem Sie Schaltsymbole aussuchen. Sie nehmen »vdc-1.sym« aus der Bibliothek »spice«. Nach einem Klick auf den Button »Anwenden« lässt sich das Symbol im Hauptfenster platzieren.
|
Tabelle 2: Wichtige |
||
|---|---|---|
|
Menübefehl |
Alternative Tastenfolge |
Beschreibung |
|
Bearbeiten | Auswahl Modus |
[S] |
Auswahlmodus zum Auswählen von Symbolen |
|
Bearbeiten | Bearbeiten |
[E][E] |
Editieren von Symbolattributen |
|
Bearbeiten | Text bearbeiten |
[E][X] |
Editieren der gewählten Beschriftungen |
|
Bearbeiten | Kopiermodus |
[E][C] |
Das zuvor gewählte Symbol anschließend mit der |
|
Bearbeiten | Verschiebemodus |
[M] |
Verschieben der gewählten Symbole |
|
Bearbeiten | Löschen |
[Entf] |
Ausgewähltes Symbol löschen |
|
Bearbeiten | Dreh Modus 90° |
[E][R] |
Gewähltes Symbol um 90° drehen |
|
Bearbeiten | Spiegel Modus |
[E][I] |
Gewähltes Symbol spiegeln |
An dieser Stelle tritt ein kleiner Bug zutage: Das Symbol ist nur Stecknadelkopf-groß – das Symbolleistenmenü »Ansicht | Automatisch« sorgt für Abhilfe. Ein Doppelklick auf das Symbol öffnet das Attribute-Fenster (Abbildung 4). Dem Attribut »refdes« weisen Sie den Wert »Vvcc« und dem »value«-Attribut eine Gleichspannung von 5 Volt zu.

Abbildung 4: Das Attribute-Fenster öffnet sich durch einen Doppelklick auf das betreffende Bauteilsymbol.
Die Spalte »Sichtbar?« gibt an, ob das Hauptfenster das Attribut zeigt oder nicht. Nach dem Schließen des Fensters ist das Symbol beschriftet. Beschriftungen und Symbole verrücken Sie im »Bearbeiten | Verschiebemodus«. Nun positionieren Sie das Symbol »Vcc« am Pin 1 der Spannungsquelle und GND am Pin 2. Sie finden beide in der Bibliothek »power« als »vcc-1.sym« und »gnd-1.sym«.
Für die negative Spannung Vnvcc kopieren Sie »Vvcc« zusammen mit GND, indem Sie einen Rahmen um beide ziehen. Das Betätigen der rechten Maustaste öffnet ein Pull-down-Menü, durch »Kopieren« gelangen Sie in den Kopiermodus, dort ziehen Sie das Duo ab. Das Symbol für »-Vcc« befindet sich in »vcc-minus.sym« der Bibliothek »power«. Die Tasten [E][R] drehen das Bauteil.
Nun verdrahten Sie es mit Pin 1 von Vnvcc, indem Sie mit dem Button »Netz einfügen« das richtige Werkzeug zur Hand nehmen. Die Verdrahtung startet an geeigneter Stelle mit Linksklick. Weitere Klicks fixieren Zwischenpunkte, bis Sie das Ziel erreichen. Die rechte Maustaste beendet das Manöver.
Das Symbol für die Signalquelle Vvin liegt in der Bibliothek »spice« unter »vsin.sym«. Seinem »refdes«-Attribut weisen Sie »Vvin« zu und »value« erhält »sin 0 2.3 1k«. Die Quelle liefert dadurch ein gleichspannungsfreies 1-kHz-Sinussignal mit 2,3 Volt Amplitude. Nun der erste Kondensator: Dessen Symbol »capacitor1.sym« liegt in der Bibliothek »analog«. Dem Attribut »refdes« geben Sie den Wert »C1«, »value« erhält »200n« (Nanofarad). Danach verbinden Sie das Bauteil mit der Signalquelle Vvin.
Die Kraft, die durch den Knoten geht
Simulationsprogramme behandeln Verbindungen zwischen den Bauteilen als so genannte Knotenpunkte. In der Schaltung aus Abbildung 2 gibt es acht:
- Zwischen Vvin und C1
- Zwischen C1, R1 und LM324/Pin 1
- Zwischen R2, R3 und LM324/Pin 2
- Zwischen R3, C2 und LM324/Pin 5
- Zwischen C2 und R4
- Zwischen LM324/Pin 3 und Vvcc
- Zwischen LM324/Pin 4 und Vnvcc
- Alle »GND«-Symbole verbindet die gemeinsame
Bezugsmasse
Jeder Knotenpunkt braucht eine Bezeichnung: Die Bezugsmasse heißt »0«, auch die Bezeichnungen der Versorgungsspannungen sind klar: »vcc« und »vncc«. Die Namen für die anderen könnte Gschem selbst erzeugen, was aber die spätere Eingabeliste unübersichtlich macht. Es ist daher gut, jede Verbindungslinie per Doppelklick manuell zu taufen.
Zurück zu den Bauteilen: Für die Widerstände eignen sich die Symbole »resistor-2.sym« oder »resistor-1.sym« aus der Bibliothek »analog«. Im Attribut »refdes« benennen Sie das Bauteil »R1«, »R2« und so weiter, »value« ist der Widerstandswert, hier »1K« oder »10K«.
Mit den gezeigten Schritten könnten Sie nun das Schaltbild aus Abbildung 2 vervollständigen, wäre da nicht der Operationsverstärker, der bei den mitgelieferten Bauteilbibliotheken fehlt. Bevor Sie sich an dieses Bauteil wagen, speichern Sie Ihre Arbeit mit »Datei | Seite schließen«.
Externe Bauelemente
Mit Gschem können Sie Bauteilsymbole selbst erzeugen – wenn Sie alle Daten haben. Meist stellen die Halbleiterhersteller ihre Spice-Modelle online. Unter [4] gibt\’s eines für den LM324, das Sie im Projektordner als »model/LM324.MOD« speichern. Bei dieser Gelegenheit erzeugen Sie gleich einen Ordner »sym« für die eigenen Symbole.
Für den LM324 nehmen Sie am besten das Symbol eines vorhandenen Bausteins als Vorlage. Hierzu platzieren Sie »opamp-1.sym« aus der Bibliothek »analog« im Hauptfenster. Markieren Sie es und wählen aus dem Symbolleistenmenü »Hierarchie | zum Symbol hinab«. Jetzt sind Sie Gast in die Symbolebene. Dort speichern Sie eine Kopie des Symbols als »sym/lm324.sym«. Im oberen Bereich des Fensters steht »U?«. Ein Doppelklick darauf öffnet ein Fenster, in dem Sie das Attribut »refdes« von »U?« auf »X?« ändern. Der Sinn der Aktion ergibt sich später beim Simulationsvorgang.
Im Model-File in Listing 1 legt Zeile 12 fest, welche LM324-internen Knoten an die übergeordnete Schaltung anzubinden sind und in welcher Reihenfolge. Für Pin 1 klicken Sie einfach drauf. Im Attribute-Fenster benennt »pinnumber« den Pin im Schaltplan, »pinseq« muss »1« bekommen, da das Model-File den nicht-invertierenden Eingang als Erstes übergibt. Als Zweites reicht das Operationsverstärker-Model-File den invertierenden Eingang weiter. Konsequenterweise geben Sie dem »pinseq«-Attribut den Wert »2«. An dritter Stelle kommt der Anschluss für die positive Versorgungsspannung, hier muss »pimseq« also »3« werden – und nicht etwa die dritte Zahl (»99«) aus Zeile 12 von Listing 1.
|
Listing 1: Model-File des LM324 |
|---|
01 */////////////////////////////////////////////////// 02 *LM324 Low Power Quad OPERATIONAL AMPLIFIER MACRO-MODEL 03 *////////////////////////////////////////////////// 04 * 05 * connections: non-inverting input 06 * | inverting input 07 * | | positive power supply 08 * | | | negative power supply 09 * | | | | output 10 * | | | | | 11 * | | | | | 12 .SUBCKT LM324/NS 1 2 99 50 28 |
Prüfen Sie sicherheitshalber die »pinseq«-Attribute aller Pins, im vorliegenden Fall sollten sie stimmen, was aber eher ungewöhnlich ist. Indem Sie das Symbol im Unterordner »sym« speichern, erzeugen Sie zugleich eine neue Symbolbibliothek »sym«. Beenden Sie Gschem. Die neue Bibliothek geben Sie Gschem bekannt, indem Sie im Projektordner eine Konfigurationsdatei namens »gschemrc« mit folgendem Inhalt erstellen:
(component-library "./sym")
Nach einem Neustart innerhalb des Projektordners finden Sie das neue »lm324.sym« in der Bibliothek »sym«. Platzieren Sie es nun und verpassen ihm die in Abbildung 5 dargestellten Attribute. »file« nennt den Ort der Model-Datei. Model-Dateien dürfen auch mehrere Bauteile enthalten, was das Attribut »model- name« entwirren hilft. Vervollständigen Sie den Rest der Schaltung nach Abbildung 2 Zug um Zug, beenden Gschem – und sind jetzt bereit fürs Simulieren.

Abbildung 5: Das soeben neu erzeugte Symbol des LM324 versehen Sie mit den dargestellten Attributen.
Simulationstools
Zur Simulation kommen Ngspice oder Gnucap in Frage. Beide gehören zum Umfang von Geda. Ngspice bietet einen gigantischen Funktionsumfang und ist darum Gegenstand der weiteren Betrachtung. Gnucap bietet dafür die Möglichkeit, interaktiv Bauteilparameter testweise abzuändern und wieder zurückzurollen. Ngspice beherrscht:
- Gleichstromanalyse
- Wechselstrom-Kleinsignalanalyse
- Einschwinganalyse
- Fourieranalyse
- Pol-Nullstellenanalyse
- Rauschanalyse
- Empfindlichkeitsanalyse
Zudem einige andere. Für alle Analysearten müssen die Schaltungen den in Abbildung 6 gestellten Forderungen gerecht werden. Wichtig ist auch, dass Ngspice Bauelemente als ideal ansieht. Sekundäreinflüsse, beispielsweise die Induktivität von Kondensatoranschlüssen, müssen Sie bei Bedarf durch zusätzliche Bauelemente nachstellen.

Abbildung 6: Damit die funktionieren, dürfen Schaltungen diese vier Nebenbedingungen nicht verletzen.
Überhaupt spiegelt ein Simulationsprogramm nie die ganze Wirklichkeit wider. Ein echter Widerstand hat immer eine Abweichung vom Nennwert. Auch das Umgebungsrauschen, das manche Oszillatorschaltungen zum Anlaufen benötigen, ist der Simulationsumgebung fremd. Daher sollten Sie jedes Simulationsergebnis auf Plausibilität prüfen. Wie bei jeder wissenschaftlichen Computersimulation führen falsche Parameter leicht in die Irre.
Eingabedatei mit Element- und Modellzeilen
Der (unten beschriebene) Simulationslauf ist mit ein, zwei kurzen Befehlen passiert. Umso komplexer fallen die Eingabedaten aus, die Ngspice als Netzliste will. Diese Textdatei beginnt mit einer Titelzeile und endet mit ».END«. Dazwischen stehen in beliebiger Anzahl und Reihenfolge: Elementzeilen, Modellzeilen, Steuerkommandos zur Simulation, Kommentare und Subcircuits.
In einer Elementzeile sind Leer- und Gleichheitszeichen, Kommas und runde Klammern gültige Separatoren. Wollen Sie eine Zeile umbrechen, stellen Sie der Folgezeile ein »+« voran. Der erste Abschnitt der Elementzeile enthält den Namen, dessen erster Buchstabe den Typ festgelegt. Die Zei- le informiert zudem über die Knotenverbindungen und per Parameter über die elektrischen Bauteil-Eigenschaften (siehe Kasten “Elementzeilen für wichtige Bauteile”). Die meisten Bauelemente benötigen nur wenige Parameter, andere sehr viele – vor allem Halbleiter.
|
Elementzeilen für wichtige |
|---|
|
Widerstände RName Knoten1 Knoten2 Widerstand_in_Ohm Optionen Beispiel: »R1 0 1 2 2K«, Widerstand R1, 1 Kiloohm zwischen den Knoten 0 und 1 Kondensatoren CName Knoten1 Knoten2 Kapazität_in_Farad Optionen Beispiel: »C2 1 5 1n«, Kondensator C1, 1 Nanofarad zwischen den Knoten 1 und 5 Spulen LName Knoten1 Knoten2 Induktivität_in_Henry Optionen Beispiel: »L3 1 6 1u«, Spule L3 mit 1 Mikrohenry zwischen den Knoten 1 und 6 Übertrager/Transformatoren KName LElementname_Induktivität1 MElementname_Induktivität2 Koppelfaktor Beispiel: Erste Spule: »L3 1 6 1u«, zweite Spule: »L4 1 7 1u«, gekoppelt: »K1 L3 L4 0.44« Dioden DName Anoden-Knoten Kathoden-Knoten Modellname Optionen Beispiel: »D1 1 0 1N4001«, Diode 1N4001, Anode an Knoten 1, Kathode an 0 Bipolare Transistoren QName Kollektor-Knoten Basis-Knoten Emitter-Knoten Modellname Optionen Beispiel: »Q1 1 2 0 BC337«, Transistor vom Typ BC337, Kollektor an Knoten 1, Basis an Knoten 2 und Emitter an Masse Unabhängige Spannungsquellen VName Knoten1 Knoten2 DC | Quellenart | AC Betrag_der_Gleich-/Wechselstromgröße Phasenverschiebung Optionen Quellenarten: Exponentialfunktion »EXP«, periodische Impulsfunktion »PULSE«, stückweise lineare Funktion »PWL«, Sinus »SIN«, frequenzmodulierter Sinus »SFFM« Beispiel 1: »VIN 0 1 DC 3«, Gleichspannungsquelle 3 Volt Beispiel 2: »VIN 0 1 SIN 0 5 1k«, Wechselspannungsquelle für die Einschwinganalyse ohne Gleichspannungsanteil, 5 Volt Amplitude, 1 Kilohertz Unabhängige Stromquellen IName Knoten1 Knoten2 DC | Quellenart | AC Betrag_der_Gleich-/Wechselstromgröße Phasenverschiebung Optionen Ansonsten identisch mit Spannungsquellen; Beispiel: »IIN 0 1 AC 1 90«, Wechselstromquelle mit 1 Ampere und 90° Phasenverschiebung; die Frequenz bestimmen die Simulationskommandos |
Oft setzt man Bauteile mit identischen Parametern ein. Sie können einen solchen Parametersatz mit einer Modellzeile definieren und mit einem Namen versehen. Sich darauf beziehende Elementzeilen verweisen dann nur noch auf diesen Namen. Parameter für die Modellzeile liefert oft der Hersteller. Die Syntax:
.MODEL Name Type (Parameter1=Wert Parameter2=Wert ...)
»Type« ist »D« für Dioden, »NPN« oder »PNP« für Transistoren, »NJF«, »PJF«, »NMF«, »PMF«, »NMOS« und »PMOS« für Feldeffekttransistoren. Im Anschluss folgt die Parameterliste, beispielsweise:
.MODEL meintransistor NPN (BF=50 IS=1E-13 VBF=50)
Eine Elementzeile, die den Typ referenziert und mit den Knoten 1, 2 und 3 verbindet, wäre »Q1 1 2 3 meintransistor«.
Subcircuits
Ngspice kennt zunächst nur einfache Bauelemente. Kompliziertere, zum Beispiel integrierte Schaltkreise, müssen Sie mit diesen elementaren Elementen nachbauen, üblicherweise in einem Subcircuit. Das ist ein gesonderter Abschnitt in der Eingabedatei, den Sie beliebig oft referenzieren können. Die Model-Datei für den LM324 hat lediglich einen Subcircuit für diesen Baustein. Ein Subcircuit darf weitere Subcircuits definieren:
.SUBCKT Bezeichnung N1 N2 N3 N4...Nn Weitere_Elementzeilen Weitere_Subcircuit-Definitionen .ENDS Name
Das folgende Beispiel beschreibt einen Spannungsteiler-Subcircuit, der aus zwei Widerständen in Reihe besteht:
.SUBCKT meinIC 1 2 3 R1 1 2 1k R2 2 3 1K .ENDS
Die Zeile zur Referenzierung eines Subcircuit ist ebenfalls einfach:
XName K1 K2 K3 K4...Kn Bezeichnung
»X« gibt an, dass das Bauteil irgendwo in der Eingabedatei als Subcircuit definiert ist. Die Ks bezeichnen die Schaltungsknoten der aufrufenden Schaltung, mit denen der Subcircuit verbunden wird. Das obige Beispiel lässt so referenzieren:
XSpannungsteiler 11 12 14 meinIC
Knoten 1 des Subcircuit verbindet sich mit dem Knoten 11 der aufrufenden Schaltung, Knoten 2 des Subcircuit mit Knoten 12 der Schaltung, Knoten 3 mit Knoten 14.
Ergebnisse retten
Wenn Ngspice später per »-b« im Batchmodus läuft, darf die Eingabedatei das ».SAVE«-Kommando enthalten, das die Ergebnisse (Vektoren) der Simulation in einer Datei speichert. Die Syntax lautet:
.SAVE Vektor1 Vektor2 ...
Die Zeile ».SAVE V(vout) V(vin)« speichert die Spannungen an den Knoten »vout« und »vin«. Den Dateinamen bekommt Ngspice bei seinem Aufruf per »-r« übergeben. Es kann die Ergebnisdatei wieder laden und mit ».PRINT« (als Text) oder ».PLOT« (grafisch) ausgeben. Die Syntax ist für beide identisch:
.PRINT | .PLOT Analysetyp OV1 OV2 OV3 ....
Aus dem Analysetyp kommen die Daten, mögliche Werte sind: »DC«, »AC«, »TRAN«, »NOISE« und »DISTO«. »OVx« behandelt die auszugebenden Größen. So gäbe ».PLOT TRAN V(out) V(vin, vout)« die Spannung am Knoten »vout« und die Spannungsdifferenz »vout-vin« nach der Transientenanalyse grafisch aus.
Eingabedatei erzeugen
Sinnvoller ist es, die Eingabedatei mit dem Tool Gnetlist aus dem Gschem-Schaltplan zu erzeugen. Zunächst sollten Sie den Schaltplan mit
gnetlist -g drc2 opamplifier.sch -o outp.txt
auf Fehler prüfen. Die Ausgabe landet in der Datei »outp.txt«. Finden sich keine Fehler, dürfen Sie die Netzliste mit
gnetlist -g spice-sdb -o opamplifier.cir opamplifier.sch
erzeugen. Der Parameter »-g spice-sdb« veranlasst Gnetlist dazu, die Netzliste »opamplifier.cir« im so genannten erweiterten Spice-Format zu erstellen.
Listing 2 zeigt einen Auszug aus dieser Datei. Zeile 1 ist die Titelzeile. Von Zeile 9 bis Zeile 126 läuft die Schaltungsbeschreibung des LM324 als Subcircuit – eine 1:1-Kopie der Model-Datei. Die eigentliche Beschreibung beginnt ab Zeile 131 mit dem Widerstand R4 zwischen dem Knoten »0« (Masse) und »vout«. Die Zeilen 132 bis 134 beschreiben die drei anderen Widerstände, die Zeilen 136 bis 140 die Kondensatoren und die Spannungsquellen der Schaltung.
|
Listing 2: Netzliste der |
|---|
001 My first circuit
002 * gnetlist -g spice-sdb -o opamplifier.cir opamplifier.sch
003 *******************************************
004 * Spice file generated by gnetlist *
005 * spice-sdb version 12.27.2005 by SDB - *
006 * provides advanced spice netlisting *
007 * capability. Documentation at http://www.brorson.com/gEDA/SPICE/ *
008 *******************************************
009 * Included SPICE model from model/LM324.MOD
[Kopie der LM324-Modeldatei]
127 *$
128 *^^^ End of included SPICE model from model/LM324.MOD ^^^
129 *
130 *=== Begin SPICE netlist of main design ===
131 R4 0 vout 10k
132 R3 vopout vopn 1k
133 R2 0 vopn 1k
134 R1 0 vopp 10k
135 X1 vopp vopn Vcc -Vcc vopout LM324/NS
136 C2 vopout vout 100n
137 Vvcc Vcc 0 DC 5V
138 C1 vin vopp 200n
139 Vvin vin 0 sin 0 2.3 1k
140 Vnvcc -Vcc 0 DC -5V
141 .END
|
Das Einbinden dieses Subcircuit geschieht in Zeile 135. »X1« steht für den Aufruf. Wenn Sie einen zweiten LM324 in der Schaltung hätten, hieße er »X2«. Die in Zeile 135 folgenden Parameter verbinden die in der Schaltung definierten Knoten mit denen des Subcircuit.
Einschwinganalyse
Was nun fehlt, sind die Simulationsbefehle. Primär ist eine Analyse der Knotenspannungen im Zeitbereich interessant, die so genannte Einschwing- oder Transientenanalyse. Die Syntax lautet:
.TRAN Ausgabeschrittweite Stoppzeit Startzeit Tmax
Die Ausgabeschrittweite ist der Abstand auf der Zeitachse, in der Ngspice die Ergebnisse ausgibt. Stoppzeit und Startzeit stehen für das Zeitintervall der Analyse. Wird die Startzeit nicht angegeben, setzt Ngspice sie auf null. Andernfalls berechnet es die Signalverläufe im Zeitintervall von t=0 bis T=Startzeit, um daraus die Anfangsbedingungen zum Zeitpunkt t=Startzeit zu ermitteln.
Ngspice beginnt die Simulation mit der Berechnung der Spannungen bei t=0. Dann erhöht es t um eine Konstante und analysiert mit Differenzialrechnungen die Spannungen erneut. Diesen Vorgang wiederholt es bis zum Ende des vorgegebenen Zeitintervalls.
Die Zeitkonstante errechnet sich mit (Stoppzeit – Startzeit)/50. Ist das Ergebnis jedoch größer als die Ausgabeschrittweite, wird diese verwendet. Der Wert muss gut überlegt sein: Ist die Zeitkonstante zu klein, dauert die Simulation sehr lange. Ist sie zu groß, ignoriert sie wichtige Details.
Für eine Analyse im vorliegenden Beispiel erweitern Sie die Eingabedatei um:
* Ng-Spice Simulation Commands .IC V(-Vcc)=0.0 V(Vcc)=0.0 V(vin)=0.0V(vopn)=0.0 V(vopout)=0.0 V(vopp)=0.0V(vout)=0.0 .TRAN 100.00u 10.00m 0.00 100.00u
Das IC-Kommando setzt alle Spannungen zum Zeitpunkt t=0 auf 0 Volt. Die Signalquelle schwingt mit 1 Kilohertz, was 1 Millisekunde Schwingungsperiode entspricht. Mit Stoppzeit=10 Millisekunden läuft die Simulation also über zehn Perioden hinweg. Innerhalb einer Periode liegen zehn Berechnungsabschnitte, was Ausgabeschrittweite=Tmax=100 Mikrosekunden bedeutet.
Simulieren bitte!
Mit »ngspice opamplifier.cir« startet Ngspice im interaktiven Modus und lädt die Netzliste in den Speicher. »run« stößt die Simulation an. An deren Ende lassen Sie sich mit »plot vin vout« die Spannungsverläufe an den beiden übergebenen Knoten grafisch ausgeben. Mit »source opamplifier.cir« laden Sie die Eingabedatei neu, wenn Sie die Schaltung zwischendurch geändert haben.
Die »plot«-Ausgabe ist in Abbildung 8 zu sehen, das Eingangssignal ist rot, das Ausgangssignal blau. Letzteres sollte eigentlich sinusförmig und doppelt so groß wie das Eingangssignal sein. Dem ist nicht so! Das (bewusst eingebaute) Problem ist, dass bei Operationsverstärkern der Ausgangsbereich begrenzt ist. Aus dem Datenblatt des LM324 [5] ist ersichtlich, dass das Ausgangssignal um 1,5 Volt von den Werten der Versorgungsspannungen entfernt bleiben soll. Da der LM324 hier mit +/- 5 Volt versorgt wird, darf das Ausgangssignal nicht mehr als 3,5 Volt und bei Verstärkungsfaktor 2 das Eingangssignal 1,75 Volt betragen.
Eine Möglichkeit, das Problem zu lösen, ist, die Werte von Vvcc und Vvncc zu vergrößern. Hierzu ändern Sie die Zeilen 139 und 140 in der Netzliste auf:
Vvcc Vcc 0 DC 7.5V Vvncc -Vcc 0 DC -7.5V
Eine erneute Simulation zeigt den Fehler nicht mehr. Ein anderer Ansatz ist, den LM324 gegen einen Rail-to-Rail-Typ wie den OP291 auszutauschen, bei dem sich der Ausgang bis fast zur Versorgungsspannung aussteuern lässt.
Einschwinganalyse im Frequenzbereich
Interessant ist, die im Zeitbereich errechneten Signalverläufe der Einschwinganalyse im Frequenzbereich zu betrachten, also die harmonischen Oberwellen. Bei der Fourieranalyse – sie bildet die mathematische Grundlage zur Einschwinganalyse im Frequenzbereich – bleibt die Frequenz am Eingang konstant. Beim Umrechnen vom Zeit- in den Frequenzbereich zieht sie nicht den gesamten Signalverlauf heran, sondern nur den Bereich von t=Stoppzeit – 1/Grundfrequenz bis t=Stoppzeit.
Leider vermag Ngspice die Ergebnisse der Fourieranalyse nur als Text im Batchmodus auszugegeben. Als Beispiel dient das verzerrte Ausgangssignal aus Abbildung 7, bei dem ein erhöhter Anteil von Oberwellen zu erwarten ist. Als Vorbereitung erweitern Sie die Eingabedatei aus Listing 2 um die Befehlszeilen:
*Ng-Spice Simulation Commands .FOUR 1000Hz V(vout) .TRAN 100.00u 10.00m 0.00 10.00u

Abbildung 7: Grafische Ausgabe der Einschwinganalyse. Das Eingangssignal ist rot dargestellt, das Ausgangssignal blau.
Die zweite Zeile veranlasst Ngspice zur Fourieranalyse im Anschluss an eine Transientenanalyse am Knoten »vout«. Die Grundfrequenz von 1000 Hertz ist identisch mit der Frequenz des zu untersuchenden Signals. Da die Periodendauer folglich 1 Millisekunde beträgt, zieht Ngspice den Bereich von 9 bis 10 Millisekunden zur Berechnung heran. Die dritte Zeile entspricht der vorhin beschriebenen Transientenanalyse. Die Ngspice-Dokumentation empfiehlt, den Parameter »Tmax« auf Periode/100 zu setzen, im vorliegenden Fall sind dies 10 Mikrosekunden.
Die Simulation startet mit dem Kommando »ngspice -b opamplifier.cir«. Ngspice berechnet den Gleichspannungsanteil und die ersten neun Harmonischen der Grundfrequenz, zu sehen in Listing 3. Erwartungsgemäß gibt es als Folge der abgeschnittenen Signalspitze einen recht hohen Anteil harmonischer Oberwellen.
|
Listing 3: Transienten- plus |
|---|
01 Harmonic Frequency Magnitude Phase Norm. Mag Norm. Phase 02 -------- --------- --------- ----- --------- ----------- 03 0 0 0.00249704 0 0 0 04 1 1000 4.36592 13.4395 1 0 05 2 2000 0.147971 103.316 0.0338923 89.8762 06 3 3000 0.124689 16.1264 0.0285595 2.6869 07 4 4000 0.0965671 -69.983 0.0221184 -83.423 08 5 5000 0.0667338 -156.07 0.0152851 -169.51 09 6 6000 0.0393076 118.076 0.00900329 104.636 10 7 7000 0.0164897 31.6333 0.0037769 18.1938 11 8 8000 0.000180957 47.1143 4.14477e-05 33.6748 12 9 9000 0.00978131 39.8708 0.00224038 26.4313 |
Wechselstrom-Kleinsignalanalyse
Die AC-Small-Signal-Analysis berechnet die Knotenspannungen als Funktion der Frequenz. In der Schaltung muss sich eine Strom- oder Spannungsquelle befinden, deren Frequenz über einen vorgegebenen Bereich hin variiert. Die Analyse nimmt die Kennlinien der Bauteile im Arbeitspunkt als linear an, eine Forderung, die beispielsweise bei Transistoren in manchen Kennlinienbereichen zu Ungenauigkeiten führt. Die Befehlssyntax:
.AC DEC | OCT | LIN Punkte_pro_Dekade_bzw_Oktave Startfrequenz Stoppfrequenz
Um also das Verhalten der Beispielschaltung bei variabler Eingangsfrequenz zu betrachten, ändern Sie die Kommandos so ab, dass Ngspice den Frequenzbereich dekadenweise mit 10 Punkten pro Dekade berechnet, beginnend bei 1 Hertz und endend bei 1 Megahertz:
.AC DEC 10 1 1.00Meg
Außerdem müssen Sie in der Netzliste die Spannungsquelle »Vvin« in Zeile 139 von Listing 2 so abändern, dass ihre Frequenz variabel ist: »Vvin vin 0 AC 2.50«. Nachdem Sie die geänderte Eingabedatei mit dem Befehl »source opamplifier.cir« neu geladen haben, startet »run« einen neuen Simulationslauf.
Der Befehl »plot mag(vout) mag(vin) man(vopout) mag(vopp)« erzeugt die in Abbildung 8 dargestellten Frequenzspektren. Die eben benutzte Betragsfunktion »mag« ist wichtig, da Ngspice die Spannungen als mathematisch komplexe Größen auswirft. Ohne »mag« würde »plot« lediglich den Realteil erwischen, gewünscht ist aber der Betrag.

Abbildung 8: Die per Wechselstrom-Kleinsignalanalyse errechneten Frequenzspektren der Knotenspannungen »vout«, »vin«, »vopout« und »vopp«.
Gleichstromanalyse
Die DC-Analysis kennt drei Spielarten: die Berechnung der Arbeitspunkte, die Übertragungskennlinien und die Übertragungsfunktionen zwischen Ausgangsgrößen und Eingangsgrößen.
Ngspice führt eine Arbeitspunkteberechnung grundsätzlich vor jeder anderen Simulation durch, das Kommando lautet ».OP«. Es behandelt dabei Induktivitäten wie Kurzschlüsse und Kapazitäten wie Unterbrechungen. Daraus lassen sich übrigens einige Verbote aus Abbildung 6 logisch erklären. Ersetzt man etwa in der oberen linken Schaltung die Induktivität durch eine Kurzschluss, wäre der Strom durch die Spannungsquelle mathematisch gesehen unendlich hoch – tödlich für den Algorithmus.
Die Arbeitspunkte nicht-linearer Bauelemente wie Dioden oder Transistoren ermittelt Ngspice schrittweise in einem komplizierten Rechenverfahren. Dieser Algorithmus vermag bei seltenen Schaltungskombinationen (beispielsweise Regelschleifen) keine eindeutigen Lösungen zu ermitteln – er bricht dann mit einer Fehlermeldung ab. Näheres ist in der Dokumentation »ngspice.pdf« im Kapitel 6.3 “Convergence” zu lesen.
Ein Beispiel: Abbildung 9 zeigt eine Reihenschaltung aus einem Widerstand und einer Diode, Listing 4 die passende Eingabedatei. Das OP-Kommando in Zeile 7 ermittelt die Gleichspannungen und Ströme an den Knoten »in« und »out«. Wenn Sie die Simulation mit »run« starten, liefert ein späteres »print all«:
ngpsice 303 -> print all in = 1.000000e+1 out = 7.721301e-01 v0#branch = -9.22787e-02
Die Deutung: Die Gleichspannung am Knoten »in« beträgt 1 Volt, an »out« liegen 0,7 Volt an. Die etwas kryptisch anmutende Größe »v0#branch« steht für einen Gleichstrom von 0,09 Ampere.
|
Listing 4: Eingabedatei für |
|---|
01 D1 out 0 default_diode 02 RL in out 100 03 V0 in 0 DC 10 04 05 .MODEL default_diode D 06 *Simulationsanweisung 07 .OP 08 .END |
|
Tipps zum Umgang mit |
|---|
|
Kennlinien und Funktionen
Der Befehl ».DC« lässt Ngspice Gleichstrom-Übertragungskennlinien ermitteln:
.DC Elementname_der_Quelle Startwert Stoppwert Schrittweite Optionen
Als Quelle, deren Ausgangswert variieren soll, kommt eine unabhängige Strom- oder Spannungsquelle ebenso in Frage wie ein Widerstandswert oder eine Temperatur. Das Duo Abbildung 9 und Listing 4 muss nochmals herhalten. Wechseln Sie jedoch die Zeile 7 gegen
.DC V0 0V 10V 0.2V
aus. Das Kommando erhöht die Spannung der Quelle V0 in Schritten von 0,2 Volt von 0 auf 10 Volt. Auf diese Weise errechnen sich die Kennlinien aller Gleichstromgrößen in Bezug auf V0. Das Kommando »plot V(out)« veranlasst Ngspice nach einem »run« dazu, die Spannung am Knoten »out« als Funktion von V0 auszugeben – zu besichtigen in Abbildung 10.

Abbildung 10: Ergebnis der Gleichstromanalyse der Schaltung aus Abbildung 9. Das Diagramm zeigt die Größe der Spannung V(out) als Funktion der Eingangsspannung V(in).
Die dritte Variante vertritt das Kommando ».TF«, es ermittelt die Übertragungsfunktion zwischen einer Ausgangs- und einer Eingangsgröße sowie der zugehörigen Ein- und Ausgangswiderstände. Schaltplan und Listing 4 müssen ein drittes Mal ran, jetzt mit
.TF V(out) V0
als Zeile 7. Ngspice macht eine Analyse für kleine Gleichspannungen, die es der Eingangsquelle überlagert. Nach der Simulation liefert »print all«:
ngspice 318 -> print all transfer_function = 2.794989e-03 output_impedance_at_v(out) = 2.794989e-01 v0#input_impedance = 1.002803e+02
Das bedeutet: Bekommt die Spannungsquelle V0 eine winzige Gleichspannung überlagert, dann würde diese mit einem Faktor von 0,0027 (»transfer_function«) auf den Ausgang übertragen. (In der Praxis unbedeutend klein und daher als null anzusehen.) Die Gleichspannung sieht an der Schaltung einen Eingangswiderstand von 100 Ohm (»v0#input_impedance«). Das (kaum messbare) Ausgangssignal kommt mit einem Widerstand von 0,28 Ohm heraus (»output_impedance«).
Pol-Nullstellen-Analyse
Diese Analyseart berechnet zwischen einem Schaltungseingang und einem Schaltungsausgang die Nullstellen und Pole einer Übertragungsfunktion. Ein Pol ist eine Nullstelle im Nenner einer Funktion. Zur Bestimmung der Übertragungsfunktion zieht Ngspice die komplexe Wechselstromrechnung heran. Der Systemanalytiker gewinnt aus der Lage der Pole und Nullstellen wichtige Informationen über die Stabilität einer Schaltung, also ihrer Neigung zu Eigenschwingungen, sowie zum Amplitudenverlauf des Ausgangssignals.
Im Prinzip gilt eine Schaltung als stabil, weist also keine Eigenschwingungen auf, wenn alle Pole in der linken komplexen Halbebene liegen. Die RC-Schaltung aus Abbildung 11 dient als Beispiel. Die Übertragungsfunktion, also die Spannung am Ausgang in Abhängigkeit von der Frequenz, berechnet sich durch:
H(f)=Uin/Uout=(j2*pi*fC)/(j2*pi*fC+r)=1/(1+j2*pi*fRC)
Per Substitution p=2*pi*f erhält man H(p)=1/(1+pRC). Die Übertragungsfunktion hat einen Pol für p=-1/RC. Für R1=1 Kiloohm und C1=10 Picofarad existiert ein reeller Pol für p=-100 MHz.Listing 5 zeigt die Eingabedatei für die Schaltung. Zeile 5 bestimmt Ein- und Ausgang. Dank »vol« berechnet sich die Übertragungsfunktion als Ausgang/Eingang. »cur« wäre das Gegenteil und »pz« würde die Nullstellen einbeziehen. Listing 6 zeigt Ngspices Ausgabe, die die obige Berechnung stützt. Abbildung 12 verortet den Pol in der linken Halbebene – das RC-Glied selbst schwingt nicht.

Abbildung 12: Die Lage des Pols in der komplexen Ebene, berechnet für die Schaltung aus Abbildung 11.
|
Listing 5: Eingabedatei zur |
|---|
01 RC filter 02 V0 in 0 0 ac 1.0 03 R1 in out 1k 04 C1 out 0 10p 05 .pz in 0 out 0 vol pz 06 .print all 07 .end |
|
Listing 6: Ausgabe einer |
|---|
01 Circuit: RC filter 02 03 Doing analysis at TEMP = 300.1500 and TNOM = 300.1500 04 RC filter 05 Pole-Zero Analysis Thu Sep 28 09:14:18 2006 06 ----------------------------------------------------- 07 Index all 08 ----------------------------------------------------- 09 0 -1.000000e+08, 0.000000e+00 |
Rausch-, Empfindlichkeits- und andere Analysen
Ngspice hält Algorithmen zum Berechnen der thermischem Rauschleistung [14] bereit. Für Halbleiterbauelemente kann es zudem das Schrot- und Funkelrauschen berücksichtigen. Die Rauschanalyse erfolgt stets im Zusammenhang mit einer für Wechselstrom. Die Programmausgaben erfolgen als Strom- oder Spannungsquadrate bezogen auf die Rauschleistung innerhalb von 1 Herz Bandbreite und (einstellbaren) 27°C.
Um Rauschspannungen zu ermitteln, berechnet Ngspice die Rauschbeiträge der einzelnen Bauteile und summiert sie. Interessant ist die Möglichkeit, die errechnete Rauschspannung auf den Schaltungseingang zurückzurechnen. Sie können sich so eine Signalquelle errechnen, die am Ausgang identisches Rauschen verursacht – unter der Annahme, dass die Elemente selbst rauschfrei wären.
Ngspice kennt noch andere Simulationsarten, beispielsweise eine Empfindlichkeitsanalyse von Knotenspannungen in Bezug auf andere Knoten und Modellparameter (Kommando »SENS«). Die braucht man jedoch recht selten, statt langer Erklärungen sei auf die Dokumentation, die mitgelieferten Beispiele sowie auf [10] verwiesen.
Häufiger brauchen Sie vielleicht Gwave aus der Geda-Suite, ein Tool zur grafischen Kurvendarstellung, das Sie selbst aus dem Verzeichnis »gwave« (oder eine neuere Version von [3]) nachinstallieren müssen. Die »INSTALL«-Datei nennt die Abhängigkeiten, etwa Guile-gtk von [7]. Danach ist das Tripel »./configure«, »make« und »make install« dran.
Suse-10.0-Benutzer konfrontiert »build- guile-gtk« mit einem Pfadproblem, das die FAQ-Datei im Quellcodeverzeichnis lösen kann. Abbildung 13 zeigt Gwave in Aktion. Um eine Variable aus dem Variablenfenster links darzustellen, ziehen Sie diese auf eines der schwarzen Panels im Hauptfenster rechts.
Ein anderes gutes Tool ist Easyspice [6], ein Frontend zur Projektverwaltung, auf dessen grafischer Oberfläche sich Geda-Kommandos editieren lassen.
Alternativen zu Geda
Eine gute Alternative und Ergänzung zur Geda-Suite bietet Kicad von Jean-Pierre Charras [8]. Auf den ersten Blick wirken die Oberflächen komfortabel und aufgeräumt. Es besitzt einen eigenen Schaltplaneditor und erzeugt Netzlisten. Seine Stärken liegen aber im Leiterplattenlayout. Eindrucksvoll ist die 3D-Ansicht im PCB-Editor (siehe Abbildung 14).

Abbildung 14: Beim Konstruieren von Leiterplatten beeindruckt das Alternativ-Programm Kicad mit einer 3D-Ansicht.
Unter [9] steht eine ganze Palette weiterer frei verfügbarer Softwarepakete. Als Referenz auf dem Gebiet – wenn auch für Windows – gilt Orcad [11], das auch in Hochschulbereich für Laborübungen beliebt ist. Es bietet Vorteile in der grafischen Benutzerführung, beim Simulieren fallen die Unterschiede kleiner aus, Ähnliches gilt für Eagle ([12], [13]).
Fazit
Erfreulicherweise gibt es auf dem Gebiet Elektronikentwicklung ein großes Angebot frei verfügbarer Linux-Tools. Dieser Artikel beweist, dass die Geda-Suite Elektronik-Entwicklern mindestens die gleiche Funktionalität bereitstellt, die sie von teurer Software gewohnt sind. Projekte mit kleinem Budget kommen darum an der Suite kaum vorbei. (jk)
|
Infos |
|---|
|
[1] Geda-Suite: [http://www.geda.seul.org] [2] Geda-Tools: [http://geda.seul.org/wiki] [3] Quellen und Binaries: [http://geda.seul.org/download.html] [4] Modeldatei für LM324: [http://www.national.com/models/spice/LM/LM324.MOD] [5] Datenblatt für LM324: [http://www.national.com/ds.cgi/LM/LM324.pdf] [6] Easyspice: [http://easy-spice.sf.net] [7] Guile-gtk: [http://www.gnu.org/software/guile-gtk] [8] Kicad: [http://www.lis.inpg.fr/realise_au_lis/kicad/index.html] [9] Liste freier Programme: [http://www.opencollector.org] [10] Khakzar, Mayer, Oetinger, Kampe, Friedrich, “Entwurf und Simulation von Halbleiterschaltungen mit Pspice”: ISBN 3-8169-1262-1 [11] Orcad: [http://www.orcad.de] [12] Eagle:[http://www.cadsoft.de] [13] T. Füssl, J. Kleinert, “Schaltpläne und Leiterplatten-Layouts mit Eagle 4.0”: Linux-Magazin 02/02, S. 42 [14] Thermisches Rauschen: [http://de.wikipedia.org/wiki/Thermisches_Rauschen] |










