Sisukord:
- Samm: mis on AD -muundur?
- 2. samm: kasutatud ressursid
- Samm: ESP32 ADC
- Samm 4: kasutatud ahel
- Samm 5: märk on kasutatud
- 6. samm: ostsilloskoobi abil saadud andmed
- Samm: ostsilloskoobi abil saadud andmed (csv -fail Excelis)
- 8. samm: ADC poolt saadud andmed
- 9. samm: ADC poolt saadud andmed - Excel
- 10. samm: ronimisrampide võrdlus
- 11. samm: proovide arvu võrdsustamine
- 12. samm: lünkade täitmine - trendirida
- Samm 13: Lünkade täitmine - 2. astme polünoomkõver
- 14. samm: Lünkade täitmine - funktsiooni hindamine
- Samm 15: Ostsilloskoobi pinge teisendamine samaväärseks, et võrrelda seda ADC -ga
- 16. samm: kahe saadud kaldtee võrdlemine
- 17. samm: ADC lugemiserinevuse (ERROR) käitumine
- 18. samm: ADC lugemise erinevuste käitumine - parandusfunktsiooni leidmine
- 19. samm: muu tarkvara kasutamine
- 20. samm: konstandid ja seadistamine ()
- 21. samm: silmus () ja parandusfunktsioon
- Samm 22: PolySolve Correction funktsiooni kasutamine
- 23. etapp: jäädvustage parandusega - plotteri jada
- 24. samm: arvutuskulud
- 25. samm: testikood - seadistamine () ja korduskäivitus ()
- 26. etapp: testikood - tsükkel () ja töötlemine
- 27. etapp: testikood - tsükkel () - tulemused
- 28. samm: testikood - kasutatud funktsioonid
- 29. samm: failid
Video: Kas teate ESP32 ADC reguleerimise kohta?: 29 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
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
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
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
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
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)
Proovid on meil siin.
8. samm: 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
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
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
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
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
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
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
Kahel lugemisel saadud erinevuste visualiseerimine.
17. samm: ADC lugemiserinevuse (ERROR) käitumine
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
Me saame Excelis määrata parandusfunktsiooni, lisades nüüd kõrgema astme trendijoone, kuni see meie andmetega piisavalt sobib.
19. samm: 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
24. samm: 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:
INO
Arvutustabel
Soovitan:
Ärge pissige kohe, lemmikloomade käitumise reguleerimise seade, mis peatab kasside pissimise teie kodus: 4 sammu
Ei pissi, lemmikloomade käitumise reguleerimise seade, mis ei lase kassidel teie kodus pissida: mind häiris mu kiisu nii palju, et talle meeldib mu voodile pissida, kontrollisin kõike, mida ta vajab, ja viisin ta ka loomaarsti juurde. Kui olen veaotsingu teinud ja arsti sõna kuulanud, saan aru, et tal on lihtsalt halb käitumine. Nii et
Koduautomaatika koos NodeMCU puutetundliku anduriga LDR temperatuuri reguleerimise relee: 16 sammu
Koduautomaatika NodeMCU puutetundliku anduri LDR temperatuuri juhtreleega: oma varasemates NodeMCU projektides olen juhtinud Blynk Appist kahte kodumasinat. Sain palju kommentaare ja sõnumeid projekti täiendamiseks käsitsi juhtimise ja lisafunktsioonide lisamisega. Nii et ma olen selle nutika kodu laienduskarbi kujundanud. Selles IoT -s
GPS -autode jälgija SMS -teate ja asjade kõne andmete üleslaadimisega, Arduino -põhine, koduautomaatika: 5 sammu (koos piltidega)
GPS -autode jälgija SMS -märguande ja asjade kõne andmete üleslaadimisega, Arduino -põhine, koduautomaatika: tegin selle GPS -jälgija eelmisel aastal ja kuna see töötab hästi, avaldan selle nüüd Instructable'is. See on ühendatud minu pagasiruumi lisatarvikute pistikuga. GPS -jälgija laadib mobiilse andmeside kaudu üles auto asukoha, kiiruse, suuna ja mõõdetud temperatuuri
Kas teate, kuidas teie taimed end tunnevad? [Osake+Ubidots]: 6 sammu
Kas teate, kuidas teie taimed end tunnevad? [Osakesed+Ubidotid]: miski ei asenda väljaminekut ja mulla käitlemist enda jaoks, kuid tänapäevane tehnoloogia on võimaldanud pinnast eemalt jälgida ja jälgida minu inimlike meelte mõõtmatuid parameetreid. Mullasondid nagu SHT10 on nüüd ülitäpsed ja pakuvad
ESP32: Kas teate, mis on DAC?: 7 sammu
ESP32: Kas teate, mis on DAC?: Täna räägime kahest probleemist. Esimene neist on DAC (digitaal-analoogmuundur). Pean seda oluliseks, sest selle kaudu teeme näiteks ESP32 -s heliväljundi. Teine probleem, millega me täna tegelema hakkame, on võnkumine