Obsah:

Viete o úprave ADC ESP32 ?: 29 krokov
Viete o úprave ADC ESP32 ?: 29 krokov

Video: Viete o úprave ADC ESP32 ?: 29 krokov

Video: Viete o úprave ADC ESP32 ?: 29 krokov
Video: Как использовать ESP32 WiFi и Bluetooth с Arduino IDE, полная информация с примерами и кодом. 2024, November
Anonim
Image
Image
Použité zdroje
Použité zdroje

Dnes budem hovoriť o technickejšom probléme, ale myslím si, že každý, kto pracuje s ESP32, by mal vedieť: problém úpravy čítania ADC (analógovo-digitálneho prevodníka). Považujem to za dôležité, pretože pri „meraní“, najmä pri prístroji s analógovým výstupom, si musíte byť úplne istí, že čítanie prebieha správne.

Vo videu dnes preto vykonáme merania pomocou „analógovo-digitálneho prevodníka“ESP32, budeme sledovať nezrovnalosti v prevode a použijeme metódu úpravy / kalibrácie ADC.

Krok 1: Čo je to prevodník reklamy?

AD prevodník je obvod schopný prekladať analógové (spojité) množstvo do digitálnych (diskrétnych) hodnôt. Čo to znamená? To znamená, že zatiaľ čo digitálne hodnoty môžu nadobúdať iba diskrétne hodnoty tvorené kombináciou núl a jednotiek, analógová veličina môže nadobúdať akúkoľvek hodnotu v rozsahu. Ak by sme napríklad zmerali napätie ideálneho článku AA, mohli by sme nájsť akúkoľvek hodnotu medzi 0 V a 1,5 V, pretože ide o analógové množstvo. Výstupný stav ideálnej žiarovky musí predpokladať iba dva stavy (vypnuté alebo zapnuté), čo je diskrétna veľkosť. Pretože mikrokontroléry pracujú s touto diskrétnou logikou, potrebujeme obvod schopný previesť analógovú veličinu na digitálnu (alebo diskrétnu).

Krok 2: Použité zdroje

• Jedna karta Lolin32 Lite v1.0.0

• Osciloskop Tektronix TDS1001C na snímanie

• Jeden USB kábel pre ESP32

• Osciloskop Hantek DSO4102C ako generátor signálu

Krok 3: ESP32 ADC

ESP32 ADC
ESP32 ADC

Podľa údajov Espressif môžu čipy ESP32 v meraných výsledkoch predstavovať +/- 6% rozdiel od jedného čipu k druhému.

Konverzia navyše NEMÁ lineárnu odpoveď na každý dostupný rozsah na čítanie. Espressif poskytuje metódu kalibrácie a navrhuje, aby používatelia implementovali iné metódy, ak to považujú za potrebné na dosiahnutie požadovanej presnosti.

Vykonáme zber údajov, z ktorého ukážeme reakcie ADC a príklad použitia matematického postupu na prečítanie úpravy.

Existuje niekoľko (jednoduchších alebo zložitejších) spôsobov, ako tieto opravy dosiahnuť. Je na vás, aby ste vyhodnotili najvhodnejšie pre váš projekt.

Ten, ktorý je tu zobrazený, bude mať ilustračný účel a pokúsi sa vyriešiť zaujímavé body, ktoré je možné počas úprav pozorovať.

Krok 4: Použitý obvod

Použitý obvod
Použitý obvod

Použil som osciloskop s generátorom signálu, ktorý ide až do 25 MHz, Hantek DSO4102C. Vygenerovali sme vlnu, ktorá bola prečítaná ESP A / D a osciloskopom. Zhromaždené údaje boli zaznamenané v csv a do tabuľky, ktorú nechám na konci článku na stiahnutie.

Krok 5: Znak použitý

Znak použitý
Znak použitý

Vybrali sme nízkofrekvenčný lichobežníkový signál, ktorý umožňuje prístup k rampám, ktoré prechádzajú celým konverzným rozsahom. To umožňuje veľký počet vzoriek na týchto rampách.

