Obsah:
- Krok 1: Čo je to prevodník reklamy?
- Krok 2: Použité zdroje
- Krok 3: ESP32 ADC
- Krok 4: Použitý obvod
- Krok 5: Znak použitý
- Krok 6: Údaje získané osciloskopom
- Krok 7: Údaje získané osciloskopom (súbor CSV v programe Excel)
- Krok 8: Údaje získané ADC
- Krok 9: Údaje získané pomocou ADC - Excel
- Krok 10: Porovnanie stúpacích ramp
- Krok 11: Vyrovnanie počtu vzoriek
- Krok 12: Vyplnenie medzier - trendová čiara
- Krok 13: Vyplnenie medzier - polynómová krivka 2. stupňa
- Krok 14: Vyplnenie medzier - vyhodnotenie funkcie
- Krok 15: Konvertovanie napätia osciloskopu na ekvivalentnú hodnotu na porovnanie s ADC
- Krok 16: Porovnanie dvoch získaných ramp
- Krok 17: Správanie sa rozdielu v čítaní ADC (ERROR)
- Krok 18: Rozdielne správanie pri čítaní ADC - nájdenie funkcie opravy
- Krok 19: Používanie iného softvéru
- Krok 20: Konštanty a nastavenie ()
- Krok 21: Slučka () a funkcia opravy
- Krok 22: Použitie korekčnej funkcie PolySolve
- Krok 23: Snímanie s korekciou - sériový plotter
- Krok 24: Výpočtové náklady
- Krok 25: Testovací kód - nastavenie () a spustenie slučky ()
- Krok 26: Testovací kód - slučka () a spracovanie
- Krok 27: Testovací kód - Slučka () - Výsledky
- Krok 28: Testovací kód - použité funkcie
- Krok 29: Súbory
Video: Viete o úprave ADC ESP32 ?: 29 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
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
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ž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ý
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
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)
Máme tu vzorky.
Krok 8: Ú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
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
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
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
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
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
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
Vizualizácia rozdielov dosiahnutých v týchto dvoch čítaniach.
Krok 17: Správanie sa 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
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
Ď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
Krok 24: 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:
INO
Tabuľka
Odporúča:
Ako nastaviť zmysel pre ADC: 5 krokov
Ako vytvoriť zmysel pre prúd ADC: V tomto návode popíšeme, ako implementovať 8-bitový analógovo-digitálny prevodník (ADC) do SLG46855V, ktorý dokáže snímať záťažový prúd a rozhranie s MCU cez I2C. Tento dizajn je možné použiť pre rôzne aplikácie snímania prúdu, ako
Viete, ako sa cítia vaše rastliny? [Častica+Ubidots]: 6 krokov
Viete, ako sa cítia vaše rastliny? [Particle+Ubidots]: Nič nenahradí vychádzky a manipuláciu s pôdou pre seba, ale dnešná technológia umožnila diaľkovo monitorovať parametre pôdy a sledovať nemerateľné moje ľudské zmysly. Pôdne sondy ako SHT10 sú teraz mimoriadne presné a ponúkajú
Arduino a 16-bitový ADC TI ADS1110: 6 krokov
Arduino a 16-bitový ADC TI ADS1110: V tomto návode sa pozrieme na použitie Arduina na prácu s Texas Instruments ADS1110-neuveriteľne malý, ale užitočný 16-bitový analógovo-digitálny prevodník IC. Môže pracovať medzi 2,7 a 5,5 V, takže je vhodný aj pre Arduino Due a ďalšie nízkonapäťové
Arduino a PCF8591 ADC DAC IC: 7 krokov
Arduino a PCF8591 ADC DAC IC: Chceli ste niekedy vo svojom projekte Arduino viac pinov analógového vstupu, ale nechceli ste sa dostať k Mega? Alebo chcete generovať analógové signály? Potom si pozrite predmet nášho tutoriálu - NXP PCF8591 IC. Rieši oba tieto problémové
ESP32: Viete, čo je DAC?: 7 krokov
ESP32: Viete, čo je DAC?: Dnes budeme hovoriť o dvoch problémoch. Prvým z nich je DAC (prevodník digitálneho signálu na analógový). Považujem to za dôležité, pretože prostredníctvom neho napríklad robíme zvukový výstup v ESP32. Druhým problémom, ktorému sa dnes budeme venovať, je oscilácia