Sisukord:

Kas teate ESP32 ADC reguleerimise kohta?: 29 sammu
Kas teate ESP32 ADC reguleerimise kohta?: 29 sammu

Video: Kas teate ESP32 ADC reguleerimise kohta?: 29 sammu

Video: Kas teate ESP32 ADC reguleerimise kohta?: 29 sammu
Video: ESP32 Tutorial 3 - Resistor, LED, Bredboard and First Project: Hello LED -ESP32 IoT Learnig kit 2024, November
Anonim
Image
Image
Kasutatud ressursid
Kasutatud ressursid

Täna räägin tehnilisemast probleemist, kuid arvan, et igaüks, kes töötab ESP32-ga, peaks teadma: ADC (analoog-digitaalmuundur) lugemise reguleerimise küsimus. Pean seda oluliseks, sest "mõõtmist" tehes, eriti analoogväljundiga instrumendi puhul, peate olema täiesti kindel, et lugemine toimub õigesti.

Täna teostame videos seetõttu mõõtmisi, kasutades ESP32 "analoog-digitaalmuundurit", jälgime teisenduste lahknevusi ja rakendame ADC reguleerimise / kalibreerimise meetodit.

Samm: mis on AD -muundur?

AD muundur on ahel, mis on võimeline teisendama analoogse (pideva) koguse digitaalseks (diskreetseks) väärtuseks. Mida see tähendab? See tähendab, et kuigi digitaalsed väärtused võivad eeldada ainult nullide ja üksikute kombinatsioonist moodustatud diskreetseid väärtusi, võib analoogkogus eeldada mis tahes väärtusi vahemikus. Näiteks kui mõõta ideaalse AA -elemendi pinget, võime leida mis tahes väärtuse vahemikus 0V kuni 1,5V, kuna see on analoogkogus. Ideaalse lambi väljundseisund peab eeldama ainult kahte olekut (välja või sisse), mis on diskreetne suurusjärk. Kuna mikrokontrollerid töötavad selle diskreetse loogika abil, vajame ahelat, mis on võimeline teisendama analoogkoguse digitaalseks (või diskreetseks).

2. samm: kasutatud ressursid

• Üks Lolin32 Lite kaart v1.0.0

• Tektronix TDS1001C ostsilloskoop pildistamiseks

• Üks USB -kaabel ESP32 jaoks

• Hantek DSO4102C ostsilloskoop signaaligeneraatorina

Samm: ESP32 ADC

ESP32 ADC
ESP32 ADC

Espressifi andmete kohaselt võivad ESP32 kiibid mõõtmistulemustes olla +/- 6% erinevused ühe kiibi kohta.

Lisaks EI ole teisendusel lineaarset vastust iga lugemisvahemiku kohta. Espressif pakub kalibreerimismeetodi ja soovitab kasutajatel rakendada muid meetodeid, kui nad peavad seda vajalikuks soovitud täpsuse saavutamiseks.

Teostame andmete kogumise ja sellest tulenevalt näitame ADC vastuseid ning näite kohandamise lugemiseks matemaatilise protsessi rakendamisest.

Nende paranduste tegemiseks on mitu (lihtsamat või keerukamat) viisi. Teie ülesanne on hinnata oma projekti jaoks kõige sobivamat.

Siin näidatul on illustreeriv eesmärk ja see püüab käsitleda huvitavaid punkte, mida saab kohanduste ajal täheldada.

Samm 4: kasutatud ahel

Kasutatud ahel
Kasutatud ahel

Kasutasin ostsilloskoopi, mille signaaligeneraator töötab kuni 25 MHz, Hantek DSO4102C. Me genereerisime laine, mida lugesid ESP A / D ja ostsilloskoop. Kogutud andmed salvestati csv -vormingus ja arvutustabelisse, mille jätan artikli lõppu allalaadimiseks.

Samm 5: märk on kasutatud

Märk kasutatud
Märk kasutatud

Valisime madala sagedusega trapetsikujulise signaali, mis võimaldab juurdepääsu kaldteedele, mis kulgevad läbi kogu teisendusvahemiku. See võimaldab neil kaldteedel võtta suure hulga proove.

6. samm: ostsilloskoobi abil saadud andmed

Ostsilloskoobi abil saadud andmed
Ostsilloskoobi abil saadud andmed

Pildistamise pilt viidi läbi ostsilloskoobi abil. Andmed salvestati csv -faili. Pange tähele signaali tõusevate ja langevate kaldteede kerget kumerust.

Samm: ostsilloskoobi abil saadud andmed (csv -fail Excelis)

Ostsilloskoobiga saadud andmed (csv -fail Excelis)
Ostsilloskoobiga saadud andmed (csv -fail Excelis)

Proovid on meil siin.

8. samm: ADC poolt saadud andmed

ADC poolt saadud andmed
ADC poolt saadud andmed