Krok 6: Údaje získané osciloskopom

Údaje získané osciloskopom
Údaje získané osciloskopom

Obraz zachytenia vykonal osciloskop. Údaje boli uložené v súbore csv. Všimnite si mierne zakrivenie na stúpajúcich a klesajúcich rampách signálu.

Krok 7: Údaje získané osciloskopom (súbor CSV v programe Excel)

Údaje získané osciloskopom (súbor CSV v programe Excel)
Údaje získané osciloskopom (súbor CSV v programe Excel)

Máme tu vzorky.

Krok 8: Údaje získané ADC

Údaje získané ADC
Údaje získané ADC

Zmenou prenosovej rýchlosti seriálu môžeme zobraziť údaje zachytené ADC. Sledujte deformáciu lichobežníkového signálu.

Údaje pozorované na sériovom plotri Arduino IDE

Krok 9: Údaje získané pomocou ADC - Excel

Údaje získané pomocou ADC - Excel
Údaje získané pomocou ADC - Excel

Použitím vyššej sadzby a sériového terminálu môžeme hodnoty zachytiť a použiť na porovnanie v programe Excel.

Krok 10: Porovnanie stúpacích ramp

Porovnanie stúpacích ramp
Porovnanie stúpacích ramp

Porovnávame dve lezecké rampy dvoch úlovkov.

Všimnite si zakrivenie, ktoré sa vyskytuje na oboch rampách.

Všimnite si tiež, že pre rovnakú rampu máme oveľa viac vzoriek ESP32 ako z osciloskopu.

Krok 11: Vyrovnanie počtu vzoriek

Vyrovnanie počtu vzoriek
Vyrovnanie počtu vzoriek
Vyrovnanie počtu vzoriek
Vyrovnanie počtu vzoriek

Pretože ESP32 poskytoval väčší počet vzoriek ako osciloskop, musíme tieto hodnoty porovnať, pretože budú slúžiť ako index na porovnanie týchto dvoch kriviek.

Za týmto účelom urobíme priame porovnanie.

Máme 305 vzoriek pre rampu osciloskopu a 2365 vzoriek pre rampu ADC.

Pretože rampy sú v rovnakom rozsahu, môžeme povedať, že pre každý osciloskop máme približne 7,75 vzoriek ADC.

Násobenie indexu každej vzorky osciloskopu má rovnakú krivku, ale s indexmi ekvivalentnými ADC a prerozdeleným údajom.

Aby sme doplnili chýbajúce údaje pre nové pozície, použijeme krivku, ktorá štatisticky vyhovuje známym údajom.

Krok 12: Vyplnenie medzier - trendová čiara

Vyplnenie medzier - trendová čiara
Vyplnenie medzier - trendová čiara
Vyplnenie medzier - trendová čiara
Vyplnenie medzier - trendová čiara

Výberom známych údajov (modré bodky) kliknutím a kliknutím pravým tlačidlom myši vyberieme: „Pridať riadok trendu …“

V zobrazenom okne vyberieme typ Polynóm (bude stačiť poradie 2).

Skontrolovali sme aj možnosti „Zobraziť rovnicu v grafe“a „Zobraziť hodnotu R na druhú v grafe“.

Klikneme na „Zavrieť“.

Krok 13: Vyplnenie medzier - polynómová krivka 2. stupňa

Vyplnenie medzier - polynómová krivka 2. stupňa
Vyplnenie medzier - polynómová krivka 2. stupňa

Excel nám poskytuje dve nové informácie; rovnica druhého rádu, ktorá najlepšie vyhovuje údajom, a rovnica R na druhú, ktorá kvantifikuje túto primeranosť.

Nezabudnite, že čím bližšie k 1, tým je rovnica vhodnejšia.

Neponárajme sa do zahrnutej matematiky, používajme ju len ako nástroj.

Krok 14: Vyplnenie medzier - vyhodnotenie funkcie

