Jak na SW kalibraci interního AD převodníku

Zdravím, chtěl bych se zeptat na princip kalibrace AD převodníku procesorů ATMEGA, přecijen vnitřní napěťová reference má nějaký rozptyl a pokud převádím (pomocí OZ, nebo odporového děliče) vstupní napětí 25V na 2.5V nebo u ATMEGA 48 na 1.25V, vzniká tam docela velká chyba , dělič můžu dokalibrovat trimrem podle laboratorního můstku.

Otázka zjednodušeně zní: Jak zjistit o kolik je převodník mimo, abych mohl případnou chybu přičíst, nebo odečíst.

Taky jsem mel tento problem, dle rady na tomto foru to resim relativne presnou a docela levnou externi referenci pravdepodobne pracujici na principu zenerovy diody

Kalibrovat AD vstup procesora trimrom je tazke sado maso :slight_smile:

Kalibujes jednoducho
Na vstup privedies zname napaia U1 a U2. Kazdemu z nich zodpoveda pocet dielikov AD d1 a d2.

Dalej pokracujes klasickou matematikou na urovni ZS - riesenie dvoch rovnic o dvoch premennych. Vzhladom na vlastnosti AD staci kalibrovat ako priamku. Ta bude zahrnat i vsetky “skreslenia po ceste” ako napriklad offset OZ.

U1 = a * d1 + b
U2 = a * d2 + b

a = (U2 - U1)/(d2 - d1);

b = U1 - a * d1;

potom pre hociaky pocet dielikov bude vstupne napatie dane podla vztahu

Ux = a * dx + b

Samozrejme ti hodnota vyjde desne desatinna, tak sa to potom robi tak, aby si nemusel pouzit float, ze nepouzijes “a” ale konstatnu “A” ktora moze byt napriklad 10000x vacsia ako “a” a staci pocitat iba s 32bitovym celociselnym typom

potom

A = 10000 * a

Ux = (A * dx)/10000 + b

miesto 10000 si mozes dosadit lubovolne ine cislo, napriklad 256 alebo 65536, alebo 1000. To je medzi tebou a prekladacom

Prakticke je v mcu pouzivat mV. Rozsah do +/-32767mV je pre vacsinu aplikacii dostatocny a presnost vypoctov vzhladom na prakticky rozsah cisla tiez. To plati aj pre prud, vyhodne je ho kalibrovat na uA.

EDIT: tento sposob samozrejme plati i pre ine veliciny ako je napatie a prud.
Ak mam sondu na meranie napr. vzdialenosti s vystupom 2 - 10V, uplne sa mozem vykaslat na vypocet napatia.

Jednoducho miesto U1 daj V1 (prva vzdialenost) a miesto U2 daj V2. V jednotkach, ktore su pre danu aplikaciu najpraktickejsie. Napriklad v mm, alevo v cm.

DragonSoul: To mě taky napadlo , prostě čím vyšší referenční napětí ideálně 5V, tím lepší přesnost , asi to bude to pravé řešení .

Martin to je mi jasné, ale jediné známé a přesné napětí, které mám, je 0V , napájecí napětí je přeci jen u každého stabilizátoru kus od kusu jiné tam mám rozptyl 0,1V , interně mohu na vstup připoit GND, nebo VCC. Zkusím o tom trochu podumat.

Martin:
Proč by to bylo sado maso ? Pokud potřebuji dělič 10:1 dám trimr mezi dva odpory a doladím na 10:1, když mi 9.9:1.1 vadí :smiley: Nejde tu o tisícikusovou sérii , jen o nějakých 30 kousků sms hlásiče provozního napětí a některým zařízením prostě vadí , když se seknu o 0,1V.

Tím známým napětím bylo pravděpodobně myšleno jakékoli napětí, které můžeš přesně změřit voltmetrem a dle toho naladit kalibrační konstanty.
Zpravidla však stačí zkalibrovat maximum. Chyba nuly nebývá výrazná (konstanta “b” v martinových vzorcích), pak zbyde 1 rovnice s 1 neznámou :slight_smile:.
Otázkou je, co pro tebe bude schůdnější varianta. Buď to tedy můžeš šťourat ručně, nebo můžeš do programu přidat kalibrační rutinu s tím, že před nasazením do provozu připojíš na vstup známé napětí a mcu si potřebnou hodnotu uloží do eeprom (raději několikrát včetně kontrolního slova).

Mimochodem - po pravé straně svých příspěvků je tlačítko “upravit” :wink:

Já to nepochopil, no jo, už je pozdě … ideální by byla samokalibrace za provozu , nějaká sw implementace křišťálové koule. Jinak, ten čudlík jsem taky neviděl, díky :slight_smile:

No preto, lebo:

  1. nastavenie je pracne. Okrem toho, na zaklade coho nastavujes trimer? Pri vstupnom rozsahu napr. 24V chces dostat z AD kolko dielikov? To to mozes rovno hodit do toho vzorca

  2. trimer je velky.

  3. trimer je mechanicko elektronicka suciastka, ktora ma daleko vyssiu teplotnu zavislost ako samotne odpory. Takze pri pouziti trimra hovorit o potrebe pouzitia presnej a teplotne stalej napatovej referenicie pre AD je uplne zbytocne.

  4. pre moznosti jemenho nastavenia je potrebne pouzit viacotackovy trimer, ktory je predsa len o nieco drahsi. Ak trimer nie je nejaky speci, aky deliaci pomer bude mat o rok pod roznymi poveternostnymi vplyvmi (nemusi byt priamo vonku, staci zima/leto/8vlhko/sucho)? Udrzi presnot na 0.1% co je cca rozlisovacia schopnost AD v ATmega?
    Viacotackove trimre maju malu mechanicku hystereziu. Doiterovat tak k spravnej hodnote nemusi byt vzdy priamociare.

Ta stabilita sa da vyriesit pouzitim trimra v odporovom delici, ale na to treba vela pocitat. To je jednoduchsie vypocita tie kalibracne konstatny.

Presnost cez trimer a cez prepocet je prakticky rovnaka. Ziadne autokalibracne systemy netreba. No a ak chce niekto vyrobit zariadenie ktore ma nieco merat, musi predsa toto “nieco” vediet pripojit na vstup zariadenia a inym referencnym meradlom zmerat jeho hodnotu. V uplnej nudzi staci pouzit bezny voltmeter, ale treba pocitat s jeho presnostou cca 1-2%, pokial ho nemate kalibrovany alebo ciachovany presnejsim meradlom. Ak pouzijem na kalibraciu (je jedno ci pomocou sw alebo pomocou trimra) meradlo s nejakou presnostou, urcite nim nenakalibrujem zariadenie na presnost vyssiu. S 1-2% presnostou pouziteho kalibracneho meradla nema teda zmysel hovorit o potrebe nejakych presnych a stabilnych referenciach. Na velku cast aplikacii indikovat “nieco” takato presnost bohate posacuje, tak by som si s tymhlavu nelamal a trimru ako moznemu zdroju problemov a zbytocnemu prvku v meracom retazci by som sa oblukom vyhol.

P.S. Ako nic proti trimrom, sam ich pouzivam - hlavne tie viacotackove. Ale snazim sa to robit s rozmyslom a nesnazim si nimi komplikovat zapojenie :slight_smile:

Referenční napětí lze změřit na pinu AREF a použít změřenou hodnotu ve svých výpočtech. Obvykle to stačí. Pokud chcete něco lepšího, tak pro vnitřní A/D v Atmegách je obvykle dostačující externí reference TL431, opět je nutno ji změřit. Pro vyšší požadavky obvykle používám ADR03 (2.5V, 0.1% initial accuracy, 3ppm/K), ale pro vnitřní A/D převodník je to již přílišný luxus.

Co je pracné? Přiložíš kalibrované napětí a trimrem otáčíš, dokud ti displej neukáže správnou hodnotu.

To záleží jaký si vybereš. Existují 3 x 3mm.

Záleží jak ho zapojíš. Jenom hlupák by samotným trimrem dělal odporový dělič třeba 1:10.

Proboha na co? Rozsah nastavení trimrem se volí tak, aby pokryl pouze výrobní tolerance součástek a nic víc.