Kalkulator ADC Arduino – analogRead na napięcie

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…

Arduino UNO: funkcja 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:

V = ADC / (2n − 1) × Vref

Dla Arduino UNO, odczytu 512 i napięcia odniesienia 5 V otrzymujemy:

V = 512 / 1023 × 5 V = 2,502 V

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.

Kod_001 — analogRead na napięcie w Arduino UNO

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ówZakres kodów1 LSB przy Vref = 5 V1 LSB przy Vref = 3,3 V
8 bit2560–25519,531 mV12,891 mV
10 bit10240–10234,883 mV3,223 mV
12 bit40960–40951,221 mV0,806 mV
16 bit65 5360–65 5350,076 mV0,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:

1 LSB = Vref / 2n

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.
Nie interpretuj ±0,5 LSB jako całkowitej dokładności Arduino. Jest to idealny błąd samej kwantyzacji. Dokumentacja ATmega328P podaje również błędy charakterystyczne dla rzeczywistego ADC.

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ą.

Vin = Vadc × (R1 + R2) / R2

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.
Kod_002 — pomiar napięcia przez dzielnik R1/R2

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.

Dzielnik nie chroni przed wszystkim. Napięcie ujemne, przepięcie lub błędnie dobrany rezystor może uszkodzić wejście. W instalacji samochodowej i innych zakłóconych środowiskach potrzebne są dodatkowe zabezpieczenia.

Gotowe przykłady przeliczeń ADC

PrzykładUstawieniaObliczenieWynik
512 — ile to woltów?10 bit, Vref 5 V512 / 1023 × 5 Vokoło 2,502 V
3,3 V — jaka wartość ADC?10 bit, Vref 5 V3,3 / 5 × 1023około 675
Pomiar około 12 VADC 664, R1 27 kΩ, R2 10 kΩVadc × 37/10około 12,008 V
Połowa zakresu ESP3212 bit, przyjęte Vref 3,3 V2048 / 4095 × 3,3 Vokoł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?

  1. Zmierz rzeczywiste Vref i wpisz tę wartość do wzoru.
  2. Użyj stabilnego napięcia odniesienia odpowiedniego do zakresu sygnału.
  3. Wykonaj kilka odczytów i policz średnią, jeżeli sygnał jest zaszumiony.
  4. Dodaj kondensator filtrujący przy wejściu, jeżeli charakter sygnału na to pozwala.
  5. Stosuj rezystory o małej tolerancji i zmierz ich rzeczywiste wartości.
  6. 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.

Dokumentacja i powiązane narzędzia