Analog-Digital-Converter Funktionsprinzip ADC bei ATmega128 Beispiel in C
Funktionsprinzip
1
Analog-Digital-Wandlung Wandelt analoge Spannung / analogen Strom (Messgröße) in einen binären Wert um, der der Amplitude der Messgröße zur Messzeit entspricht versetzt t t den d C C iin die di Lage, L Messwerte M t von analogen l Quellen einzulesen und diese dann digital zu verarbeiten Amplitude (zugeordneter Binärwert)
abgetastete Messgröße analoge Messgröße
0111 0010
0100 1010
0
t
Ts 2Ts 3Ts
ADC im ATmega128
Data Bus
ADC Control and Status Register(ADCSR)
ADC data register (ADCH/ADCL)
Successive approximation logic 10-bit DAC
8Channel Mux
Analog inputs A
ADC multiplexer select(ADMUX)
2
Successive Approximation (Prinzip) Successive A Approximation i ti Register (SAR)
Digital-AnalogWandler
Ue
analoge Messgröße
Komparator
zugeordneter Binärwert
Successive Approximation (Komparator) Successive A Approximation i ti Register (SAR)
Digital-AnalogWandler
Ue Messgröße
Komparator zugeordneter Binärwert
3
Komparator UB
Ua
Ue
Uref
UB für Ue Uref Ua UB für Ue Uref
UB Ue
Ua
Uref t
Successive Approximation (Digital-Analog-Wandler) Successive A Approximation i i Register (SAR)
Digital-AnalogWandler
Ue Messgröße
Komparator
zugeordneter Binärwert
4
DAC: Digital-Analog-Wandler (Prinzip) U2
I2
invertierender Summierer
I2 I1 I0
U1 U0
I1
1 1 Ua U2 U1 U0 2 4
I0
Beispiel für: UH 5V 1 1 Ua b2 UH b1 UH b0 UH 2 4
binary Input b1 b0 b2 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
analog Output Ua / V 0,00 , -1,25 -2,50 -3,75 -5,00 -6,25 -7,50 -8,75
Successive Approximation (Wandlungsvorgang) MSB
Successive A Approximation i ti Register (SAR)
Digital-AnalogWandler
Uref
Ue Messgröße
Komparator
zugeordneter Binärwert
5
Wandlungsvorgang 1011
1010
1100
1000
0101 0
0110 0
1.
0100 0
Wert in SAR 1000
Beginnend bei MSB: 1. Bit in SAR auf 1 (alle niederwertigeren Bits=0) 2 DAC erzeugt aus Wert in SAR 2. Referenz-Spannung Uref für Komparator U 3. ref Ue Bit in SAR wird auf 0 gesetzt Uref Ue Bit in SAR bleibt 1 4. nächstes Bit und mit 1. ... 4. weiter it bis bi alle ll n Bit-Werte Bit W t bestimmt sind 5. binären Wert in Register SRG speichern und nächste Wandlung beginnen
U 3.
Uref Ue
Uref Ue Ue Uref
2.
0 1 0 0 Ergebnis 1. Wandlung
1 0 1 1 Ergebnis 2. Wandlung
Beispiel für 4 Bit
Free Running Modus (Timing-Diagramm)
ab hier wird Ue über die gesamte Messzeit konstant gehalten
neue Einstellungen für die Wahl der Referenzspannung und der analogen Eingänge übernehmen
6
Single Conversion Modus (Timing-Diagramm)
ADC im ATmega128 Datenblatt S. 230-245 Eigenschaften Prescaler Steuer-Register Daten-Register
7
Analog-Digital-Wandlung Wandelt analoge Spannung / analogen Strom (Messgröße) in einen binären Wert um, der der Amplitude der Messgröße zur Messzeit entspricht versetzt t t den d C C iin die di Lage, L Messwerte M t von analogen l Quellen einzulesen und diese dann digital zu verarbeiten Amplitude (zugeordneter Binärwert)
abgetastete Messgröße analoge Messgröße
0111 0010
fs 0100 1010
0
Ts 2Ts 3Ts
1 Ts
t
Eigenschaften (unvollständig) AD-Wandler auf Basis des Successive Approximation Verfahrens Messgenauigkeit: 10 Bit bzw. 8 Bit Art der Messung: - programmgesteuerter p g g Start jeder j einzelnen Messung g (single ( g conversion) - automatischer Start der nächsten Messung sobald eine Messung fertig ist (free running)
Messmodi: - Messung gegen 0V (single ended) - gegen 2. Messkanal (differential)
Anschluss der Messobjekte an PortF (ADC ist alternative Funktion von PortF)) Betriebsart: Polling- oder Interrupt-Betrieb - Ereignis wird jeweils ausgelöst, wenn eine Wandlung fertig ist
Abtastfrequenz: fs durch Prescaler einstellbar - für 10 Bit Genauigkeit fs=50 ... 200kHz - für geringere Genauigkeit fs> 200kHz möglich
8
Blockschaltbild (vereinfacht)
Data Bus
ADC Control and Status Register(ADCSR)
ADC data register (ADCH/ADCL)
Successive approximation logic 10-bit DAC
Analog inputs A
ADC multiplexer select(ADMUX)
8Channel Mux
PORT F ADC7 ... ADC0
ADC Multiplexer Selection Register (ADMUX) Wahl der Spannungsreferenz
Wahl der analogen Eingänge ä Left Adjust Result: 1 ... linksbündig 0 ... rechtsbündig
9
Wahl der Spannungsreferenz
legt den Bereich der Spannung an den Eingängen des ADC fest - wenn Ue >= Uref*, dann erhält man ein Wandlungsergebnis von 0x3ff (alle 10 Wandlerbits auf 1)
als Referenzspannung kann verwendet werden: - eine externe Spannungsquelle (AREF) - die Versorgungsspannung des ADC (AVCC) - eine interne Referenzspannung von 2,56V
ein externer Kondensator kann zur Verbesserung des Schutzes gegen Rauschen angeschlossen werden *Uref ist nicht zu verwechseln mit der Referenzspannung des Komparators (Folien zum Wandlungsvorgang)
ADC Multiplexer Selection Register (ADMUX) Wahl der Spannungsreferenz
Wahl der analogen Eingänge ä Left Adjust Result: 1 ... linksbündig 0 ... rechtsbündig
10
Wahl der analogen Eingänge
Single g ended: Messung Input-Pin gegen 0V Wandlungsergebnis: ADC
Ue 1024 Uref
Differential: Messung positives iti IInput-Pin t Pi gegen negatives Input-Pin Wandlungsergebnis: ADC
(Upos Uneg ) Gain 512 Uref
Ausschnitt: vollständige Tabelle siehe Datenblatt
ADC Control und Status-Register A (ADCSRA)
Prescaler ADC Interrupt Enable: 1 ... löst Interrupt aus, wenn eine Wandlung fertig ist (ADIF wird automatisch gelöscht) ADC Interrupt Flag: wird auf 1 gesetzt, wenn eine Wandlung fertig ist (kann gepollt werden, in diesem Fall Löschen ö h durch d h Schreiben S h ib einer i 1 (!) auff das d Flag) Fl ) free running Modus: 1 ... ADC wird automatisch neu gestartet, sobald eine Wandlung beendet ist AD Start Conversion: Einmaliges Starten einer Wandlung ADC Enable: 1 ... Einschalten des ADC
11
ADC Prescaler
Controllertakt fosc
ADC-Takt fADC
ADPS2
ADPS1 ADPS0 NPrescaler
0
0
0
1
0
0
1
2
0
1
0
4
0
1
1
8
1
0
0
16
1
0
1
32
1
1
0
64
1
1
1
128
Abtastfrequenz
1 Cycle (Taktzyklus) entspricht TADC f
1
ADC
erste Messung nach Einschalten des ADC (ADEN=1) dauert länger, da ADC initialisiert werden muss die Abtastfrequenz, mit der das Eingangssignal digitalisiert wird, errechnet sich aus der Dauer einer kompletten normalen Wandlung fs
1 1 fADC
13
fOSC fADC 13 NPr escaler 13
12
ADC Multiplexer Selection Register (ADMUX) Wahl der Spannungsreferenz
Wahl der analogen Eingänge ä Left Adjust Result: 1 ... linksbündig 0 ... rechtsbündig
ADC Datenregister (Wandlungsergebnis) ADLAR=0 rechtsbündig
ADLAR=1 linksbündig
reicht 8 Bit Genauigkeit aus: - ADLAR (ADMUX-Register) auf 1 setzen und Ergebnis aus ADCH lesen (zwei niederwertigsten Bits gehen verloren)
sonst immer zuerst ADCL und dann ADCH lesen! (in C kann auch der 10-Bit-Wert in eine 16-Bit Variable gelesen werden)
13
ADC Control und Status-Register A (ADCSRA)
Prescaler ADC Interrupt Enable: 1 ... löst Interrupt aus, wenn eine Wandlung fertig ist (ADIF wird automatisch gelöscht) ADC Interrupt Flag: wird auf 1 gesetzt, wenn eine Wandlung fertig ist (kann gepollt werden, in diesem Fall Löschen ö h durch d h Schreiben S h ib einer i 1 (!) auff das d Flag) Fl ) free running Modus: 1 ... ADC wird automatisch neu gestartet, sobald eine Wandlung beendet ist AD Start Conversion: Einmaliges Starten einer Wandlung ADC Enable: 1 ... Einschalten des ADC
Beispiel in C Geschwindigkeit der Musterausgabe mit Potentiometer verändern
14
Beschreibung
an PortF wird ein Potentiometer angeschlossen, dessen aktuelle Spannung mit Hilfe des ADC gemessen wird der Wert, den der ADC liefert, wird als Delay in ms für die Musterausgabe mit der Funktion putSelPattern verwendet mit dem Potentiometer kann man nun die Geschwindigkeit der Musterausgabe verändern
Konfiguration ADC Register
Bit
Wert Bemerkung (binär)
ADMUX
REFS1:REFS0
01
Spannungsreferenz Uref intern Vcc
ADLAR
0
Wandler-Ergebnis rechtsbündig
x
MUX4 ... MUX0
00000
Kanal ADC0, single ended
x
ADEN
1
ADC einschalten
ADSC
1
Start Conversion
ADFR
1
free running
ADPS2 ... ADPS0
111
NPrescaler=128
ADCSRA
Abtastfrequenz:
fs
Default
fCPU fADC 106 Hz 600Hz 13 N Pr escaler 13 128 13
15