Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny24/44/84

Przetwornik analogowo/cyfrowy

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Własności

Na początek:  podrozdziału   strony 

Przegląd

Mikrokontroler ATtiny24/44/84 udostępnia 10-bitowy kompensacyjny przetwornik analogowo/cyfrowy. Przetwornik połączony jest do 8-końcówkowego portu A, który udostępnia mu zewnętrzne źródła sygnałów. Dodatkowo przetwornik A/C może mierzyć napięcie na wewnętrznym czujniku temperatury. Analogowy multiplekser pozwala na podłączenie do przetwornika osiem pojedynczych kanałów lub dwanaście różnicowych z portu A. Programowany stopień wzmocnienia umożliwia wzmocnienie w krokach 0 dB (1x) i 26 dB (20x) dla 12 kanałów różnicowych.

Przetwornik posiada obwód próbkowania z podtrzymaniem, który zapewnia, iż napięcie wejściowe do przetwornika jest utrzymywane na stałym poziomie podczas konwersji. Poniższy rysunek przedstawia schemat blokowy przetwornika,

Wewnętrzne napięcie odniesienia ma wartość znamionową 1,1V. Alternatywnie można używać napięcia VCC jako napięcia odniesienia dla kanałów nieróżnicowych. Istnieje również opcja korzystania z zewnętrznego napięcia odniesienia i wyłączenia wewnętrznego napięcia odniesienia.

Na początek:  podrozdziału   strony 

Działanie

Zasadę działania przetworników kompensacyjnych opisujemy tutaj.

Przetwornik analogowo/cyfrowy zamienia analogowe napięcie wejściowe na 10-bitową wartość za pomocą kolejnych przybliżeń. Wartość minimalna reprezentuje GND, a wartość maksymalna reprezentuje napięcie odniesienia, które dla przetwornika można wybrać przez zapis do bitów REFS1:0 w rejestrze ADMUX. Do wyboru są napięcie zasilania VCC, końcówka AREF lub wewnętrzne napięcie odniesienia 1,1V.

Analogowy kanał wejściowy oraz wzmocnienie różnicowe są wybierane przez zapis bitów MUX5:0 w ADMUX. Jako kanał nieróżnicowy dla przetwornika A/C może być wybrana dowolna z końcówek wejściowych ADC7:0. Przy pomiarach różnicowych można wybierać wszystkie wejścia analogowe leżące obok siebie jako parę wejściową. Każde wejście może również być mierzone z ADC3. Te pary wejść różnicowych są mierzone przez przetwornik A/C poprzez wzmacniacz wzmocnienia różnicowego.

Jeśli zostały wybrane kanały różnicowe, to stopień wzmocnienia różnicowego wzmacnia różnicę napięcia pomiędzy wybraną parą wejść przez wybrany współczynnik 1x lub 20x, zgodnie z ustawieniem bitu MUX0 w ADMUX. Ta wzmocniona wartość staje się następnie wejściem analogowym dla przetwornika A/C. Dla kanałów nie-różnicowych stopień wzmacniający jest całkowicie omijany.

Napięcie niezrównoważenia kanałów różnicowych można zmierzyć wybierając to samo wejście dla obu wejść odwracającego i nieodwracającego. Kalibracji niezrównoważenia można dokonać dla ADC0, ADC3 i ADC7. Gdy ADC0 lub ADC3 lub ADC7 zostanie wybrane dla obu wejść odwracającego i nieodwracającego wzmacniacza wzmocnienia różnicowego , to pozostałe niezrównoważenie w stopniu wzmacniającym oraz obwodach przetwornika można zmierzyć bezpośrednio jako wynik konwersji. Wartość tę można następnie odejmować od następnych konwersji z tym samym ustawieniem wzmocnienia, aby zmniejszyć błąd niezrównoważenia poniżej 1 LSB.

Wewnątrzukładowy czujnik temperatury jest wybierany przez zapis kodu “100010” do bitów MUX5:0 w rejestrze ADMUX.

Przetwornik A/C jest włączany przez ustawienie bitu ADEN w rejestrze ADCSRA. Wybory napięcia odniesienia i kanałów wejściowych nie wejdą w życie, dopóki nie zostanie ustawiony bit ADEN. Gdy bit ADEN jest wyzerowany, przetwornik A/C nie pobiera prądu, zatem zaleca się wyłączać przetwornik przed wejściem w tryby uśpienia oszczędzające energię.

Przetwornik A/C generuje 10-bitowy wynik, który będzie obecny w rejestrach danych przetwornika, ADCH i ADCL. Standardowo wynik jest prezentowany z wyrównaniem do prawej strony, lecz może być opcjonalnie prezentowany z wyrównaniem lewostronnym przez ustawienie bitu ADLAR w rejestrze ADCSRB.

Jeśli wynik jest wyrównany lewostronnie i nie jest potrzebna wyższa precyzja od 8 bitów, to wystarczy odczytać rejestr ADCH. W przeciwnym razie najpierw musi być odczytany rejestr ADCL, a następnie ADCH, aby zagwarantować, iż zawartość rejestrów danych należą do tej samej konwersji. Gdy zostaje odczytany rejestr ADCL, przetwornik A/C ma zablokowany dostęp do rejestrów danych, żaden z nich nie będzie uaktualniony i wynik konwersji zostanie utracony. Gdy odczytywany jest rejestr ADCH, przetwornik A/C otrzymuje z powrotem dostęp do ADCH i ADCL.