Vyplňme medzery vo vzorkovaní údajmi generovanými rovnicou. A potom ich porovnajte bod po bode.

y = -9E -08x2 + 0, 0014x + 0, 1505

R2 = 0, 9999

Napätie osciloskopu = -9E -08 * index2 + 0, 0014 * index + 0, 1505

Krok 15: Konvertovanie napätia osciloskopu na ekvivalentnú hodnotu na porovnanie s ADC

Konvertovanie napätia osciloskopu na ekvivalentnú hodnotu na porovnanie s ADC
Konvertovanie napätia osciloskopu na ekvivalentnú hodnotu na porovnanie s ADC

Využime to a transformujme tiež hodnotu napätia osciloskopu na ekvivalentnú hodnotu ADC.

Pretože najvyššia hodnota získaná v ADP ESP32 bola 4095, čo je ekvivalent hodnoty 2,958 V pre rovnaký index, môžeme povedať, že:

Každý volt pri meraniach osciloskopu sa rovná približne 1384,4 jednotkám AD. Preto môžeme všetky merania osciloskopu vynásobiť touto hodnotou.

Krok 16: Porovnanie dvoch získaných ramp

Porovnanie dvoch získaných ramp
Porovnanie dvoch získaných ramp

Vizualizácia rozdielov dosiahnutých v týchto dvoch čítaniach.

Krok 17: Správanie sa rozdielu v čítaní ADC (ERROR)

Správanie rozdielu v čítaní ADC (ERROR)
Správanie rozdielu v čítaní ADC (ERROR)

Nasledujúca krivka ukazuje, ako sa rozdiel v čítaní ADC správa ako funkcia merania. Tento zber údajov nám umožní nájsť opravnú funkciu.

Na nájdenie tejto krivky jednoducho vykreslíme rozdiel nájdený v každom meradle ako funkciu každej možnej polohy AD (0 až 4095).

Krok 18: Rozdielne správanie pri čítaní ADC - nájdenie funkcie opravy

Rozdielne správanie pri čítaní ADC - nájdenie funkcie opravy
Rozdielne správanie pri čítaní ADC - nájdenie funkcie opravy

V programe Excel môžeme určiť funkciu opravy pridaním trendovej čiary, teraz vyššieho stupňa, kým sa dostatočne nezhoduje s našimi údajmi.

Krok 19: Používanie iného softvéru

Použitie iného softvéru
Použitie iného softvéru
Použitie iného softvéru
Použitie iného softvéru
Použitie iného softvéru
Použitie iného softvéru
Použitie iného softvéru
Použitie iného softvéru

Ďalším zaujímavým softvérom na určovanie kriviek je PolySolve, ktorý je možné použiť priamo na odkaze: https://arachnoid.com/polysolve/ alebo stiahnuť ako Java aplikáciu.

Umožňuje aplikáciu polynómových regresií vyššieho stupňa a dodanie formátovanej funkcie, ako aj ďalších funkcií.

Ak ho chcete použiť, jednoducho zadajte údaje do prvého textového poľa. Údaje musia byť v poradí X, Y oddelené čiarkou alebo tabulátorom. Buďte opatrní pri správnom použití bodky ako desatinnej čiarky.

Ak sú zadané údaje správne naformátované, v nasledujúcom poli sa zobrazí graf.

Takto prebiehala naša krivka chýb ADC.

Toto okno predstaví výsledok regresie vrátane údajov o primeranosti funkcií, ktoré môžu mať zase výstup naformátovaný niekoľkými spôsobmi: ako funkcia C / C ++, zoznam koeficientov, funkcia napísaná v jazyku Java atď.

Poznámka: Dávajte pozor na oddeľovače desatinných miest

Krok 20: Konštanty a nastavenie ()

Tu uvádzam GPIO používané na analógové snímanie. Inicializujem sériový port a pin určený na analógové snímanie.

