Tartalomjegyzék:

Tudsz az ESP32 ADC beállításról?: 29 lépés
Tudsz az ESP32 ADC beállításról?: 29 lépés

Videó: Tudsz az ESP32 ADC beállításról?: 29 lépés

Videó: Tudsz az ESP32 ADC beállításról?: 29 lépés
Videó: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Image
Image
Felhasznált források
Felhasznált források

Ma egy technikai kérdésről fogok beszélni, de azt hiszem, mindenkinek, aki ESP32-vel dolgozik, tudnia kell: az ADC (analóg-digitális konverter) olvasási beállítása. Ezt azért tartom fontosnak, mert amikor "mérést" végez, különösen analóg kimenettel rendelkező műszer esetén, teljesen biztosnak kell lennie abban, hogy a leolvasás helyesen történik.

A mai videóban ezért méréseket végezünk az ESP32 "analóg-digitális átalakítójával", megfigyeljük a konverziós eltéréseket, és alkalmazunk egy ADC korrekciós / kalibrálási módszert.

1. lépés: Mi az AD Converter?

Az AD konverter egy áramkör, amely képes analóg (folyamatos) mennyiség digitális (diszkrét) értékekké alakítására. Az mit jelent? Ez azt jelenti, hogy míg a digitális értékek csak a nullák és az egyek kombinációjából származó diszkrét értékeket feltételezhetnek, az analóg mennyiség bármilyen értéket felvehet egy tartományon belül. Például, ha megmérjük az ideális AA cella feszültségét, bármilyen értéket találhatunk 0V és 1,5V között, mivel ez analóg mennyiség. Az ideális lámpa kimeneti állapotának csak két állapotot kell feltételeznie (ki vagy be), ami diszkrét nagyságú. Mivel a mikrokontrollerek ezt a diszkrét logikát használják, szükségünk van egy áramkörre, amely képes analóg mennyiség digitálisra (vagy diszkrétre) történő lefordítására.

2. lépés: Felhasznált erőforrások

• Egy Lolin32 Lite kártya v1.0.0

• Tektronix TDS1001C oszcilloszkóp a rögzítéshez

• Egy USB -kábel az ESP32 -hez

• Hantek DSO4102C oszcilloszkóp, mint jelgenerátor

3. lépés: ESP32 ADC

ESP32 ADC
ESP32 ADC

Az Espressif adatai szerint az ESP32 chipek +/- 6% eltérést mutathatnak a chipek között a mért eredményekben.

Ezenkívül a konverziónak NEM van lineáris válasza minden olvasható tartományra. Az Espressif egy módszert kínál a kalibráláshoz, és azt javasolja a felhasználóknak, hogy alkalmazzanak más módszereket, ha szükségesnek tartják a kívánt pontosság elérését.

Adatgyűjtést hajtunk végre, és ebből megmutatjuk az ADC válaszokat, és egy példát egy matematikai folyamat alkalmazására a kiigazítás olvasásához.

Ezeknek a javításoknak több (egyszerűbb vagy összetettebb) módja van. Önön múlik, hogy kiértékeli -e a legmegfelelőbbet a projektjéhez.

Az itt bemutatottnak szemléltető célja lesz, és megpróbál olyan érdekes dolgokkal foglalkozni, amelyek megfigyelhetők a beállítások során.

4. lépés: Használt áramkör

Használt áramkör
Használt áramkör

Oszcilloszkópot használtam 25 MHz -ig terjedő jelgenerátorral, a Hantek DSO4102C -vel. Hullámot generáltunk, amelyet az ESP A / D és az oszcilloszkóp olvasott. Az összegyűjtött adatokat csv -ben és táblázatban rögzítettük, amelyeket a cikk végén hagyok letöltésre.

5. lépés: Használt jel

Jel használt
Jel használt

Egy alacsony frekvenciájú trapéz jelet választottunk, amely lehetővé teszi a hozzáférést a rámpákhoz, amelyek a teljes konverziós tartományban futnak. Ez nagyszámú mintát tesz lehetővé ezeken a rámpákon.

6. lépés: Az oszcilloszkóp által nyert adatok

Az oszcilloszkóp által nyert adatok
Az oszcilloszkóp által nyert adatok