Przetwornik A/C posiada swoje własne przerwanie, które może zostać wyzwolone przy zakończeniu konwersji. Gdy dostęp przetwornika A/C do rejestrów danych jest wzbroniony pomiędzy odczytem ADCH i ADCL, przerwanie zostanie wyzwolone, nawet, gdy wynik będzie utracony.

Na początek:  podrozdziału   strony 

Rozpoczynanie przetwarzania

Pojedyncze przetwarzanie rozpoczyna się po zapisaniu logicznej jedynki do bitu ADSC (ang. ADC Start Conversion bit). Bit ten pozostaje w stanie wysokim przez cały czas przetwarzania, a następnie jest zerowany sprzętowo, gdy przetwarzanie zostanie ukończone. Jeśli w trakcie przetwarzania będzie wybrany inny kanał danych, to przetwornik A/C doprowadzi do końca bieżące przetwarzanie, zanim dokona zmiany kanału.

Alternatywnie można wyzwolić przetwarzanie automatycznie z różnych źródeł. Automatyczne wyzwalanie jest włączane przez ustawienie bitu ADATE (ang. ADC Auto Trigger Enable bit) w rejestrze ADCSRA. Źródło wyzwalania jest wybierane ustawieniami bitów ADTS (ang. ADC Trigger Select bits) w rejestrze ADCSRB. Gdy w wybranym sygnale wyzwalającym pojawi się dodatnie zbocze (0 → 1), preskaler przetwornika A/C zostaje zresetowany i rozpoczyna się przetwarzanie. Udostępnia to metodę rozpoczynania przetwarzań w stałych okresach czasu. Jeśli sygnał wyzwalający jest wciąż ustawiony, gdy przetwarzanie zostaje ukończone, nowe przetwarzanie nie rozpocznie się. Jeśli w trakcie przetwarzania pojawi się kolejne zbocze dodatnie w sygnale wyzwalania, to zbocze to zostanie zignorowane. Zwróć uwagę, iż znacznik przerwania zostanie ustawiony nawet wtedy, gdy określone przerwanie jest zablokowane lub bit globalnego włączania przerwań (bit I) w rejestrze SREG jest wyzerowany. Stąd przetwarzanie może zostać wyzwolone bez powodowania przerwania. Jednakże znacznik przerwania musi zostać wyzerowany w celu wyzwolenia nowego przetwarzania przy następnym zdarzeniu przerwania.

Obwód wyzwalania automatycznego
obrazek

Używanie znacznika przerwania z przetwornika A/C (ang. ADC Interrupt Flag, ADIF) jako źródła wyzwalania powoduje, iż przetwornik A/C rozpoczyna nowe przetwarzanie jak tylko zakończy obecne. W takim przypadku przetwornik A/C pracuje w trybie ciągłym (ang. Free Running mode), ciągle próbkując napięcie wejściowe i uaktualniając rejestr danych. Pierwsze przetwarzanie musi zostać rozpoczęte przez zapis logicznej jedynki do bitu ADSC w ADCSRA. W tym trybie przetwornik A/C będzie wykonywał kolejne przetwarzania niezależnie od wyzerowania znacznika przerwań z przetwornika ADIF.

Jeśli zostanie wybrane wyzwalanie automatyczne (ang. Auto Triggering), to pojedyncze przetwarzanie może rozpocząć się po zapisaniu jedynki do bitu ADSC w ADCSRA.  Bit ADSC można również używać do określania, czy przetwarzanie jest w toku. Podczas przetwarzania bit ADSC będzie dawał odczyt jeden bez względu na sposób rozpoczęcia tego przetwarzania.

Na początek:  podrozdziału   strony 

Preskaler oraz czasy przetwarzania

Standardowo układ kolejnych przybliżeń wymaga częstotliwości wejściowej pomiędzy 50 kHz a 200 kHz, aby osiągnąć maksymalną rozdzielczość. Jeśli jest potrzebna rozdzielczość niższa niż 10 bitów, to częstotliwość wejściowa dla przetwornika A/C może być wyższa od 200 kHz w celu osiągnięcia wyższej częstotliwości próbkowania. Nie zaleca się stosowania zegara wejściowego o częstotliwości wyższej niż 1 MHz.

Preskaler przetwornika A/C
obrazek

Moduł przetwornika A/C zawiera preskaler, który generuje właściwą dla przetwornika A/C częstotliwość zegarową z dowolnej częstotliwości mikroprocesora powyżej 100kHz. Stopień podziału ustawiany jest przez bity ADPS w ADCSRA. Preskaler rozpoczyna zliczanie od momentu włączenia przetwornika A/C przez ustawienie bitu ADEN w ADCSRA. Preskaler pracuje tak długo, jak bit ADEN pozostaje ustawiony, a jest ciągle resetowany, gdy ADEN jest wyzerowany.

Gdy rozpoczyna się pojedyncze przetwarzanie przez ustawienie bitu ADSC w ADCSRA, to przetwarzanie to startuje od następnego narastającego zbocza cyklu zegarowego przetwornika A/C.

Normalne przetwarzanie zajmuje 13 cykli zegarowych przetwornika A/C. Pierwsze przetwarzanie po włączeniu przetwornika A/C (ustawienie ADEN w ADCSRA) zabiera 25 cykli zegarowych w celu inicjalizacji obwodów analogowych, jak pokazuje poniższy rysunek.

Wykres czasowy przetwornika A/C, pierwsze przetwarzanie (tryb pojedynczego przetwarzania)
obrazek

