Arduino Mikrocontroller Tutorials - Module

SPI DAC (Digital to Analog Converter)

SPI DAC (Digital to Analog Converter)

Mit einem DAV kann eine sehr genau einstellbare analoge Gleichspannung erzeugt werden. Die Stromstärke kann um die 25mA liegen.

Die analoge Ausgangsspannung des DAC liegt zwischen 0V und VREF, wobei VREF kleiner oder gleich der Versorgungsspannung VDD sein muss. Die Spanne zwischen 0V und der Referenzspannung hat eine Auflösung von 8 bit (255 Schritte). Bei 5V VREF ist das eine Schrittweite on rund 0,02V.

Die Ausgangsspannung kann mit einem GA (Gain Amplifier) verdoppelt werden (jedoch nicht über die Versorgungsspannung hinaus)

Der DAC hat doppelte Register (ein zusätzliches Buffer-Register). Dies erlaubt ein Update der Werte während gleichzeitig der vorherige Wert weiter ausgegeben wird.

Pinbelegung

Pin Funktion
VDD Spannungsversorgung 2,7-5,5V
VSS GND bzw. Masse -
VREF Voltage Referenz Input (muss kleiner oder gleich VDD sein)
VOUT DAC Ausgangsspannung (kann mit 25mA direkt belastet werden)
LDAC Latch um das empfangenen Registerinhalt auf VOUT zu legen
(wird LDAC auf GND gelegt wird der Eingang sofort durchgeschaltet)
CS, SCK, SDI SPI Datenleitungen bis zu 20MHZ

Register des DAC

Der DAC hat ein 16 bit Register ( 0 | BUF | GA | SHDN | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | X | X | X | X )

Bit Bedeutung
BUF 1= Input Buffer an
0= Unbuffered (wird ggf. bei höheren Schaltfrequenzen benötigt)
GA 1= Ausgangsverstärkung 1x
0= Ausgangsverstärkung 2x
SHDN 1= aktive Mode, 0= Shutdown Mode
D0-D7 Binärwert für die gewünschte Ausgangsspannung
X don't care

Programmcode

Programm #define CS 8 // CS für die SPI Übertragung (active Low) #define LDAC 9 // LDAC PIN (active Low) - ladet (Load) den per SPI übertragenen Sollwert ind den DAC und damit auf den Ausgang #include void setup() { pinMode(CS, OUTPUT); pinMode(LDAC, OUTPUT); digitalWrite(CS, HIGH); digitalWrite(LDAC, HIGH); SPI.begin(); SPI.setDataMode(SPI_MODE3); SPI.setBitOrder(MSBFIRST); digitalWrite(CS, LOW); SPI.transfer16(0b0011110001110000); // ( 0 | BUF | GA | SHDN | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | X | X | X | X ) digitalWrite(CS, HIGH); digitalWrite(LDAC, LOW); digitalWrite(LDAC, HIGH); } void loop() { // bleibt leer }