A rögzítés képét oszcilloszkóp végezte. Az adatokat csv fájlban tárolták. Vegye figyelembe a jel emelkedő és süllyedő rámpáin tapasztalt enyhe görbületet.

7. lépés: Az oszcilloszkóp által szerzett adatok (csv fájl az Excelben)

Az oszcilloszkóp által szerzett adatok (csv fájl Excelben)
Az oszcilloszkóp által szerzett adatok (csv fájl Excelben)

Itt vannak a minták.

8. lépés: Az ADC által beszerzett adatok

Az ADC által beszerzett adatok
Az ADC által beszerzett adatok

A sorozat átviteli sebességének megváltoztatásával megtekinthetjük az ADC által rögzített adatokat. Figyelje meg a trapéz jel deformációját.

Az Arduino IDE soros plotteren megfigyelt adatok

9. lépés: Az ADC által megszerzett adatok - Excel

ADC által megszerzett adatok - Excel
ADC által megszerzett adatok - Excel

A magasabb arány és a soros terminál használatával rögzíthetjük az értékeket és alkalmazhatjuk őket Excelben összehasonlításunkhoz.

10. lépés: A mászó rámpák összehasonlítása

A mászó rámpák összehasonlítása
A mászó rámpák összehasonlítása

Összehasonlítjuk a két fogás két mászó rámpáját.

Vegye figyelembe a görbületet, amely mindkét rámpán előfordul.

Vegye figyelembe azt is, hogy ugyanazon rámpánál sokkal több mintánk van az ESP32 -ből, mint az oszcilloszkópból.

11. lépés: A minták számának egyenlítése

A minták számának egyenlítése
A minták számának egyenlítése
A minták számának egyenlítése
A minták számának egyenlítése

Mivel az ESP32 nagyobb számú mintát biztosított, mint az oszcilloszkóp, ezeket az értékeket egyenlővé kell tennünk, mivel ezek indexként szolgálnak a két görbe összehasonlításához.

Ehhez közvetlen összehasonlítást fogunk végezni.

305 mintánk van az oszcilloszkóp rámpához és 2365 minta az ADC rámpához.

Mivel a rámpák azonos tartományban vannak, azt mondhatjuk, hogy minden oszcilloszkóphoz hozzávetőleg 7,75 ADC -mintánk van.

Az egyes oszcilloszkópminták indexének megszorzása azonos görbével rendelkezik, de az ADC -vel és az újraelosztott adatokkal egyenértékű indexekkel.

Az új pozíciók hiányzó adatainak kitöltéséhez olyan görbét alkalmazunk, amely statisztikailag illeszkedik az ismert adatokhoz.

12. lépés: A hiányosságok kitöltése - trendvonal

A hiányosságok kitöltése - trendvonal
A hiányosságok kitöltése - trendvonal
A hiányosságok kitöltése - trendvonal
A hiányosságok kitöltése - trendvonal

Az ismert adatok (kék pöttyök) kiválasztásával, a jobb gombbal kattintva, majd kattintva kiválasztjuk: "Trend sor hozzáadása …"

A megjelenő ablakban kiválasztjuk a polinomiális típust (2 -es sorrend elég lesz).

Ellenőriztük az "Egyenlet megtekintése a diagramban" és az "R-négyzetérték megjelenítése a diagramban" lehetőségeket is.

Kattintson a "Bezárás" gombra.

13. lépés: A hiányosságok kitöltése - 2. fokozatú polinomiális görbe

A hiányosságok kitöltése - 2. fokozatú polinomiális görbe
A hiányosságok kitöltése - 2. fokozatú polinomiális görbe

Az Excel két új információt ad nekünk; az adatokhoz legjobban illeszkedő másodrendű egyenlet, és az R négyzetű egyenlet, amely ezt a megfelelőséget számszerűsíti.

Ne feledje, hogy minél közelebb van az 1 -hez, annál megfelelőbb az egyenlet.

Ne mélyedjünk el a matematikában, csak használjuk eszközként.

14. lépés: A hiányosságok kitöltése - a funkció értékelése

Töltsük ki a mintavételi réseket az egyenlet által generált adatokkal. És akkor hasonlítsa össze őket pontról pontra.

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

