Referencja analogowa AREF | Arduino Sklep i Samouczki
Cele
-
- Rozdzielczość przetworników ADC.
- Wewnętrzne referencje porównawcze w Arduino.
- Zewnętrzna referencja AREF.
Wymagany materiał.
Hiszpania | Meksyk | ||
---|---|---|---|
UNO Starter Kit | UNO Starter Kit | ||
MEGA Starter Kit | |||
MEGA Starter Kit | MEGA Starter Kit | MEGA Starter Kit. | MEGA Starter Kit |
Konwersja analogowo-cyfrowa
W poprzedniej sesji powiedzieliśmy już, że Arduino posiada 6 przetworników analogowo-cyfrowych (ADC), które są pinami od A0 do A5, i powiedzieliśmy, że są one zdolne do konwersji wartości napięcia do maksymalnie 5V, które jest napięciem odniesienia na Arduino.
Powiedzieliśmy również, że jedną z kluczowych cech konwertera jest jego liczba bitów, która definiuje finezję, z jaką możemy określić ilościowo tę konwersję na postać cyfrową. W przypadku Arduino, jest 10 bitów, które obsługuje w bramkach analogowych, co oznacza, że jego rozdzielczość wynosi 210 =1,024 możliwych wartości.
Im wyższa jest ta rozdzielczość, tym lepsza zdolność do przybliżenia rzeczywistej wartości, której konwersji szukamy.
- Ważne jest, aby zrozumieć, że konwersja do postaci cyfrowej sygnału analogowego jest zawsze przybliżeniem, a nawet w mało prawdopodobnym przypadku, że wartość analogowa jest dokładnie tym, co mówi nam konwerter, zawsze będziemy mieć niepewność.
- Na przetworniku Arduino o rozdzielczości 10 bitów każdy krok pomiarowy wynosi 5V/1024 = 0,0048828125 V, czyli nieco poniżej 5mV, co oznacza, że nie jest w stanie rozróżnić wartości napięcia, których różnica jest mniejsza niż to.
Bez wchodzenia w zbyt wiele szczegółów, warto powiedzieć, że to co robi przetwornik ADC to sukcesywne porównywanie sygnału, który chcemy określić ilościowo na wejściu, z napięciem odniesienia, z którym dokonuje porównań.
Innymi słowy, przetwornik ADC nie dostarcza wartości absolutnych, ale zapewnia ilościowe porównanie w stosunku do wartości odniesienia. Tak więc, w sesji czujnika temperatury TMP36, obliczyliśmy napięcie wejściowe na jednym z pinów Analog jako odczyt pomnożony przez stosunek maksymalnej wartości wejścia 5V do maksymalnej zmierzonej przez konwerter 1024.
Jako że sygnały, które normalnie obsługujemy na Arduino są w okolicach 5V, porównanie z 5V jest rozsądną rzeczą do zrobienia, ponieważ w przemyśle istnieje również cała gama czujników, których maksymalna wartość zwraca 5V.
Ale coraz częściej przemysł produkuje elektronikę 3,3V, samo Arduino DUE jest tego przykładem, a jeśli używamy naszych ADC do digitalizacji szczytowych sygnałów 3,3V, tracimy dokładność i rozdzielczość, bo marnujemy część możliwych porównań, a właściwie jedną trzecią.
W praktyce, 3.3V jako maksymalne napięcie wejściowe w porównaniu do 5V oznacza, że nigdy nie będziemy mieli odczytów większych niż 1,024 * 3.3 /5 = 675 i nadal będziemy mieli kroki wejściowe 5mV.
Ale jeśli konwerter jest komparatorem napięcia, jeśli moglibyśmy zmienić wartość napięcia, z którym porównujemy na 3,3V, kroki byłyby 3,3V/1024 = 0,00322265625 lub 3,2 mV. Czyli poprawiliśmy rozdzielczość naszego konwertera i to nie wydając ani grosza.
W idealnej sytuacji więc, napięcie porównawcze, względem którego dokonujemy konwersji z analogowego na cyfrowe, powinno być maksymalną możliwą wartością sygnału wejściowego. Bo właśnie wtedy będziemy mieli najlepszą możliwą rozdzielczość z tym konwerterem.
Chłopaki z Arduino, zdawali sobie sprawę z tego problemu i dlatego dołączyli zewnętrzny pin, którego do tej pory nie używaliśmy, pozwalający na podłączenie zewnętrznego napięcia odniesienia, z którym będzie porównywany sygnał, który odczytamy na naszych bramkach A0 do A5.
Pin ten jest oznaczony jako AREF (Analog Reference) i znajduje się dwa piny powyżej pinu cyfrowego 13:
Używanie zewnętrznego odniesienia analogowego
Kwestia odniesienia analogowego, z którym porównujemy próbki w bramkach A0-A6 jest na tyle istotna, że Arduino dostarcza kilka wewnętrznych napięć do porównania, które możemy aktywować, aby zmienić odniesienie.
Aby aktywować wewnętrzne referencje 1.1V w Arduino UNO użyj instrukcji
analogReference(INTERNAL);
Jeśli używasz MEGA możesz użyć wyłącznie:
analogReference(INTERNAL1V1);
analogReference(INTERNAL2V56);
Która aktywuje odpowiednio referencje 1.1V i 2.56V.
Jeśli użyjesz klawisza DEFAULT, to wracasz do standardowej referencji 5V na praktycznie wszystkich modelach Arduino.
analogReference(DEFAULT);
- Uważaj na referencję DEFAULT, bo na DUE oznacza ona 3.3V, bo takie jest jej napięcie odniesienia. Upewnij się co do tego przed szczęśliwym użyciem.
Gdy podłączymy napięcie referencyjne do pinu AREF, musimy powiedzieć Arduino, że chcemy go użyć. A robimy to za pomocą instrukcji
analogReference(EXTERNAL);
Używaj głowy przy modyfikowaniu referencji analogowej, bo jak nie będziesz uważał, to zjesz Arduino na obiad. Stosunkowo łatwo jest namieszać w pewnych działaniach, które wydają się niewinne:
- Upewnij się, że jeśli używasz zewnętrznego odniesienia, że GND Arduino i odniesienia są takie same, łącząc je razem. Nie zrobienie tego ma bardzo złe rokowania przy pierwszej zmianie.
- Nie używaj pod żadnym pozorem mniej niż 0v na pinie AREF (lub sygnału, który się zmienia i może mieć ujemne transjenty), ponieważ wynik jest nieprzewidywalny.
- Jeżeli podłączysz zewnętrzne napięcie referencyjne, nie wywołuj analogRead() przed wykonaniem instrukcji analogReference(EXTERNAL), ponieważ spowodujesz zwarcie wewnętrznego sygnału porównania z zewnętrznym napięciem na AREF i być może skorzystasz z okazji, aby kupić to nowe Arduino, które tak bardzo chcesz kupić.
- Nie podłączaj do AREF mniej niż 1V lub więcej niż 5V, nie możesz po prostu ustawić 12 i oczekiwać, że poda ci wartość.
Obwód testowy
Założymy obwód testowy z wyświetlaczem I2C jak widzieliśmy w sesji… i potencjometrem. Ale tym razem podłączymy na końcach potencjometru GND i 3,3V tak, aby w środkowym pinie, który będziemy odczytywać za pomocą A1, nigdy nie mogło przekroczyć 3,3V symulując czujnik o tej maksymalnej wartości.
Kręcąc potencjometrem będziemy odczytywać spadek napięcia pomiędzy 0V a 3,3V. a odczyt pinu A1, da wartości pomiędzy 0 a 670, ponieważ jesteśmy w przypadku, który zdefiniowaliśmy nieco wyżej.
Program po prostu odczyta pin analogowy A1 i wyśle jego wartość do wyświetlacza I2C o długości 16 znaków na dwie linie, tak jak widzieliśmy w sesji….
Tutaj jest mini-video z odczytami potencjometru
Jeśli teraz podłączymy wewnętrzne napięcie 3.3V Arduino do pinu AREF, będziemy mieli układ taki jak ten:
Zobaczmy teraz program:
Tutaj jest wideo z różnicą:
Podsumowanie sesji
W tym kursie arduino nauczyliśmy się następujących rzeczy:
-
- Nalegaliśmy na kwestię konwersji analogowej na cyfrową i zobaczyliśmy, że w zasadzie jest to porównanie z wartością odniesienia.
- Widzieliśmy, że możemy użyć wewnętrznej lub zewnętrznej wartości napięcia, innej niż zwykłe 5V.
- Znamy teraz dokładne instrukcje, aby aktywować to zewnętrzne odniesienie i środki ostrożności, które należy podjąć przy jego użyciu.
.