ADC w AVR.docx

(143 KB) Pobierz

 

Przetwornik ADC w AVR

Parametry:
- rozdzielczość 10-bit
- nieliniowość 0,5 LSB
- czas konwersji 65-260us
- do 15kSPS przy najwyższej rozdzielczości
- 8 kanałów wejściowych
- 7 wejść różnicowych
- 2 wejścia różnicowe ze wzmocnieniem 10x i 200x(1)
- 0-Vcc zakres napięć wejściowych
- 2,56V wewnętrzne źródło napięcia odniesienia
- praca ciągła lub pojedyncza konwersja
- przerwanie po przetworzeniu
- tryb uśpienia z redukcją szumów

(1) – ta cecha jest możliwa do pracy tylko w układach w obudowie TQFP i MLF

10-bit przetwornik działający na zasadzie sukcesywnej aproksymacji jest połączony z 8-kanałowym analogowym multiplekserem wejściowym dołączonym do portu PORT A. Przetwornik posiada również 16 różnicowych wejść . Dwa z tych wejść (ADC1, ADC0 i ADC3, ADC2) posiadają programowane wzmocnienie z krokiem 0dB (1x), 20dB(10x), lub 46dB(200x). 7 różnicowych  analogowych wejść . Jako wejście ujemne może by wykorzystane 7 wejść , reszta jako dodatnie.
Ustawienie wzmocnienia na 1x lub 10x zmniejsza rozdzielczość do 8-bitów, przy 200x do 7-bitów. Przetwornik posiada niezależne napięcie zasilające AVCC. Napięcie to nie może się różnic wicej ni +0,3V od Vcc. Wewnętrzne źródło odniesienia wynosi 2,56V lub Vcc. Może być równie dostarczone z zewnątrz do końcówki AREF przez kondensator dla lepszej filtracji szumów.

http://atmega32.republika.pl/22.htm1.gif

 

Działanie:
Przetwornik dokonuje konwersji wejściowego napięcia analogowego na 10 bitową wartość , metod sukcesywnej aproksymacji (kolejnego przybliżenia). Posiada wejściowy układ próbkująco - pamiętający. Minimalna wartość odpowiada GND (0V) a maksymalna AREF minus 1LSB. (najmłodszy bit). Dodatkowo AVCC lub wewnętrzne 2,56V może być dołączone do wejścia AREF przez ustawienie bitu REFSn w rejestrze ADMUX. Do wewnętrznego napięcia odniesienia dołącza się kondensator w celu redukcji szumów.

Wejścia analogowe i różnicowe są wybierane przez bity MUX rejestru ADMUX. Każde z wejść różnicowych może być wybrane jako wejście ujemne lub dodatnie wewnętrznego wzmacniacza. Wewnętrzny wzmacniacz jest pominięty w przypadku wybrania pojedynczych wejść. 

Przetwornik ADC uaktywnia się przez ustawienie bitu ADEN w rejestrze ADCSRA. Przed ustawieniem tego bitu źródło napięcia odniesienia i wybranie kanałów wejściowych nie będzie aktywne. ADC nie pobiera prądu, jeżeli jest nieaktywny (ADEN=0), stąd zaleca się jego wyłączenie przed wprowadzeniem procesora w tryb uśpienia.

Wynik konwersji przedstawiony jest w postaci 10 bitowej w rejestrach ADCH i ADCL. Normalnie wynik jest umieszczony w rejestrach od prawej strony, ale ustawienie bitu ADLAR w rejestrze ADMUX przesuwa wynik na lew stronę. Jeśli wynik jest dostosowany od lewej strony i nie jest wymagana rozdzielczość ponad 8-bit wystarczy odczytać wynik z rejestru ADCH. Inaczej rejestr ADCL musi być odczytany jako pierwszy, następny ADCH. Jedno odczytanie ADCL blokuje dostęp ADC do rejestrów danych. To oznacza, że gdy ADCL i następnie ADCH jest czytane zanim konwersja zostanie dokonana, żaden z rejestrów nie jest uaktualniony i rezultat konwersji jest nieprawidłowy. Gdy ADCH jest odczytywane dostęp ADC do rejestrów ADCL i ADCH jest uaktywniony. Przetwornik ADC posiada własne przerwanie które może być wyzwolone po dokonaniu konwersji. Przerwanie będzie wyzwalane nawet gdy nieprawidłowy odczyt z rejestrów ADCL i ADCH odbędzie się zanim przetwornik dokona konwersji. 


Rozpoczęcie konwersji:
Pojedyncza konwersja rozpoczyna się przez ustawienie bitu startu konwersji ADSC. Bit ten jest w stanie wysokim tak długo jak przetwornik przetwarza i kasowany jest sprzętowo po zakończonej konwersji. Jeżeli wyjścia ustawi się jako różnicowe w trakcie pracy przetwornika, to wynik będzie dotyczył stanu wejść przed tą zmianą. Przetwarzanie może być wyzwalane automatycznie. Osiąga się to przez ustawienie bitu ADATE w rejestrze ADCSRA. Wybór źródła konwersji następuje po ustawieniu bitu ADTS w rejestrze SFIOR. Gdy pojawi się dodatni impuls na wybranym sygnale wyzwalającym, preskaler ADC jest zerowany i rozpoczyna się konwersja. Jest to przetwarzanie ze stałym odstępem (czasu). Jeżeli sygnał wyzwalający jest wciąż w stanie wysokim, przetwornik po dokonaniu konwersji nie zacznie przetwarza ponownie. Jeżeli dodatni (narastający) impuls pojawi się na sygnale wyzwalającym podczas konwersji impuls ten zostanie zignorowany. Flaga przerwania zostaje ustawiona nawet gdy przerwania dla przetwornika są nie aktywne i globalny system przerwań jest wyłączony. Konwersja może zachodzić bez inicjacji przerwania. Flaga przerwania musi być wyzerowana do wyzwolenia nowej konwersji przy następnym przerwaniu. Wybranie Flagi przerwań przetwornika ADC jako źródła wyzwalania umożliwia rozpoczęcie nowej konwersji po zakoączeniu bieżcej. ADC pracuje wtedy w trybie Free Running, stale uaktualniając rejestry z wynikiem. Pierwsza konwersja musi być zapoczątkowana przez wpisanie jedynki do bituADSC w rejestrze ADCSRA. W tym trybie ADC dostarcza wyników przetwarzania niezależnie od ustawienia bitu przerwa ADIF. Rozpoczęcie pracy przetwornika w trybie automatycznego wyzwalania zostanie osiągnięte przez ustawienie bitu ADSC w rejestrze ADCSRA. Bit ten może być również wykorzystany do determinowania pracy przetwornika. Układ sukcesywnej aproksymacji w pełnej rozdzielczości, wymaga taktowania sygnałem o częstotliwości między 50kHz a 200kHz. Przy rozdzielczości poniżej 10-bit częstotliwość może wynosi ponad 200kHz. ADC zawiera preskaler generujący sygnał taktujący o częstotliwości akceptowanej przez przetwornik dla każdej częstotliwości systemowej procesora wyższej od 100kHz . Jest on ustawiany przez bity ADPS rejestru ADCSRA. Preskaler zaczyna pracę w momencie uaktywnienia przetwornika ADC przez wpisanie jedynki do ADEN w rejestrzeADCSRA. Preskaler działa tak długo, jak bit ADEN jest ustawiony i ciągle zerowany gdy ADEN jest w stanie niskim.

Prescaler przetwornika ADC

http://atmega32.republika.pl/22.htm3.gif

Po ustawieniu bitu ADSC w ADCSRA pojedyncza konwersja rozpoczyna się w narastającym zboczu cyklu zegarowego przetwornika ADC. Czas normalnego przetwarzania wynosi 13 cykli przetwornika ADC. Pierwsza konwersja po uruchomieniu przetwornika (ADEN=1 w ADCSRA) trwa 25 cykli.Układ próbkująco - pamiątajcy S&H potrzebuje 13,5 cykli po rozpoczęciu przetwarzania w normalnej konwersji i 13,5 cykli ADC po starcie pierwszej konwersji. Gdy przetwarzanie jest zakoączone wynik jest wpisywany do rejestrów danych ADC a bit ADIF jest ustawiany. W trybie pojedynczego przetwarzania ADSC zostaje jednocześnie wyzerowany. ADSC może by programowo ponownie ustawiony, co rozpocznie ponownie konwersj w narastającym zboczu impulsu zegarowego ADC. W trybie auto – wyzwalania preskaler jest zerowany automatycznie gdy pojawia się sygnał wyzwalający przetwornik. Próbkowanie i pamiętanie pobiera 2 cykle po narastającym zboczu sygnału wyzwalającego. Dodatkowe 3 cykle systemowe CPU są przeznaczone dla synchronizacji. Tryb auto – wyzwalania potrzebuje 25 cykli na każde przetworzenie, ponieważ ADC musi by wyłączony i włączony ponownie po przetworzeniu. W trybie Free Running nowa konwersja zostanie rozpoczęta natychmiast po zakończeniu poprzedniej podczas gdy ADSCpozostaje w stanie wysokim.

Czasy konwersji

http://atmega32.republika.pl/22.htm16.gif

Przebieg czasowy pierwszej konwersji ( tryb pojedynczej konwersji)

http://atmega32.republika.pl/22.htm4.gif

Przebieg czasowy pojedynczej konwersji.

http://atmega32.republika.pl/22.htm5.gif

Tryb “Free Running Mode” przebieg czasowy

http://atmega32.republika.pl/22.htm7.gif

Wejścia różnicowe:

Różnicowa konwersja jest zsynchronizowana z wewnętrznym zegarem CKADC2 równy połowie zegara przetwornika ADC. Synchronizacja jest dokonywana automatycznie. Konwersja inicjowana jest przez użytkownika (np. przy pojedynczym przetwarzaniu i przy pierwszym uruchomieniu w trybie Free Running) podczas gdy CK ADC2 jest w stanie niskim, będzie zajmowała tak samą ilość czasu jak pojedyncza - zakończona konwersja. (13 cykli ADC). Konwersja zainicjowana przez użytkownika gdy CKADC2 jest w stanie wysokim będzie zajmować 14 cykli zegara ADC. W trybie Free Running ponowne przetwarzanie jest zainicjowane natychmiast po poprzednim i odkąd CKADC2 jest w tym czasie w stanie wysokim konwersja ta zajmuje 14 cykli ADC. Wzmocnienie jest optymalne w paśmie do 4kHz dla wszystkich wartości. Przy wyższych częstotliwościach wzmocnienie będzie nieliniowe. Gdy mierzony sygnał posiada wyższe harmoniczne powinno się stosować zewnętrzne filtry dolnoprzepustowe. Częstotliwość taktowania przetwornika jest niezależna od poziomu wzmocnienia. Np. czas przetwarzania ADC może wynosić 6us i prędkość przetwarzania osiągnie 12 kSPS bez względu na pasmo przenoszenia dla tego kanału. Jeżeli używane są kanały różnicowe i przetwornik uruchomiony jest przez auto – wyzwalanie, musi być on wyłączony przed konwersją . Preskaler zeruje się wtedy przed rozpoczęciem przetwarzania.

 

 

 

Zmiana kanału lub wybór źródła odniesienia:


Bity MUXn i REFS1:0 w rejestrze ADMUX są pojedynczo buforowane przez rejestr pomocniczy, do którego CPU ma dostęp swobodny. Ich stan jest uaktualniany podczas rozpoczynania przetwarzania. Wybór kanału i odniesienia jest zablokowane podczas przetwarzania dla zapewnienia dostatecznego czasu do pomiaru. Przetwarzanie rozpoczyna się w narastającym cyklu zegara ADC po wpisie do ADSC. Jeśli ADATE i ADEN są ustawiane, przerwanie może wystąpić w dowolnej chwili. Jeśli w tym czasie rejestr ADMUX jest zmieniany, nie da się przewidzieć czy konwersja jest dokonana na starych czy nowych ustawieniach. ADMUX może być bezpiecznie modyfikowany zgodnie z procesem:
1. Gdy ADATE lub ADEN są wykasowane.
2. podczas konwersji, minimum jeden cykl ADC po pojawieniu się zbocza wyzwalającego.
3. Po konwersji, przed wyzerowaniem flagi przerwania.
Zmiana ADMUX jedną z tych metod spowoduje, że nowe ustawienia będą dotyczyć następnej konwersji. Należy uważnie postępować przy zmianie kanałów różnicowych. Przy wybranym jednym kanale różnicowym, stan ustabilizowania się nowej wartości może trwać ponad 125 us. Proces przetwarzania nie powinien być uruchomiony przed czasem 125 us od wybrania nowego kanału różnicowego. Taki sam okres czasu należy przyjąć przy pierwszej konwersji różnicowej, po zmianie źródła odniesienia (przez zmian bitów REFS1:0 w rejestrze ADMUX).


Kanały wejściowe ADC:
W trybie pojedynczego przetwarzania zawsze należy ustalać kanał wejściowy przed rozpoczęciem przetwarzania. Kanał może być wybrany w jeden takt zegara ADC po wpisie jedynki do ADSC. Prostą metodą  jest czekanie na zakończenie pierwszej konwersji i wtedy dokonanie zmiany kanału. Jeżeli nowa konwersja zostanie uruchomiona automatycznie, następny wynik będzie skutkiem poprzedniego ustawienia kanału. Gdy przełącza się na kanał różnicowy, wynik pierwszego przetwarzania może być mało dokładny.


Źródło napięcia odniesienia przetwornika ADC:
Wartość źródła napięcia odniesienia (Vref) decyduje o zakresie pomiarowym przetwornika ADC. Gdy napięcie na pojednyczym kanale przekracza Vref, wynikiem będzie 0x3FF. Vref można ustawić jako napięcie zasilające AVCC, wewnętrzne źródło 2,56V, lub dołączone z zewnątrz do końcówki AREF. Wewnętrzne napięcie odniesienia jest wytwarzane z wbudowanego źródła i wzmacniacza. W pozostałych przypadkach zewnętrzna końcówka AREF jest bezpośrednio dołączona do przetwornika ADC. Należy wtedy włączyć kondensator pomiędzy końcówki AREF a masę. Napięcie odniesienia może być też zmierzone przez woltomierz o wysokiej impedancji. Wbudowane źródło odniesienia ma wysoką impedancję i tylko obciążenia pojemnościowe mogą być do niego podłączane. Jeżeli dołącza się stałe napięcie do końcówki AREF, nie można używać pozostałych źródeł, ponieważ będą zwarte do zewnętrznego źródła. Jeżli nie jest używane zewnętrzne napięcie dołączone do końcówki AREF, to można przełączać między AVCC a 2,56V. Wynik pierwszej konwersji po wybraniu źródła może być niedokładny i należy go pominąć . Jeśli ustawione są wejścia różnicowe, to nie powinno wybierać się źródła dołączonego do AVCC.

 

 

 

 


Redukcja szumów w ADC:
Redukcja szumów podczas konwersji w trybie uśpienia redukcji szumów powstających w rdzeniu CPU i urządzeniach we/wy. Układ odszumiania może być używany z redukcją szumów ADC i w trybie Idle. By móc używać tych cech należy:
1. Musi być wybrana pojedyncza konwersja i uaktywnione przerwanie po zakoączonym przetwarzaniu.
2. Wprowadzić tryb redukcji szumów (lub tryb Idle). ADC rozpocznie konwersji gdy CPU będzie zatrzymany.
3. Jeśli nie wystąpi inne przerwania przed zakończeniem przetwarzania, przerwanie ADC będzie wybudza CPU i wykonywa program obsługi przerwania. Jeśli jakie przerwanie obudzi CPU zanim przetwornik zakończy pracę , to przerwanie to będzie wykonane i przerwanie od ADC również będzie wykonane po zakończeniu przetwarzania. CPU pozostanie w stanie aktywnym dopóki nie zostanie wykonana nowa instrukcja Sleep.
ADC nie wyłączy się automatycznie po wprowadzeniu stanu Sleep, Idle i redukcji szumów. Użytkownik powinien wpisać zero do bitu ADEN zanim przejdzie się w tryb obniżonego poboru mocy. Gdy przetwornik pracuje w trybie Sleep i wejścia są ustawione jako różnicowe, to po wyłączeniu i włączeniu przetwornika po wybudzeniu procesora wynik przetwarzania będzie nieprawidłowy.

Analogowe obwody wejściowe:
Źródło sygnału analogowego jest dołączone do ADC z kondensatorem. Źródło musi wysterować kondensator układu S/H przez szeregowy rezystor. Przetwornik może współpracować z sygnałami analogowymi o impedancji poniżej 10kW. Jeśli takie źródło będzie użyte, czas próbkowania będzie nieistotny. Użycie źródła o wyższej impedancji spowoduje wydłużenie czasu próbkowania o czas potrzebny na naładowanie kondensatora S/H. Przy wejściach różnicowych, wymagana jest impedancja źródła poniżej kilkuset kW. W celu uniknięcia zniekształceń najwyższa harmoniczna sygnału powinna być mniejsza od fADC/2. W przeciwnym przypadku należy zastosować filtr dolnoprzepustowy przed wejściem ADC.

http://atmega32.republika.pl/22.htm9.gif

Usuwanie szumów:
Obwody cyfrowe wytwarzaj wewnątrz i na zewnątrz układu zakłócenia EMI mogące mieć wpływ na dokładność pomiaru sygnału analogowego. Jeśli wymagana jest wysoka dokładność poziom zakłóceń można zminimalizować nast pującymi sposobami:
1. Ścieżka sygnału analogowego powinna być jak najkrótsza, poprowadzona obok masy analogowej z dala od ścieżek o wysokiej częstotliwości sygnałów cyfrowych.
2. końcówka AVCC powinna być dołączona do napięcia zasilania Vcc częci cyfrowej przez dolnoprzepustowy filtr LC
3. Użycie funkcji redukcji szumów ADC podczas konwersji 
4. jeśli któraś z końcówek portu ADC służy jako wyjście cyfrowe, podczas konwersji nie należy przełączać jej stanu.
Kompensacja offsetu:
W układ wbudowany jest mechanizm kompensacji napięcia offsetu podczas pomiaru różnicowego poniżej najmłodszego bitu.

http://atmega32.republika.pl/22.htm17.gif

Dokładność :
ADC przetwarza napięcie analogowe liniowo pomiędzy GND a VREF w 2n krokach. Najmniejsza wartość odczytywana jest jako 0, największa 2n-1.
Wynik przetwarzania:
Po zakończeniu przetwarzania (ADIF w stanie wysokim) wynik jest umieszczany w rejestrach ADCL i ADCH.
Przy konwersji prostej wynik jest równy:

http://atmega32.republika.pl/22.htm10.gif

gdzie VIN jest napięciem wejściowym na wybranym wejściu, VREF wybranym źródłem napięcia odniesienia. 0x000 oznacza sygnał wejściowy na poziomie masy, 0x3FF – wejście na poziomie napięcia odniesienia minus 1 LSB.
Przy konwersji różnicowej:

http://atmega32.republika.pl/22.htm11.gif...

Zgłoś jeśli naruszono regulamin