Przetworniki analogowo-cyfrowe (A/C) Przetworniki analogowo-cyfrowe to urządzenia, przetwarzające ciągły analogowy sygnał wejściowy jedno wejście na odpowiadający mu dyskretny cyfrowy sygnał wyjściowy n wyjść binarnych. AVcc napięcie zasilania AGND masa analogowa Vref napięcie odniesienia W procesie konwersji analogowo cyfrowej zachodzi: próbkowanie sygnału (dyskretyzacja w dziedzinie czasu w pionie), kwantowanie sygnału - przeważnie napięcia (dyskretyzacja w poziomie), kodowanie sygnału. Procesy te mogą przebiegać równocześnie lub kolejno. Próbkowanie (kwantowanie czasu) Dokładność procesu próbkowania
Kwantowanie sygnału i kodowanie Zakres przetwarzania: 8 bitów 0-255 10 bitów 0-1023 12 bitów 0-4095 16 bitów 0-65535 Charakterystyka przetwarzania (idealna) Minimalna wartość przetwarzania: Maksymalna wartość przetwarzania: AGND, Vref 1LSB Przykład 1. Dla podanych przetworników wyznaczyć wartość mierzonego napięcia, jeżeli wynik cyfrowy konwersji: ADC=120. Przetwornik n = 8-bitowy, Vref=2,56V U= ADC * Vref / 2 n U=120 * 2,56V / 256 = 1,20V Przetwornik 10-bitowy, Vref=2,56V ADC=120 U= 120 * 2,56V / 1024 = 0,30V
Parametry przetwornika A/C: n liczba bitów, rozdzielczość przetwarzania: q= U/2 n U= Vref - 0 q= Vref/2 n (1LSB), czas przetwarzania, rezystancja wejściowa. Przykład 2. Wyznaczyć rozdzielczość przetworników A/C: Przetwornik 12-bitowy, Vref = 2,56V Rozdzielczość q = 2,56V/4096 = 625µV Przetwornik 12-bitowy, Vref = 4,096 V Rozdzielczość q = 4,096V/4096 = 1mV Przetwornik 10-bitowy, Vref = 2,56V Rozdzielczość q = 2,56V/1024 = 2,5mV (ATmega 16) Przetwornik 10-bitowy, Vref = 2,048V Rozdzielczość q = 2,048V/1024 = 2mV Przetwornik 10-bitowy, Vref = 5V Rozdzielczość q = 5V/1024 = 4,8828125mV Metody przetwarzania analogowo-cyfrowego. Istnieje wiele różnych metod przetwarzania analogowo-cyfrowego różniących się: wartością wielkości przetwarzanego sygnału (chwilowa, średnia), wartością błędu przetwarzania, rozdzielczością, szybkością przetwarzania, kosztami.
Metoda bezpośrednia Metody przetwarzania napięcie czas Pojedyncze całkowanie
Podwójne całkowanie Przetwarzanie z sukcesywną aproksymacją (ATmega 16)
Podsumowanie - własności podstawowych metod przetwarzania A/C
Blok przetwornika A/C w ATmega 16 Mikrokontroler ATmega16 wyposażony jest w 10-bitowy przetwornik ADC z sukcesywną aproksymacją. Uproszczona struktura przetwornika A/C opartego na metodzie SAR: układ próbkująco-pamiętający, komparator analogowy, rejestr aproksymacyjny zawiera wynik konwersji, układ sterowania realizuje algorytm metody SAR, zawiera rejestry sterujące, przetwornik C/A (najczęściej drabinka R-2R), multipleksery analogowe, źródła napięcia odniesienia (referencyjnego), niekiedy oddzielne linie zasilające i masy (w celu eliminacji zakłóceń). Cykl konwersji w tym układzie zaczyna się od pobrania próbki mierzonego napięcia wejściowego i zapamiętania jej w pojemności C. Rejestr aproksymacyjny jest zazwyczaj inicjowany w taki sposób, że ma ustawiony najbardziej znaczący bit MSB, a pozostałe bity wyzerowane. Zawartość rejestru reprezentuje zatem napięcie równe połowie maksymalnego napięcia (zakresu pomiarowego). Wartość ta jest zamieniana przez przetwornik C/A na napięcie i porównywana z napięciem mierzonym. W zależności od wyniku porównania układ sterowania pozostawia najbardziej znaczący bit rejestru niezmieniony napięcie mierzone jest większe od połowy napięcia zakresowego albo go neguje, gdy jest mniejsze. Po określeniu wartości najbardziej znaczącego bitu rejestru aproksymacyjnego przetwornik ustawia w rejestrze kolejny bit i powtarza opisaną wyżej procedurę, aż do ostatniego najmniej znaczącego bitu LSB.
Parametry przetwornika A/C: długość słowa - 10 bitów, czas konwersji - typowo od kilkunastu do kilkudziesięciu ms, rozdzielczość - zależy od napięcia referencyjnego błąd całkowity - około 1,5LSB. Błąd całkowity obejmuje: błąd kwantyzacji (quantization error), błąd przesunięcia zera (zero-offset error), błąd skalowania przetwornika (full-scale error), błąd nieliniowości całkowitej (integral nonlinearity error), błąd nieliniowości różniczkowej (differential nonlinearity error). Idealna charakterystyka 10-bitowego przetwornika A/C z ilustracją błędu kwantyzacji wynikającego z przesunięcia charakterystyki o ½ LSB oraz pasa błędu, w którym ta charakterystyka się mieści.
Struktura bloku przetwornika A/C dla ATmega 16 Zasilanie przetwornika przez pin AVCC. Napięcie zasilające nie może się różnić więcej niż o ±0,3 od VCC. Dla lepszego zabezpieczenia przed szumami z zewnątrz, możliwe jest zasilanie przetwornika przez filtr dolnoprzepustowy LC. Do pinu AREF można podłączyć zewnętrzne napięcie referencyjne (oraz dodatkowy kondensator filtrujący) ADC wyposażony jest w zintegrowane źródło napięcia referencyjnego o wartości 2,56V. ADC podłączony jest do 8 kanałowego multipleksera pozwalającego na przyłączenie ośmiu napięć wejściowych do każdego z pinów portu A. Możliwy jest również pomiar napięcia różnicowego pomiędzy parami wybranych pinów portu A. Tryb ten nie będzie omawiany.
Rejestry funkcyjne przetwornika A/C ADMUX rejestr konfiguracji multipleksera ADC ADCSRA rejestr kontrolny i statusowy przetwornika ADC ADCH/ADCL rejestry danych SFIOR rejestr funkcji specjalnych (bity ADTS0:2) ADMUX REFS1:0 wybór sygnału referencyjnego ADLAR sposób wyrównania wyniku konwersji w rejestrach danych ADCH/ADCL AAADLAR=0 AAADLAR=1 MUX4:0 - wybór kanału (oraz wzmocnienia dla trybu różnicowego).
ADCSRA ADEN - odblokowanie przetwornika; wpisanie 1 włącza przetwornik, 0 wyłącza. ADSC - rozpoczęcie konwersji. W trybie pojedynczego wyzwalania, wpisanie 1 powoduje rozpoczęcie każdej konwersji. W trybie automatycznego wyzwalania, wpisanie jedynki uruchamia ten proces. Tryb automatyczny może być rozpoczęty równocześnie z włączeniem przetwornika, przez wpisanie odpowiedniej wartości do ADCSRA. ADATE - tryb automatycznego wyzwalania. Ustawienie bitu na 1 powoduje włączenie trybu automatycznego wyzwalania konwersji. ADC rozpoczyna konwersję od narastającego zbocza wybranego sygnału wyzwalającego. Źródło wybiera się ustawieniem bitów ADTS w rejestrze SFIOR. ADIF - flaga przerwania ADC. Ten bit jest ustawiany na 1, gdy ADC zakończy konwersję i zaktualizuje rejestr danych konwersji ostatnim wynikiem. Przerwanie związane z zakończeniem jest wykonywane, gdy ustawione są bity ADIE oraz bit I w rejestrze SREG. Flaga jest sprzętowo kasowana przez wykonywanie kodu obsługi przerwania, lub należy kasować programowo przez wpisanie 1. ADIE - Włączenie przerwania ADC. Kiedy bit zostanie ustawiony na 1 i ustawiona jest też flaga I w SREG, to zakończenie konwersji ADC wywoła przerwanie. ADPS2:0 - Bity wyboru preskalera. Przez odpowiednie ustawienie bitów aktywuje się dzielnik częstotliwości kwarcu aby dobrać odpowiedni zegar dla ADC. Dopuszczalny zakres z jakim może pracować to 50-200kHz (więc dla kwarcu 8Mhz będzie to 64 lub 128).
SFIOR ADTS2:0 definiuje źródło automatycznego wyzwalania ADC. Jeśli bit ADATE w rejestrze ADCSRA jest ustawiony, to wartość bitów ADT wskazuje na źródło automatycznego wyzwalania startu przetwarzania ADC. Wyzwalanie następuje na zboczu narastającym źródła. Działanie ADC Aby dokonać pomiaru napięcia należy wykonać następujące kroki: wybrać źródło referencyjne - bity REFS1:REFS0 w ADMUX ustalić sposób justowania wyniku konwersji w lewo lub w prawo - bit ADLAR w ADMUX, wybrać kanał konwersji, ewentualnie wzmocnienie kanału dla trybu różnicowego bity MUX4:0 ADMUX, ustawić podział sygnału zegarowego taktującego konwersją - bity ADSP2:0 w ADCSRA, włączyć przetwornik - bit ADEN i odblokować przerwanie od końca konwersji - bit ADIE w ADCSRA, jeżeli bit ADATE (ADC Auto Triger Enable) w ADCSRA jest wyzerowany, to konwersję rozpoczyna się ustawiając bit ADSC w ADCSRA, konwersja kończy się ustawieniem flagi ADIF w ADCSRA, co generuje przerwanie, wynik konwersji znajduje się w parze rejestrów danych ADCH/ADCL; jego wartość wyraża się wzorem (dla sygnału z pojedynczego wyprowadzenia):
Przebieg czasowy procedury pojedynczej konwersji A/C dla ATmega16 Konwersja rozpoczyna się od pierwszego narastającego zbocza zegara ADC po ustawieniu bitu ADSC przy włączonym przetworniku ustawiony bit ADEN. Normalna konwersja w trybie ciągłym trwa 13 cykli zegara ADC. Pierwsza konwersja wymaga natomiast 25 cykli, z których część potrzebna jest na zainicjowanie analogowej części przetwornika.
Przykładowa konfiguracja przetwornika A/C rd_temp: ldi r17, 0b11100000 ;11-wewn.Vref 2,56V, 1 starsze 8 bitów out ADMUX,r17 ;pomiar z kanału A0 ldi r17, 0b11000110 ;start, 110 dzielnik 64 out ADCSR, r17 ac_bsy: sbis ADCSR, ADIF rjmp ac_bsy sbi ADCSR, ADIF ;pętla do zakończenia konwersji in r16, ADCL ;zapisanie pomiaru AC in r17, ADCH ;przetwornik A/C jest 10-cio bitowy ret ;ale wykorzystuje 8 starszych bitów LM35 czujnik temperatury temperatura mierzona: 0ºC - 150ºC początek: 0ºC = 0mV rozdzielczość: 1ºC = 10mV; 8 starszych bitów (ADCH) całkowite stopnie, najstarszy bit w ADCL pierwsze miejsce dziesiętne -.0 lub.5 (24.5ºC)