1
Analog-Digital-Konverter – Verfahren
http://de.wikipedia.org/wiki/Analog-Digital-Umsetzer http://www.pling.org.uk/cs/dad.html
●
Sägezahnverfahren (single slope)
Funktion:
●Ein Sägezahngenerator erzeugt eine linear ansteigende Ver-
gleichsspannung
●Ein analoger Comparator ver- gleicht die augenblickliche Ver- gleichsspannung mit der Ein- gangsspannung
●Während dieses Zeitraumes läuft ein Zähler
●Bei Uin - Uref = 0 wird der Zähler ausgewertet, der Zählerstand ist proportional zu Uin.
Funktion:
●Ein Sägezahngenerator erzeugt eine linear ansteigende Ver-
gleichsspannung
●Ein analoger Comparator ver- gleicht die augenblickliche Ver- gleichsspannung mit der Ein- gangsspannung
●Während dieses Zeitraumes läuft ein Zähler
●Bei Uin - Uref = 0 wird der Zähler ausgewertet, der Zählerstand ist proportional zu Uin.
2
Analog-Digital-Konverter – Verfahren
http://de.wikipedia.org/wiki/Analog-Digital-Umsetzer http://www.pling.org.uk/cs/dad.html
●
Flashconverter
Funktion:
●Es wird pro Digit ein Analoger Comparator benötigt (außer für 0)
●Beispiel: Auflösung 3 bit, Digits 0..7, es wer- den 7 Comparatoren benötigt (2n-1)
●Mittels Widerstandsnetzwerk werden die Re- ferenzspannungen erzeugt
●Bei 8V (an Stelle von 10V Uref*) ergeben sich Urefi mit Werten 0.5, 1.5. 2.5,..., 7.5 V.
●Comparator 0..x liefert 1, Comparator x+1..7 liefert 0
●Der IC 74F148 codiert diesen "Füllstand" in eine 3bit Zahl
Funktion:
●Es wird pro Digit ein Analoger Comparator benötigt (außer für 0)
●Beispiel: Auflösung 3 bit, Digits 0..7, es wer- den 7 Comparatoren benötigt (2n-1)
●Mittels Widerstandsnetzwerk werden die Re- ferenzspannungen erzeugt
●Bei 8V (an Stelle von 10V Uref*) ergeben sich Urefi mit Werten 0.5, 1.5. 2.5,..., 7.5 V.
●Comparator 0..x liefert 1, Comparator x+1..7 liefert 0
●Der IC 74F148 codiert diesen "Füllstand" in eine 3bit Zahl
3
Analog-Digital-Konverter – Verfahren
http://de.wikipedia.org/wiki/Analog-Digital-Umsetzer http://www.pling.org.uk/cs/dad.html
●
Successive Approximation/Tracking ADC
Funktion:
●Das Verfahren entspricht dem Algorithmus der binären Suche.
●Die Bitwertigkeit bezogen auf den maximal darstellbaren Wert in einem Integer wird auf die Referenzspannung angewandt.
●Begonnen wird mit dem höchstwertigen Bit, es entspricht der halben Referenz- spannung
●Ist Ux größer als Uref wird das Bit 1, sonst 0
●Das Bit kann jetzt seriell gesendet werden
●In den nächsten Takten werden die nächs- ten Referenzspannungen aus den bereits gebildeten Bits und der globalen Refe- renzspannung gebildet und ebenso ver- fahren.
Funktion:
●Das Verfahren entspricht dem Algorithmus der binären Suche.
●Die Bitwertigkeit bezogen auf den maximal darstellbaren Wert in einem Integer wird auf die Referenzspannung angewandt.
●Begonnen wird mit dem höchstwertigen Bit, es entspricht der halben Referenz- spannung
●Ist Ux größer als Uref wird das Bit 1, sonst 0
●Das Bit kann jetzt seriell gesendet werden
●In den nächsten Takten werden die nächs- ten Referenzspannungen aus den bereits gebildeten Bits und der globalen Refe- renzspannung gebildet und ebenso ver- fahren.
4
Funktion des Verfahrens successive approximation,
Wägeverfahrens
2,5
1,25 3,75
8 7 6 5
Bit:
1,862 5
2,17 5
5,0
9
2,22 V
5
Step Bit Digit Udiff Utest U? Usum Bin 1 9 512 2,50000000 2,50000 2,22 0,000000 0 2 8 256 1,25000000 1,25000 2,22 1,250000 1 3 7 128 0,62500000 1,87500 2,22 1,875000 1 4 6 64 0,31250000 2,18750 2,22 2,187500 1 5 5 32 0,15625000 2,34375 2,22 2,187500 0 6 4 16 0,07812500 2,26563 2,22 2,187500 0 7 3 8 0,03906250 2,22656 2,22 2,187500 0 8 2 4 0,01953125 2,20703 2,22 2,207031 1 9 1 2 0,00976563 2,216797 2,22 2,216797 1 10 0 1 0,00488281 2,221680 2,22 2,216797 0
Σmaxmax1023 Digit 454
U digit 2,22
6
Erzeugung der Referenzspannungen
http://www.avr-asm-tutorial.net/avr_de/avr_dac.html
http://www.dieelektronikerseite.de/Lections/R2R-Netzwerke
%20-%20Magische%20Wandlung.htm
Über ein Widerstandsnetzwerk werden Digitalwerte in analoge Ausgangsspan- nungen umgewandelt.
Vorteile: sehr schnelle Wandlung, einfa- cher Schaltungsaufbau
Nachteile: Genauigkeit ist sehr stark von der Güte der Widerstände abhängig,
Es werden viele Prozessorpins benötigt, ev. Porterweiterung via I²C verwenden.
Es werden viele Widerstände benötigt (Widerstandsgrab)
Über ein Widerstandsnetzwerk werden Digitalwerte in analoge Ausgangsspan- nungen umgewandelt.
Vorteile: sehr schnelle Wandlung, einfa- cher Schaltungsaufbau
Nachteile: Genauigkeit ist sehr stark von der Güte der Widerstände abhängig,
Es werden viele Prozessorpins benötigt, ev. Porterweiterung via I²C verwenden.
Es werden viele Widerstände benötigt
(Widerstandsgrab)
7
0 0000 0,01 1 0001 0,5 2 0010 0,72 3 0011 1,22 4 0100 1,3 5 0101 1,79 6 0110 2,02 7 0111 2,51 8 1000 2,46 9 1001 2,96 10 1010 3,18 11 1011 3,67 12 1100 3,76 13 1101 4,25 14 1110 4,47 15 1111 4,97
0 0000 0,01 1 0001 0,5 2 0010 0,72 3 0011 1,22 4 0100 1,3 5 0101 1,79 6 0110 2,02 7 0111 2,51 8 1000 2,46 9 1001 2,96 10 1010 3,18 11 1011 3,67 12 1100 3,76 13 1101 4,25 14 1110 4,47 15 1111 4,97
Versuchsaufbau R2R DAC
8
10K/4,7K 5% 100K/50K, 1%
Value Diff. Value Diff.
0 0000 0,01 0
1 0001 0,5 0,49 0,29 0,29
2 0010 0,72 0,22 0,58 0,29
3 0011 1,22 0,5 0,87 0,29
4 0100 1,3 0,08 1,17 0,3
5 0101 1,79 0,49 1,47 0,3
6 0110 2,02 0,23 1,75 0,28
7 0111 2,51 0,49 2,04 0,29
8 1000 2,46 -0,05 2,35 0,31
9 1001 2,96 0,5 2,64 0,29
10 1010 3,18 0,22 2,93 0,29
11 1011 3,67 0,49 3,21 0,28
12 1100 3,76 0,09 3,51 0,3
13 1101 4,25 0,49 3,8 0,29
14 1110 4,47 0,22 4,09 0,29
15 1111 4,97 0,5 4,38 0,29
10K/4,7K 5% 100K/50K, 1%
Value Diff. Value Diff.
0 0000 0,01 0
1 0001 0,5 0,49 0,29 0,29
2 0010 0,72 0,22 0,58 0,29
3 0011 1,22 0,5 0,87 0,29
4 0100 1,3 0,08 1,17 0,3
5 0101 1,79 0,49 1,47 0,3
6 0110 2,02 0,23 1,75 0,28
7 0111 2,51 0,49 2,04 0,29
8 1000 2,46 -0,05 2,35 0,31
9 1001 2,96 0,5 2,64 0,29
10 1010 3,18 0,22 2,93 0,29
11 1011 3,67 0,49 3,21 0,28
12 1100 3,76 0,09 3,51 0,3
13 1101 4,25 0,49 3,8 0,29
14 1110 4,47 0,22 4,09 0,29
15 1111 4,97 0,5 4,38 0,29
9
Analog-Digital-Konverter (ADC) des Atmega
Auflösung 10 bit (0..1023)
6 Kanäle (Multiplexer) ADC0 (PC0)..ADC5 (PC5) Bis zu 15000 Samples / s
Verschiedene Referenzspannungen
intern/extern, max. Vcc 2.56 V
Verfahren: successive approximation, Wägeverfah- ren (http://de.wikipedia.org/wiki/Analog-Digital-Umsetzer)
Eingang ist sehr hochohmig.
Auflösung 10 bit (0..1023)
6 Kanäle (Multiplexer) ADC0 (PC0)..ADC5 (PC5) Bis zu 15000 Samples / s
Verschiedene Referenzspannungen
intern/extern, max. Vcc 2.56 V
Verfahren: successive approximation, Wägeverfah- ren (http://de.wikipedia.org/wiki/Analog-Digital-Umsetzer)
Eingang ist sehr hochohmig.
10
Analog-Digital-Konverter (ADC)
●
Messspannung wird während der Wandlung kon- stant gehalten (sample and hold)
●
Interrupt ist nach erfolgter Wandlung möglich
●
Free running mode (zykische Wiederholung der Messung)
●
Eigener Takt - aus Systemtakt hergeleitet
●
links-/rechtsbündige Darstellung des Ergebnisses
●
Messspannung wird während der Wandlung kon- stant gehalten (sample and hold)
●
Interrupt ist nach erfolgter Wandlung möglich
●
Free running mode (zykische Wiederholung der Messung)
●
Eigener Takt - aus Systemtakt hergeleitet
●
links-/rechtsbündige Darstellung des Ergebnisses
rechts 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1
0 Für 10 bitlinks 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0
0Für 8 bitADCH ADCL
ADCW
11
Steuerregister ADMUX
REFS1 REFS0 ADLAR leer MUX3 MUX2 MUX1 MUX0 REFS1 REFS0 ADLAR leer MUX3 MUX2 MUX1 MUX0
REFS1 REFS0 Referenz
0 0 externe Referenz
0 1 interne Referenz: Avcc
1 0 wird beim Mega8 nicht benutzt 1 1 interne Referenz: 2.56 Volt REFS1 REFS0 Referenz
0 0 externe Referenz
0 1 interne Referenz: Avcc
1 0 wird beim Mega8 nicht benutzt 1 1 interne Referenz: 2.56 Volt
MUX3 MUX2 MUX1 MUX0 Kanal
0 0 0 0 Kanal 0, Pin PC0
0 0 0 1 Kanal 1, Pin PC1
0 0 1 0 Kanal 2, Pin PC2
0 0 1 1 Kanal 3, Pin PC3
0 1 0 0 Kanal 4, Pin PC4
0 1 0 1 Kanal 5, Pin PC5
0 1 1 0
0 1 1 1
1 1 1 0 1.23V, Vbg
1 1 1 1 0V, GND
MUX3 MUX2 MUX1 MUX0 Kanal
0 0 0 0 Kanal 0, Pin PC0
0 0 0 1 Kanal 1, Pin PC1
0 0 1 0 Kanal 2, Pin PC2
0 0 1 1 Kanal 3, Pin PC3
0 1 0 0 Kanal 4, Pin PC4
0 1 0 1 Kanal 5, Pin PC5
0 1 1 0
0 1 1 1
1 1 1 0 1.23V, Vbg
1 1 1 1 0V, GND
ADLAR:
Ausrichtung des Ergebnisses 0: rechtsbündig 10 bit (2
Byte)
1: linksbündig 8 bit (1 Byte) ADLAR:
Ausrichtung des Ergebnisses 0: rechtsbündig 10 bit (2
Byte)
1: linksbündig 8 bit (1 Byte)
Bei verwandten Prozessoren steht auch MUX4 zur Verfü- gung, es können verschiede- ne Verstärkungen des Ein- gangssignals eingestellt wer- den und Spannungsdiffreren- zen gemessen werden.
Die interne Referenzspan- nung beträgt, je nach Prozes- sor 2.56 V oder 1.1 V (Ardui- no UNO mit AtMega832!).
Bei verwandten Prozessoren steht auch MUX4 zur Verfü- gung, es können verschiede- ne Verstärkungen des Ein- gangssignals eingestellt wer- den und Spannungsdiffreren- zen gemessen werden.
Die interne Referenzspan- nung beträgt, je nach Prozes- sor 2.56 V oder 1.1 V (Ardui- no UNO mit AtMega832!).
12
Steuerregister ADCSRA
ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
1:ADC on 0:ADC off
1:ADC start fällt bei beendeter
Messung zurück auf 0
1: Free Running
(fortlaufende Messung)
Interrupt Bit
Interrupt 1: enable 0: disable
Vorteiler
ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
1:ADC on
0:ADC off 1:ADC start fällt bei beendeter
Messung zurück auf 0
1: Free Running
(fortlaufende Messung)
Interrupt
Bit Interrupt 1: enable 0: disable
Vorteiler
ADPS2 ADPS1 ADPS0 Vorteiler
0 0 0 2
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
ADPS2 ADPS1 ADPS0 Vorteiler
0 0 0 2
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
der ADC benötigt eine interne Taktfrequenz von 50 ..200 KHz.
Diese wird mittels des Vorteilers im Bereich zw. 40..160 gebildet (s.o. re.) Der Vorteiler wird nun zwischen 40 und 160 ausgewählt.
Möglich: 64 oder 128, gewählt 64
der ADC benötigt eine interne Taktfrequenz von 50 ..200 KHz.
Diese wird mittels des Vorteilers im Bereich zw. 40..160 gebildet (s.o. re.) Der Vorteiler wird nun zwischen 40 und 160 ausgewählt.
Möglich: 64 oder 128, gewählt 64
Teilungsfaktor_min = Taktfrequenz / 200 kHz = 8000000 Hz/ 200000 Hz = 40
Teilungsfaktor_max = Taktfrequenz / 50 kHz = 8000000 Hz / 50000 Hz =160
Teilungsfaktor_min = Taktfrequenz / 200 kHz = 8000000 Hz/ 200000 Hz = 40
Teilungsfaktor_max = Taktfrequenz / 50 kHz = 8000000 Hz / 50000 Hz =160
13
ADCW, ADCH / ADCL
●
Ergebnis liegt in ADCH/ADCL
●
Bei linksbündigem Ergebnis (8bit) liegt das Ergebnis in ADCH, ansonsten in Assemblersprache erst ADCL,
dann ADCH lesen; eine Sperrlogik sperrt das Datenre- gister für den ADC, wenn ADCL gelesen wurde, bis auch ADCH gelesen worden ist. Unter C, ADCW lesen.
●
Das Lesen von ADCH entsperrt das Datenregister für den ADC.
●
Ein Ergebnis liegt vor, wenn ADSC im Register ADCSRA wieder 0 ist oder ein Interrupt ausgelöst worden ist.
●
Interruptvektor ADC_vect
●
Ergebnis liegt in ADCH/ADCL
●
Bei linksbündigem Ergebnis (8bit) liegt das Ergebnis in ADCH, ansonsten in Assemblersprache erst ADCL,
dann ADCH lesen; eine Sperrlogik sperrt das Datenre- gister für den ADC, wenn ADCL gelesen wurde, bis auch ADCH gelesen worden ist. Unter C, ADCW lesen.
●
Das Lesen von ADCH entsperrt das Datenregister für den ADC.
●
Ein Ergebnis liegt vor, wenn ADSC im Register ADCSRA wieder 0 ist oder ein Interrupt ausgelöst worden ist.
●
Interruptvektor ADC_vect
14
Vorbereiten des ADC (ohne Interrupt)
/*****************************************************************************
Initialisierung des ADC für - Einzelmessung
- 8 Mhz (Vorteiler 64)
- rechtsbündiges Ergebnis (10 bit)
*****************************************************************************/
// Den ADC aktivieren und Teilungsfaktor auf 64 stellen ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) ; // Kanal des Multiplexers waehlen
ADMUX = channel; // channel = 0..5 (PC0 .. PC5) // Den ADC initialisieren und einen sog. Dummyreadout machen ??
ADCSRA |= (1<<ADSC); // ADC starten
while(ADCSRA & (1<<ADSC)); // Warten, bis fertig
/*****************************************************************************
Initialisierung des ADC für - Einzelmessung
- 8 Mhz (Vorteiler 64)
- rechtsbündiges Ergebnis (10 bit)
*****************************************************************************/
// Den ADC aktivieren und Teilungsfaktor auf 64 stellen ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) ; // Kanal des Multiplexers waehlen
ADMUX = channel; // channel = 0..5 (PC0 .. PC5) // Den ADC initialisieren und einen sog. Dummyreadout machen ??
ADCSRA |= (1<<ADSC); // ADC starten
while(ADCSRA & (1<<ADSC)); // Warten, bis fertig
15
Messung mit ADC
// Jetzt 3x die analoge Spannung and Kanal channel // auslesen und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC); // start ADC
// solange ADCS (ADC start) gesetzt ist, // arbeitet der ADC (very busy)
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
// ADC wieder deaktivieren ADCSRA &= ~(1<<ADEN);
result /= 3;
// Jetzt 3x die analoge Spannung and Kanal channel // auslesen und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC); // start ADC
// solange ADCS (ADC start) gesetzt ist, // arbeitet der ADC (very busy)
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
// ADC wieder deaktivieren ADCSRA &= ~(1<<ADEN);
result /= 3;
Leeranweisung ;
Assemblerbeispiel unter
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
16
Darstellung von Ergebniswerten
char buffer[16];
Vin = wadc * 50 / 1024;
itoa(Vin/10, buffer, 10);
lcd_puts(buffer);
lcd_putc('.');
itoa(Vin%10, buffer, 10);
lcd_puts(buffer);
char buffer[16];
Vin = wadc * 50 / 1024;
itoa(Vin/10, buffer, 10);
lcd_puts(buffer);
lcd_putc('.');
itoa(Vin%10, buffer, 10);
lcd_puts(buffer);
Vin = wadc * 50 / 1024;
sprintf(buffer,"%1u.%1u",Vin/10,Vin%10);
lcd_puts(buffer);
Vin = wadc * 50 / 1024;
sprintf(buffer,"%1u.%1u",Vin/10,Vin%10);
lcd_puts(buffer);
17
Analogcomparator
●
Vergleicht die Spannungen an AIN0 (+,PD6) und AIN1 (-,PD7)
●
An Stelle der Spannung an AIN0 kann auch eine interne Referenzspannung konfiguriert werden (1,15V..1,40V, typisch 1,23V)
●
An Stelle der Spannung an AIN1 kann auch der Multiplexer des ADC angeschlossen
werden (SFIOR, Bit ACME=1 und ADCSRA, Bit ADEN=0)
●
Vergleicht die Spannungen an AIN0 (+,PD6) und AIN1 (-,PD7)
●
An Stelle der Spannung an AIN0 kann auch eine interne Referenzspannung konfiguriert werden (1,15V..1,40V, typisch 1,23V)
●
An Stelle der Spannung an AIN1 kann auch der Multiplexer des ADC angeschlossen
werden (SFIOR, Bit ACME=1 und ADCSRA,
Bit ADEN=0)
18
Comparator Steuerregister
ACSR (Analog Comparator Control And Status Register)
Bit: 7 6 5 4 3 2 1 0
Name: ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
Bit Name Beschreibung 7 ACD
1: Analog Comparator disable 0: Analog Comparator enable 6 ACBG
1: bandgap 1.15..1.4V
0: Vergleichsspannung an AIN0 5 ACO Comparator output
4 ACI Comparator Interrupt flag 3 ACIE Comparator Interrupt enable
2 ACIC 1: verbindet ACO mit Capture von Timer 1 1 ACIS1
00:Interrupt bei Wechsel von ACO 01: reserviert
0 ACIS0
10: Interrupt bei fallender Flanke 10: Interrupt bei steigender Flanke Bit Name Beschreibung
7 ACD
1: Analog Comparator disable 0: Analog Comparator enable 6 ACBG
1: bandgap 1.15..1.4V
0: Vergleichsspannung an AIN0 5 ACO Comparator output
4 ACI Comparator Interrupt flag 3 ACIE Comparator Interrupt enable
2 ACIC 1: verbindet ACO mit Capture von Timer 1 1 ACIS1
00:Interrupt bei Wechsel von ACO 01: reserviert
0 ACIS0
10: Interrupt bei fallender Flanke
10: Interrupt bei steigender Flanke
19
Anwendungsbeispiel ADC mit Comparator
(http://www.scienceprog.com/adc-on-avr-using-on-chip-comparator/)
Funktion:
●Funktioniert nach dem Prinzip des Sägezahngenerators.
●Ladekurve des C bildet den Zahn
●Ist nicht ganz linear, zw. 0..2,5V aber wohl hinnehmbar
●Ladezeit des C auf 2.5V 720µs
●Entladung erfolgt über 200 Ohm Widerstand und Portpin (OutPut: 0)
●Für nicht zeitkritische
Temperaturmessungen brauchbar
●Während der Messung wird PD6 als Eingang ohne PullUp konfiguriert und der Timer gestartet.
Funktion:
●Funktioniert nach dem Prinzip des Sägezahngenerators.
●Ladekurve des C bildet den Zahn
●Ist nicht ganz linear, zw. 0..2,5V aber wohl hinnehmbar
●Ladezeit des C auf 2.5V 720µs
●Entladung erfolgt über 200 Ohm Widerstand und Portpin (OutPut: 0)
●Für nicht zeitkritische
Temperaturmessungen brauchbar
●Während der Messung wird PD6 als Eingang ohne PullUp konfiguriert und der Timer gestartet.
20
2. Variante
Transistor beseitigt Nichtlinearität, verlängert aber die Ladezeit
Achtung ! pnp-Transistor