Programowanie mikroprocesorów ( mikrokontrolerów )

Przetwornik ADC


1. Podstawowe parametry przetwornika ADC na przykładzie ATmega328P

Podstawowymi parametrami opisującymi przetwornik analogowo-cyfrowy ADC są:

  • Rozdzielczość - najpbardziej obrazowo mówiąc jest to maksymalna możliwa ilość różnych wartości wyjściowych jaką może wystawić przetwornik ADC mikrokontrolera. Np rozdzielczość 8-bit daje możliwość uzyskania 256 różnych stanów (wartości) wyjściowych. Im większa rozdzielczość tym dokładniejszy pomiar możemy uzyskać.
  • Czas konwersji - Jest to czas potrzebny przetrownikowi na uzyskanie pewnego pomiaru. Im krótszy czas konwersji tym można badać przebiegi o wyższych częstotliwościach ( i szybszych zmianach wartości).
  • Ilość wejść analogowych - Ilość wejść analogowych multipleksera które można dołączyć do przetwornika ADC.
  • Rodzaj wejść analogowych - Wejścia analogowe mogą być wejściami różnicowymi lub wejściami nie różnicowymi. Wejścia różnicowe mają dwie nóżki pomiędzy którymi mikrokontroler mierzy napięcie tak więc możemy mierzyć wartości spadków napięć elementów na jakimś potencjale (nie jest wymagane aby jedna z końcówek elementu była podłaczona do masy w przypadku elementów nieliniowych). W przypadku wejść nie różnicowych z (jedną nóżką) pomiar napięcia odbywa się pomiędzy tą nóżką a nóżką masy analogowej mikrokontrolera. Tak więc mierząc napięcie na elemencie będącym pod jakimś potencjałem uzyskamy wynik w postaci sumy spadku napięcia na nim plus wartość potencjału na którym znajduje się jego druga nóżka.
  • Wartość napięcia odniesienia wewnętrznego - jest to wartość napięcia do którego będzie porównywane napięcie mierzone. W przypadku mikrokontrolerów możemy się spotkać z różnymi wartościami wewnętrznych źródeł odniesienia. W przypadku gdy wewnętrzne źródło odniesienia nam nie odpowiada zawsze możemy ustawić napiecie odniesienia jako wartość napięcia zasilania przetwornika analogowo cyfrowego jednak nie jest to najlepsze rozwiązanie gdyż zazwyczaj napięcie zasilania przetwornika nie jest tak "sztywne" (niezmienne w czasie) jak napięcia specjalnie do tego celu przystosowanych źródeł odniesienia co za tym idzie zmiejsza nam się dokładność pomiaru przetwornika ADC mikrokontrolera i mogą wystąpić przekłamania w przypadku pojawienia się zakłóceń w zasilaniu ADC mikrokontrolera..
  • Zakres napięć wejściowych - Zakres napięć wejściowych określony jest zazwyczaj przez źródło odniesienia przetwornika ADC mikrokontrolera i zazwyczaj nie może być większy.
  • Rodzaj przetwarzania - Rodzaj przetwarzania wynika z rodzaju (konstrukcji i zasady działania) zastosowanego przetwornika ADC. Możemy spotkać takie przetworniki cyfreowe jak : Przetwornik o przetwarzaniu bezpośrednim, Przetwornik z próbkowaniem analogowym, Przetwornik z sukcesywną aproksymacją, Przetwornik podwójnie całkujący, Przetworniki o architekturze potokowej

2. Budowa i zasada działania przetwornika ADC (Atmega328p)

Przetwornik analogowo cyfrowy w mikrokontrolerze Atmega328p jest zbudowany z 8 multipleksowanych wejść (ADC0-7) analogowych które możemy sobie programowo wybierać (jedno na raz). Przetwornik analogowo cyfrowy w mikrokontrolerze zasilany jest z separowanych pinów zasilających w celu ograniczenia zakłóceń wywołanych przez część cyfrową. Dodatkowo dobrze jest wyposażyć wejście zasilające część analogową mikrokontrolera filtrem zbudowanym z kondensatora 100nF oraz cewki filtrującej 10uH. Dodatkowo mamy dostęp do pinu odpowiedzialnego za napięcie odniesienia dla przetwornika analogowo cyfrowego. W przypadku gdy nie zadbamy o stabilne napięcie zasilania oraz bardzo stabilne napięcie odniesienia wówczas przetwornik analogowo cyfrowy będzie funkcjonował nieprawidłowo dając nam niedokładne a w skrajnym przypadku błędne wyniki przetwarzania.