Gdy jako napięcie odniesienia zostanie wybrane jako wejście dla przetwornika A/C, upłynie pewien czas, zanim napięcie to ustabilizuje się. Jeśli nie będzie ustabilizowane, to pierwsza wartość odczytana po pierwszym przetwarzaniu może być zła.

Właściwe próbkowanie z podtrzymaniem próbki ma miejsce 1,5 cyklu zegara przetwornika A/C po rozpoczęciu normalnego przetwarzania i 14,5 cykli zegara po rozpoczęciu pierwszego przetwarzania. Gdy przetwarzanie jest ukończone, wynik zostaje zapisany do rejestrów danych przetwornika A/C, a znacznik ADIF jest ustawiany. W trybie pojedynczego przetwarzania bit ADSC jest jednocześnie zerowany. Program może wtedy ponownie ustawić ADSC, a nowe przetwarzanie zostanie zainicjowane  przy pierwszym narastającym zboczu zegara przetwornika A/C.

Wykres czasowy przetwornika A/C, jedno przetwarzanie
obrazek

Gdy jest używane automatyczne wyzwalanie, preskaler zostaje zresetowany w momencie wystąpienia zdarzenia wyzwalającego, co pokazuje poniższy rysunek. Zapewnia to stałe opóźnienie od zdarzenia wyzwalającego do rozpoczęcia przetwarzania. W tym trybie próbkowanie z podtrzymaniem ma miejsce dwa cykle zegara przetwornika A/C po narastającym zboczu w sygnale źródła wyzwalającego. Trzy dodatkowe cykle zegara przetwornika A/C są wykorzystywane do synchronizacji sieci logicznej.

Wykres czasowy przetwornika A/C, przetwarzanie z automatycznym wyzwalaniem
obrazek

W trybie ciągłym (ang. Free Running mode) nowe przetwarzanie rozpoczyna się natychmiast po ukończeniu poprzedniego przetwarzania, natomiast bit  ADSC pozostaje w stanie wysokim.

Wykres czasowy przetwornika A/C, przetwarzanie w trybie ciągłym
obrazek

Poniższa tabela podsumowuje czasy przetwarzania:

Warunek Próbkowanie z podtrzymaniem
od startu przetwarzania
Czas przetwarzania
(cykle)
Pierwsze przetwarzanie 13,5 25
Normalne przetwarzania 1,5 13
Przetwarzania z autowyzwalaniem 2 13,5
Przetwarzanie ciągłe 2,5 14
Na początek:  podrozdziału   strony 

Zmiana kanału lub wybór napięcia odniesienia

Bity MUXn i REFS1:0 w rejestrze ADMUX są buforowane poprzez rejestr tymczasowy, do którego mikroprocesor posiada swobodny dostęp. Zapewnia to, iż wybór kanałów i napięcia odniesienia odbywa się w bezpiecznym punkcie podczas procesu przetwarzania. Wybór ten jest ciągle uaktualniany aż do rozpoczęcia przetwarzania. Gdy przetwarzanie rozpocznie się, wybór kanałów i napięcia odniesienia zostaje zablokowany, aby zapewnić wystarczający czas próbkowania dla przetwornika A/C. Ciągłe uaktualnianie jest wznawiane w ostatnim cyklu zegarowym przetwornika A/C przed ukończeniem przetwarzania (zostaje ustawiony bit ADIF w rejestrze ADCSRA). Zwróć uwagę, iż przetwarzanie rozpoczyna się przy następnym narastającym zboczu zegara przetwornika A/C po zapisaniu bitu ADSC. Dlatego zaleca się użytkownikowi nie wpisywać nowych wartości wyboru kanału lub napięć odniesienia do ADMUX w ciągu jednego cyklu zegarowego przetwornika A/C po zapisie bitu ADSC.

Jeśli używane jest automatyczne wyzwalanie, to dokładny czas zdarzenia wyzwalania może być nieokreślony. Należy ze specjalną ostrożnością modyfikować rejestr ADMUX, aby kontrolować, które przetwarzanie zostanie wykonane z nowymi ustawieniami.

Jeśli oba bity ADATE i ADEN zostaną wpisane jako jedynki, to zdarzenie przerwania może wystąpić w dowolnym momencie. Jeśli w tym okresie jest modyfikowany rejestr ADMUX, to użytkownik nie będzie w stanie określić, czy następne przetwarzanie zostanie oparte na starych ustawieniach, czy na nowych. ADMUX można bezpiecznie modyfikować w jeden z następujących sposobów:

Gdy rejestr ADMUX jest modyfikowany w jednym z powyższych warunków, to nowe ustawienia wpłyną na następne przetwarzanie w przetworniku A/C.

Kanały wejściowe przetwornika A/C

Przy zmianie wyboru kanałów użytkownik powinien stosować się do poniższych wskazówek, aby zapewnić wybór poprawnego kanału:

W trybie pojedynczego przetwarzania (ang. Single Conversion mode) zawsze wybieraj kanał przed rozpoczęciem przetwarzania. Wybór kanału może być zmieniony po upływie jednego cyklu zegarowego przetwornika A/C od zapisu jedynki do bitu ADSC. Jednakże najprostszym sposobem jest odczekanie, aż przetwarzanie zakończy się, zanim wykona się zmianę wyboru kanału.

W trybie pracy ciagłej (ang.Free Running mode) zawsze wybieraj kanał przed uruchomieniem pierwszego przetwarzania. Wybór kanału może być zmieniony po upływie jednego cyklu zegarowego przetwornika A/C od zapisu jedynki do bitu ADSC. Jednakże najprostszym sposobem jest odczekanie na zakończenie pierwszego przetwarzania, a wtedy można zmienić wybór kanału. Ponieważ następne przetwarzanie zostało już rozpoczęte, to jego wynik będzie odzwierciedlał poprzednie ustawienie kanału. Kolejne przetwarzania będą odzwierciedlać nowy wybór kanału.

Napięcie odniesienia dla przetwornika A/C

Napięcie odniesienia dla przetwornika A/C (VREF) oznacza zakres przetwarzania napięć w przetworniku. Jeśli w kanale analogowym podłączonym do wejścia przetwornika A/C napięcie przekracza VREF, to wynik przetwarzania da wartość bliską 0x3FF. Jako VREF  można wybrać albo VCC, albo wewnętrzne napięcie odniesienia 1,1V. Wewnętrzne napięcie odniesienia 1,1V tworzone jest z wewnętrznego napięcia VBG poprzez wewnętrzny wzmacniacz. Pierwsze przetwarzanie w przetworniku A/C po przełączeniu napięcia odniesienia może nie być dokładne i zaleca się użytkownikowi odrzucenie jego wyniku.

Na początek:  podrozdziału   strony 

Reduktor szumu przetwornika A/C

Przetwornik A/C posiada możliwość zmniejszania szumów, która umożliwia przetwarzanie podczas trybu uśpienia w celu zmniejszenia szumu pochodzącego od pracy mikroprocesora oraz innych układów peryferyjnych w mikrokontrolerze. Reduktor szumu może być używany z przetwornikiem A/C i trybem bezczynności (ang. Idle mode). Aby skorzystać z tej cechy, należy użyć następującej procedury:

Zwróć uwagę, że przetwornik A/C nie zostanie automatycznie wyłączony, gdy mikroprocesor wejdzie w inne tryby uśpienia niż tryb bezczynności oraz tryb zmniejszania szumu przetwornika A/C. Uzytkownik powinien wpisać 0 do bitu ADEN, przed wejściem do takich trybów uśpienia, aby zapobiec nadmiernemu poborowi energii.

Na początek:  podrozdziału   strony 

Obwody analogowe wejścia

Układ analogowego wejścia dla kanałów przetwornika A/C jest pokazany na poniższym rysunku. Źródło analogowe przyłożone do końcówki ADCn jest obciążone pojemnością końcówki oraz upływami wejściowymi bez względu na to, czy ten kanał został wybrany jako wejście dla przetwornika A/C. Gdy kanał jest wybrany, źródło musi zasilić kondensator CS/H (ang. Sample and Hold capacitor – kondensator próbkowania i podtrzymania) poprzez szeregowy opornik (całkowita oporność na ścieżce wejścia).

obrazek

Kondensator pokazany na rysunku przedstawia całkowitą pojemność, łącznie z kondensatorem CS/H oraz z wszelkimi obcymi i pasożytniczymi pojemnościami wewnątrz mikrokontrolera. Podana wartość jest najgorszym przypadkiem.

Przetwornik A/C jest zoptymalizowany dla sygnałów analogowych o impedancji wyjściowej w przybliżeniu 10 kΩ lub mniejszej. Dla takich źródeł czas próbkowania będzie pomijalny. Jeśli zostanie użyte źródło o większej impedancji, czas próbkowania będzie zależał od tego, jak długo źródło potrzebuje ładować kondensator CS/H. Tutaj może być duży rozrzut. Zaleca się użytkownikom używania źródeł o niskiej impedancji oraz wolnozmiennych sygnałów, ponieważ to minimalizuje czas ładowania kondensatora CS/H do pożądanej wartości napięcia wejściowego.

Składowe sygnału wyższe od częstotliwości Nyquista (fADC / 2) nie powinny być obecne, aby uniknąć nieprzewidywalnych zniekształceń. Należy usunąć składowe o wysokich częstotliwościach za pomocą filtru dolnoprzepustowego przed przekazaniem sygnałów jako wejścia dla przetwornika A/C.

Na początek:  podrozdziału   strony 

Sposoby zmniejszania szumów

Układy cyfrowe wewnątrz i na zewnątrz mikrokontrolera generują interferencje elektromagnetyczne, które mogą wpłynąć na dokładność pomiarów analogowych. Gdy dokładność przetwarzania jest istotna, to poziom szumów można obniżyć przez zastosowanie poniższych sposobów:

Tam, gdzie wymagana jest wysoka dokładność przetwornika A/C, zaleca się stosowanie trybu zmniejszania szumu, co opisano powyżej. Dobrze zaprojektowany system z właściwie rozmieszczonymi, zewnętrznymi kondensatorami bocznikowymi zmniejsza potrzebę stosowania trybu zmniejszania szumu dla przetwornika A/C.

Na początek:  podrozdziału   strony 

Definicje dokładności przetwornika A/C

Przetwornik Analogowo/Cyfrowy n-bitowy (ang. n-bit single-ended ADC)   przetwarza w sposób liniowy napięcia pomiędzy GND a VREF w liczbę binarną o 2n poziomach. Najniższy kod daje odczyt 0, a najwyższy daje odczyt 2n-1. Kilka parametrów opisuje odchylenie od idealnego zachowania:

obrazek

obrazek

obrazek

obrazek

Na początek:  podrozdziału   strony 

Wynik przetwarzania przetwornika A/C

Po zakończeniu konwersji (ADIF ma stan wysoki) wynik można znaleźć w rejestrach wyniku przetwornika A/C (ADCL, ADCH). Postać wyniku konwersji zależy od jej typu: konwersja nieróżnicowa, unipolarna konwersja różnicowa i bipolarna konwersja różnicowa.

Konwersja nieróżnicowa

Dla konwersji nieróżnicowej wynik ma postać:

gdzie VIN jest napięciem na wybranej końcówce wejściowej, a VREF jest wybranym napięciem odniesienia. 0x000 reprezentuje napięcie o poziomie masy analogowej, a 0x3FF reprezentuje wybrane napięcie odniesienia minus jeden LSB (najmłodszy bit).

Unipolarna konwersja różnicowa

Jeśli użyte zostają kanały różnicowe i unipolarny tryb wejścia, to wynik ma postać:

gdzie VPOS jest napięciem na końcówce wejścia nieodwracającego, VNEG jest napięciem na końcówce wejścia odwracajacego, VREF jest wybranym napięciem odniesienia. Napięcie końcówki nieodwracającej zawsze musi być wyższe niż napięcie końcówki odwracającej, w przeciwnym razie różnica napięć nasyci się do zera. Wynik jest przedstawiany w zakresie od 0x000 (0) do 0x3FF (+1023). Wzmocnienie GAIN ma wartość albo 1x, albo 20x.

Bipolarna konwersja różnicowa

Jeśli używane są kanały różnicowe i bipolarny tryb wejścia, to wynik konwersji będzie miał postać:

gdzie VPOS oznacza napięcie na końcówce wejścia nieodwracającego, VNEG jest napięciem na końcówce wejścia odwracającego, a VREF to wybrane napięcie odniesienia. Wynik jest przedstawiany w postaci uzupełnienia do dwóch od 0x200 (-512) do 0x1FF (+511). Wzmocnienie GAIN ma wartość albo 1x, albo 20x. zauważ, iż jeśli użytkownik chce wykonać szybkie sprawdzenie polaryzacji wyniku, to wystarczy odczytać najstarszy bajt MSB wyniku (ADC9 w ADCH). Jeśli bit ma wartość jeden, to wynik jest ujemny, a jeśli bit ma wartość zero, to wynik jest dodatni lub równy zero.

Standardowo przetwornik A/C pracuje w unipolarnym trybie wejścia, lecz tryb bipolarny można wybrać przez zapis jedynki do bitu BIN w rejestrze ADCSRB. W bipolarnym trybie wejścia dozwolone są ujemne różnice napięć i dlatego napięcie na końcówce wejścia odwracającego może być również większe od napięcia na końcówce wejścia nieodwracającego.

Na początek:  podrozdziału   strony 

Pomiar temperatury

Pomiar temperatury oparty jest na wbudowanym w układ czujniku temperatury, który podpięty jest do kanału analogowego przetwornika A/C. Pomiar wykonywany jest poprzez kanał ADC8, który zostaje uaktywniony przez zapis bitów MUX w rejestrze ADMUX wartością "1010". Przy odczycie czujnika temperatury należy również wybrać wewnętrzne napięcie odniesienia 1,1V dla przetwornika A/C. Gdy zostanie włączony czujnik temperatury, można użyć przetwornika A/C w trybie pojedynczego przetwarzania do pomiaru napięcia na czujniku.

Mierzone napięcie jest liniowo zależne od temperatury, co przedstawia poniższa tabela. Czułość wynosi około 1 LSB / °C, a dokładność zależy od metody kalibracji zastosowanej przez użytkownika. Typowo dokładność pomiaru po pojedynczej kalibracji temperaturowej ma wartość ±10°C przy założeniu, że kalibracji dokonano w temperaturze pokojowej. Lepszą dokładność uzyskuje się przy zastosowaniu dwóch temperatur do kalibracji.

Temperatura w funkcji napięcia wyjściowego z czujnika (przypadek typowy)

Temperatura -40°C +25°C +85°C
Wynik pomiaru 230LSB 300LSB 370LSB

Wartości w tabeli są wartościami typowymi. Jednakże z uwagi na rozrzuty parametrów w produkcji napięcie wyjściowe z czujnika temperatury może przyjmować inne wartości w różnych egzemplarzach mikrokontrolera. Aby móc otrzymywać bardziej dokładne wyniki pomiar temperatury może zostać skalibrowany w programie aplikacji. Kalibrację programową można wykonać przy użyciu wzoru:

T = k * ((ADCH << 8) | ADCL) + TOS

gdzie ADCH i ADCL są rejestrami danych przetwornika, k jest współczynnikiem ustalonego nachylenia, a TOS jest wartością niezrównoważenia czujnika temperatury. Zwykle k jest bliskie 1,0 i przy kalibracji jednopunktowej można go pominąć. Gdy jest potrzebna wyższa dokładność, współczynnik k należy oszacować dokonując pomiarów w dwóch różnych temperaturach.

Na początek:  podrozdziału   strony 

Opis rejestrów

ADMUX – ADC Multiplexer Selection Register – Rejestr wyboru kanału dla przetwornika A/C

Bit 7 6 5 4 3 2 1 0  
0x07 (0x27) REFS1 REFS0 MUX5 MUX4 MUX3 MUX2 MUX1 MUX0 ADMUX
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bits 7:6 – REFS1, REFS0: Reference Selection Bits – Bity wyboru napięcia odniesienia

REFS1 REFS0 Wybór napięcia odniesienia
0 0 Jako odniesienie używane jest VCC, odłączone od PA0 (AREF).
0 1 Zewnętrzne napięcie odniesienia na PA0 (AREF), wewnętrzne odniesienie wyłączone .
1 0 Wewnętrzne napięcie odniesienia 1,1V.
1 1 Zarezerwowane

Jeśli bity te zostaną zmienione podczas konwersji, to zmiana nie wejdzie w życie aż do zakończenia tej konwersji (bit ADIF w ADCSR ustawiony). Również zwróć uwagę, iż po zmianie tych bitów następna konwersja zajmie 25 cykli zegarowych przetwornika A/C.

Należy bardzo uważać przy zmianie kanałów różnicowych. Po wyborze kanału różnicowego, stopień wejściowy może wymagać nieco czasu do ustabilizowania się. Dlatego zalecane jest, aby wymuszać na przetworniku wykonanie długiej konwersji po zmianie multipleksera lub ustawień napięcia odniesienia. Można to wykonać przez wyłączenie przetwornika A/C, dokonanie zmian ustawień napięcia odniesienia, a następnie ponowne włączenie przetwornika A/C. Alternatywnie należy pominąć pierwszy wynik konwersji po zmianie ustawień napięcia odniesienia.

Nie zaleca się używania zewnętrznych napięć odniesienia AREF wyższych niż VCC - 1V dla kanałów ze wzmocnieniem różnicowym, ponieważ wpłynie to na dokładność przetwornika A/C.

Opcje wewnętrznego napięcia odniesienia nie mogą być użyte, jeśli zewnętrzne napięcie zostało przyłożone do końcówki AREF.

Bity 5:0 – MUX[5:0]: Analog Channel and Gain Selection Bits – Bity wyboru kanału analogowego i wzmocnienia

Wartość tych bitów określa kombinację wejść analogowych podłączonych do przetwornika A/C. W przypadku wejścia różnicowego bitami tymi wybiera się również wzmocnienie. Poniższa tabela pokazuje wartości dla kanałów nieróżnicowych, wartości dla kanałów różnicowych oraz położenie wyborów kalibracji napięć niezrównoważenia.

Wejście nieróżnicowe MUX5:0
ADC0 (PA0) 000000
ADC1 (PA1) 000001
ADC2 (PA2) 000010
ADC3 (PA3) 000011
ADC4 (PA4) 000100
ADC5 (PA5) 000101
ADC6 (PA6) 000110
ADC7 (PA7) 000111
Zarezerwowane dla kanałów różnicowych(1) 001000 - 011111
0V (AGND) 100000
1.1V (wewnętrzne odniesienie)(2) 100001
ADC8(3) 100010
Zarezerwowane dla kalibracji niezrównoważenia(4) 100011 - 100111
Zarezerwowane dla odwrotnych kanałów różnicowych(1) 101000 - 111111
Uwagi: 1. Zobacz na kolejną tabelkę poniżej.
  2. Po przełączeniu na wewnętrzne napięcie odniesienia przetwornik A/C potrzebuje czas około 1 ms na ustabilizowanie się, zanim pomiary staną się stabilne. Konwersje rozpoczęte przed upływem tego czasu mogą nie być wiarygodne. Przetwornik A/C musi być włączony podczas tego czasu stabilizacji.
  3. Zobacz do podrozdziału "Pomiar temperatury"
  4. Tylko do kalibracji niezrównoważenia, zobacz na kolejną tabelkę poniżej.

Wybór kanału nieróżnicowego ADC8 włącza pomiar temperatury. Jeśli te bity zostaną zmienione podczas konwersji, to zmiana nie wejdzie w życie, aż konwersja zostanie zakończona (ustawiony bit ADIF w ADCSRA).

Należy bardzo uważać przy zmianie kanałów różnicowych. Po wyborze kanału różnicowego, stopień wejściowy może wymagać nieco czasu do ustabilizowania się. Dlatego zalecane jest, aby wymuszać na przetworniku wykonanie długiej konwersji po zmianie multipleksera lub ustawień napięcia odniesienia. Można to wykonać przez wyłączenie przetwornika A/C, dokonanie zmian ustawień napięcia odniesienia, a następnie ponowne włączenie przetwornika A/C. Alternatywnie należy pominąć pierwszy wynik konwersji po zmianie ustawień napięcia odniesienia.

Poniższa tabelka podaje szczegóły wyboru kanałów różnicowych jak również wyboru kanałów do kalibracji niezrównoważenia. Dla kanałów różnicowych bit MUX0 działa jako selektor wzmocnienia. Gdy bit MUX0 jest wyzerowany (‘0’) wybierane jest wzmocnienie 1x, a gdy jest ustawiony (‘1’), wybierane jest wzmocnienie 20x. Dla normalnych par kanałów różnicowych bit MUX5 działa jako bit odwracania polaryzacji. Zmiana bitu MUX5 zamienia ze sobą wejścia odwracające i nieodwracające.

Nieodwracające
wejście różnicowe
Odwracające
wejście różnicowe
MUX5:0
Wzmocnienie 1x Wzmocnienie 20x
ADC0 (PA0) ADC0 (PA0) (1) N/A 100011
ADC1 (PA1) 001000 001001
ADC3 (PA3) 001010 001011
ADC1 (PA1) ADC0 (PA0) 101000 101001
ADC2 (PA2) 001100 001101
ADC3 (PA3) 001110 001111
ADC2 (PA2) ADC1 (PA1) 101100 101101
ADC3 (PA3) 010000 010001
ADC3 (PA3) ADC0 (PA0) 101010 101011
ADC1 (PA1) 101110 101111
ADC2 (PA2) 110000 110001
ADC3 (PA3)(1) 100100 100101
ADC4 (PA4) 010010 010011
ADC5 (PA5) 010100 010101
ADC6 (PA6) 010110 010111
ADC7 (PA7) 011000 011001
ADC4 (PA4) ADC3 (PA3) 110010 110011
ADC5 (PA5) 011010 011011
ADC5 (PA5) ADC3 (PA3) 110100 110101
ADC4 (PA4) 111010 111011
ADC6 (PA6) 011100 011101
ADC6 (PA6) ADC3 (PA3) 110110 110111
ADC5 (PA5) 111100 111101
ADC7 (PA7) 011110 011111
ADC7 (PA7) ADC3 (PA3) 111000 111001
ADC6 (PA6) 111110 111111
ADC7 (PA7)(1) 100110 100111
Uwaga: 1. Tylko do kalibracji niezrównoważenia.

Dla celów kalibracji niezrównoważenia niektóre kanały różnicowe mogą zostać wybrane jednocześnie na wejścia odwracające i nieodwracające, co pozwala zmierzyć wartość napięcia niezrównoważenia. Kalibrację można wykonać dla ADC0, ADC3 i ADC7.


ADCSRA – ADC Control and Status Register A – Rejestr A sterowania i stanu przetwornika A/C

Bit 7 6 5 4 3 2 1 0  
0x06 (0x26) ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 ADCSRA
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – ADEN: ADC Enable – Włączenie przetwornika A/C

Zapisanie jedynki do tego bitu włącza moduł przetwornika A/C. Zapis zera powoduje wyłączenie przetwornika A/C. Wyłączenie przetwornika podczas wykonywania przetwarzania spowoduje jego przerwanie i zakończenie.

Bit 6 – ADSC: ADC Start Conversion – Rozpoczęcie przetwarzania w przetworniku A/C

W trybie pojedynczego przetwarzania (ang. Single Conversion mode), zapisuj ten bit logiczną jedynką, aby rozpocząć każde przetwarzanie. W trybie ciągłym (ang. Free Running mode) zapisz do tego bitu jedynkę, aby rozpocząć pierwsze przetwarzanie. Pierwsze przetwarzanie po włączeniu przetwornika zajmuje 25 cykli zegarowych przetwornika A/C zamiast standardowo 13. W trakcie tego pierwszego przetwarzania wykonywana jest inicjalizacja przetwornika A/C.

W trakcie przetwarzania bit ADSC będzie dawał odczyt 1. Gdy przetwarzanie się zakończy, wróci do stanu zero. Zapis zera do tego bitu nie daje żadnego efektu.

Bit 5 – ADATE: ADC Auto Trigger Enable – Włączenie automatycznego wyzwalania

Gdy bit ten zostanie zapisany jedynką logiczną, włącza się automatyczne wyzwalanie przetwornika A/C. Przetwornik A/C rozpocznie przetwarzanie przy narastającym zboczu wybranego sygnału wyzwalającego. Źródło wyzwalania wybierane jest za pomocą ustawienia bitów ADTS w rejestrze ADCSRB.

Bit 4 – ADIF: ADC Interrupt Flag – Znacznik przerwania z przetwornika A/C

Ten bit jest ustawiany, gdy ukończone zostanie przetwarzanie w przetworniku A/C i rejestry danych zostaną uaktualnione. Przerwanie przy zakończeniu przetwarzania w przetworniku A/C jest wykonywane, jeśli są ustawione oba bity ADIE i I w rejestrze SREG. Bit ADIF jest zerowany przy wykonaniu odpowiedniego wektora obsługi przerwania. Alternatywnie można wyzerować ADIF przez zapis do tego bitu logicznej jedynki. Miej świadomość, iż odczyt-modyfikacja-zapis rejestru ADCSRA może spowodować zablokowanie oczekującego przerwania. Odnosi się to również do instrukcji SBI i CBI.

Bit 3 – ADIE: ADC Interrupt Enable – Włączenie przerwań od przetwornika A/C

Gdy bit ten zostanie zapisany stanem 1 oraz jest ustawiony bit I w rejestrze SREG, to uaktywnia się przerwanie przy zakończeniu przetwarzania w przetworniku A/C.

Bity 2:0 – ADPS2:0: ADC Prescaler Select Bits – Bity wyboru preskalera

Bity te określają współczynnik podziału pomiędzy częstotliwością zegara systemowego a częstotliwością wejściową do przetwornika A/C.

ADPS2 ADPS1 ADPS0 Współczynnik podziału
0 0 0 2
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

ADCL i ADCH – ADC Data Register – Rejestr danych (dolny i górny bajt) przetwornika A/C

ADLAR = 0 – wynik wyrównany prawostronnie

Bit 15 14 13 12 11 10 9 8  
0x05 (0x25) - - - - - - ADC9 ADC8 ADCH
0x04 (0x24) ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 ADCL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt O O O O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

ADLAR = 1 – wynik wyrównany lewostronnie

Bit 15 14 13 12 11 10 9 8  
0x05 (0x25) ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCH
0x04 (0x24) ADC1 ADC0 - - - - - - ADCL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt O O O O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Gdy przetwarzanie w przetworniku A/C dobiegnie końca, wynik znajdzie się w tych dwóch rejestrach. Gdy zostanie odczytany rejestr ADCL (z dolnym bajtem wyniku), rejestr danych przetwornika A/C nie będzie uaktualniany aż do momentu odczytu ADCH (z górnym bajtem wyniku). W konsekwencji, jeśli wynik jest wyrównany lewostronnie i nie jest wymagana precyzja większa od 8 bitów, to wystarczy odczytać rejestr ADCH (otrzymasz 8 najstarszych bitów wyniku przetwarzania). W przeciwnym razie najpierw należy odczytać ADCL, a następnie ADCH.

Bit ADLAR w rejestrze ADMUX, wpływa na sposób odczytu wyniku przetwarzania z tych rejestrów. Jeśli bit ADLAR jest ustawiony, to wynik zostaje wyrównany lewostronnie. Jeśli bit ADLAR jest wyzerowany (wartość standardowa), to wynik jest wyrównany prawostronnie.

ADC9:0: ADC Conversion Result – Wynik przetwarzania w przetworniku A/C

Te bity reprezentują 10-bitowy wynik przetwarzania.


ADCSRB – ADC Control and Status Register B – Rejestr B sterowania i stanu przetwornika A/C

Bit 7 6 5 4 3 2 1 0  
0x03 (0x23) BIN ACME  ADLAR  ADTS2 ADTS1 ADTS0 ADCSRB
Zapis/Odczyt Z/O Z/O O Z/O O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – BIN: Bipolar Input Mode – Tryb wejścia bipolarnego

Stopień wzmacniający pracuje jak zwykle w trybie unipolarnym, lecz tryb bipolarny można wybrać przez zapis bitu BIN w rejestrze ADCSRB. W trybie unipolarnym wspierane są tylko konwersje nieróżnicowe i napięcie na wejściu nieodwracającym musi zawsze być większe od napięcia na wejściu odwracającym. W przeciwnym razie wynik nasyci się do wartości napięcia odniesienia. W trybie bipolarnym obsługiwane są konwersje różnicowe, a wynik zostaje przedstawiony w postaci liczby całkowitej ze znakiem w kodzie uzupełnień do dwóch. W trybie unipolarnym rozdzielczość wynosi 10 bitów, a w trybie bipolarnym rozdzielczość wynosi 9 bitów + jeden bit znaku

Bity 5,3 – Zarezerwowane

Te bity są zarezerwowane i przy odczycie dają zawsze wartość zero. Dla kompatybilności z przyszłymi mikrokontrolerami zawsze zapisuj te bity stanem zero.

Bit 4 – ADLAR: ADC Left Adjust Result – Wyrównanie lewostronne wyniku przetwarzania w przetworniku A/C

Bit ADLAR wpływa na sposób prezentacji wyniku przetwarzania przetwornika A/C w rejestrze danych ADC. Aby wynik był prezentowany z dosunięciem lewostronnym, wpisz do bitu ADLAR jedynkę logiczną. W przeciwnym razie wynik będzie dosunięty do prawej strony. Zmiana bitu ADLAR wpływa natychmiast na rejestr danych ADC, bez względu na trwające przetwarzania. Więcej na temat tego bitu znajdziesz w opisie rejestru ADC.

Bity 2:0 – ADTS[2:0]: ADC Auto Trigger Source – Automatyczne źródło wyzwalania przetwarzania w przetworniku A/C

Jeśli bit  ADATE w rejestrze ADCSRA zostanie zapisany logiczną jedynką, to wartość tych bitów wybiera źródło sygnału, który będzie wyzwalał przetwarzanie w przetworniku A/C. Jeśli bit ADATE jest wyzerowany, to ustawienia bitów ADTS2:0 nie będą miały żadnego znaczenia. Przetwarzanie będzie wyzwalane narastającym zboczem w wybranym znaczniku przerwania (zmianą z 0 na 1). Zwróć uwagę, iż przełączenie z sygnału o poziomie niskim na sygnał o poziomie wysokim wytworzy narastające zbocze w sygnale wyzwalającym. Jeśli bit ADEN w rejestrze ADCSRA jest ustawiony, to rozpocznie się w tej sytuacji przetwarzanie. Przełączenie w tryb ciągły (ang. Free Running mode, ADTS[2:0]=0) nie spowoduje zdarzenia wyzwalającego, nawet jeśli zostanie ustawiony znacznik przerwania od przetwornika A/C.

Wybór źródeł autowyzwalania dla przetwornika A/C

ADTS2 ADTS1 ADTS0 Źródło wyzwalania
0 0 0 Tryb ciągły
0 0 1 Komparator analogowy
0 1 0 Znacznik przerwania zewnętrznego 0
0 1 1 Zgodność porównania A w timerze/liczniku 0
1 0 0 Przepełnienie timera/licznika 0
1 0 1 Zgodność porównania B w timerze/liczniku 1
1 1 0 Przepełnienie timera/licznika 1
1 1 1 Zdarzenie Input Capture w timerze/liczniku 1

DIDR0 – Digital Input Disable Register 0 – Rejestr 0 wyłączania wejść cyfrowych

Bit 7 6 5 4 3 2 1 0  
0x01 (0x21) ADC7D ADC6D ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D DIDR0
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:0 – ADC7D:ADC0D: ADC[7:0] Digital Input Disable – Wyłączanie wejść cyfrowych

Gdy dany bit zostanie zapisany  stanem logicznym 1, to bufor wejścia cyfrowego na odpowiadającej mu końcówce wejścia analogowego przetwornika A/C zostaje wyłączony i nie pobiera prądu. Odpowiadający mu bit w rejestrze PIN będzie zawsze zwracał wartość zero, gdy zostanie tutaj ustawiony jego bit. Gdy do sygnał analogowy jest podawany na końcówkę ADC[7:0], a wejście cyfrowe tej końcówki nie jest potrzebne, to odpowiadający tej końcówce bit w DIDR0 powinien być ustawiony na 1 w celu zmniejszenia poboru energii przez bufor wejść cyfrowych.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2022 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.