const int pin_leitura = 36; // GPIO usado para captura analógica void setup () {Serial.begin (1000000); // Inicializácia a porovnanie niektorých podobných parametrov ladenia pinMode (pin_leitura, INPUT); // Pino využitie analogického záznamu}

Krok 21: Slučka () a funkcia opravy

Vykonáme zachytenie upraveného napätia a hodnoty vytlačíme so správnymi opravami alebo bez nich.

void loop () {int valor_analogico = analogRead (pin_leitura); // realiza a captura da tensão ajustada //Serial.print(valor_analogico + f (valor_analogico)); // načítanie valores para debug (COM CORREÇÃO) Serial.print (valor_analogico); // doba čítania para debug (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // cria uma linha para marcar o valor máximo de 4095 Serial.print (","); Serial.println (0); // cria uma linha para marcar o valor mínimo de 0}

Všimnite si v riadku 12, že máme možnosť vytlačiť údaje s pridaním rozdielovej funkcie f (analog_value).

Krok 22: Použitie korekčnej funkcie PolySolve

Tu používame funkciu PolySolve vo vnútri Arduino IDE.

/* Režim: normálny Polynomiálny stupeň 6, 2365 x, y dátové páry Korelačný koeficient (r^2) = 9, 907187626418e-01 Štandardná chyba = 1, 353761109831e+01 Výstupná forma: C/C ++ funkcia: Copyright © 2012, P. Lutus - https://www.arachnoid.com. Všetky práva vyhradené. */ double f (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3,470360275448e-07 * pow (x, 3) + 2,082790802069e- 10 * prášok (x, 4) + -5,306931174991e-14 * prášok (x, 5) + 4,787659214703e-18 * prášok (x, 6); }

Všimnite si zmeny čiarkami za bodkou ako oddeľovača desatinných miest.

Krok 23: Snímanie s korekciou - sériový plotter

Zachytenie s korekciou - sériový plotter
Zachytenie s korekciou - sériový plotter

Krok 24: Výpočtové náklady

Výpočtové náklady
Výpočtové náklady
Výpočtové náklady
Výpočtové náklady

Na vykonanie polynomických výpočtov je potrebné, aby procesor túto úlohu zvládol. V závislosti od zdrojového kódu a dostupného výpočtového výkonu to môže viesť k oneskoreniu vykonávania.

Tu vidíme tabuľku výsledkov testu používajúceho viacstupňové polynómy. Všimnite si rozdielu medzi časmi, keď bola použitá funkcia pow () a keď nie.

Krok 25: Testovací kód - nastavenie () a spustenie slučky ()

Tu máme kód použitý v našom teste.

neplatné nastavenie () {Serial.begin (10 000 000); // Iniciando a porta serial someent para debug} void loop () {float valor_analogico = 500.0; // um valor arbtrario float quantidade = 10 000,0; // quantidade de chamadas float contador = 0,0; // contador de chamadas

Krok 26: Testovací kód - slučka () a spracovanie

Na získanie hodnoty v mikrosekundách som použil funkciu micros ().

// ============== inicia o proceso float agora = micros (); // marca o inštitucionálnej while (contador <quantidade) {// v (valor_analogico); // função vazia // r (valor_analogico); // função com retorno // f0 (valor_analogico); // grau 0 // f1 (valor_analogico); // grau 1 // f2 (valor_analogico); // grau 2 // f3 (valor_analogico); // grau 3 // f4 (valor_analogico); // grau 4 // f5 (valor_analogico); // grau 5 // f6 (valor_analogico); // grau 6 // f13_semPow (valor_analogico); // grau 13º SEM a função POW // f13_comPow (valor_analogico); // séria 13º COM a funkcia POW contador ++; } agora = (micros () - agora) / kvantidáda; // určovanie intervaloch, ktoré sa budú opakovať v cada iteração // ============== finaliza o procese

Krok 27: Testovací kód - Slučka () - Výsledky

Vytlačíme hodnotu vrátenú z funkcie stupňa 13 s POW a bez neho na porovnanie, ako aj interval spracovania.

// čas, za ktorý sa bude hra hrať, bude späť 13 vojnových zajtrajškov pre porovnanie Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM a funkčné POW Serial.print (" -"); Serial.print (f13_comPow (valor_analogico)); // šedá 13º KOM a funkcia POW Serial.print (" -"); // čas do procesu Serial.println (agora, 6); }

Krok 28: Testovací kód - použité funkcie

Prázdne funkcie (iba s návratom) stupňa 0 a 1.

// FUNÇÃO VAZIAdouble v (double x) {} // FUNÇÃO SOMENTE COM RETORNO double r (double x) {return x; } // FUNÇÃO DE GRAU 0 double f0 (double x) {return 2.202196968876e+02; } // FUNÇÃO DE GRAU 1 double f1 (double x) {return 2,202196968876e + 02 + 3,561383996027e-01 * x; }

Funkcie stupňa 2, 3 a 4.

// FUNÇÃO DE GRAU 2double f2 (double x) {return 2,202196968876e + 02 + 3,561383996027e-01 * x + 1,276218788985e-04 * pow (x, 2); } // FUNÇÃO DE GRAU 3 double f3 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3,470360275448e-07 * pow (x, 3); } // FUNÇÃO DE GRAU 4 double f4 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3,470360275448e-07 * pow (x, 3) + 2,082790802069e-10 * prášok (x, 4); }

Funkcie 5. a 6. stupňa.

// FUNÇÃO DE GRAU 5double f5 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3,470360275448e-07 * pow (x, 3) + 2,082790802069e-10 * prášok (x, 4) + -5,306931174991e-14 * prášok (x, 5); } // FUNÇÃO DE GRAU 6 double f6 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3,470360275448e-07 * pow (x, 3) + 2,082790802069e-10 * prášok (x, 4) + -5,306931174991e-14 * prášok (x, 5) + 4,787659214703e-18 * prášok (x, 6); }

Funkcia 13. stupňa pomocou POW.

// FUNÇÃO DE GRAU 13 USANDO O POWdouble f13_comPow (double x) {return 2, 161282383460e + 02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * pow (x, 2) + -3, 968558178426e-06 * pow (x, 3) + 1, 047910519933e-08 * pow (x, 4) + -1, 479271312313e-11 * pow (x, 5) + 1, 220894795714e-14 * pow (x, 6) + -6, 136200785076e-18 * prášok (x, 7) + 1, 910015248179e-21 * prášok (x, 8) + -3, 566607830903e-25 * prášok (x, 9) + 5, 000280815521e-30 * prášok (x, 10) + 3, 434515045670e-32 * prášok (x, 11) + -1, 407635444704e-35 * prášok (x, 12) + 9, 871816383223e-40 * prášok (x, 13); }

Funkcia 13. stupňa bez použitia POW.

// FUNÇÃO DE GRAU SEM USAR O POWdouble f13_semPow (double x) {return 2, 161282383460e + 02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * x * x + -3, 968558178426e-06 * x * x * x + 1, 047910519933e-08 * x * x * x * x + -1, 479271312313e-11 * x * x * x * x * x * x + 1, 220894795714e-14 * x * x * x * x * x * * x + -6, 136200785076e-18 * x * x * x * x * x * x * x + 1, 910015248179e-21 * x * x * x * x * x * x * x * x * x + -3, 566607830903e- 25 * x * x * x * x * x * x * x * x * x + 5 000280815521e-30 * x * x * x * x * x * x * x * x * x * x * x * + + 3, 434515045670e- 32 * x * x * x * x * x * x * x * x * x * x * x * x + -1, 407635444704e -35 * x * x * x * x * x * x * x * x * x * x * x x * x * x + 9, 871816383223e-40 * x * x * x * x * x * x * x * x * x * x * x * x * x * x; }

Krok 29: Súbory

Stiahnite si súbory:

PDF

INO

Tabuľka

Odporúča: