Kalkulator ADC Arduino przelicza wynik funkcji analogRead() na napięcie, oblicza przewidywaną wartość ADC dla podanego napięcia oraz odtwarza napięcie przed dzielnikiem rezystorowym. Obsługuje rozdzielczości 8, 10, 12 i 16 bitów oraz dowolne napięcie odniesienia Vref.
Ładowanie kalkulatora ADC Arduino…
analogRead() zwraca wartość od 0 do 1023, ponieważ przetwornik ADC ma rozdzielczość 10 bitów. Przy Vref równym 5 V jeden idealny krok LSB ma około 4,883 mV.Jak przeliczyć analogRead na napięcie?
Dla przetwornika o rozdzielczości n bitów maksymalny kod wynosi 2n − 1. Przeliczenie wartości ADC na napięcie wykonuje wzór:
Dla Arduino UNO, odczytu 512 i napięcia odniesienia 5 V otrzymujemy:
W praktyce często spotkasz również dzielenie przez 1024. Wynika ono z interpretacji zakresu jako 1024 równych przedziałów. Kalkulator używa dzielnika 2n − 1, zgodnie z podanym wzorem, dzięki czemu maksymalny kod jest mapowany na Vref. Wielkość idealnego kroku LSB nadal pokazujemy jako Vref / 2n.
Wartość VREF powinna odpowiadać rzeczywistemu napięciu odniesienia, a nie tylko napisowi „5 V” na płytce. Jeśli zależy Ci na dokładności, zmierz napięcie zasilania lub użyj stabilnego zewnętrznego źródła odniesienia.
Rozdzielczość ADC: 8, 10, 12 i 16 bitów
Każdy dodatkowy bit podwaja liczbę dostępnych kodów. Większa rozdzielczość pozwala rozróżnić mniejsze zmiany napięcia, ale sama w sobie nie gwarantuje dokładniejszego pomiaru. Wynik nadal zależy od jakości Vref, szumu, parametrów przetwornika i źródła sygnału.
| Rozdzielczość | Liczba poziomów | Zakres kodów | 1 LSB przy Vref = 5 V | 1 LSB przy Vref = 3,3 V |
|---|---|---|---|---|
| 8 bit | 256 | 0–255 | 19,531 mV | 12,891 mV |
| 10 bit | 1024 | 0–1023 | 4,883 mV | 3,223 mV |
| 12 bit | 4096 | 0–4095 | 1,221 mV | 0,806 mV |
| 16 bit | 65 536 | 0–65 535 | 0,076 mV | 0,050 mV |
Klasyczny Arduino UNO R3 z ATmega328P ma sprzętowy ADC 10-bitowy. Wpisanie 12 lub 16 bitów do kalkulatora jest przydatne dla innych mikrokontrolerów i zewnętrznych przetworników, ale nie zwiększa fizycznej rozdzielczości UNO.
Co oznacza 1 LSB?
LSB to najmniej znaczący bit i jednocześnie najmniejszy idealny krok napięcia reprezentowany przez kolejny kod. Obliczamy go jako:
Dla Arduino UNO i Vref = 5 V jest to 5 V / 1024 = 4,8828 mV. Zmiana napięcia mniejsza od jednego LSB może nie spowodować zmiany wyniku analogRead().
Błąd kwantyzacji ADC
Idealny błąd kwantyzacji wynosi około ±0,5 LSB. Dla UNO przy 5 V daje to około ±2,441 mV. To jednak tylko jedna część błędu pomiarowego.
- Tolerancja Vref: błąd napięcia odniesienia bezpośrednio zmienia wynik przeliczenia.
- Offset i wzmocnienie ADC: rzeczywisty przetwornik odbiega od modelu idealnego.
- Szum: odczyt może przeskakiwać pomiędzy sąsiednimi kodami.
- Rezystancja źródła: zbyt duża może utrudnić naładowanie kondensatora próbkującego ADC.
- Błąd rezystorów dzielnika: rzeczywiste R1 i R2 mogą różnić się od wartości nominalnych.
Napięcie odniesienia Vref w Arduino UNO
Vref określa napięcie odpowiadające górze zakresu pomiarowego. W klasycznym UNO możesz korzystać między innymi z:
- DEFAULT: odniesienie do AVCC, zwykle nominalnie 5 V.
- INTERNAL: wewnętrzne odniesienie nominalnie 1,1 V, przydatne do małych napięć.
- EXTERNAL: napięcie doprowadzone do pinu AREF, po właściwym ustawieniu
analogReference(EXTERNAL).
Niższe Vref daje mniejszy krok LSB i lepsze wykorzystanie kodów przy małym sygnale, ale napięcie wejściowe nie może przekroczyć dopuszczalnego zakresu. Przed podłączeniem zewnętrznego AREF sprawdź dokumentację konkretnej płytki.
Pomiar wyższego napięcia przez dzielnik
Pin analogowy nie może bezpośrednio mierzyć napięcia wyższego od swojego zakresu. Dzielnik rezystorowy obniża napięcie przed podaniem go na ADC. Rezystor R1 łączy napięcie mierzone z węzłem pomiarowym, a R2 — węzeł z masą.
Dla R1 = 27 kΩ, R2 = 10 kΩ oraz odczytu 664 przy 10 bitach i Vref = 5 V:
- napięcie na pinie ADC wynosi około 3,245 V,
- napięcie przed dzielnikiem wynosi około 12,008 V,
- maksymalne napięcie odpowiadające 5 V na pinie wynosi 18,5 V.
Przy projektowaniu układu zostaw zapas na tolerancję rezystorów, wzrost napięcia źródła i błąd Vref. Do dokładnego doboru wartości użyj kalkulatora dzielnika napięcia, który obsługuje szeregi E12, E24 i E96 oraz obciążenie RL.
Gotowe przykłady przeliczeń ADC
| Przykład | Ustawienia | Obliczenie | Wynik |
|---|---|---|---|
| 512 — ile to woltów? | 10 bit, Vref 5 V | 512 / 1023 × 5 V | około 2,502 V |
| 3,3 V — jaka wartość ADC? | 10 bit, Vref 5 V | 3,3 / 5 × 1023 | około 675 |
| Pomiar około 12 V | ADC 664, R1 27 kΩ, R2 10 kΩ | Vadc × 37/10 | około 12,008 V |
| Połowa zakresu ESP32 | 12 bit, przyjęte Vref 3,3 V | 2048 / 4095 × 3,3 V | około 1,650 V |
ADC w ESP32 — dlaczego wynik jest przybliżony?
W środowisku Arduino-ESP32 domyślna rozdzielczość analogRead() wynosi zwykle 12 bitów, czyli od 0 do 4095. Rzeczywisty zakres napięcia zależy jednak od wariantu układu i ustawienia tłumienia ADC. Surowy odczyt nie jest automatycznie idealnym pomiarem liniowym 0–3,3 V.
Do pomiaru w miliwoltach warto rozważyć analogReadMilliVolts(), które zwraca wynik skalibrowany przez dostępne mechanizmy platformy. Preset „ESP32 · 12 bit · 3,3 V” w kalkulatorze służy do szybkiego oszacowania, a nie zastępuje kalibracji konkretnej płytki.
Jak poprawić dokładność pomiaru ADC?
- Zmierz rzeczywiste Vref i wpisz tę wartość do wzoru.
- Użyj stabilnego napięcia odniesienia odpowiedniego do zakresu sygnału.
- Wykonaj kilka odczytów i policz średnią, jeżeli sygnał jest zaszumiony.
- Dodaj kondensator filtrujący przy wejściu, jeżeli charakter sygnału na to pozwala.
- Stosuj rezystory o małej tolerancji i zmierz ich rzeczywiste wartości.
- Prowadź masę i przewody analogowe z dala od szybkich sygnałów cyfrowych.
Rozmieszczenie wejść A0–A5, AREF i pinów zasilania znajdziesz na stronie Arduino UNO pinout.
Najczęściej zadawane pytania
Jak przeliczyć analogRead na napięcie?
Pomnóż odczyt ADC przez Vref i podziel przez maksymalny kod 2n − 1. Dla 10 bitów maksymalny kod wynosi 1023.
Ile wynosi 1 LSB dla Arduino UNO?
Dla 10-bitowego ADC i Vref 5 V idealny krok wynosi 5 V / 1024, czyli około 4,883 mV. Idealny błąd kwantyzacji to około ±2,441 mV.
Dlaczego analogRead pokazuje od 0 do 1023?
Przetwornik Arduino UNO ma 10 bitów. Daje to 1024 możliwe kody: od 0 do 1023.
Czy Arduino UNO może mierzyć 12 V?
Nie bezpośrednio. Napięcie trzeba obniżyć dzielnikiem lub odpowiednim układem pomiarowym i zapewnić, że na wejściu ADC nigdy nie zostanie przekroczony bezpieczny zakres.
Czy ESP32 ma ADC 12-bitowy?
W Arduino-ESP32 domyślna rozdzielczość odczytu wynosi zwykle 12 bitów, ale wynik zależy również od wariantu układu, tłumienia i kalibracji ADC.