Tartalomjegyzék:
- 1. lépés: Mi az AD Converter?
- 2. lépés: Felhasznált erőforrások
- 3. lépés: ESP32 ADC
- 4. lépés: Használt áramkör
- 5. lépés: Használt jel
- 6. lépés: Az oszcilloszkóp által nyert adatok
- 7. lépés: Az oszcilloszkóp által szerzett adatok (csv fájl az Excelben)
- 8. lépés: Az ADC által beszerzett adatok
- 9. lépés: Az ADC által megszerzett adatok - Excel
- 10. lépés: A mászó rámpák összehasonlítása
- 11. lépés: A minták számának egyenlítése
- 12. lépés: A hiányosságok kitöltése - trendvonal
- 13. lépés: A hiányosságok kitöltése - 2. fokozatú polinomiális görbe
- 14. lépés: A hiányosságok kitöltése - a funkció értékelése
- 15. lépés: Az oszcilloszkóp feszültségének átalakítása az ADC -vel összehasonlítható értékre
- 16. lépés: A kapott két rámpa összehasonlítása
- 17. lépés: Az ADC olvasási különbség (ERROR) viselkedése
- 18. lépés: Az ADC olvasási különbségek viselkedése - Javítási függvény keresése
- 19. lépés: Más szoftver használata
- 20. lépés: Állandók és beállítás ()
- 21. lépés: Loop () és a korrekciós funkció
- 22. lépés: A PolySolve Correction funkció használata
- 23. lépés: Rögzítés korrekcióval - Plotter sorozat
- 24. lépés: Számítási költség
- 25. lépés: Tesztkód - Beállítás () és Loop Start ()
- 26. lépés: Tesztkód - ciklus () és feldolgozás
- 27. lépés: Tesztkód - Loop () - Eredmények
- 28. lépés: Tesztkód - Használt funkciók
- 29. lépés: Fájlok
Videó: Tudsz az ESP32 ADC beállításról?: 29 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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
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
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
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
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)
Itt vannak a minták.
8. lépés: 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
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
Ö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
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
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
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
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 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 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
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
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
24. lépés: 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:
ÉN NEM
Táblázat
Ajánlott:
Az ADC aktuális értelmezése: 5 lépés
Hogyan lehet érzékelni az ADC-t: Ebben az utasításban leírjuk, hogyan kell megvalósítani egy 8 bites analóg-digitális átalakítót (ADC) az SLG46855V-ben, amely érzékeli a terhelési áramot és az interfészt az MCU-val I2C-n keresztül. Ez a kialakítás különféle áramérzékelő alkalmazásokhoz használható, például
7 szegmens az ADC megjelenítéséhez #Arduino értékek, #Arduino: 4 lépés
7 szegmens az ADC megjelenítéséhez #Arduino Értékek, #Arduino: Ebben a cikkben olyan projektet készítek, amely még mindig az előző cikkhez kapcsolódik. Nevezetesen az ADC adatok feldolgozása. Így nincs szüksége soros monitorra az adc adatok értékének megtekintéséhez. ebben a cikkben egy ADC érték megjelenítő képernyőt készítek. szóval nem
Olvassa el az ADC -értékeket a potenciométerekből: 4 lépés
Olvassa el az ADC -értékeket a potenciométerekből: Ebben a cikkben megmutatom, hogyan kell leolvasni az ADC -értékeket egy potenciométerből. Ez az Arduino programozás alapja. amely az analóg értékeket olvassa be az Arduino által biztosított analóg tű segítségével. a potencio használata mellett számos érzékelő van, amelyek
Első lépések az ESP32 -vel - ESP32 táblák telepítése Arduino IDE - -be ESP32 villogó kód: 3 lépés
Első lépések az ESP32 -vel | ESP32 táblák telepítése Arduino IDE | -be ESP32 villogó kód: Ebben az utasításban látni fogjuk, hogyan kell elkezdeni az esp32 -vel való munkát, és hogyan kell telepíteni az esp32 táblákat az Arduino IDE -be, és beprogramozzuk az esp 32 -et, hogy futtassa a villogó kódot az arduino ide használatával
Arduino és a TI ADS1110 16 bites ADC: 6 lépés
Arduino és a TI ADS1110 16 bites ADC: Ebben az oktatóanyagban megvizsgáljuk az Arduino használatát a Texas Instruments ADS1110-egy hihetetlenül apró, de hasznos 16 bites analóg-digitális konverter IC használatához. 2,7 és 5,5 V között tud működni, így az Arduino Due és más alacsonyabb volumenű