Přesnost AREF napětí Arduina...

Krátce:
    Vliv kondenzátoru pro filtraci napájení je pro přesnost referenčního napětí naprosto zásadní. Samotné referenční je dostatečně stabilní. Pokud je napájecí napětí dostatečně vyšší než napětí referenční, není problém. Pozor! Při napájení 5V mikrokontroleru z USB bude referenční napětí výrazně nižší než předpokládaných 5V a to je závažný problém, protože třeba teplotu analogovým čidlem změřím s chybou 10°C.

Řešení je několik:
    – napájet vždy mikrokontroler z jiného zdroje, což je nejjednodušší
    – zavést vlastní přesnou napěťovou referenci nastavenou třeba jen na 4V

    Změřit aktuální hodnotu AREF napětí při napájení z USB lze a dá s ní v programu počítat, ale když připojím mikrokontroler k jinému zdroji, tak hodnota AREF vzroste budu měřit s chybou nebo musím přepsat program.

Podrobněji:

Vliv čistoty napájení na referenčního napětí Arduina

    Měřeno na italském originálu Arduino UNO a nikoli na čínském klonu. A realita? Nezáleží na tom, klony jsou v tomhle stejné. Mezi 5V a GND je připojen filtrovací kondenzátor 820μF. Bez něj by to bylo horší!
Na osciloskopu je hodně rušení. 
– žlutá stopa je čistota napájení 5V
– modrá stopa je AREF – referenční napětí
Po zapnutí funkce Highres vidím, co potřebuju. 
Přepínám rozlišení 500μV na dílek.
Napájení z USB.
Napájení z přesného zdroje 7V.

Pozor, vypadá to dobře a výstupem měření by mohlo být, že čistota napájení nemá vliv na stabilitu referenčního napětí. To je pravda. Jenže, co samotná velikost napětí AREF.

Velikost referenčního napětí v závislosti na druhu napájení 

 Napájení z USB bez připojeného filtrovacího kondenzátoru na napájení 
průměr 4,366V při napájení z USB, tedy jsme o 634mV mimo předpokládaných 5V

průměr 4,424V při napájení ze souosého konektoru 10V


Napájení ze souosého konektoru. Připojený kondenzátor 820μF mezi 5V a GND. 
průměr 4,9770V při napájení z USB
průměr 4,9820V při napájení ze souosého konektoru 10V
rozdíl je jen 5mV, všímám si střední odchylky Std dev – s kondenzátorem je to o řád lepší.

Vadí AREF o půl voltu nižší? Jakou to způsobí chybu měření?

    Problém není ve velikosti AREF, ale v tom, že referenční napětí je jiné než předpokládáme. 
    Analogové teplotní čidlo MCP9700 – 500mV při 0˚C citlivost 10mV/°C.  Příklad měření, reálná teplota je 50°C a čtení ADC ji spočteme pouze, pokud bude referenční napětí přesné. Zde předpokládám velikost 5V. Odchylka AREF jen desetinách voltu již způsobí obrovskou chybu měření.
         
    ADC = Analogově digitální převodník při čtení pomocí analogRead(Ax) vrací hodnotu v rozsahu 0–1023 má tedy 1024 kroků. Pokud bude nastaveno referenční napětí nižší, bude mít přesnější rozlišení. Zároveň platí, že nemůžeme měřit na vstupu vyšší napětí než je referenční napětí AREF.

   AREF    krok ADC
   5V      4,8828125mV    analogReference(DEFAULT);  
   1,1V    1,07421875‬mV   analogReference(INTERNAL);

Když vrací ADC hodnotu 512, měli bychom mít na vstupu polovinu referenčního napětí

    Vliv kondenzátoru pro filtraci napájení je pro přesnost referenčního napětí naprosto zásadní. Bez něj je chyba měření minimálně 6%. Vypočteno z průměrného měření. Aktuální hodnota AREF může být mimo předpoklad klidně i o 10%.

Vlastní zdroj přesného referenčního napětí

   AREF    krok ADC
  2,5V    ‭2,44140625‬mV   analogReference(EXTERNAL);    

    TL431 je levná[1] a stabilní napěťová reference. Chová se tak trochu jako programovatelná zenerova dioda. Bez nastavování a dalších přidaných součástek dává přesných 2,5V a nechá se nastavit od 2,5–36V. Pro Arduino můžu tedy použít 2,5–5V a napětí, které si nastavím a změřím reference opravdu drží.   
Přesné referenční napětí 2,5V pro Arduino.

Nastavitelná reference. Vždy je potřeba číst [datasheet]
 

Přepínatelná kombinace interní a externí napěťové reference

    Podle [2] může být externí AREF napětí může být pouze v rozsahu 0–5V. Před prvním voláním analogRead(); být nastaveno analogReference(EXTERNAL); jinak dojde k poškození MCU. 
    Externí a interní napěťovou referenci lze kombinovat a programově přepínat, stačí připojit externí referenční napětí na pin AREF přes odpor 5k. Jen je potřeba počítat s tím, že interní odpor na pinu AREF je 32k. Spolu pak fungují jako dělič napětí; tedy například pro naši referenci 2,5V přivedený přes rezistor 5k dá referenční napětí  2,5V × 32 / (32 + 5) = ~ 2,2 V AREF
    
    Související téma je teplotní stabilita napěťové reference[3].

Další čtení

[4] Podrobně o analogovém měření ardunem, referenčním napětí etc