Seeria edastuskiirust muutes saame vaadata ADC poolt salvestatud andmeid. Jälgige trapetsikujulise signaali deformatsiooni.

Arduino IDE jadaplotteril täheldatud andmed

9. samm: ADC poolt saadud andmed - Excel

ADC poolt saadud andmed - Excel
ADC poolt saadud andmed - Excel

Kasutades kõrgemat määra ja jadaterminali, saame väärtused jäädvustada ja neid Excelis oma võrdluste jaoks rakendada.

10. samm: ronimisrampide võrdlus

Ronimisrampide võrdlus
Ronimisrampide võrdlus

Võrdleme kahe saagi kahte ronimisrampi.

Pange tähele kumerust, mis esineb mõlemal kaldteel.

Pange tähele, et sama kaldtee puhul on meil ESP32 proove palju rohkem kui ostsilloskoobist.

11. samm: proovide arvu võrdsustamine

Proovide arvu võrdsustamine
Proovide arvu võrdsustamine
Proovide arvu võrdsustamine
Proovide arvu võrdsustamine

Kuna ESP32 andis suurema arvu proove kui ostsilloskoop, peame need väärtused võrdsustama, kuna need toimivad kahe kõvera võrdlemiseks indeksina.

Selleks teeme otsese võrdluse.

Ostsilloskoobi kaldtee jaoks on meil 305 proovi ja ADC kaldtee jaoks 2365 proovi.

Kuna kaldteed on samas vahemikus, võime öelda, et meil on iga ostsilloskoobi kohta ligikaudu 7,75 ADC proovi.

Iga ostsilloskoobi proovi indeksi korrutamisel on sama kõver, kuid indeksitega, mis on samaväärsed ADC ja ümberjaotatud andmetega.

Uute ametikohtade puuduvate andmete täitmiseks rakendame kõverat, mis statistiliselt sobib teadaolevate andmetega.

12. samm: lünkade täitmine - trendirida

Lünkade täitmine - trendirida
Lünkade täitmine - trendirida
Lünkade täitmine - trendirida
Lünkade täitmine - trendirida

Valides teadaolevad andmed (sinised punktid), klõpsates ja seejärel parema nupuga klõpsates valime: "Lisa trendirida …"

Ilmuvas aknas valime polünoomi tüübi (piisab järjekorrast 2).

Kontrollisime ka valikuid "Vaata diagrammi võrrandit" ja "Kuva diagrammi R-ruudu väärtus".

Klõpsame nuppu "Sule".

Samm 13: Lünkade täitmine - 2. astme polünoomkõver

Lünkade täitmine - 2. klassi polünoomkõver
Lünkade täitmine - 2. klassi polünoomkõver

Excel annab meile kaks uut teavet; teise järgu võrrand, mis andmetega kõige paremini sobib, ja R-ruudu võrrand, mis kvantifitseerib selle adekvaatsuse.

Pidage meeles, et mida lähemal 1 -le, seda sobivam on võrrand.

Ärgem süveneme kaasavasse matemaatikasse, kasutame seda lihtsalt tööriistana.

14. samm: Lünkade täitmine - funktsiooni hindamine

Täitkem proovivõtulüngad võrrandiga genereeritud andmetega. Ja siis võrrelge neid punkthaaval.

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

R² = 0, 9999

Ostsilloskoobi pinge = -9E -08 * indeks2 + 0, 0014 * indeks + 0, 1505

Samm 15: Ostsilloskoobi pinge teisendamine samaväärseks, et võrrelda seda ADC -ga

Ostsilloskoobi pinge teisendamine ADC -ga võrdlemiseks
Ostsilloskoobi pinge teisendamine ADC -ga võrdlemiseks

Kasutagem seda ära, et muuta ka ostsilloskoobi pinge väärtus samaväärseks ADC väärtuseks.

Kuna kõrgeim ESP32 ADP -s saadud väärtus oli 4095, mis võrdub sama indeksi väärtusega 2,958V, võime öelda, et:

Ostsilloskoobi mõõtmiste iga volt võrdub ligikaudu 1384,4 ühikuga AD. Seetõttu saame kõik ostsilloskoobi mõõtmised korrutada selle väärtusega.

16. samm: kahe saadud kaldtee võrdlemine

Võrreldes kahte saadud kaldteed
Võrreldes kahte saadud kaldteed

Kahel lugemisel saadud erinevuste visualiseerimine.

17. samm: ADC lugemiserinevuse (ERROR) käitumine

ADC lugemiserinevuse käitumine (ERROR)
ADC lugemiserinevuse käitumine (ERROR)

Allolev kõver näitab, kuidas ADC näidu erinevus käitub mõõtmise funktsioonina. See andmete kogumine võimaldab meil leida parandusfunktsiooni.

Selle kõvera leidmiseks joonistame lihtsalt igas mõõdus leitud erinevuse iga võimaliku AD positsiooni funktsioonina (0 kuni 4095).

18. samm: ADC lugemise erinevuste käitumine - parandusfunktsiooni leidmine

ADC lugemiserinevuse käitumine - parandusfunktsiooni leidmine
ADC lugemiserinevuse käitumine - parandusfunktsiooni leidmine

Me saame Excelis määrata parandusfunktsiooni, lisades nüüd kõrgema astme trendijoone, kuni see meie andmetega piisavalt sobib.

19. samm: muu tarkvara kasutamine

Muu tarkvara kasutamine
Muu tarkvara kasutamine
Muu tarkvara kasutamine
Muu tarkvara kasutamine
Muu tarkvara kasutamine
Muu tarkvara kasutamine
Muu tarkvara kasutamine
Muu tarkvara kasutamine

Teine huvitav tarkvara kõverate määramiseks on PolySolve, mida saab kasutada otse lingil: https://arachnoid.com/polysolve/ või alla laadida Java -rakendusena.

See võimaldab rakendada kõrgema astme polünoomi regressioone ja edastada vormindatud funktsiooni ning muid funktsioone.

Selle kasutamiseks sisestage andmed lihtsalt esimesse tekstikasti. Andmed peavad järgima järjekorda X, Y, mis on eraldatud koma või vahelehega. Olge täpne, kui kasutate punkti kümnendkohana, olge ettevaatlik.

Kui sisestatud andmed on õigesti vormindatud, kuvatakse diagramm järgmises kastis.

Siin on, kuidas meie ADC veakõver läks.

See aken esitab regressiooni tulemuse, sealhulgas funktsiooni adekvaatsuse andmed, mille väljundit saab omakorda vormindada mitmel viisil: funktsioonina C / C ++, koefitsientide loend, Java -vormingus kirjutatud funktsioon jne.

Märkus. Pöörake tähelepanu kümnendkohtade eraldajatele

20. samm: konstandid ja seadistamine ()

Siinkohal toon välja GPIO, mida kasutati analooghõive jaoks. Initsialiseerin jadaporti, samuti analooghõive jaoks määratud tihvti.

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. samm: silmus () ja parandusfunktsioon

Jäädvustame reguleeritud pinge ja prindime väärtused õigete parandustega või ilma.

void loop () {int valor_analogico = analogRead (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 (","); Seeria.println (0); // cria uma linha para marcar o valor mínimo de 0}

Pange tähele reale 12, et meil on võimalus printida andmed, lisades erinevuste funktsiooni f (analoogväärtus).

Samm 22: PolySolve Correction funktsiooni kasutamine

Siin kasutame Arduino IDE sees funktsiooni PolySolve.

/* Režiim: tavaline polünoomi aste 6, 2365 x, y andmepaarid Korrelatsioonikordaja (r^2) = 9, 907187626418e-01 Standardviga = 1, 353761109831e+01 Väljundvorm: C/C ++ funktsioon: Autoriõigus © 2012, P. Lutus - https://www.arachnoid.com. Kõik õigused kaitstud. */ 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); }

Märkige koma-punkti-muutus komaeraldajana.

23. etapp: jäädvustage parandusega - plotteri jada

Pildistamine parandusega - joonistaja seeria
Pildistamine parandusega - joonistaja seeria

24. samm: arvutuskulud

Arvutuskulud
Arvutuskulud
Arvutuskulud
Arvutuskulud

Polünoomi arvutuste tegemiseks on vaja, et protsessor saaks selle ülesandega hakkama. Sõltuvalt lähtekoodist ja saadaolevast arvutusvõimsusest võib see põhjustada viivitusi täitmisel.

Siin näeme mitme tulemusega polünoome kasutava testi tulemuste tabelit. Pange tähele erinevust aja vahel, mil funktsiooni Pow () kasutati ja millal mitte.

25. samm: testikood - seadistamine () ja korduskäivitus ()

Siin on meil testis kasutatud kood.

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. etapp: testikood - tsükkel () ja töötlemine

Väärtuse saamiseks mikrosekundites kasutasin funktsiooni micros ().

// ============= inicia o 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 = (mikros () - agora) / quantidade; // determina o intervalo que se passou para cada iteração // ============= lõplik või protsess

27. etapp: testikood - tsükkel () - tulemused

Prindime võrdluseks 13. funktsiooni funktsioonist tagastatud väärtuse POW -ga ja ilma, samuti töötlemisintervalli.

// 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 intervall do processamento Serial.println (agora, 6); }

28. samm: testikood - kasutatud funktsioonid

0 ja 1 astme tühjad funktsioonid (ainult tagastamisel).

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

2., 3. ja 4. klassi funktsioonid.

// 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. ja 6. klassi funktsioonid.

// 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. klassi funktsioon POW abil.

// 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. klassi funktsioon ilma POW -d kasutamata.

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

29. samm: failid

Laadige failid alla:

PDF

INO

Arvutustabel

Soovitan: