Programowanie mikrokontrolerów
Przetwornik ADCSpis treści
1. Podstawowe parametry przetwornika ADC na przykładzie ATmega328P Podstawowymi parametrami opisującymi przetwornik analogowo-cyfrowy ADC są:
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: 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śnie 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.
Rejestr ADCSRB: 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 ustawanie 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. Rejestr ADMUX: 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 przetwarzania. Warianty nastawień przedstawiono w tabeli poniżej. Dla nastawienia bitów:
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 Dla wariantu gdy ADLAR = 1 natomiast sposób przedstawienia wyniku będzie wyglądał jak na diagramie poniżej 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 przedstawiony został w tabeli poniżej. 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: 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 konsumpcji 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.
08.04.2020 (dokończyćpowiększanie i podmianę obrazków) 08-Apr-2020 16:01:11 CEST by Pioter
|
© mikroprocesory.info.pl@gmail.com 2013.