Poniżej przedstawiono schemat blokowy przetwornika ADC analogowo cyfrowego dla mikrokontrolera Atmega328p. Przetwornik zbudowany jest z wejść analogowych podpiętych do multipleksera przez który oprócz wejść analogowych do układu pomiarowego możemy również podpiąć napięcie testowe 1,1V (bloczek Bandgap Reference) oraz czujnik temperatury. Jak widać na rysunku przetwornikiem ADC możemy sterować trzema rejestrami sterującymi. Pierwszy z nich ADMUX odpowiedzialny jest za wybór źródła napięcia odniesienia (bity REFS1 i REFS2), sterowaniem jednostką dokonującą konwersji (bit ADLAR odpowiedzialny za format w jakim przedstawiony zostanie pomiar) oraz sterowaniem multiplekserem sygnałów wejściowych (bity MUX0:3). Kolejnym rejestrem sterującym pracą ADC jest ADCSRA który odpowiada głównie za parametry pracy jednostki konwertującej oraz za preskaler (bity ADPS0:2). Ostatnim rejestrem odpowiadającym za prace przetwornika analogowo cyfrowego są w zasadzie dwa rejestry pełniące tą samą funkcję a mianowicie przechowywanie wartości przetwarzanego sygnału (wyniku przetwarzania) są to rejestry ADCH i ADCL. Przetwornik analogowo cyfrowy posiada MUX DECODER jest to konwerter sterujący multiplekserem sygnałów wejściowych który odpowiedzialny jest za podłączenie odpowiedniego wejścia pomiarowego do jednostki przetwarzającej. Bity REFS1 i REF2 sterują układem multipleksera analogowego który podaje jako napięcie odniesienia do jednostki przetwarzającej odpowiednie napięcie odniesienia przez nas wybrane. Do dyspozycji jako napięcia odniesienia mamy: napięcie zasilające ADC, Wewnętrzne źródło napięciowe 1,1V lub podpięte do nóżki AREF dowolne napięcie odniesienia przez nas podłączone zewnętrznie. PRESCALER sterowany przez rejestr ADCSRA służy do ustalenia wymaganego przez nas czasu konwersji który wybieramy przez ustawienie dzielnika częstotliwości taktującej mikrokontroler przez jedną z wartości wybieranych bitami (opis w dalszej części artykułu). Jednostka przetwarzająca CONVERSION LOGIC odpowiedzialna jest za przetworzenie sygnału analogowego w reprezentującą go wartość cyfrową. Zastosowany tu przetwornik ADC działa na zasadzie przetwornika z sukcesywną aproksymacją tak więc współpracuje z przetwornikiem cyfrowo analogowym DAC przedstawionym na schemacie blokowym i komparatorem zatrzaskującym wartość. Przetwornik z sukcesywną aproksymacją ustawia kolejno bity wynikowe na podstawie porównania napięcia odniesienia i napięcia wytworzonego przez przetwornik cyfrowo analogowy DAC. Napięcie wejściowe jest porównywane z napięciem odniesienia jeśli jest większe od niego ustawiana jest jedynka i w następnym kroku wartość napięcia wejściowego pomniejszona o wartość napięcia reprezentującego poprzedni bit porównywane jest z odpowiednio wytworzonym napięciem odniesienia i tak stopniowo porównując resztę napięcia z poprzedniego kroku wypracowywany jest wynik aż do najmłodszego bitu.

Jednostka automatycznej konwersji

 Droga sygnału wejściowego do przetwornika analogowo cyfrowego przedstawiona została na schemacie blokowym poniżej. Wybór sygnału wejściowego realizuje multiplekser sygnałów wejściowych. W zależności od ustawienia bitów ADTS[2:0] odpowiednie wejście zostaje podpięte do układu pomiarowego. Kolejnym elementem jest detektor zbocza po którym sygnał trafia na bramkę sterowaną sygnałem ADATE uruchamiającym auto przetwarzanie przetwornika ADC. Na kolejną bramkę trafia wypracowany sygnał odblokowujący auto przetwarzanie oraz sygnał zezwolenia na konwersje przez przetwornik analogowo cyfrowy ADC. Tak wypracowane sygnały pobudzają preskaler taktujący jednostkę przetwarzającą oraz doprowadzają sygnał wejściowy do jednostki przetwarzającej. Schemat ten jest schematem uproszczonym.

Poniżej przedstawiono wejście przetwornika ADC widziane od strony zacisku wejściowego mikrokontrolera. Wejście przetwornika analogowo cyfrowego mikrokontrolera przedstawić możemy jako dwa źródła prądowe w zależności od stanu wejścia. Przełącznik kluczujący symbolizujący załączenie lub wyłącznie konwersji (pomiaru) oraz szeregowe połączenie rezystancji i pojemności to elektryczna interpretacja wejścia pomiarowego przetwornika analogowo cyfrowego mikrokontrolera.

Budowa preskalera przedstawiona została na schemacie blokowym poniżej. Układ preskalera składa się z siedmiobitowego dzielnika częstotliwości z którego wypracowane sygnały trafiają na multiplekser sterowany bitami wyboru częstotliwości przetwarzania ADPS0:2 z którego na wyjściu otrzymujemy jeden z wybranych sygnałów o odpowiednio podzielonej częstotliwości.

3. Rodzaje błędów przetwarzania przetwornika ADC (Atmega328p)

W przetwornikach analogowo cyfrowych ADC możemy spotkać się z następującymi błędami w przetwarzaniu przetwornika analogowo cyfrowego ADC:

Błąd (Offset) przesunięcia. Diagram obrazujący powstający błąd przedstawiony został poniżej. Błąd ten polega na przesunięciu wyniku pomiaru o pewną stałą wartość w całej rozpiętości zakresu pomiarowego. Inaczej mówiąc dokonując pomiaru wynik będzie zawyżony lub zaniżony o pewną stałą wartość w całym zakresie przetwarzania wartość ta będzie stała. Błędy takie mogą wynikać z konstrukcji jak i metody przetwarzania przetwornika analogowo cyfrowego ADC mikrokontrolera. 

Błąd (Gain) proporcjonalny. Polega on na przekłamywaniu wyniku o pewną wartość proporcjonalną do wielkości mierzonej. Inaczej mówiąc im większa jest wartość mierzona (im bliżej jesteśmy maksymalnej wartości pomiarowej Uref) tym większy będzie błąd we wskazaniu przetwornika cyfrowo analogowego ADC. Wykres przedstawiający to zjawisko przedstawiono na diagramie poniżej. Błędy takie mogą wynikać z konstrukcji jak i metody przetwarzania przetwornika analogowo cyfrowego ADC mikrokontrolera. 

 Błąd nieliniowy. Błąd wynikający z zakłóceń lub niestabilnych napięć zasilania lub napięcia odniesienia. Wprowadza do pomiaru nieliniowy przypadkowy błąd pomiarowy. Graficzną interpretacje błędu przedstawiono na diagramie poniżej.

 Błąd nieliniowy. Błąd wynikający z zakłóceń lub niestabilnych napięć zasilania lub napięcia odniesienia. Wprowadza do pomiaru nieliniowy przypadkowy błąd pomiarowy. Graficzną interpretacje błędu przedstawiono na diagramie poniżej.

4. Konfiguracja przetwornika ADC na przykładzie Atmega328P

Poniżej przedstawiono rejestry konfigurujące pracę przetwornika ADC na przykładzie mikrokontrolera ATmega328P. Aby dostosować pracę ADC do naszych potrzeb mamy do dyspozycji następujące możliwości konfiguracyjne:



Rejestr ADCSRA:

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

ADEN - (ADC Enable) Ustawienie tego bitu na jeden włącza przetwornik ADC mikrokontrolera. Ustawienie tego bitu na zero wyłącza przetwornik ADC mikrokontrolera. Jeśli konwersja jest w trakcie zostaje ona przerwana.

ADSC - (ADC Start Conversion) W trybie pojedynczego pomiaru ustawienie tego bitu na jeden startuje pojedyncze przetwarzanie ADC mikrokontrolera. W trybie ciągłego przetwarzania (Free Runing mode) ustawienie tego bitu na jeden startuje pierwsze przetwarzanie po tym jak zostanie włączony bitem ADEN. Pierwsze przetwarzanie przetwornika z inicjalizacją trwa 25 cykli kolejne trwają 13 cykli. Bit ten jest równy jeden tak długo jak trwa konwersja. Po skończonej konwersji przez mikrokontroler bit ten zostaje wyzerowany. Wpisanie w ten bit zera nic nie powoduje.

ADATE - (ADC Auto Trigger Enable) Jeśli bit ten zostanie ustawiony na jedynkę zostanie włączone automatyczne wyzwalanie przetwornika ADC mikrokontrolera. Śródło sygnału taktującego przetwornik ADC mikrokontrolera można wybrać za pomocą bitów ADTS w rejestrze ADCSRB mikrokontrolera.

ADIF - (ADC Interrupt Flag) Jest to flaga przerwania od przetwornika ADC mikrokontrolera. Gdy zakończone zostanie przetwarzanie przez przetwornik ADC mikrokontrolera flaga ta zostaje ustawiona na jedynkę jednocześcnie wyzwalając przerwanie obsługi przetwornika ADC mikrokontrolera. Flaga jest zerowana sprzętowo po wykonaniu przerwania obsługi przetwornika ADC mikrokontrolera.

ADIE - (ADC Interrupt Enable) Gdy bit ten jest ustawiony na jedynkę aktywuje możliwość generowania przerwania obsługi przetwornika ADC mikrokontrolera.

ADPS2:0 - (ADC Prescaler Select Bits) 3 bity odpowiedzialne za wybór dzielnika częstotliwości sygnału taktującego mikrokontroler podawanego na wejście taktujące przetwornik ADC mikrokontrolera. 

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC



Rejestr ADCSRB:

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

ACME - jeśli ten bit jest ustawiony na jeden i przetwornik ADC jest wyłączony (ADEN i ADCSRA jest zerem) multiplexer wejść ADC przyłączony jest do wejścia odwracającego komparatora analogowego. Jeśli bit ten jest równy zero nóżka AIN1 jest bezwarunkowo podpięta do wejścia odwracającego komparatora analogowego.

ADTS2:0 - Jeśli ADATE i ADCSRA jest ustawiony na jeden wartość bitów ADTS determinuje jaki sygnał będzie wyzwalał przetwarzanie wartości ADC. Jeśli ADATE jest zerem ustawenia bitów ADTS nie mają żadnego znaczenia. Konwersja zostaje uruchomiona przez narastające zbocze jednej z wybranych flag przerwań (zmiana wartości z zera na jeden) i bity ADEN i ADCSRA są ustawione rozpoczyna się konwersja. Przełączenie pracy na tryb ciągłego przetwarzania (Free Running mode ADTS[2:0]=0) nie powoduje wywołania przerwania od ADC nawet jeśli jest ono ustawione.

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

Rejestr ADMUX:

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

REFS1:0 - te dwa bity określają źródło napięcia odniesienia dla przetwornika ADC. Jeśli zostaną zmienione w trakcie przetwarzania ADC zmiana nastawienia obowiązywać będzie dopiero od następnego cyklu prztwarzania. Warianty nastawień przedstawiono w tabeli poniżej. 

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

Dla nastawienia bitów:

  • REFS1=0 i REFS0=0 - napięciem odniesienia dla przetwornika ADC jest zewnętrzne napięcie odniesienia podpinane do odpowiedniej nóżki procesora (AREF). Wewnętrzne napięcie odniesienia jest wyłączone.
  • REFS1=0 i REFS0=1 - Aktywne wewnętrzne napięcie odniesienia równe napięciu zasilania przetwornika ADC (AVcc) dla przetwornika ADC z zewnętrznym kondensatorem podpiętym do nóżki AREF.
  • REFS1=1 i REFS0=0 - nastawa niedostępna (zarezerwowana)
  • REFS1=1 i REFS0=1 - Aktywne wewnętrzne napięcie odniesienia 1,1V (dla Atmega328P. Wartość napięcia dla innych mikrokontrolerów może sie różnić) dla przetwornika ADC z zewnętrznym kondensatorem podpiętym do nóżki AREF.

ADLAR - określa sposób zapisu danych w rejestrach przechowujących wynik przetwarzania. Dla wariantu gdy ADLAR = 0 sposób przedstawienia wyniku będzie wyglądał jak na diagramie poniżej

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

Dla wariantu gdy ADLAR = 1 natomiast sposób przedstawienia wyniku będzie wyglądał jak na diagramie poniżej

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

MUX3:0 - wartości tych bitów określają które z wejść podłączone jest do wejścia pomiarowego ADC. Sposób wyboru określonego wejścia pomiarowego przedstawony został w tabeli poniżej.

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

Wejścia ADC od 0 do 7 są to odpowiednie nóżki procesora. Pięć kolejnych kombinacji jest niedostępna (zarezerwowana). Wartość 14 i 15 podłącza do wejścia pomiarowego odpowiednio 1,1V oraz 0V GND. Konfiguracja taka jest przydatna w przypadku testowania prawidłowości napisanego programu lub też diagnostyki czy ADC nie został uszkodzony.



Rejestr DIDR0:

Programowanie mikrokontrolerów mikroprocesorów - Przetwornik ADC

ADC5:0D - jeśli któryś z tych bitów jest ustawiony na jedynkę wyłączony zostaje bufor cyfrowy wejścia mikrokotnrolera. Jeśli do takiego wejścia podpięty jest sygnał analogowy który zostaje mierzony przez to wejście sugeruje się wyłączenie wejścia cyfrowego w celu ograniczenia konsumplcji mocy. Wejścia ADC na pinach ADC7 i ADC6 dedykowanych nie pełniących innych funkcji nie wymagają wyłączania tymi bitami.

5. Tryb pracy multipleksowanej (korzystanie z wielu wejść pomiarowych ADC)

W przypadku korzystania z wielu wejść pomiarowych ADC ( wykorzystanie wewnętrznego multipleksera wejść pomiarowych ADC) musimy pamiętać że należy przejść w tryb wyzwalania pojedynczego pomiaru przez ADC lub wykonywać dwa pomiary dla każdego kanału aby otrzymać prawidłowy pomiar. Powyższa zasada uwarunkowana jest tym iż w trybie free mode tzn zapętlonego pomiaru moment przełączenia się z jednego kanału pomiarowego w drugi może wystąpić w momencie trwania przetwarzania przez przetwornik ADC przekłamując pomiar. Stosując metodę podwójnego pomiaru jesteśmy w stanie wyeliminować fałszywy pomiar odrzucając pierwszy z dwóch pomiarów a biorąc pod uwagę tylko ten drugi dzięki czemu mamy pewność że pomiar od początku do końca został wykonany na interesującym nas wejściu pomiarowym. Drugim sposobem jest uruchomienie przetwarzania ADC w trybie pojedynczego pomiaru dzięki czemu po przełączeniu wejścia pomiarowego startujemy pomiar w momencie gdy jesteśmy pewni że odpowiedni kanał pomiarowy został wybrany. Wówczas możemy wystartować pojedynczy pomiar sczytać pomierzoną wartość i dopiero przełączyć się na kolejny kanał pomiarowy bez ryzyka że przełączenie kanałów nastąpi w trakcie pomiaru.







 
Wszelkie prawa zastrzeżone! Kopiowanie, powielanie i wykorzystywanie zdjęć, treści oraz jej fragmentów bez zgody autora zabronione.
© mikroprocesory.info.pl@gmail.com 2013.