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 den C Cin die Lage, Messwerte von analogen Quellen einzulesen und diese dann digital zu verarbeiten Amplitude (zugeordneter Binärwert) 0111 0010 abgetastete Messgröße analoge Messgröße 0100 1010 0 T s 2T s 3T s t ADC im ATmega128 ADC Control and Status Register(ADCSR) ADC data register (ADCH/ADCL) Data Bus Successive approximation logic 10-bit DAC ADC multiplexer select(admux) 8- Channel Mux Analog inputs 2
Successive Approximation (Prinzip) Successive Approximation Register (SAR) Digital-Analog- Wandler U e analoge Messgröße Komparator zugeordneter Binärwert Successive Approximation (Komparator) Successive Approximation Register (SAR) Digital-Analog- Wandler U e Messgröße Komparator zugeordneter Binärwert 3
Komparator U B U e U ref U a U a U für U U U für U U B e ref B e ref Ue U B Ua U ref t Successive Approximation (Digital-Analog-Wandler) Successive Approximation i Register (SAR) Digital-Analog- Wandler U e Messgröße Komparator zugeordneter Binärwert 4
DAC: Digital-Analog-Wandler (Prinzip) U 2 I 2 invertierender Summierer U 1 U I 1 0 I 0 I I I 2 1 0 1 1 Ua U2 U1 U0 2 4 Beispiel für: UH 5V 1 1 U b U b U b U 2 4 a 2 H 1 H 0 H binary Input analog Output b 2 b 1 b 0 U a / V 0 0 0 0,00 0 0 1-1,25 0 1 0-2,50 0 1 1-3,75 1 0 0-5,00 1 0 1-6,25 1 1 0-7,50 1 1 1-8,75 Successive Approximation (Wandlungsvorgang) Successive Approximation Register (SAR) MSB Digital-Analog- Wandler U ref U e Messgröße Komparator zugeordneter Binärwert 5
Wandlungsvorgang Beginnend bei MSB: 1. Bit in SAR auf 1 (alle niederwertigeren Bits=0) 2. DAC erzeugt aus Wert in SAR Referenz-Spannung U ref für Komparator 3. Uref Ue Bit in SAR wird auf 0 gesetzt Uref Ue Bit in SAR bleibt 1 4. nächstes Bit und mit 1.... 4. weiter bis alle n Bit-Werte t bestimmt sind 5. binären Wert in Register SRG speichern und nächste Wandlung beginnen U 1. Wert in SAR 1000 0100 0110 U ref 3. U 2. e 0101 1000 1100 1010 1011 U ref U 0 1 0 0 1 0 1 1 Ergebnis 1. Wandlung e U e U ref Ergebnis 2. Wandlung Beispiel für 4 Bit Free Running Modus (Timing-Diagramm) ab hier wird U e ü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 den C Cin die Lage, Messwerte von analogen Quellen einzulesen und diese dann digital zu verarbeiten Amplitude (zugeordneter Binärwert) 0111 0010 0100 1010 abgetastete Messgröße analoge Messgröße f s 1 T s 0 T s 2T s 3T s t Eigenschaften (unvollständig) AD-Wandler auf Basis des Successive Approximation Verfahrens Messgenauigkeit: 10 Bit bzw. 8 Bit Art der Messung: - programmgesteuerter g Start jeder einzelnen Messung (single 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: f s durch Prescaler einstellbar - für 10 Bit Genauigkeit f s =50... 200kHz - für geringere Genauigkeit f s > 200kHz möglich 8
Blockschaltbild (vereinfacht) ADC Control and Status Register(ADCSR) ADC data register (ADCH/ADCL) Data Bus Successive approximation logic 10-bit DAC ADC multiplexer select(admux) 8- Channel Mux Analog inputs 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 U e >= U ref*, 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 *U ref 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 ended: Messung Input-Pin gegen 0V Wandlungsergebnis: Ue 1024 ADC U ref Ausschnitt: vollständige Tabelle siehe Datenblatt Differential: Messung positives Input-Pin gegen negatives Input-Pin Wandlungsergebnis: ( Upos Uneg ) Gain512 ADC U ref 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 durch Schreiben einer 1 (!) auf das Flag) 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 f osc ADC-Takt f ADC 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 fadc erste Messung nach Einschalten des (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 1 fadc fosc fs 1 13 13 NPr escaler 13 f ADC 1 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 durch Schreiben einer 1 (!) auf das Flag) 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 (binär) Bemerkung ADMUX REFS1:REFS0 01 Spannungsreferenz Uref intern Vcc ADLAR 0 Wandler-Ergebnis rechtsbündig MUX4... MUX0 00000 Kanal ADC0, single ended ADCSRA ADEN 1 ADC einschalten ADSC 1 Start Conversion ADFR 1 free running ADPS2... ADPS0 111 NPrescaler=128 Default x x Abtastfrequenz: 6 fadc fcpu Pr 10 Hz f s 600Hz 13 N escaler 13 128 13 15