R² = 0, 9999

Oszcilloszkóp feszültsége = -9E -08 * index2 + 0, 0014 * index + 0, 1505

15. lépés: Az oszcilloszkóp feszültségének átalakítása az ADC -vel összehasonlítható értékre

Az oszcilloszkóp feszültségének átalakítása az ADC -vel összehasonlítható értékre
Az oszcilloszkóp feszültségének átalakítása az ADC -vel összehasonlítható értékre

Használjuk ki ezt, hogy az oszcilloszkóp feszültségét is egyenértékű ADC értékké alakítsuk át.

Mivel az ESP32 ADP -ben kapott legmagasabb érték 4095 volt, ami megegyezik az azonos index 2,958V értékével, azt mondhatjuk, hogy:

Az oszcilloszkóp méréseiben minden volt körülbelül 1384,4 AD egység. Ezért az oszcilloszkóp összes mérését megszorozhatjuk ezzel az értékkel.

16. lépés: A kapott két rámpa összehasonlítása

A kapott két rámpa összehasonlítása
A kapott két rámpa összehasonlítása

A két leolvasásban kapott különbségek vizualizálása.

17. lépés: Az ADC olvasási különbség (ERROR) viselkedése

Az ADC olvasási különbség (ERROR) viselkedése
Az ADC olvasási különbség (ERROR) viselkedése

Az alábbi görbe azt mutatja, hogyan viselkedik az ADC leolvasás különbsége a mérés függvényében. Ez az adatgyűjtés lehetővé teszi számunkra, hogy korrekciós funkciót találjunk.

Ennek a görbének a megtalálásához egyszerűen ábrázoljuk az egyes mérésekben talált különbségeket minden lehetséges AD pozíció függvényében (0 és 4095 között).

18. lépés: Az ADC olvasási különbségek viselkedése - Javítási függvény keresése

ADC olvasási különbség viselkedése - korrekciós funkció keresése
ADC olvasási különbség viselkedése - korrekciós funkció keresése

Az Excelben korrekciós függvényt határozhatunk meg egy most magasabb fokú trendvonal hozzáadásával, amíg az megfelelően nem illeszkedik az adatainkhoz.

19. lépés: Más szoftver használata

Más szoftver használata
Más szoftver használata
Más szoftver használata
Más szoftver használata
Más szoftver használata
Más szoftver használata
Más szoftver használata
Más szoftver használata

További érdekes szoftver a görbék meghatározására a PolySolve, amely közvetlenül a következő linken használható: https://arachnoid.com/polysolve/ vagy letölthető Java alkalmazásként.

Lehetővé teszi a magasabb fokú polinomiális regressziók alkalmazását és a formázott függvény, valamint más funkciók átadását.

Használatához egyszerűen írja be az adatokat az első szövegmezőbe. Az adatoknak X, Y sorrendben kell lenniük, vesszővel vagy tabulátorral elválasztva. Legyen óvatos, ha a pontot helyesen használja tizedespontként.

Ha a bevitt adatok helyesen vannak formázva, egy diagram jelenik meg a következő mezőben.

Így haladt az ADC hibagörbénk.

Ez az ablak a regresszió eredményét mutatja be, beleértve a függvények megfelelőségére vonatkozó adatokat is, amelyek viszont többféleképpen formázhatják a kimenetét: C / C ++ függvényként, az együtthatók listájaként, Java -ban írt függvényként stb.

Megjegyzés: Ügyeljen a tizedes elválasztókra

20. lépés: Állandók és beállítás ()

Itt mutatom be az analóg rögzítéshez használt GPIO -t. Inicializálom a soros portot, valamint az analóg rögzítéshez meghatározott tűt.

const int pin_leitura = 36; // GPIO usado para captura analógica void setup () {Serial.begin (1000000); // Iniciciando a porta serial somente para debug pinMode (pin_leitura, INPUT); // Pino utilizado para captura analógica}

21. lépés: Loop () és a korrekciós funkció

Elkészítjük a beállított feszültséget, és kinyomtatjuk az értékeket a helyes korrekciókkal vagy anélkül.

