Autor: tmf
Redakcja: Dondu
Artykuł jest kontynuacją: Jak czytać noty katalogowe mikrokontrolerów AVR (cz. I)
Mam nadzieję, że część pierwsza artykułu nie zanudziła czytelników na śmierć (w końcu istnieją lepsze lektury niż noty katalogowe, nawet „Lalka” wydaje się być momentami bardziej interesująca). Niemniej im więcej czasu spędzimy nad notą procesora tym mniej zawodu nas spotka w czasie budowy układu.
W poprzedniej części pokazałem fragmenty noty związane z ogólnymi właściwościami układu. W tej części zajmiemy się dwoma chyba jeszcze ważniejszymi fragmentami – opisującymi parametry analogowych układów peryferyjnych mikrokontrolera. Ich przestudiowanie jest o tyle ważne, że uświadamia nas, że stosowany ADC nie jest idealny, a DAC czasami może mieć błędy większe niż oczekujemy... ale po kolei.
Informacje podane dalej znajdują się w notach szczegółowych mikrokontrolerów XMEGA – na próżno ich szukać w notach ogólnych dotyczących rodziny. W przypadku ATMega i ATTiny informacje te są podane na końcu w sekcji Electrical Characteristics.
Przetwornik ADC
Jeden z najczęściej stosowanych układów peryferyjnych – z pewnością jego wykorzystanie jest bardzo efektowne, lecz nie takie łatwe. Jeśli zajrzymy do noty szczegółowej procesora (ja oparłem się o notę procesora XMEGA 8E5, nr 8153C-AVR-05/2013 – swoją drogą polecam ten procesor jako tani (5-6zł) zamiennik poczciwej ATMega8), to informacje o ADC znajdziemy w trzech miejscach.
Pierwsze na indeksie nazwane jest „ADC- 12-bit Analog to Digital Converter", czyli 12-bitowy przetwornik analogowo-cyfrowy. Ok, czyli już wiemy, że przetwornik w procesorze ma rozdzielczość 12-bitów. Sekcja opisująca każdy układ peryferyjny rozpoczyna się od paragrafu nazwanego Freatures (bajery):
Sekcja Features |
Tu znajdziemy krótkie podsumowanie możliwości układu peryferyjnego – w naszym przypadku ADC. Dowiemy się, że ADC w XMEGA 8E5 może próbkować z maksymalną szybkością 300 tys. próbek na sekundę (sps – samples per second), czas konwersji dla rozdzielczości 8-bitowej to 2,3 µs, i że mamy do dyspozycji 16 wejść analogowych, itd.
Na chwilę zatrzymam się przy wejściach analogowych. Wiele osób myli pojęcie multipleksera wejść analogowych umożliwiającego podłączenie wejścia ADC do jednego z, w tym przypadku, 16 wejść procesora, z obecnością 16 niezależnych przetworników. Pamiętajmy, że zazwyczaj mamy do dyspozycji jeden przetwornik (w wielu XMEGA dwa przetworniki) ADC, lecz możemy ich wejście przy pomocy multipleksera wejściowego podłączyć pod wybrany pin IO. Niemniej w danej chwili możemy wykonywać konwersję tylko z jednego (z dwóch w trybie różnicowym) wejść ADC.
Dowiadujemy się także, że ADC dysponuje wzmacniaczem wejściowym o wzmocnieniu ½-64-razy, jakimi dysponujemy napięciami referencyjnymi itd. Czyli same ogólniki – szczegóły ich opisu znajdziemy w nocie opisującej daną rodzinę mikrokontrolerów.
Niemniej informacje z sekcji „bajery” nie są wystarczające do budowy układu. Musimy ponownie zajrzeć do drugiej części, gdzie znajdują się dane o ADC – sekcji Electrical Characteristics i dostępnej w nowych notach Atmela sekcji Typical Characteristics.
Sekcja Electrical Characteristics
W sekcji tej znajdujemy część opisującą ADC nazwaną ADC Characteristics, czyli charakterystyka ADC. Zacznijmy od pierwszej tabelki tam się znajdującej:
Charakterystyka ADC. |
Co tu mamy ciekawego? Znajdziemy tu podstawowe parametry elektryczne i ich dozwolone zakresy:
AVCC – czyli napięcie zasilania części analogowej (m.in. ADC) – widzimy, że mieści się ono w zakresie Vcc-0,3V do Vcc+0,3V. Wynika z tego, że w praktyce AVCC powinno być takie jak Vcc – jeśli będzie niższe to dzięki wspomnianym w poprzedniej części diodom zabezpieczającym prąd będzie płynął z Vcc do AVcc zasilając część analogową (sytuacja niedozwolona), jeśli AVCC będzie o ponad 0,3V wyższe niż Vcc to będziemy mieli do czynienia z sytuacją odwrotną. Dlaczego więc AVcc po prostu nie podłączyć do Vcc? Ano dlatego, żeby mieć okazję dodatkowo wyfiltrować zasilanie ADC.
VREF – napięcie referencyjne ADC – w naszym przykładzie może ono mieścić się w zakresie 1V do AVcc-0,6V,
Rin i Cin – opór i pojemność wejścia ADC. Parametr bardzo istotny w sytuacji, w której chcemy próbkować sygnał z dużą częstotliwością, a rezystancja wyjścia próbkowanego układu jest spora.
RAREF i CAREF – odpowiednio opór i pojemność wejścia napięcia referencyjnego.
Vin – dozwolone napięcie wejścia ADC. W naszym przykładzie jest to 0 do Vref. Wynika z tego, że napięcie wejściowe nie może być niższe niż GND (w niektórych XMEGA może być niższe), a maksymalne napięcie wejściowe nie może przekroczyć VREF. Dlaczego? Jeśli je przekroczymy to nic wielkiego się nie stanie – po prostu ADC ulegnie saturacji i odczytamy z niego maksymalną wartość, np. 0xFFF. Stąd wynika, że po prostu nie możemy zmierzyć napięć spoza podanego zakresu.
Tu warto jeszcze wrócić do sekcji Absolutem Maximum Ratings – pamiętajmy, że napięcie na dowolnymi pinie (także wejściu ADC) nie może przekroczyć wartości określonej w tej sekcji!
Conversion range – to parametr charakterystyczny dla ADC w XMEGA – ze względu na pewne tryby przetwarzania podany jest zakres napięcia wejściowego w tych trybach, w naszym przypadku będzie to -0,95VREF do 0,95VREF. Czyli dla VREF równego 1V zakres przetwarzania wynosi -950 do 950 mV, czyli takie napięcie może panować na wejściu ADC, prawda?
BZDURA! Pamiętamy, że sekcja Absolute Maximum Ratings nakłada ograniczenie na napięcie panujące na pinie do np. GND-0,3V. Czyli nasz zakres zawęża się do -0,3V do 0,95V. Dodatkowo parametr Vin zawęża ten zakres do 0..VREF.
W kolejnej tabelce mamy informacje na temat taktowania i czasów przetwarzania ADC:
Taktowanie ADC. |
Co tu znajdziemy?
CLKADC – częstotliwość taktowania ADC. W naszym przykładzie mieści się ona w zakresie 100 do 1800 kHz. Widzimy więc, że jest ograniczona i od dołu i od góry. Dlaczego? ADC w AVRach na na wejściu układ S&H (sample & hold), w skrócie napiecie na wejściu ADC utrzymuje w czasie próbkowania specjalny kondensator. Jednak na skutek upływności z czasem jego ładunek się traci. Stąd też jeśli taktowanie ADC będzie zbyt wolne zwiększy się błąd pomiaru na skutek utraty ładunku. Z kolei jeśli będziemy taktować ADC ze zbyt dużą szybkością, kondensator ten nie zdąży się naładować i błąd też się zwiększy (są także inne powody dla których błąd będzie się zwiększał). Pamiętasz w poprzedniej sekcji dane na temat pojemności i oporu wejścia ADC? No to możesz sobie wyliczyć charakterystykę filtra dolnoprzepustowego pierwszego rzędu, który powstaje na wejściu ADC i ogranicza efektywną szybkość próbkowania. Ale to temat na kolejny artykuł, lub książkę.
Sample rate – czyli częstotliwość próbkowania (nie mylić z częstotliwością taktowania ADC). W XMEGA mamy podaną wartość sample rate w kilku rzędach – dla normalnej pracy ADC, oraz dla pracy ze zmniejszonym poborem energii (ograniczenie poboru energii odpowiednio niskie (normalne), średnie, lub wysokie). Wynika z tego, że stosując tryb o obniżonym poborze energii nie możemy próbkować z maksymalnymi szybkościami, wprowadza to więc pośrednio ograniczenie na zegar taktujący ADC.
Conversion time – czyli czas konwersji w taktach ADC (nie taktach CPU!),
Start-up time – czas pierwszej konwersji po włączeniu ADC – zazwyczaj jest dłuższy,
ADC settling time – czas jaki musi upłynąć od momentu włączenia lub przełączenia napięcia referencyjnego lub trybu pracy przetwornika do rozpoczęcia pierwszej konwersji. Jeśli go nie będziemy przestrzegać, to pierwsza konwersja będzie obarczona większym błędem.
A skoro już o błędach mowa... z kolejnej tabelki dowiemy się, że nasz ADC nie jest idealny, a uzyskany wynik jest obarczony błędami:
Błędy ADC. |
Pierwsza pozycja to Resolution, czyli rozdzielczość ADC. Chwila, przecież rozdzielczość miała być 12-bitowa? Prawda? No tak, dlatego właśnie sekcję Features nazwałem „bajery”. W tamtej sekcji mamy maksymalne, marketingowe parametry układu, tu mamy szarą rzeczywistość.
Jak widzimy 12-bitową rozdzielczość uzyskamy w trybie różnicowym (differential) i w trybie pojedynczego wejścia bez znaku. Natomiast w trybie pojedynczego wejścia ze znakiem rozdzielczość jest o 1 bit niższa. Warto też pamiętać, że realnie uzyskana rozdzielczość zależy od wielu innych czynników i zazwyczaj jest niższa.
Kolejny parametr – integral non-linearity, czyli nieliniowość przetwornika. W idealnym ADC zależność pomiędzy wynikiem konwersji a napięciem na wejściu jest zależnością liniową. W realnym ADC tak nie jest. W efekcie mamy tzw. błąd nieliniowości, który w zależności od warunków (są one podane w tabelce) może sięgać dla naszgo procesora 1-3 LSB. Dodatkowo przy parametrze INL mamy w wykładniku odnośnik nr 1. Jak to zwykle bywa ważne jest to co jest napisane najmniejszym druczkiem. A co tam czytamy?
„Maximum numbers are based on characterisation and not tested in production, and valid for 10% to 90% input voltage range.” – czyli że podane tu wartości są oparte na charakterystyce układu, a nie na rzeczywistych testach w produkcji. Ale co gorsze, że dane te są poprawne jeśli napięcie na wejściu będzie się mieścić w zakresie 10-90% napięcia dopuszczalnego (czyli GND-Vcc-0,6V). A co poza tym zakresem? Hmm, o tym producent milczy, ale najpewniej możemy się spodziewać znacznie większych błędów.
Dalej mamy differential non-linearity – parametr podobny do poprzedniego, z tym, że mierzy on różnicę pomiędzy spodziewaną wartością ADC dla danego napięcia, a rzeczywistą.
Tu warto jeszcze rozwinąć skrót LSB w którym wyrażane są te parametry. LSB to Least Significant Bit, czyli bit najmniej znaczący. Jeśli dany błąd wynosi 1 LSB to znaczy, że odbiega on od wartości rzeczywistej o 1 jednostkę rozdzielczości ADC (dla 12-bitowego przetwarzania o 1/4096 wartości). 3 LSB, to błąd 3 jednostek, czyli dla 12-bitowego ADC 3/4096.
Offset error – to kolejny błąd ADC – tzw. błąd offsetu (przesunięcia). Jak wspomniałem w idealnym ADC zależność uzyskanej wartości od napięcia jest liniowa, czyli możemy ją zapisać równaniem ADC=aV+offset, w idealnym ADC offset powinien być równy 0, ale w rzeczywistym nie jest – stąd błąd offsetu.
Gain error – czyli błąd wzmocnienia. W naszym równaniu liniowym mamy komponentę aV – to jak nasze a odbiega od idealnego to właśnie błąd wzmocnienia. W tabelce błąd ten jest wyrażony w wartościach absolutnych, czyli np. dla zewnętrznego napięcia referencyjnego wynosi on -5mV, czyli jeśli spodziewamy się np. wartości 1,000V to możemy odczytać realnie coś pomiędzy 0,995 a 1,000V.
Błędy offsetu i wzmocnienia możemy korygować programowo (a w XMEGA także sprzętowo).
Wartości liczbowe pokazane w tabelach odnoszą się do wskazanych warunków. Więcej informacji możemy uzyskać z sekcji Typical Characteristics, części ADC Characteristics. Znajdziemy tam te same informacje pokazane w postaci graficznej. Lecz płynie z nich wiele interesujących wniosków.
Zacznijmy od wykresu pierwszego:
Błąd INL vs. Vref. |
Wykres ten przedstawia zależność błędu nieliniowości (INL) w funkcji napięcia referencyjnego dla różnych trybów pracy przetwornika. Co z niego wynika? Widzimy, że błąd INL jest najmniejszy dla napięć referencyjnych w zakresie 2-3V.
Dlaczego nie mamy napięć wyższych niż 3V? Pamiętamy z poprzednich tabelek, że VREF może być w zakresie 1V do AVCC-0,6V, prawda? Ponieważ zasilanie XMEGA może wynosić maksymalnie 3,6V (sekcja absolute maximum ratings), stąd też maksymalna wartość VREF nie może być większa niż 3V. Widzimy więc, że dla minimalizowania nieliniowości należy wybierać wyższe napięcie referencyjne i tryb różnicowy pracy ADC.
Kolejne wykresy pokazują nam błąd w zależności od innych parametrów, ponieważ ich interpretacja jest podobnie prosta, pominiemy je.
Kolejne wykresy obrazują błąd wzmocnienia. Zobaczmy np. wykres błąd wzmocnienia vs. VREF:
Błąd wzmocnienia vs. Vref. |
Widzimy, że dla trybu z pojedynczym wejściem ze znakiem jest on najmniejszy, a dla pozostałych maleje wraz ze wzrostem napięcia odniesienia. Podobnie możemy oszacować błąd offsetu względem napięcia:
Błąd offsetu. |
Warto sobie przeglądnąć podane wykresy, aby uświadomić sobie jakie błędy w ADC występują i w jakich warunkach się one nasilają.
Ale ADC to nie tylko przetwornik, ale także powiązany z nim wzmacniacz wejściowy umożliwiający wzmocnienie sygnału w zakresie ½ do 64-razy. Stąd też wrócimy do sekcji ADC, żeby sprawdzić jakie parametry ma nasz wzmacniacz. Informacje te znajdziemy w tabelce Gain stage characteristics:
Charakterystyka wzmacniacza. |
Nie powinno nas dziwić, że dodatkowy układ analogowy wprowadza swoje błędy, stąd też mamy podane błędy ofsetu i wzmocnienia dla danego wzmocnienia wzmacniacza, oraz zakres napięć wejściowych (signal range). Ale mamy także parametr:
Clock rate – który wyniosi tyle co CLKADC, dzięki czemu wiemy, że wzmacniacz wejściowy nie nakłada ograniczeń na częstotliwość pracy ADC,
Propagation delay – czyli opóźnienie propagacji. Widzimy, że włączenie wzmacniacza wprowadza dodatkowe opóźnienie w torze ADC równe ½ do 3 cykli CLKADC. Wydłuża to czas konwersji o podaną liczbę cykli. Parametr ten jest ważny w przypadku przetworników ADC potokowych (np. w XMEGA serii A), gdyż ogranicza częstotliwość próbkowania wprowadzając dodatkowe opóźnienie w potoku.
Napięcie referencyjne
ADC do poprawnej pracy wymaga napięcia referencyjnego. Możemy zastosować zewnętrzne napięcie referencyjne (wymagane dla naprawdę dokładnych pomiarów), możemy zastosować jako referencję napięcie zasilania Vcc (bardzo kiepski pomysł w większości przypadków), albo wewnętrzne napięcie referencyjne. Zobaczmy jakie ma ono parametry. Ponieważ wewnętrzna referencja wykorzystywana jest przez różne podsystemy procesora, opis jej znajdziemy w sekcji Bandgap and Internal 1,0V Reference Characteristics:Charakterystyka VRef. |
Zajmijmy się tylko częścią dotyczącą napięcia referencyjnego. Widzimy, że jego wartość (INT1V) mieści się w zakresie 0,99-1,01V, co jest dobrą wiadomością, szczególnie jeśli porównamy sobie to z notami np. ATMega, gdzie wewnętrzna referencja miała kosmiczny rozrzut. Wartość tą możemy wyrazić także względnie, jako 1V±1%, co nam uświadamia kolejny błąd jaki wprowadzamy do ADC.
Skoro napięcie referencyjne różni się o ±1% to błąd ten wprost przenosi się na wynik pomiaru, którego dokładność też nie może być lepsza niż to ±1% (w rzeczywistości jest gorsza ze względu na wymienione wcześniej błędy i inne związane np. z szumami). Widzisz więc, że dla takiej referencji uzyskanie 12-bitowej dokładności pomiaru (nie rozdzielczości) jest kompletną iluzją. Co więc zrobić? Jeśli zależy ci na większej dokładności zastosuj zewnętrzną referencję.
Nasze wewnętrzne źródło opisywane jest jeszcze przez jeden parametr – variation over voltage and temperature, czyli zmienność względem napięcia (zasilania) i temperatury. Łącznie parametry te jak widzimy mogą zmieniać napięcie referencyjne o ±3%, wprowadzając kolejne błędy. A jak te błędy wyglądają konkretnie? Tu nam z pomocą przychodzą wykresy z sekcji Typical Characteristics:
VRef vs. napięcie i temperatura. |
Widzimy na wykresie zależność napięcia referencyjnego od temperatury dla różnych napięć zasilania procesora. Widzimy, że w całym zakresie temperatur pracy procesora wartość referencji zmienia się od ok. 980 mV do ok. 1007 mV, a więc od -2% do +0,7%. Należy jednak pamiętać, że są to wartości typowe, czyli, że poszczególne egzemplarze XMEGA mogą się bardziej różnić, niemniej większość będzie miała referencję zachowującą się tak jak na pokazanym wykresie.
To tyle w tej części. Zostało nam jeszcze kilka układów analogowych.
Czy je opisywać? Dajcie znać :)
Część I-sza artykułu
Artykuł jest kontynuacją: Jak czytać noty katalogowe mikrokontrolerów AVR (cz. I)
Odpowiadając na twoje pytanie - tak pisz!!!!!!!!!!!!!!!!!!!!!!!! Tylko więcej konkretów.
OdpowiedzUsuńDobre to jest! :) Myślę że prędzej czy później każdy tu trafi i doceni głębsze tłumaczenia tych lakoniczny i porozrzucanych komentarzy z dokumentacji. Jestem gorąco za kontynuacją!
OdpowiedzUsuńMichał
Chyba dwa komentarze to za mało, żeby zachęcić autora do dalszej pracy.
OdpowiedzUsuńTo jest bardzo cenny materiał i należy kontynuować!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bardzo wartościowy materiał! Zaglądam często na tę stronę i znajduję zawsze coś przydatnego dla siebie. Trzeba jednak mieć na uwadze, że napisanie dobrego tekstu wymaga dużo pracy i czasu. Autorowi należą się podziękowania!!!. Pozdrawiam wszystkich odwiedzających tę bardzo dobrą stronę.
OdpowiedzUsuńDuże podziękowania dla autora za włożoną pracę w tak trudnym temacie jak
OdpowiedzUsuńczytanie ze zrozumieniem PDF . Jest to bardzo przydatny i myślę ,że przydatny
cykl artykułów dla nas początkujących.
Na pewno będę czekał na następne (o ile jeszcze będą)
Gratulacje.
Dobra robota ;)
OdpowiedzUsuńTAK!!
OdpowiedzUsuń