Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Digital Analog Umsetzer

Ein D/A Wandler (auch Digital Analog Umsetzer (DAU) oder englisch Digital Analog Converter (DAC)) kann man auch als das Gegenstück zu einem A/D Wandler bezeichnen.

 

Bei einem A/D Wandler liegt eine sich ständig ändernde Spannungsgröße am Eingang und der Wandler ordnet einzelnen Spannungsintervallen diskrete binäre Werte zu.

Bei einem DAU liegt am Eingang eine binäre Zahl und am Ausgang ein dazu entsprechender Spannungswert. Dieser Wert ändert sich bei unterschiedlichen Eingangszahlen nicht stetig sondern in Sprüngen.

Dabei ist die Anzahl der Spannungspegel, die ein DAU abgeben kann, abhängig von der Anzahl seiner binären Stellen oder Bits. Allgemein gilt:

Der in dieser Übung eingesetzte DAU, eine sogenannte Widerstandsleiter, hat eine 4 Bit Auflösung, dass heißt, die Anzahl der von ihm dargestellten Spannungspegel beläuft sich auf 16. Wie der Name schon verrät, ist dieser DAU nur aus Widerständen aufgebaut. Mit Hilfe eines BASIC Programms werden der 4 Bit Widerstandsleiter binär codierte Werte übergeben, die von dem Netzwerk in einzelne Spannungsstufen umgesetzt werden.

Mit dem DVM aus dem Kapitel A/D Wandler werden die Spannungswerte im Debug Terminal angezeigt.

2 - Aufbau einer Widerstandsleiter

Aufbau einer Widerstandsleiter
Material

1x  Board of Education mit BASIC Stamp

6x  Widerstand, 2kOhm

3x  Widerstand, 1kOhm

1x  ADC0831 - A/D Wandler

1x  separates Steckbrett

Aufgaben
  • Übertrage das Programm DAWandler_1.bs2 in den Editor und speichere es ab.
  • Starte das Programm und notiere dir den angezeigten Spannungswert für den binären Wert 0001.
  • Ändere in Zeile 28 des Hauptprogramms den Wert von n auf 2, starte das Programm erneut und notiere für den binärenWert 0010 den angezeigten Spannungswert.
  • Erhöhe nacheinander den Wert von n auf 3, 4 und so fort bis zum Wert 15. Lies jedesmal zum angezeigten Binärwert den zugehörigen Spannungswert ab und notiere ihn.

Schaltungsaufbau der Widerstandsleiter

Das Widerstandsleiter-Netzwerk zeigt Abb. 1. Der Name rührt von der Ähnlichkeit der Widerstandsanordnung mit einer Leiter und ihren Sprossen her. Es hat sich als hilfreich erwiesen, wenn man den ADC0831 separat auf einem zweiten Steckbrett aufbaut. Die Gesamtschaltung würde auf dem Steckbrett des Board of Education zu unübersichtlich werden.

Schaltskizze der Widerstandsleiter

Abbildung 1 - Widerstandsleiter mit 4 Bit Auflösung

Achte beim Aufbau der Schaltung sehr genau auf die Widerstandswerte. Es ist ärgerlich und kostet viel Zeit, wenn sich am Ende herausstellt, dass man Widerstände vertauscht hat. Achte ebenso darauf, dass sich die Anschlussdrähte der Widerstände nicht gegenseitig berühren.

 

Vollständiger Schaltungsaufbau

Abbildung 2 - Komplette Schaltung mit Widerstandsleiter und ADC0831

Das Programm DAWandler_1.bs2

Die Terminalausgabe

Jeder Widerstand in der Widerstandsbrücke hat in der Regel einen Toleranzfehler von 10%.  Rechnet man die Widerstandsbrücke mathematisch durch, dann müsste sich bei einer Eingabe von 11112 (entspricht der Zahl 15) ein Spannungswert von 3,13 V einstellen. Tatsächlich erfolgt das nicht, aufgrund der eben erwähnten Fehlertoleranzen. Bei den von mir eingesetzten Widerständen mit einer Toleranz von 1% ergibt sich immerhin ein Wert von 3,08 V.

Abbildung 3 - links: D0 -> /CS, D1 -> CLK, D2 -> Dataout am ADC0831 - D4 ... D7 Datenbits am DAU-Eingang; rechts: Ausgabe im Debug Terminal
Abbildung 4 - links: D0 -> /CS, D1 -> CLK, D2 -> Dataout am ADC0831 - D4 ... D7 Datenbits am DAU-Eingang; rechts: Ausgabe im Debug Terminal

Bei dem Wert 00102 ergibt sich rechnerisch ein Wert von 0,416... und gemessen von 0,41V.

3 - Berechnung eines Widerstandsleiter-Netzwerkes

Es gibt mehrere Möglichkeiten, ein Widerstandsleiter-Netzwerk zu berechnen. Mit den herkömmlichen Kenntnissen aus der Mittelstufe (Knoten- und Maschenregel, Ohmsches Gesetz) sollte es einem guten Schüler/einer guten Schülerin möglich sein, das Netzwerk zu berechnen. Eine zweite Methode ist der Einsatz von sogenannter elektronischer Simulationssoftware.

Mir erscheint die kostenfreie Software TINA-TI V9 von Texas Instruments besser geeignet als TSpice, das ebenfalls kostenfrei im Internet herunterzuladen ist. Aber das muss jeder selbst entscheiden. Ich habe mich für TINA-TI V9 entschieden. Es ist einfacher zu bedienen und die Einarbeitungszeit ist überschaubar kurz.

Die Rechenergebnisse zu den oben gezeigten beiden binären Eingaben 1111 und 0010 zeigen die folgenden beiden Abbildungen.

Abbildung 5 - Widerstandsleiter-Netzwerk für die Eingangsgröße 0010 berechnet mit TINA-TI V9

Links in Abb. 5 sind die vier Schalter SW_SPDT1 ... 4 zu sehen. Die Binäreingabe entspricht 0010. Rechts unten ist mit der Bezeichnung U_DAC der am Ausgang anliegende berechnete Spannungswert zu entnehmen; in diesem Fall 416,67 mV.

Abbildung 6 - Widerstandsleiter-Netzwerk für die Eingangsgröße 1111 berechnet mit TINA-TI V9

Wie arbeitet das Programm DAWandler_1.bs2

Im Deklarationsbereich der Variablen ist neu hinzugekommen die Variable

  • n vom Typ Nib.
    

Im Hauptprogramm ist ein Unterprogramm neu:

  • gosub dac
    

Über es wird die Umwandlung von digital zu analog geregelt. Der Vorgabewert für n im Programm ist in der abgebildeten Fassung 11. Der Ausgabe-Spannungswert sollte also n = 11 Stufen von insgesamt 16 über dem Wert von 0 Volt liegen. Der Wert von n sollte bei jedem neuen Programmlauf abgeändert werden, so wie es bei den Aufgaben beschrieben wurde.

 

Zeilen 29 - 32

Die mit dem D/A Wandler verbundenen I/O Pins P4 - P7 der BASIC Stamp sind als Ausgang definiert. Normalerweise erscheinen diese Zeilen im Deklarationsteil eines Programms (sie müssen nur einmal durchlaufen werden), sind hier aber zu Demonstrationszwecken in das Unterprogramm übernommen worden (in dem die Zeilen bei jedem Programmdurchlauf abgearbeitet werden und das Programm insgesamt langsamer werden lassen).

 

Zeilen 34 - 37

Die an den Ausgangspins P4 - P7 liegende 4-Bit Binärzahl wird dem DAU parallel übergeben. Die Syntax ist neu und muss kurz erläutert werden. Der Wert von n ist auf 11 gesetzt, das entspricht binär 1011.

  • OUT7 = n.BIT3 
    

bedeutet, dass das vierte Bit (BIT3) der binären Zahl n = 1011, das ist eine 1, an den Ausgang von P7 gelegt wird. Entsprechend wird P6 auf LOW gesetzt, da das dritte Bit (BIT2) bei der binären Zahl 1011 eine 0 ist.

Die Umrechnungen im Unterprogramm calc_volt sind uns aus dem Abschnitt A/D Wandler bekannt und müssen hier nicht weiter besprochen werden.

Im Unterprogramm display sind entsprechende Anpassungen für die Zahlausgaben vorgenommen worden, die ebenfalls selbsterklärend sind.

4 - Nibble-Adressierung

Die Adressierung einzelner Datenleitungen ist nicht immer sehr effizient. Es kostet viel Zeit, nacheinander die 4 Bit von 0 bis 15 über die Variable n jeweils neu zu schreiben, das Programm zu starten und den Spannungswert des DAU abzulesen. Effizienter wäre es, wenn gleich alle 16 möglichen Werte untereinander im Debug Terminal ausgegeben werden könnten.

Dazu werden zwei Register benötigt, über die die Ausgabe von aufeinanderfolgenden I/O Datenleitungen gesteuert wird.

  • Das erste Register nennt sich "direction" und der Befehl "output" definiert die Richtung als Ausgang. Umgekehrt werden die I/O Datenleitungen mit "input" zu Eingängen.
  • Das zweite Register nennt sich "data". Wird ein I/O Datenpin als Ausgang definiert, dann kann das zugehörige "data"-Register auf 0 oder 1 gesetzt werden, was gleichbedeutend damit ist, dass an den jeweiligen Pins ein LOW (0 Volt) oder HIGH (5 Volt) Signal gelegt wird.

Unter PBASIC gibt es spezielle Befehle, mit denen sich I/O Datenleitungen von 16 Bit direkt adressieren lassen. Gleichbedeutend damit wären auch 2 verschiedene 8 Bit (Byte) oder 4 verschiedene 4 Bit (Nibble) Adressierungen.

Im folgenden Beispiel wird das Nibble P4 - P7 direkt adressiert. Es gilt dabei die folgende Bezeichnungsweise:

  • die Pin P0 - P3 heißen Nibble "a",
    die Pin P4 - P7 heißen Nibble "b",
    die Pin P8 - P11 heißen Nibble "c" und
    die Pin P12 - P16 heißen Nibble "d".
    

Wenden wir dieses Wissen jetzt auf den Programmcode von DAWandler_1.bs2 an. Dazu wird das Unterprogramm dac neu geschrieben:

 

  • dac:
  •   n = 11
  •   DIRB = 15
  •   OUTB = n
  • RETURN
16-Bit, 8-Bit und Nibble Adressierung
Aufgaben
  • Lade über File - Open das Programm DAWandler_1.bs2 in den Editor.
  • Lösche alle Programmzeilen des Unterprogramms dac.
  • Übertrage die Änderungszeilen des Unterprogramms dac in den Editor und speichere das Programm unter dem neuen Namen DAWandler_2.bs2 ab.
  • Starte das Programm und überprüfe, ob es sich genau so verhält wie das vorherige Programm.
  • Falls es nicht der Fall sein sollte, überprüfe das Programm auf fehlerhafte Eingaben im Programm.

Setzt man zum Beispiel DIRB = 4, dann entspricht das der binären Zahl 0100. Es bedeutet, dass nur das dritte Bit im Nibble "b" auf Ausgang (1) und alle anderen Bits auf Eingang (0) gesetzt werden. Eine Fehlfunktion des Programms wäre die Folge.

Mit diesen wenigen Änderungen ist es nun möglich, alle 16 DAU Eingabewerte untereinander im Debug Terminal auszugeben mit ihren entsprechenden Spannungswerten. Dazu muss nur noch eine entsprechende Zählschleife in das Hauptprogramm eingebaut werden.

Der komplette Programmcode der Unterprogramme sieht damit wie folgt aus:

Im Debug Terminal erscheinen jetzt alle 16 Spannungswerte untereinander. Damit steht einer Untersuchung eines 12 oder gar 16 Bit DAC nichts mehr im Wege;-)

5 - Spannungsfolger als Puffer

Was passiert eigentlich, wenn man an den DAU-Ausgang eine LED mit Vorwiderstand, einen Piezolautsprecher oder einen beliebigen Verbraucher anschließt? Bevor wir lange darüber brüten, bauen wir die Schaltung mit einer LED und einem 270 Ohm Vorwiderstand einfach mal auf und setzen sie in Betrieb.

Abbildung 7 - DAC mit LED-Schaltkreis

Der LED Schaltkreis wird vom DAU gespeist oder man sagt auch, der LED Schaltkreis belastet die Widerstandsleiter-Schaltung. Um herauszufinden, was da mit der Schaltung passiert, werden die 16 binären Zustände am DAU Eingang und die sich am Ausgang einstellenden Spannungswerte wiederum gemessen und mit den Werten aus Kapitel 4 verglichen.

Belasteter Digital-Analog-Umsetzer
Aufgaben
  • Baue die Schaltung aus Abbildung 7 auf.
  • Starte das Programm DAWandler_2.bs2 und notiere die Spannungswerte.
  • Vergleiche die Spannungswerte mit denen aus dem Kapitel 4 - Nibble-Adressierung. Was fällt auf?

Die gemessenen Spannungswerte zu den 16 binären Eingangszuständen zeigt die folgende Tabelle.

Das Ergebnis ist eindeutig und zeigt, dass die Spannungswerte ab einem Eingangszustand 10002 aufwärts (dezimal 8) gegenüber denen bei einem unbelasteten DAU zurückfallen.

 

Wird als Puffer zwischen den DAU und den LED Schaltkreis ein hochohmiger OPV eingebaut, und anschließend noch einmal über alle 16 binären Zustände die Spannungsmessung wiederholt, ist das Ergebnis eindeutig.

Abbildung 8 - Widerstandsleiter mit Spannungsfolger (Puffer) LM358
Widerstandsleiter mit Spannungsfolger LM358
Aufgaben
  • Ergänze die bestehende Schaltung aus Abb. 7 durch den Baustein LM358 so, wie in Abb. 8 gezeigt.
  • Starte das Programm DAWandler_2.bs2 und notiere die angezeigten Spannungswerte.
  • Vergleiche sie mit den Werten aus Kapitel 4 und der vorherigen ungepufferten Schaltung.

Ausgabe im Debug Terminal

Vergleicht man die Messwerte der beiden letzten Terminalausgaben, so ist klar erkennbar, dass mit dem Einbau eines Spannungsfolgers (Puffer) das Problem des Spannungsabfalls beseitigt werden konnte.

Abbildung 9 - Spannungswerte bei einer Widerstandsleiter mit Spannungsfolger (Puffer) LM358

6 - Zeitvariierendes Signal

In diesem Kapitel schauen wir uns ein besonderes Signal mit dem Oszilloskop an. Dazu benutzen wir die BASIC Stamp mit dem AD Wandler und dem DAU Schaltkreis aus Abschnitt 5.

Die Ausgangsspannung des Widerstandsleiter-Netzwerks verändert sich mit der Zeit und wird mit dem Oszilloskop sichtbar gemacht. Es wird mit Hilfe der Schaltung aus Abschnitt 5, Abb. 8 eine besondere Schwingungsform untersucht; die sogenannte

  • Dreiecksspannung

Über die zugeschaltete LED lässt sich die Signalform zusätzlich beobachten.

Zeitvariierendes Signal - Dreieckspannung
Material

1x  Board of Education mit BASIC Stamp

6x  Widerstand, 2kOhm

1x  ADC0831, AD Wandler

10x Steckdraht

Aufgaben
  • Baue die Schaltung nach Abb. 8 aus Abschnitt 5 (Spannungsfolger als Puffer) auf.
  • Übertrage das Programm DAWandler_3P91.bs2 in den Editor und speichere es ab.
  • Verbinde einen Messkopf des Oszilloskops mit dem DAC Ausgang der Schaltung an Pin 3 des LM358.
  • Versuche im Programm Schritt-für-Schritt herauszufinden, wie es arbeitet.
  • Starte das Programm.

Das Programm DAWandler_3P91.bs2

Das Oszillogramm

Nach dem Start des Programms leuchtet die rote LED auf und geht für einen kurzen Moment aus.

 

Im Zusammenhang mit Schwingungsformen werden drei häufig benutzte Größen im Oszillogramm noch einmal besonders herausgehoben:

  • die Amplitude
  • die Periode
  • das Gleichspannungs-Offset oder DC-Offset

 

Auf der Rechtsachse ist im Oszillogramm die Zeit aufgetragen, auf der Hochachse die Spannung.

  • Die Periode T einer Schwingungform ist definiert als die Zeit, die vergeht, bis sich die Wellenform wiederholt. Nimmt man als Ausgangspunkt die höchste Auslenkung, dann entspricht einer Periode die Zeit T, die vergeht, bis die Welle wiederum die höchste Auslenkung erfährt. Die dafür benötigte Zeit T liegt im vorliegenden Fall bei ungefähr einer Sekunde -> T = 1s
  • Die Frequenz f ist der Kehrwert der Periode T und wird in der Einheit Hertz (Hz) angegeben. Die vorliegende Dreiecksspannung schwingt mit einer Frequenz von ca. 1 Hz.
  • Die Amplitude der vorliegenden Schwingung wird von Peak zu Peak gemessen und liegt im vorliegenden Fall bei ca. 1,5 V.
  • Das Gleichspannungs-Offset ist die Differenz zwischen 0V und dem Minimum der angezeigten Schwingung. Die kleinste Spannungsgröße liegt hier bei 1,6V, so dass das Offset bei eben diesem Wert liegt.
Druckversion | Sitemap
© Reinhard Rahner - Gettorf