🖥️ Převodníky A/D, D/A a mikrokontroléry

Od čidla k číslu

O čem to je

Teplotní čidlo dává plynule se měnící napětí. Mikrokontrolér ale umí počítat jen s čísly z nul a jedniček. Most mezi těmito světy tvoří převodníky: A/D převede napětí na číslo, D/A číslo zpět na napětí. Mezi nimi pracuje mikrokontrolér – malý počítač v jednom čipu, který řídí pračku, 3D tiskárnu i robota.

Nové pojmy

Analogový a číslicový signálAnalogový se mění plynule a může mít jakoukoli hodnotu v rozsahu. Číslicový (digitální) má jen omezený počet hodnot zapsaných čísly.Napětí z potenciometru 0–5 V je analogové; číslo 0–1023 v mikrokontroléru je číslicové.
Převodník A/D (ADC)Obvod, který změří analogové napětí a vyjádří ho číslem.Arduino Uno má 10bitový převodník: 0 V → 0, 5 V → 1023.
RozlišeníKolika bity převodník číslo vyjadřuje. n bitů = 2ⁿ úrovní. Nejmenší rozlišitelná změna (krok) je U_ref / 2ⁿ, kde U_ref je referenční (největší měřitelné) napětí.10 bitů, 5 V: 1 024 úrovní, krok asi 4,9 mV.
Mikrokontrolér (MCU)Celý malý počítač v jednom čipu: procesor, paměť pro program, paměť pro data a vstupy a výstupy. Běží v něm jeden program, který se stále opakuje.ATmega328P v Arduinu Uno, ESP32, STM32.

Jak mikrokontrolér řídí

  1. přečte vstupy: tlačítka a čidla (přes A/D převodník)
  2. spočítá, co dělat podle programu
  3. nastaví výstupy: LED, relé, motor (PWM)
  4. počká a začne znovu

Projdi smyčku programu. Mikrokontrolér ji opakuje tisíckrát i milionkrát za sekundu, proto se zdá, že reaguje okamžitě.

Desetibitový převodník s U_ref = 5 V naměřil číslo 512. Jaké napětí je na vstupu?
Krok = 5 / 1 024 ≈ 0,00488 V. U ≈ 512 · 0,00488 ≈ 2,5 V – polovina rozsahu, protože 512 je polovina z 1 024.
Čidlo dává 1,2 V. Jaké číslo ukáže 10bitový převodník s U_ref = 5 V?
N = U / U_ref · 1 024 = 1,2 / 5 · 1 024 ≈ 245,8. Převodník vrací celé číslo a obvykle zaokrouhluje dolů: 245.

Cesta zpět: D/A a PWM

PWM (pulzně šířková modulace)Výstup se velmi rychle zapíná a vypíná. Poměr doby zapnutí k celé periodě se jmenuje střída. Průměrné napětí = střída · napájecí napětí. Takto mikrokontrolér řídí jas LED nebo otáčky motoru, i když jeho výstup umí jen 0 a 1.Střída 25 % při 5 V → průměr 1,25 V.
✗Výstup mikrokontroléru zvládne přímo napájet motorek nebo relé.
✓Výstup zvládne jen malý proud (podle katalogu jednotky až desítky mA). Motor nebo relé se spíná přes tranzistor, s nulovou diodou paralelně k cívce relé.

Větší proud by výstup přetížil a zničil, a indukční zátěž by navíc při vypnutí vytvořila napěťovou špičku.

A/D převádí napětí na číslo, n bitů = 2ⁿ úrovní, krok U_ref / 2ⁿ. Mikrokontrolér čte vstupy, počítá a nastavuje výstupy pořád dokola. Analogovou hodnotu na výstupu napodobí PWM.

Uvnitř čipu

O čem to je

Než vybereš mikrokontrolér pro projekt, musíš vědět, kolik má paměti, vstupů, převodníků a jaké umí komunikace. Než navrhneš měření, musíš vědět, jak rychle a jak jemně převodník měří. Tady je přehled stavby MCU a převodníků.

Nové pojmy

Převodník A/D a D/AA/D převádí analogové napětí na číslo, D/A číslo na napětí: U = N · U_ref / 2ⁿ.8bitový D/A, U_ref = 5 V, N = 128 → 2,5 V.
VzorkováníA/D převodník neměří nepřetržitě, ale v pravidelných okamžicích – vzorcích. Počet vzorků za sekundu je vzorkovací frekvence. Podle Shannonova–Kotelnikovova teorému musí být víc než dvojnásobná než nejvyšší frekvence v signálu.Zvuk do 20 kHz se vzorkuje 44,1 kHz (CD).
Paměti Flash, RAM, EEPROMFlash – program, zůstane i bez napájení. RAM – proměnné za běhu, po vypnutí se smaže. EEPROM – malá trvalá paměť pro nastavení.ATmega328P: 32 kB Flash, 2 kB RAM, 1 kB EEPROM.
GPIOUniverzální vstupně-výstupní piny. Každý jde nastavit jako číslicový vstup (čte 0/1) nebo výstup (dává 0 V / napájení). Některé mají i zvláštní funkce: A/D vstup, PWM výstup, komunikace.Pin nastavený jako vstup s vnitřním pull-up rezistorem pro tlačítko.

Bloky mikrokontroléru

BlokÚkol
CPU (jádro)provádí instrukce programu
Flashuložený program
RAMdata za běhu
GPIOčíslicové vstupy a výstupy
časovače a PWMměření času, generování PWM
A/D převodníkměření analogových napětí
UART, I²C, SPIkomunikace s počítačem, čidly a displeji
oscilátorhodinový signál (třeba 16 MHz)

Roztřiď bloky. U pamětí si navíc řekni, která si data pamatuje i po vypnutí.

Výpočty převodníků

Zjisti rozlišení n (bity) a referenční napětí U_ref.
Počet úrovní 2ⁿ, krok q = U_ref / 2ⁿ.
A/D: N = U / q (zaokrouhleno dolů na celé číslo).
D/A: U = N · q.
Zkontroluj vzorkovací frekvenci: víc než 2× nejvyšší frekvence signálu.
12bitový A/D převodník, U_ref = 3,3 V. Jaký je krok a jaké číslo dá pro 1 V?
2¹² = 4 096 úrovní. q = 3,3 / 4 096 ≈ 0,806 mV. N = 1 / 0,000806 ≈ 1 241.
Čidlo vibrací dává signál až do 2 kHz. Stačí vzorkovat 3 kHz?
Nestačí. Vzorkovací frekvence musí být víc než 2 · 2 kHz = 4 kHz. V praxi se volí s rezervou, třeba 10 kHz. Při malé frekvenci vzniká zkreslení (aliasing) – ve výsledku se objeví falešné nízké frekvence.
✗Převodník má 16 bitů, takže měření je přesné na 16 bitů.
✓Rozlišení říká, jak jemné jsou kroky. Skutečnou přesnost zhoršuje šum, nepřesná reference a chyby převodníku.

Rozlišení a přesnost jsou různé věci. Měření se špatnou referencí ukáže jemně „rozlišené“, ale špatné číslo.

Krok q = U_ref / 2ⁿ, A/D: N = U / q, D/A: U = N · q. Vzorkuj víc než dvojnásobkem nejvyšší frekvence. MCU = CPU + Flash + RAM + GPIO + periferie (A/D, PWM, časovače, komunikace).