void loop () {int valor_analogico = analógRead (pin_leitura); // realiza a captura da tensão ajustada // Serial.print(valor_analogico + f (valor_analogico)); // imprime os valores para debug (COM CORREÇÃO) Serial.print (valor_analogico); // imprimime os valores para debug (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // cria uma linha para marcar o valor máximo de 4095 Serial.print (","); Soros.println (0); // cria uma linha para marcar o valor mínimo de 0}

Vegye figyelembe a 12. sorban, hogy lehetőségünk van az adatok kinyomtatására az f (analóg_érték) függvény hozzáadásával.

22. lépés: A PolySolve Correction funkció használata

Itt a PolySolve funkciót használjuk az Arduino IDE -n belül.

/* Mód: normál polinomiális fok 6, 2365 x, y adatpárok Korrelációs együttható (r^2) = 9, 907187626418e-01 Standard hiba = 1, 353761109831e+01 Kimeneti forma: C/C ++ függvény: Copyright © 2012, P. Lutus - https://www.arachnoid.com. Minden jog fenntartva. */ 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 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }

Jegyezze fel a vesszőről pontra változást tizedes elválasztóként.

23. lépés: Rögzítés korrekcióval - Plotter sorozat

Rögzítés korrekcióval - Plotter sorozat
Rögzítés korrekcióval - Plotter sorozat

24. lépés: Számítási költség

Számítási költség
Számítási költség
Számítási költség
Számítási költség

A polinomszámítások elvégzéséhez szükséges, hogy a processzor kezelje ezt a feladatot. Ez a forráskódtól és a rendelkezésre álló számítási teljesítménytől függően késleltetheti a végrehajtást.

Itt egy többfokozatú polinomokat használó teszt eredménytáblázatát látjuk. Figyelje meg a különbséget azok között az idők között, amikor a pow () függvényt használták, és amikor nem.

25. lépés: Tesztkód - Beállítás () és Loop Start ()

Itt van a tesztünkben használt kód.

void setup () {Serial.begin (1000000); // Iniciando a porta serial somente para debug} void loop () {float valor_analogico = 500.0; // um valor arbtrario float quantidade = 10000.0; // quantidade de chamadas float contador = 0,0; // contador de chamadas

26. lépés: Tesztkód - ciklus () és feldolgozás

A micros () függvényt használtam, hogy megkapjam az értéket mikroszekundumokban.

// ============= inicia o processo float agora = micros (); // marca o instante inicial 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); // grau 13º COM a função POW contador ++; } agora = (micros () - agora) / quantidade; // determina o intervalo que se passou para cada iteração // ============= finaliza o processo

27. lépés: Tesztkód - Loop () - Eredmények

Összehasonlításképpen kinyomtatjuk a 13. fokozat funkcióból visszaadott értéket POW -val és anélkül, valamint a feldolgozási intervallumot.

// imprime o valor retornado da função de grau 13 com e sem POW para comparação Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM a função POW Serial.print (" -"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM a função POW Serial.print (" -"); // imprime o intervalo do processamento Serial.println (agora, 6); }

28. lépés: Tesztkód - Használt funkciók

0 és 1 fokú üres funkciók (csak visszatéréssel).

// 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 dupla f1 (dupla x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x; }

2., 3. és 4. fokozatú funkciók.

// 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 * pow (x, 4); }

5. és 6. fokozatú funkciók.

// 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 * pow (x, 4) + -5.306931174991e-14 * pow (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 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }

13. fokozatú funkció a POW segítségével.

// 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 * pow (x, 7) + 1, 910015248179e-21 * pow (x, 8) + -3, 566607830903e-25 * pow (x, 9) + 5, 000280815521e-30 * pow (x, 10) + 3, 434515045670e-32 * pow (x, 11) + -1, 407635444704e-35 * pow (x, 12) + 9, 871816383223e-40 * pow (x, 13); }

13. fokozatú funkció POW használata nélkül.

// 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 + 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 + -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 + 3, 434515045670e- 32 * 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 + 9, 871816383223e-40 * x * x * x * x * x * x * x * x * x * x * x * x * x; }

29. lépés: Fájlok

Töltse le a fájlokat:

PDF

ÉN NEM

Táblázat

Ajánlott: