7.2  D/A-Ports

Mikrocontroller-Typen, auf denen der DAC12-Block implementiert ist, verfügen über zwei D/A-Ports (DAC0 und DAC1). Es handelt sich dabei um Spezialfunktionen von digitalen I/O-Ports. Auf dem MSP430F1612 belegt DAC0 den Port P6.6 und DAC1 den Port P6.7. Der genaue Anschluss hängt von der gewählten MSP430-Variante ab und ist dem jeweiligen Datenblatt zu entnehmen.

7.2.1  Übersicht

Jeder D/A-Port kann sowohl im 8-Bit- als auch im 12-Bit-Modus arbeiten. Die Steuerung der beiden D/A-Ports übernehmen insgesamt vier interne Register. Dabei stehen pro D/A-Port jeweils ein Kontrollregister und ein Datenregister zur Verfügung. Im Datenregister steht der Ausgabewert des D/A-Wandlers. Das Kontrollregister (DAC12_xCTL), das in Abbildung 7.5 dargestellt ist, dient zur Initialisierung des D/A-Ports und zur Einstellung der Laufzeitparameter.


PIC

Bild 7.5.: DAC12-Kontrollregister DAC12_xCTL


Die grau unterlegten Flags sind nur zugänglich, wenn das Bit DAC12ENC gesetzt ist. Das ist eine Sicherungsfunktion, wie wir sie auch schon bei den analogen Eingängen kennengelernt haben.

Referenzspannung

Jeder D/A-Port lässt sich mit einer eigenen Referenzspannung konfigurieren. Dabei kann man entweder auf eine externe Referenzspannung oder auf eine der internen Referenzspannungen (1.5V oder 2.5V) zurückgreifen. Die Referenzspannung wird mit Hilfe der Bits DAC12SREFx nach Tabelle 7.1 festgelegt.


SREFxReferenzspannung
  
00 V REF+
01 V REF+
10 V eREF+ (extern)
11 V eREF+ (extern)
  

Tabelle 7.1.: Wahl der Referenzspannung

Die interne Referenz leitet sich von der ADC12-Referenz ab und muss daher aktiviert und konfiguriert werden. Mit der nachfolgenden Codezeile wird beispielsweise die 2.5V-Referenzspannung ausgewählt:

  ADC12CTL0 = REF2_5V + REFON;
Listing 7.1: Initialisierung der ADC12-Referenzspannung

Referenzspannung und Ausgangsspannung des DAC12 sind über einen Input- und einen Output-Buffer miteinander verknüpft. Die Puffer sorgen für eine stabile Betriebsfunktion. In der Dynamik schnell ausgelegte Puffer benötigen mehr Strom als langsam ausgelegte Puffer. Mit den DAC12AMPx-Flags lässt sich die Dynamik und damit der Stromverbrauch der Puffer einstellen (Tabelle 7.2).


AMPxInput-Buffer Output-Buffer
   
000ausgeschaltetDAC12 ausgeschaltet
001 ausgeschaltetDAC12 ausgeschaltet
010 langsam langsam
011 langsam mittel
100 langsam schnell
101 mittel mittel
110 mittel schnell
111 schnell schnell
   

Tabelle 7.2.: Auswahl der Puffer-Einstellungen

Durch die Wahl der Puffer-Einstellungen (DAC12AMPx > 0) wird der I/O-Port direkt als D/A-Port ausgewählt. Die Initialisierung der Spezialfunktion ist nicht nötig.

Wahl des Verstärkungsfaktors

Die Amplitude des Ausgangssignals ist abhängig von der gewählten Referenzspannung und einem Verstärkungsfaktor, der mit dem Bit DAC12IR ausgewählt werden kann. Ist DAC12IR gesetzt, so ist die Amplitude gleich der Referenzspannung. Wenn das Bit allerdings gelöscht ist, so entspricht die Amplitude dem dreifachen der Referenzspannung. Da der MSP430 aber mit einer Versorgungsspannung von 3.3V betrieben wird, geht das Ausgangssignal bei 3.3V in Sättigung. Alle Signalanteile mit einer größeren Amplitude werden abgeschnitten. Abbildung 7.6 verdeutlicht den Signalverlauf für beide Fälle (links: DAC12IR = 1 und rechts: DAC12IR = 0).


PIC

Bild 7.6.: Dreiecksspannung mit einer Amplitude von 1 V REF (links) und einer Amplitude von 3 V REF (rechts).


Kalibrierung

Auf Grund von Fertigungsschwankungen und Temperatureffekten kann die analoge DAC-Ausgangsspannung einen positiven oder negativen Offset haben, wie es in Bild 7.7 gezeigt ist. Der Absolutwert der Abweichung kann z.B. bei dem MSP430F1612 bis zu 21mV betragen. Um dies zu kompensieren, verfügt das DAC12-Modul über einen internen Kalibriermechanismus.

Die Kalibrierung wird durch Setzen des Bits DAC12CALON gestartet. Nach der Kalibrierung wird das Bit automatisch vom Mikroprozessor gelöscht. Damit kann man feststellen, ob die Kalibrierung erfolgreich ausgeführt wurde. Während des Kalibriervorgangs sollte der DAC12 nicht angesteuert werden. Nach der Kalibrierung beträgt der Offset maximal 2.5mV.

Die Wahl der Puffer-Einstellung hat Auswirkungen auf die Zeit, die der Controller für die Kalibrierung benötigt. Bei einem langsam ausgelegten Puffer benötigt der Controller etwa 100ms. Für einen schnell ausgelegten Puffer werden nur 6ms benötigt.


PIC

Bild 7.7.: Negativer oder positiver Offset der analogen Ausgangsspannung [Tex06c].


Die Funktionalität der weiteren Bits und Flags im Kontrollregister ist dem Datenblatt zu entnehmen. Da sie teilweise vom verwendeten Modell abhängen und zum anderen für die Konzeption üblicher DAC12-Anwendungen keine große Bedeutung haben, sollen sie hier nicht weiter berücksichtigt werden.

Einfaches Beispielprogramm

Wir haben nun einige Informationen über die Initialisierung eines D/A-Ports erfahren und können nun ein einfaches Beispielprogramm entwickeln. Das Programm aus Listing 7.2 soll eine Dreiecksspannung mit einer Amplitude von 2.5V ausgeben. Dazu wird der DAC12 initialisiert und dann einfach die entsprechende Wertefolge ausgegeben.

#include <msp430x16x.h> 
 int i; 
 
int main( void ) 
{ 
  WDTCTL  = WDTPW | WDTHOLD;           // Watchdog ausschalten 
  ADC12CTL0 = REF2_5V + REFON;         // Interne Referenz- 
                                       // spannung auf 2.5 V 
                                       // DAC12 initialisieren 
  DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; 
 
  while(1) {                           // "Signalgenerator" 
                                       // starten 
    for(i = 0; i < 4095; i = i + 50) { 
      DAC12_0DAT = i; 
    } 
    for(i = 4095; i > 0; i = i - 50) { 
      DAC12_0DAT = i; 
    } 
  } 
}
Listing 7.2: Einfaches D/A-Wandler-Beispielprogramm

7.2.2  Ansteuerung von Lasten

Bei der Ausgabe analoger Spannungen ist natürlich wichtig, welche Last daran angeschlossen werden soll. Lasten bis maximal 500μA können direkt durch den MSP betrieben werden. Bei höheren Strömen muss der Steuerkreis mit DAC12 und Mikrocontroller vom Lastkreis getrennt werden. Hierzu gibt es mehrere Möglichkeiten:

Eine einfache Möglichkeit den Steuer- vom Lastkreis zu trennen, ist die Verwendung einer Transistortreiberstufe oder einer Darlington-Schaltung. In Kapitel 2.3.3 haben wir diese ja schon eingeführt und man kann prinzipiell auch eine Schaltung wie in Bild 2.5 verwenden. Nachteilig ist, dass beide Schaltungen ein relativ stark nichtlineares Verhalten von Uin∕Uaus aufweisen. Normalerweise ist ein lineares Übertragungsverhalten erforderlich, weshalb man lieber gleich auf eine Operationsverstärkerschaltung zurückgreifen sollte. Einfache Lasten bis 20mA können mit den meisten Standard-Typen (z.B. LM358 LM324 TL084 uA741) direkt betrieben werden. Bei größeren Strömen bis 200mA kann man zum Beispiel auf einen OPA551 oder einen AD815 zurückgreifen. Der Anschluss erfolgt dann beispielsweise als ganz normale nichtinvertierende Operationsverstärkerschaltung, siehe Abbildung 7.8. Mit einem Verstärkungsfaktor > 1 können auch höhere Ausgangsspannungen als die Versorgungsspannung des MSP erreicht werden. Immer vorausgesetzt natürlich, der Operationsverstärker wird mit einer entsprechend größeren Versorgungsspannung betrieben.


PIC

Bild 7.8.: Nichtinvertierende Operationsverstärkerschaltung zum Treiben einer Last


Besteht die Notwendigkeit, Ströme größer als 10..20 mA abzugeben, kann man eine Schaltung wie in Bild 7.9 gezeigt verwenden. Die hier gezeigte Schaltung linearisiert die Ausgangskennlinie des Transistors durch die Rückführung über den Operationsverstärker. Im Prinzip ist es gleich, ob man dort einen FET oder einen Bipolartransistor einsetzt. Entscheidend ist eher die Dimensionierung der Verlustleistung und der maximal erlaubte Strom durch den Transistor.


PIC

Bild 7.9.: Operationsverstärkerschaltung mit einem FET als Leistungsausgang