wtorek, 29 marca 2011

ADC - Dokładność vs podłączanie


Autor: Dondu

Większość mikrokontrolerów posiada przetwornik analogowo-cyfrowy (ADC - Analog to Digital Converter). Ich dokładność i szybkość wystarcza do większości zastosowań w urządzeniach sterujących.

Jednakże dokładność nie zależy tylko i wyłącznie od samego ADC, ale także od sposobu jego podłączenia.

Pokażę to na przykładzie mikrokontrolerów Atmel AVR, ale zasady te są takie same lub podobne we wszystkich mikrokontrolerach dowolnych producentów. Informacje zawarte w tym temacie (jak i większości artykułów tego bloga), to swego rodzaju przykazania, których łamanie doprowadziło już do rozpaczy nie jednego początkującego :-)


To długi, ale w sumie prosty temat, 
który warto poznać bardzo dokładnie.

Zanim jednak przejdziemy do meritum artykułu, powinieneś poznać bardzo istotne informacje.



Wstęp I - Parametry ADC.
ATmega8 - Parametry ADC 

Zerknijmy na tabelkę parametrów ADC. Znajdziesz tam wiele mniej lub bardziej istotnych (z punktu widzenia Twojego projektu) parametrów. Część z nich jest obarczonych pewnym błędem produkcyjnym mikrokontrolera i ma zakresy, w których może się mieścić. Trzeba to brać pod uwagę, by móc ADC prawidłowo wykorzystać.





W tym artykule interesują nas jednak tylko niektóre parametry elektryczne.


AVCC
To pierwszy najważniejszy parametr mówiący o napięciu zasilania części analogowej mikrokontrolera.


Jak widać AVcc, jest powiązane z Vcc (napięcie zasilania części cyfrowej mikrokontrolera) i może się różnić o ±0,3V. Jednakże pod tabelką jest dodatkowe zastrzeżenie, że AVcc nie może być mniejsze niż 2,7V, i większe niż 5,5V i to także musisz brać pod uwagę.


VREF
Istotnym ograniczeniem dla napięcia referencyjnego (odniesienia) Vref jest fakt, iż napięcie to nie może przekroczyć wartości napięcia AVcc. Zwróć uwagę, że występuje także dolna granica i jest ona określona wartością 2V.


Innymi słowy nie masz pełnej dowolności w zakresie ustalenia napięcia referencyjnego!



VINT
Wewnętrzne źródło napięcia referencyjnego (2,56V), także w zależności od partii, czy konkretnego mikrokontrolera może się znacznie różnić od 2,56V:


Jak widzisz przedział jest bardzo duży. Można by wręcz posądzić Atmela o żart, że źródło nazwano 2,56 , a nie 2,6V , ale pod tabelką pisze nota nr 1: Values are guidelines only czyli wartości w tabelce są tylko wytycznymi - cokolwiek to oznacza :-)


VIN
No i wreszcie Vin, czyli napięcia, które mogą być podawane na piny pomiarowe (kanały) ADC:


Tu sprawa jest prosta i bezdyskusyjna. Napięcia mierzone mogą być z zakresu od masy (GND) do napięcia odniesienia (Vref).

Co się stanie jeżeli przekroczysz wartość maksymalną, czyli podasz Vin > Vref?
Datasheet informuje, że odczytasz wartości oscylujące wokół maksymalnej czyli 0x3FF:






Wstęp II - Konflikty napięć referencyjnych

To druga istotna sprawa, którą powinieneś poznać, zanim przejdziesz do dalszej części artykułu.

Większość mikrokontrolerów ma możliwość programowego wyboru źródeł napięć odniesienia. Problem pojawia się, gdy Twój projekt zakłada podłączenie jakiegoś zewnętrznego źródła napięcia referencyjnego.


Dlaczego?
Popatrzmy na dokumentację przetwornika ADC mikrokontrolera ATmega8, a konkretnie część dotyczącą modułu przełączania napięcia referencyjnego:

Rys. 1 - Przełącznik napięcia odniesienia przetwornika ADC


Zobaczmy jak działa moduł przełącznika napięcia referencyjnego:


Tabelka 74 - Sterowanie przełącznikiem napięcia referencyjnego

Po włączeniu zasilania lub resecie mikrokontrolera bity REF1 i REF0 są domyślnie wyzerowane, więc wewnętrzne źródło 2,56V jest wyłączone, a źródłem napięcia referencyjnego jest zewnętrzne napięcie podawane na pin AREF (pierwszy wiersz tabelki 74).

Ten tryb wykorzystać można do podłączenia zewnętrznego źródła napięcia odniesienia bezpośrednio do pinu AREF. Pozwala to na wykorzystanie bardzo stabilnych źródeł na osobnych układach scalonych lub innych zastosowań, które projektantowi przyjdą do głowy. Napięciem odniesienia może być także napięcie zasilające część analogową mikrokontrolera, czyli AVcc np. 5V (schemat Z).


Gdzie ten konflikt?
Pojawia się on wtedy gdy Twój projekt zawiera połączenie pinu AREF do jakiegoś źródła napięcia referencyjnego np. z specjalnego układu scalonego źródła, dzielnika rezystorowego, ... czy po prostu do AVcc. W takim przypadku gdy programista świadomie lub nie, wybierze któreś wewnętrzne źródło nastąpi konflikt napięć:


Rys. 2 - Przykład konfliktu źródeł napięcia referencyjnego.

Dlatego też projektanci mikrokontrolerów, by uniknąć konfliktu zaraz po włączeniu zasilania lub resecie, projektują mikrokontrolery tak, by napięcie odniesienia było ustawione na zewnętrzne - sprytni są, albo po prostu znają nas (elektroników) i wiedzą, że głupoto odporność to podstawa :-)

Co się stanie gdy do konfliktu doprowadzę?
Na szczęście zwykle wewnętrzne źródła napięcia odniesienia mają wysoką impedancję (dla uproszczenia rezystancję), przez co zwarcie takiego napięcia z innym źródłem o wyższym lub niższym napięciu, lub zwarcie do masy, lub nawet do Vcc, nie powoduje uszkodzenia mikrokontrolera.

Jednakże nie możesz liczyć na to, że tak nieprawidłowo przygotowany do pracy mikrokontroler, będzie dokonywał pomiarów ADC z możliwie największą dokładnością.

Innymi słowy, zwracaj uwagę gdy piszesz program, by nie doprowadzać do konfliktu.



Wstęp III - Pinologia

Rozkład nóżek mikrokontrolera (tzw. pinologia) ma bardzo istotne znaczenie dla tematu ADC.

Producenci mikrokontrolerów rozmieszczają piny części analogowej w zwarty sposób (obok siebie) niezależnie z jaką obudową mikrokontrolera masz do czynienia. Mogą być małe różnice, ale zasada trzymania ich "w kupie" jest zachowana :-)

Wynika to z wielu powodów opisanych w niniejszym artykule. Zobaczy więc przykłady:


Atmega 8 - Obudowy DIP i TQFP

Jak widzisz niezależnie od tego jaką wersję obudowy wybierzesz, piny dot. części analogowej mikrokontrolera są zgrupowane.

Zauważ jednak, że o ile jest jawnie zadeklarowany pin zasilający część analogową, który nazywa się AVcc, o tyle nie ma jawnie zadeklarowanej nazwy masy analogowej. W takiej sytuacji powinieneś przyjąć, że masą analogową jest pin GND, najbliższy pinowi AVcc, tym bardziej, gdy jest on pomiędzy pinami części analogowej, jak w przypadku wyżej pokazanego mikrokontrolera.

Przy okazji zwróć uwagę także na to, że dla tego samego  mikrokontrolera odbudowa DIP ma 6 kanałów ADC, a obudowa TQFP ma ich 8.


A jak to jest w mikrokontrolerach innych producentów?

Na przykład firma Microchip oznacza swoje piny bardzo jednoznacznie, by projektant nie miał żadnych wątpliwości, które piny zasilają część analogową, a które cyfrową:


Rys. 3


Czasami nawet producent ma problemy z rozmieszczeniem "w kupie" wszystkich pinów analogowych, bo na przykład (patrz rysunek powyżej) mikrokontroler zawiera 16 kanałów ADC, a nawet 24 (w 80-ciu nóżkowej wersji tego mikrokontrolera).

Dla bardziej skomplikowanych układów ADC są także wejścia napięcia referencyjnego ujemne. Wtedy z reguły mamy doczynienia z dwoma wejściami Ref+ i Ref- (zaznaczone na rysunku kolorem zielonym).






ADC - Dokładność vs podłączanie

teraz już możemy przejść do meritum tematu


Co jest istotne?
  1. Sposób podłączenia zasilania mikrokontrolera oraz pinu (lub pinów) napięcia odniesienia (referencyjnego).
  2. Sposób wykorzystania sąsiednich pinów.
  3. Projekt płytki drukowanej (tzw. PCB).
  4. Wykorzystanie trybu redukowania zakłóceń w czasie pomiaru.

Który z powyższych punktów jest najbardziej istotny?
Każdy bez wyjątku! Na końcowy rezultat dokładności wyniku, w mniejszym lub większym stopniu wpływa każdy z powyższych punktów. Zlekceważenie jednego z nich może skutkować, bardzo "pływającymi" wynikami pomiarów.



1. Podłączenie zasilania mikrokontrolera.
Początkujący (i nie tylko) nie doceniają prawidłowych zasad podłączenia zasilania mikrokontrolera. Jakie są więc owe prawidłowe zasady?

Najważniejsza z nich to filtrowanie zakłóceń, następnie filtrowanie zakłóceń i na koniec pozostaje już tyko filtrowanie zakłóceń :-)

Bateria i akumulator także?
Nieustanne filtrowanie nawet wtedy gdy mikrokontroler jest zasilany z baterii lub akumulatora - rzuć okiem na wykresy tutaj: Bateria zasila mikrokontroler



Kondensatory - jakie?
W dalszej części artykułu będę pisał o używaniu kondensatorów do filtrowania napięć. Kondensatory te nie mogą być dobrane przypadkowo, bo i wynik ich pracy będzie "przypadkowy" :-)

Do filtrowania zakłóceń powinieneś stosować kondensatory ceramiczne, a dla większych pojemności mogą być tantalowe. Wystrzegać się należy "zwykłych" elektrolitycznych. W ostateczności mogą być elektrolityczne, ale tzw. Low ESR, czyli o niskiej impedancji.





1.1 Filtrowanie zasilania części cyfrowej.
O filtrowaniu zasilania mikrokontrolerów piszemy na blogu wielokrotnie. To bardzo istotny element wpływający także wprost na pracę ADC. Dlatego zawsze stosuj kondensatory filtrujące osobno dla każdego pinu zasilającego: Zasilanie mikrokontrolera

W celu zwiększenia dokładności w większych mikrokontrolerach stosuje się rozdzielenie zasilania części analogowej od cyfrowej. Ma to na celu wyeliminowanie przenoszenia się zakłóceń generowanych przez mikrokontroler z części cyfrowej na analogową:

ZAPAMIĘTAJ:
Mikrokontroler sam sobie generuje zakłócenia (część cyfrowa), które przenoszą się na jego własny przetwornik ADC zakłócając wyniki pomiarów.



Schemat A - Prawidłowe filtrowanie zasilania mikrokontrolera

Nawet wtedy gdy nie wykorzystujesz ADC musisz zadbać o podłączenie i filtrowanie zasilania na pinie AVCC zasilającym część analogową mikrokontrolera. To wymóg producenta (firmy Atmel), który szerzej opisałem w artykule:  Minimalne podłączanie pinów

Zasada ta dotyczy także pozostałych pinów zasilających: Zasilanie mikrokontrolera



1.2 Filtrowanie zasilania części analogowej.
Jeżeli Twój mikrokontroler posiada osobne piny zasilające część analogową oraz piny źródła napięcia odniesienia (referencyjnego), to masz kilka możliwości rozwiązania  problemu ich podłączenia.



1.2.1 Gdy nie wykorzystujesz ADC
Gdy nie wykorzystujesz ADC możesz pozostawić pin AREF wolny i wybrać programowo źródło zewnętrzne AVCC lub wewnętrzne źródło 2,56V zgodnie z tabelą 74, którą znajdziesz w dalszej części artykułu.

Powinieneś to zrobić dlatego, że pin nigdy nie powinien być pozostawiony bez wymuszenia na nim jakiegoś stanu (sprzętowo lub programowo), gdyż będzie "antenką" zbierającą zakłócenia, co może wpływać na nieprawidłową pracę całego mikrokontrolera: Zakłócenia w pracy mikrokontrolerów

Twój schemat może więc wyglądać tak:


Schemat B - ADC nie wykorzystywany

"Na upartego" można i taką wersję podłączenia (bez kondensatora na AREF) wykorzystywać do pomiarów przetwornikiem ADC, ale trudno wtedy liczyć na dokładność, przy pomiarach w 10-cio bitowej rozdzielczości. Jeżeli jednak satysfakcjonuje Ciebie dokładność osiągana za pomocą rozdzielczości 5-6 bitów, to ten schemat powinien wystarczyć.

Z drugiej strony, dodanie jednego kondensatora nie zrujnuje Twojej kieszeni, więc zrób to i wykorzystaj schematy zamieszczone poniżej.



1.2.2 ADC - wersja najprostsza
Jeżeli źródłem napięcia referencyjnego nie jest zewnętrzne źródło podłączone do AREF, dobrą metodą zwiększenia dokładności ADC, jest podpięcie do pinu AREF kondensatora filtrującego:



To bardzo istotny sposób poprawiający stabilność napięcia referencyjnego. Schemat Twój może więc wyglądać tak:

Schemat C - Wersja najprostsza

Ta wersja zapewnia już całkiem przyzwoitą dokładność pomiarów.



1.2.3 ADC - wersja dość dobra
Zdecydowanie najlepszą wersją podłączenia mikrokontrolera, dającą najbardziej stabilne i dokładne wyniki (bez zastosowania zewnętrznego scalonego źródła napięcia referencyjnego) jest wersja, w której do filtrowania napięcia zasilania części analogowej (AVCC), użyty zostaje filtr LC (dławik i kondensator). Kondensator na AREF nadal jest zalecany:


Schemat D - wersja dość dobra



1.2.4 ADC - wersja THE BEST!
Gdy zależy Ci na najdokładniejszym z możliwych pomiarów za pomocą ADC Twojego mikrokontrolera, powinieneś zastosować dobre zewnętrzne źródło napięcia odniesienia.

Tanim i przyzwoitym źródłem jest np. MCP1525 za około 3zł (cena. 2011r.). Źródło to charakteryzuje się bardzo dobrym stosunkiem ceny do jakości oraz małą obudową. Producent rekomenduje jego wykorzystanie z przetwornikami ADC o rozdzielczości od 8 do 12 bitów.

Schemat połączenia wygląda tak:

Schemat E - wersja najlepsza

Dokumentacja: MCP1525 datasheet

Zwróć uwagę na wartość kondensatora C6, który w tym przypadku jest znacznie większy i z godnie z zaleceniami producenta MCP1525 powinien zawierać się w przedziale 1µF-10µF. Producent zwraca uwagę także na odległość tego kondensatora (C6) od wyjścia Vout, która powinna być nie większa niż 5mm,




1.2.5 ADC - Wersja NIEZALECANA
Czasami spotykamy się z podłączaniem AREF bezpośrednio do zasilania mikrokontrolera lub do AVCC. Takie podłączenie stosują początkujący, którzy chcą jako napięcie odniesienia mieć pełne napięcie zasilania mikrokontrolera np. 5V. Robią wtedy tak:

Schemat Z - Wersja niezalecana

Takie podłączenie nie daje stabilnych pomiarów, a ich dokładność jest podobna do tej osiąganej za pomocą schematu B.


UWAGA!!!
Wbrew często spotykanym opiniom jest to prawidłowy sposób podłączenia mikrokontrolera, lecz nie zalecany w mikrokontrolerach AVR. 


Sugerujemy inne rozwiązanie!
Jeżeli chcesz mieć napięcie odniesienia o wartości napięcia zasilania mikrokontrolera, to wykorzystaj schematy C lub D oraz ustaw programowo przełącznik z tabelki 74 na AVcc (wiersz 2), czyli REFS1=0, a REFS0=1. W ten sposób bez zbędnego ryzyka osiągasz swój cel w postaci napięcia odniesienia równego napięciu zasilania mikrokontrolera.




1.2.6 Przetworniki 12-bitowe
Ponieważ przetwornik 12 bitowy jest 4 razy dokładniejszy od 10 bitowego, stąd jeszcze bardziej trzeba zadbać o filtrowanie zasilania części analogowej jak i całego mikrokontrolera. Dlatego producenci zalecają dodatkowe filtry LC, na głównym zasilaniu mikrokontrolera:

Przykład dla Xmega

Nic nie stoi na przeszkodzie, byś taki schemat stosował zawsze.


DJpopak;)
Pobawiłem się i jest teraz ok ... Wywaliłem nieszczęsnego kondensatora 10uF i zrobiłem jak dondu radził na swojej stronie. Czyli dałem dwa kondensatory 100nF i dławik plus podciągniecie zasilania. Rezystor do resetu mam, od razu to zrobiłem :-)
Jeszcze raz dzięki. Pozdrawiam






2. Sposób wykorzystania sąsiednich pinów.
Jeżeli zależy Ci na bardzo dokładnych pomiarach, powinieneś wziąć pod uwagę, co dzieje się na sąsiednich pinach wejść ADC mikrokontrolera. Innymi słowy nie jest obojętne dla ADC, sposób wykorzystania sąsiednich pinów.

O co chodzi?
Konkretnie o dwa problemy:
  1. problem przełączania sąsiednich pinów w czasie pomiaru przez ADC,
  2. problem indukowania się sygnałów szybkozmiennych.

2.1 Przełączanie pinów
Ponieważ poszczególne piny portów mogą być dowolnie konfigurowane w zakresie dostępnych dla nich funkcji, jest możliwa sytuacja, gdzie piny jednego portu np. PortC, w którym występują  kanały wejściowe ADC, będą używane w części jako kanały ADC, a w części jako na przykład wyjścia do sterowania tranzystorami.

W takiej sytuacji powinieneś sprawdzić, czy producent nie wprowadza jakiegoś ograniczenia.

Na przykład dla Atmega8 jest takie:

ATmega8

Dla ATmega8 mamy więc następujące zasady:
  • Jeżeli piny ADC0-ADC3 są ustawione jako wyjścia sygnałów cyfrowych jest ważne, aby ich nie przełączać w czasie, gdy ADC dokonuje pomiaru. 
  • Jeżeli używasz piny ADC4-ADC5 jako interfejs TWI (I²C) wpływają one (zakłócają) na pomiary kanałów ADC4-ADC5, ale nie zakłócają pomiarów na pozostałych kanałach ADC.



2.2 Indukowanie sygnałów szybkozmiennych
Ten problem dotyczy zjawiska indukcji, która występuje powszechnie i także na płytkach PCB oraz nóżkach scalaków i wewnątrz nich.

Chodzi o tzw. EMI (ang. Electromagnetic Interference), czyli zakłócenia elektromagnetyczne. Zjawisko to w tym przypadku jest bardzo negatywne:

Szybkozmienny sygnał dostarczany do mikrokontrolera (np. jakiś mierzony sygnał) lub sygnał generowany przez mikrokontroler, np. sygnał PWM, który jest podłączony do pinu sąsiadującego z pinem analogowym (w szczególności któregoś z wejść kanału ADC) powoduje jego zakłócanie poprzez zjawisko indukcji.




Ten problem powiązany jest z punktem nr 3 niniejszego artykułu.

Co może indukować?
Wszystkie sygnały o zmiennej częstotliwości, np. PWM, zegar, kwarc, skanowanie klawiatury, multipleksowanie wyświetlacza, itp.

Rozwiązanie jest proste
Na sąsiednich (do ADC) pinach nie planuj generowania wychodzących lub nie podłączaj żadnych wchodzących przebiegów szybkozmiennych. Jeżeli już musisz, to staraj się im przydzielać takie funkcje, które na czas pomiaru przez ADC nie będą generować na tych pinach przebiegów szybkozmiennych.

Czyli na przykład piny wykorzystaj do podłączenia diod LED, które rzadko zmieniają stan świecenia. A jeżeli musisz podłączyć do tych pinów np. klawiaturę to wstrzymuj jej skanowanie na czas dokonywania pomiaru przez ADC.

Po prostu kombinuj! :-)




3. Projekt płytki PCB.
Rys. 4
Projekt płytki PCB, ma kolosalny wpływ na dokładność pomiarów za pomocą ADC. Jest to poniekąd związane z punktem 2, a konkretnie z indukowaniem się sygnałów szybkozmiennych (zakłóceń EMI) na ścieżkach.

Dlatego bardzo istotne jest (gdy zależy Ci na dokładności), aby część analogowa była bardzo dobrze zaprojektowana:
  • wydziel na PCB obszar dla części analogowej,
  • część analogowa na warstwie górnej, a pod nią obszar ekranujący podłączony do masy analogowej mikrokontrolera,
  • masa analogowa powinna być połączona z masą cyfrową tylko w jednym miejscu, 
  • ścieżki części analogowej powinny być najkrótsze jak tylko się da.
  • przez obszar części analogowej nie powinny przechodzić żadne inne ścieżki, a w szczególności z szybkozmiennymi sygnałami cyfrowymi.

W "kupie" siła!
Producenci mikrokontrolerów ułatwiają Ci to zadanie, rozmieszczając piny części analogowej w zwarty sposób (obok siebie) niezależnie z jaką obudową mikrokontrolera masz do czynienia. Mogą być małe różnice, ale zasada trzymania ich "w kupie" jest zachowana :-)

Jeżeli zastosujesz się do powyższych zasad projektowania PCB, to ZNACZĄCO zmniejszysz wpływ zakłóceń zewnętrznych oraz zakłóceń z części cyfrowej mikrokontrolera, na wyniki pomiarów ADC.






4. Tryb redukcji zakłóceń.
Skoro część cyfrowa mikrokontrolera generuje zakłócenia wpływające na pomiary ADC, to może wyłączyć część cyfrową na czas pomiaru?

Ależ oczywiście! Na takie rozwiązanie zdecydowali się niektórzy inżynierowie projektujący mikrokontrolery:

Rys. 5 - ATmega8 - ADC Noise Canceler

Na przykład w ATmega8 jest specjalny tryb zarządzania pracą mikrokontrolera (tryb snu) ADC Noise Reduction mode, ale producent pozwala użyć do tego także trybu Idle mode.

Jak to działa?
Poprzez wybranie odpowiednich ustawień, doprowadzasz do uśpienia mikrokontrolera, który kładąc się spać, informuje ADC, by rozpoczął pomiar. ADC posłusznie zaczyna mierzyć, by po zakończeniu pomiaru zbudzić mikrokontroler poprzez przerwanie (procedura podana na rys. 5).

W mikrokontrolerach innych rodzin lub producentów zasady wykorzystania trybów snu do redukcji zakłóceń pochodzących z części cyfrowej mikrokontrolera mogą się różnić znacznie, ale sens tego działania jest taki sam - zmniejszyć ilość zakłóceń generowanych przez część cyfrową.

Dokładny opis zasad działania trybu redukcji zakłóceń w mikrokontrolerach Atmel AVR znajdziesz w rozdziale 15 książki TMF-a






5. Nieużywane piny
Rys Tak powstają "antenki"
Przypadek kolegi kamil1cos7 uświadomił mi, że warto powielić w tym temacie informacje, które wcześniej opisałem w artykule: Zakłócenia w pracy mikrokontrolerów

kamil1cos7
@dondu
Dzięki za tą stronkę, znalazłem tam rozwiązanie mojego problemu... Wystarczyło ustawić nieużywane piny jako wyjścia i np jedynkę na nie wpisać... Pozdrawiam

kamil1cos7 nie mógł sobie poradzić z niestabilnymi pomiarami ADC, ale znalazł na blogu artykuł, którego link podałem wyżej. W artykule tym dowiedział się, że niepodłączonych pinów mikrokontrolera, nie należy pozostawiać samopas. Co konkretnie można zrobić sprawdź klikając link.

To oczywiście nie zastąpi prawidłowego podłączania ADC opisanego w niniejszym arytykule, ale jest następnym krokiem do zwiększenia dokładności pomiaru, poprzez wyeliminowanie zakłóceń pochodzących z niepodłączonych i nieużywanych pinów mikrokontrolera.

Brawo kamil1cos7 !!!
:-)




Bez przesady!
Wszystko co przeczytałeś powyżej, miało na celu umożliwić Ci uzyskanie najdokładniejszych  z możliwych pomiarów za pomocą ADC.

Jednak czasami nie warto się trudzić i "z armaty do wróbli strzelać". Innymi słowy nie zawsze musisz mierzyć daną wielkość z 10-cio bitową rozdzielczością.


Przykład:
Bardzo często zdarza się, że projektant chce mierzyć napięcie baterii zasilającej jego projekt, by odpowiednio zareagować, gdy napięcie spada poniżej określonego progu. Informacja taka jest bardzo istotna. Czy jednak wymaga stosowania 10-cio bitowej rozdzielczości pomiaru? Zobaczmy:

Projektant ustalił sobie warunki pracy:
- napięcie naładowanej baterii: 4,8V
- napięcie progu sygnalizacji słabej baterii: 3,5V
- napięcie wyłączenia układu: 3,3V

Gdyby stosował 10-cio bitową rozdzielczość, na jeden bit rozdzielczości przydałoby napięcie o wartości:



Czy aż tak duża dokładność (5mV) jest potrzebna?
Absolutnie nie. Ponieważ spadki napięcia baterii w trakcie pracy układu będą pulsowały znacząco wraz z chwilową ilością pobieranej z niej energii. Innymi słowy mierzenie baterii z tak dużą dokładnością, jest absolutnie zbędne.


A gdyby skorzystać tylko z 6 bitów?
Policzmy czy pomiar będzie miał zadowalającą dokładność:


Moim zdaniem pomiar z dokładnością 75mV (0,075V) jest jak najbardziej wystarczający do celu pomiaru stanu baterii. Tym bardziej, że nie będziesz decydował o stanie baterii za pomocą jednego pomiaru, ale ciągu następujących po sobie pomiarów, które mają pokazać, że bateria faktycznie zeszła poniżej określonego progu, a nie był to tylko chwilowy skok.


A może 7 bitów?
Jeżeli jednak 6 bitów nie wystarczy, to możemy  zwiększyć rozdzielczość do 7 bitów:




Podsumowanie
Jak widzisz powyżej nie zawsze trzeba trudzić się z zapewnieniem przetwornikowi ADC idealnych warunków pracy. Ale na pewno zawsze warto:

Zanim zaczniesz projektować swój układ, pomyśl co jest ważne i potrzebne,
a co można odpuścić, by układ uprościć.






Zapoznaj się także z:

34 komentarze:

  1. Pierwszy. :)

    A tak na powaznie to bardzo ciekawy artykuł. Pomógł mi nie tylko wejsc w swiat ADC ale rowniez zapoznal mnie z ukladami filtrowania do zastosowan w mikrokontrolerach.

    Pozdrawiam.

    OdpowiedzUsuń
  2. Tego mi było trzeba!

    OdpowiedzUsuń
  3. A jak wygląda sprawa z diodą Zenera? Lepiej korzystać w wbudowanego VREF czy bardziej stabilna będzie tania dioda Zenera?

    OdpowiedzUsuń
  4. Kolego Dominik Leon Bieczyński stosowanie zenerki jako Vref nie ma sensu. Już lepszy będzie TL431. Ponadto i tak potrzbny jest kondensator do zwarcia szumów takiej diody. Z pewnością też wewnętrzne Vref jest lepsze od diody zenera.

    OdpowiedzUsuń
  5. Jaki będzie typ tego kondesatora
    1uF-10uF przy MCP1525, bo na ceramiczny to już chyba za dużo?

    OdpowiedzUsuń
  6. Faktycznie Microchip w datasheet MCP1525 nie podaje jakiego rodzaj ma być ten kondensator (C6). W przypadku C8 jasno informuje, że ma być ceramiczny.

    Kondensatory ceramiczne o zakresach od 1uF do 10uF są produkowane nawet w obudowach SMD (0603 i większych), i dostępne w sprzedaży. Możesz więc taki zastosować.

    Ale możesz spróbować z kondensatorem tantalowym. Odradzam elektrolity, bo w końcu to ma być źródło napięcia odniesienia :-)

    OdpowiedzUsuń
  7. To strzelanie z armaty ... dalej nie rozumiem działania 7/8/10 bit... Pokazywałeś dla napiecia 4.8V ( tyle jest na wejsciu ADC ? czy jest dzielnik rez ?) Rozumiem że prescaler trza ustawić . Bo ja juz siedze cały dzień nad zmniejszeniem 10 na 8 bit i wymiękam... ( potrzebuje rozdzielcosc 20-40mV= 1 LSB ) Podobno port 5 i 6 są fabrycznie 8 bit ale też nie widze żadnej zmiany.. Gdziesz doczytałem o kwarcu .. zmieniłem na 4 Mgz /128 =31.5 khz.. dalej nic zniam tyle ze miernik dłużej liczy...Wytłumacz to bo wszytkie ustawienia w scieci znalazłem dla języka C a ja pisze w B

    OdpowiedzUsuń
  8. Mam następujący problem:
    Chciałem podłączyć termometr do mikrokontrolera, który steruje taśmą LED za pomocą PWM, ale od około 50% do 100% wypełnienia PWM nagle zaczyna rosnąć AREF wewnętrzne (1.1 V) o prawie 30mV, co w moim przypadku zmienia temperature o 3st...
    Czy to normalne? Nie mogę sobie w żaden sposób z tym poradzić.

    OdpowiedzUsuń
    Odpowiedzi
    1. Aby odbpowiedzieć na Twoje pytanie, należałoby poznać schemat i program. Wykorzystaj do tego nasze forum: Forum - Mikrokontrolery, a tutaj wrzuć link, bym wiedział gdzie trafić :-)

      Usuń
  9. Mistrzu Dondu. Jeśli napięcie zasilania będzie w zakresie od 2,7 do 5,5V (Attiny13), i ustawie wewnętrzne napięcie odniesienia 1,1V dla ADC - czy to napięcie odniesienia zawsze będzie miało wartość 1,1V czy też jest zależne od napięcia zasilania mikrokontrolera? Ciekawi mnie to bo robię coś co musi pilnować własnego zasilania aby po spadku o ok 1,V wyłączyło mi pasek ledowy

    OdpowiedzUsuń
    Odpowiedzi
    1. Skoro jest to napięcie referencyjne to znaczy, że jest stałe, inaczej jaka byłaby to referencja, prawda?

      Usuń
    2. Datasheet ATtiny13 mówi:

      "Internal Voltage Reference
      ATtiny13 features an internal bandgap reference. This reference is used for Brown-out Detection, and it can be used as an input to the Analog Comparator or the ADC."


      Zobacz tabelkę: Table 18-4. Reset, Brown-out and Internal Voltage Reference Characteristics. Znajdziesz w niej parametry dot. Bandgap reference voltage, z którego powstaje właśnie napięcie odniesienia dla ADC.

      Nie znajdziesz tam, żadnych dodatkowych zastrzeżeń, że na przykład przy napięciu Vcc=5V, bandgap wynosi np. 2V, a przy napięci Vcc = 3V bandgap wynosi 1V.

      Konsekwencją tego jest tabelka Table 18-7. ADC Characteristics, Single Ended Channels. w której znajduje się konkretnie to czego szukasz, czyli Internal Voltage Reference i tam także nie ma żadnych zastrzeżeń (uwag).

      Zawsze jednak szukaj wykresów!

      Znajdujesz więc Figure 19-49. Bandgap Voltage vs. VCC i już wszystko wiesz na temat wpływy Vcc i temperatury na to o co pytasz.


      PS. Proszę nie tytułuj mnie mistrzem, bo aktualnie już nie zasługuję na ten tytuł :-)



      Usuń
    3. Zwróćcie Panowie uwagę, że jest to napięcie typu "bandgap" co oznacza, że z definicji nie jest specjalnie stabilne ani dokładne. Tego typu źródła referencyjne stosuje się tylko w uproszczonych układach, bardziej dla określenia chwilowego kierunku zmian niż dokładnego pomiaru wartości bezwzględnej. Osobiście wykorzystuję je tylko na etapie sprawdzenia czy mój przetwornik w ogóle zadziałał. Do zastosowań docelowych proponuję używać zewnętrznych źródeł referencyjnych,o których jest mowa na tym forum.

      Usuń
    4. Wszystko zależy oczywiście od mierzonego sygnału i oczekiwanych parametrów pomiaru.

      cyt. "Do zastosowań docelowych proponuję używać zewnętrznych źródeł referencyjnych,o których jest mowa na tym forum."
      ... a konkretnie tutaj: ADC - Dokładność vs podłączanie

      Usuń
  10. Nie mam pojęcia, nie ma nic idealnego, myślałem że będą jakieś różnice kiedy mamy min. i max zasilanie uC. Tyle co wyczytałem że napięcie ref. może obiegać trochę między tymi samymi mikrokontrolerami, np kupiłem dwa, pierwsze może mieć 2,56, a kolejne juz np 2,62. Myślę że zawsze warto spytać, jestem trochę "tempy":P Pozdr.

    OdpowiedzUsuń
    Odpowiedzi
    1. Dodałem post wyżej Twojego ponieważ nie użyłeś linki Odpowiedz.

      Usuń
    2. OK Dziękuje bardzo;-)

      Usuń
  11. Dzięki bardzo za ten artykuł. Cieżko znaleźć coś łapotologicznego dla amatorów.
    Mam jednak pytanie. Potrzebuję zasilić ATmega i korzystać z ADC w samochodzie. Na stronie TI skorzystałem z symulatora i otrzymałem dość rozbudowany schemat regulatora impulsowego 5V. Pytanie: czy tym zasilać ADC, czy może osobno wykorzystać regulator liniowy do części analogowej? A jeśli tak, to czy zasilać z liniowego zarówno AVCC jak i Vref, czy tylko Vref, a AVCC z z impulsowego? ADC będzie wykorzystywane tylko do jednego czujnika ciśnienia, więc pobór prądu nie będzie wysoki.
    Drugie pytanie, to czy schemat E, lub 12 bitowy będzie odpowiedni do samochodu, czy może w tak specyficznych warunkach warto dodać coś jeszcze?

    OdpowiedzUsuń
    Odpowiedzi
    1. Ciekawe pytanie w zakresie osobnego regulatora dla potrzeb ADC :-)

      Najpierw jednak zadam pytania dodatkowe:
      1. Z jaką dokładnością mają być wykonywane pomiary?
      2. Jakie parametry ma sygnał z czujnika ciśnienia?


      Usuń
    2. 1. Generalnie zależy mi na dokładności do 10kPa. Dlatego chciałem celować trochę niżej, czyli 5 kPa. Sensor ma zakres pomiaru -115 do 0 kPa i napięcie wyjściowe 0,2-4,6V (przy zasilaniu sensora 5V). "Na oko" wychodzi, że 8 bit powinno wystarczyć. Jednak nie zaszkodzi, jeśli użyteczne będzie 9.
      2. Najłatwiej będzie odpowiedzieć na to pytanie tak: jest to MPXV6115V (datasheet: http://cache.freescale.com/files/sensors/doc/data_sheet/MPXV6115V.pdf?&Parent_nodeId=&Parent_pageType=).

      Usuń
    3. Policzmy dla 8bit:

      5V / 256 = 19,5mV

      Proporcja:
      115Pa - 4,6V
      x - 19,5mV
      stąd rozdzielczość pomiaru wynosić będzie 115Pa * 19,5mV / 4,6V ≈ 0,49Pa
      co oznacza, że z taką dokładnością możesz dokonywać pomiarów. Ty oczekujesz znacznie mniejszej dokładności, bo aż 10Pa. Można więc zmniejszyć rozdzielczość ADC poniżej 8 bitów, co dodatkowo uodporni go na zakłócenia.

      4,6V / 19,5mV ≈ 236
      czyli przy 0Pa ADC wskaże wynik 236.

      Dobrze zrozumiałem Twoje posty?

      Usuń
    4. Jak najbardziej. Licząc na prędce w pamięci pomyliłem się o rząd wielkości. Dokładność do 1kPa byłaby doskonałym wynikiem, czyli nawet 7 bit zupełnie wyczerpie moje potrzeby.

      Usuń
    5. W świetle tego wracając do sposobu zasilania części analogowej, wystarczy standardowy dławik i kondensatory AREF i AVcc, czyli wersja schematu: 1.2.3 ADC - wersja dość dobra

      Usuń
    6. Dzięki. Jak dokończę projekt dam znać jak działa. Nie nastąpi to szybko, ale mam nadzieję, że uda mi się w końcu.

      Usuń
  12. A w przypadku, gdybym dla testów chciał mieć możliwość wyboru napięcia odniesienia Vref jako napięcie zewnętrzne bądź wewnętrzne, to należałoby zastosować odpowiednio raz Schemat E a raz Schemat D?
    Czy nie może być to jeden Schemat E z możliwością odłączania źródła referencyjnego?

    OdpowiedzUsuń
    Odpowiedzi
    1. Jak rozumiem, chcesz raz mierzyć z pomocą 5V na AVcc, a za chwilę z wykorzystaniem wewnętrznego źródła napięcia odniesienia 2,56V?

      Jeśli tak to opisałem ten problem (konflikt) w powyższym artykule. Przed jego napisaniem pytałem o to support Atmela, ale nie byli mi w stanie odpowiedzieć, jaki będzie rezultat przełączenia na wewnętrzne źródło napięcia odniesienia 2,56 przy jednoczesnym podłączeniu 5V do AVcc.

      Usuń
  13. Dlaczego w punkcie 1.2.3 - wersja dość dobra, wybrałeś akurat takie parametry filtru LC? Co w sytuacji, gdy układ zasilany z przetwornicy pracującej na 150kHz? Podane tutaj wartości w kalkulatorze pokazują że przepuszcza poniżej 160kHz, więc w moim przypadku to chyba trochę za dużo. Więc jakie wartości dobrać, żeby nie przesadzić? :)

    OdpowiedzUsuń
  14. Czy mogę za pomocą ADC mierzyć napięcie którym zasilany jest mikrokontroler?

    OdpowiedzUsuń
    Odpowiedzi
    1. Możesz postąpić na przykład tak:
      - ustawić napięcie odniesienia na 2,56V (lub inne które jest w danym mikrokontrolerze),
      - napięcie zasilające Vcc przez dzielnik rezystorowy doprowadzić do pinu pomiarowego ADC. Dzielnik powinien być tak dobrany, by przy maksymalnym Vcc na pinie pomiarowym było dokładnie tyle ile wynosi napięcie odniesienia,
      - dokonać przeliczenia matematycznego wyniku pomiaru za pomocą programu.

      W ten sposób, niezależnie od wartości napięcia Vcc, będziesz wstanie je obliczyć, bo napięcie odniesienia zawsze będzie stałe, tak samo jak stały jest dzielnik rezystorowy.

      Usuń
    2. Dziękuję bardzo. Mniej więcej wiem jak to zrobić od strony technicznej, bardziej chodziło mi o to, czy taki pomiar będzie miarodajny i czy będzie zgodny z zasadami sztuki :) Ale skoro opisałeś taką metodę, to przyjmuję, że tak i w przyszłości ją wykorzystam.

      Usuń
    3. Nie musisz przyjmować - będzie dobrze :-)

      Należy jednak pamiętać, że źródło napięcia referencyjnego np. 2,56V, może mieć w każdym mikrokontrolerze nieco inną wartość - patrz tabelka ADC Characteristics i parametr Vint, który na przykład w przypadku ATmega8 może wahać się pomiędzy pomiędzy 2,3V i 2,9V.

      W takiej sytuacji po ustawieniu programem napięcia odniesienia na 2,56V, warto zmierzyć multimetrem napięcie na pinie ARef, by się przekonać, jakie dokładnie jest w tym konkretnym egzemplarzu mikrokontrolera.

      Usuń
  15. Hey! Doskonały artykuł. Dziękuje! Mam pytanie, co moge zrobic jesli chce mierzyć w 10bitach 0-1023 napięcie z czujnika o zakresie 0-4,60V: a) ustawić napięcie referencyjne 4,60V i nie musze nic programowo robic? b) jesli chce dla 5 ADC mieć zakres pomiaru 0-5v i mam skonfigurowane do odczytu w tym zakresie a tylko na jednym 6 adc 0-4,60v co wtedy? Wystarczy jak zmienię zakres powiedzmy orientacyjnie na dla analog read w 6 adc na zakres 0-950? Dzieki za podpowiedź.

    OdpowiedzUsuń
  16. Bardzo fajnie napisane - prosto i przejrzyście :)

    OdpowiedzUsuń
  17. Powiesz mi gdzie najlepiej kupić Czujniki indukcyjne ? Ja niestety na automatyce przemysłowej niewiele się znam.

    OdpowiedzUsuń