Sadržaj:
- Korak 1: Šta je AD konverter?
- Korak 2: Korišteni resursi
- Korak 3: ESP32 ADC
- Korak 4: Upotrijebljeno kolo
- Korak 5: Znak se koristi
- Korak 6: Podaci dobijeni osciloskopom
- Korak 7: Podaci dobiveni osciloskopom (csv datoteka u Excelu)
- Korak 8: Podaci dobijeni od ADC -a
- Korak 9: Podaci dobijeni od ADC -a - Excel
- Korak 10: Usporedba rampi za uspon
- Korak 11: Izjednačavanje broja uzoraka
- Korak 12: Popunjavanje praznina - linija trenda
- Korak 13: Popunjavanje praznina - polinomska kriva 2. stepena
- Korak 14: Popunjavanje praznina - Procjena funkcije
- Korak 15: Pretvaranje napona osciloskopa u ekvivalentnu vrijednost za usporedbu s ADC -om
- Korak 16: Poređenje dvije dobijene rampe
- Korak 17: Ponašanje razlike čitanja ADC -a (ERROR)
- Korak 18: Različito ponašanje čitanja ADC -a - pronalaženje funkcije korekcije
- Korak 19: Korištenje drugog softvera
- Korak 20: Konstante i postavljanje ()
- Korak 21: Loop () i funkcija korekcije
- Korak 22: Upotreba funkcije PolySolve Correction
- Korak 23: Snimanje s ispravkom - Serijski ploter
- Korak 24: Računski troškovi
- Korak 25: Kôd za testiranje - Setup () i Loop Start ()
- Korak 26: Testni kod - Petlja () i obrada
- Korak 27: Testni kod - Petlja () - Rezultati
- Korak 28: Testni kod - Korištene funkcije
- Korak 29: Datoteke
Video: Znate li o podešavanju ESP32 ADC -a?: 29 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Danas ću govoriti o jednom tehničkom pitanju, ali mislim da bi svi koji rade s ESP32 trebali znati: pitanje prilagođavanja čitanja ADC-a (analogno-digitalni pretvarač). Smatram da je ovo važno jer kada radite "mjerenje", posebno s instrumentom koji ima analogni izlaz, morate biti potpuno sigurni da se očitavanje izvodi pravilno.
Stoga ćemo u današnjem videu izvesti mjerenja pomoću "analogno-digitalnog pretvarača" ESP32, promatrati odstupanja konverzije i primijeniti metodu podešavanja / kalibracije ADC-a.
Korak 1: Šta je AD konverter?
AD pretvarač je kolo koje može prevesti analognu (kontinuiranu) veličinu u digitalne (diskretne) vrijednosti. Sta to znaci? To znači da iako digitalne vrijednosti mogu pretpostaviti samo diskretne vrijednosti nastale kombinacijom nula i jedinica, analogna veličina može poprimiti bilo koju vrijednost unutar raspona. Na primjer, ako bismo izmjerili napon idealne AA ćelije, mogli bismo pronaći bilo koju vrijednost između 0V i 1.5V, jer je to analogna veličina. Izlazno stanje idealne lampe mora poprimiti samo dva stanja (isključeno ili uključeno), što je diskretna veličina. Budući da mikrokontroleri rade pomoću ove diskretne logike, potrebno nam je kolo sposobno za prevođenje analogne veličine u digitalnu (ili diskretnu).
Korak 2: Korišteni resursi
• Jedna Lolin32 Lite kartica v1.0.0
• Tektronix TDS1001C osciloskop za snimanje
• Jedan USB kabl za ESP32
• Hantek DSO4102C osciloskop kao generator signala
Korak 3: ESP32 ADC
Prema podacima Espressifa, ESP32 čipovi mogu pokazati +/- 6% razlike u odnosu na jedan čip u izmjerenim rezultatima.
Osim toga, konverzija NEMA linearni odgovor za svaki raspon čitanja. Espressif nudi metodu kalibracije i predlaže korisnicima da primijene druge metode ako smatraju da je potrebno postići željenu točnost.
Izvršit ćemo prikupljanje podataka, a zatim ćemo pokazati odgovore ADC -a i primjer primjene matematičkog procesa za čitanje prilagodbe.
Postoji nekoliko (jednostavnijih ili složenijih) načina za postizanje ovih popravaka. Na vama je da ocijenite najprikladnije za vaš projekt.
Ova prikazana ovdje će imati ilustrativnu svrhu i pokušat će se pozabaviti zanimljivim stvarima koje se mogu uočiti tokom prilagođavanja.
Korak 4: Upotrijebljeno kolo
Koristio sam osciloskop sa generatorom signala koji ide do 25 MHz, Hantek DSO4102C. Generirali smo val koji su očitali ESP A / D i osciloskop. Prikupljeni podaci zabilježeni su u csv -u i u proračunskoj tablici koju ću ostaviti na kraju članka za preuzimanje.
Korak 5: Znak se koristi
Odabrali smo niskofrekventni trapezni signal koji omogućava pristup rampama koje prolaze kroz cijeli raspon konverzije. To omogućava veliki broj uzoraka na ovim rampama.
Korak 6: Podaci dobijeni osciloskopom
Slika snimanja izvedena je osciloskopom. Podaci su pohranjeni u csv datoteci. Obratite pažnju na blagu zakrivljenost na rastućim i padajućim rampama signala.
Korak 7: Podaci dobiveni osciloskopom (csv datoteka u Excelu)
Ovdje imamo uzorke.
Korak 8: Podaci dobijeni od ADC -a
Promjenom brzine prijenosa serije, možemo vidjeti podatke koje je ADC uhvatio. Promatrajte deformaciju trapeznog signala.
Podaci uočeni na Arduino IDE serijskom ploteru
Korak 9: Podaci dobijeni od ADC -a - Excel
Koristeći višu brzinu i serijski terminal, možemo zabilježiti vrijednosti i primijeniti ih u Excelu za usporedbe.
Korak 10: Usporedba rampi za uspon
Upoređujemo dvije penjalice za dva hvata.
Obratite pažnju na zakrivljenost koja se javlja na obje rampe.
Također imajte na umu da za istu rampu imamo mnogo više uzoraka ESP32 nego s osciloskopa.
Korak 11: Izjednačavanje broja uzoraka
Budući da je ESP32 dao veći broj uzoraka od osciloskopa, moramo izjednačiti ove vrijednosti jer će one poslužiti kao indeks za usporedbu dviju krivulja.
Za to ćemo napraviti direktno poređenje.
Imamo 305 uzoraka za osciloskopsku rampu i 2365 uzoraka za ADC rampu.
Budući da su rampe istog raspona, možemo reći da imamo približno 7,75 uzoraka ADC -a za svaki osciloskop.
Množenje indeksa svakog uzorka osciloskopa ima istu krivulju, ali s indeksima ekvivalentnim ADC -u i preraspodijeljenim podacima.
Da bismo popunili podatke koji nedostaju za nove pozicije, primijenit ćemo krivulju koja statistički odgovara poznatim podacima.
Korak 12: Popunjavanje praznina - linija trenda
Odabirom poznatih podataka (plave točkice) klikom i desnim gumbom miša odabiremo: "Dodaj liniju trenda …"
U prozoru koji se pojavi odabiremo polinomski tip (redoslijed 2 bit će dovoljan).
Provjerili smo i opcije "Prikaži jednadžbu na grafikonu" i "Prikaži vrijednost R-kvadrata na grafikonu".
Kliknemo "Zatvori".
Korak 13: Popunjavanje praznina - polinomska kriva 2. stepena
Excel nam daje dvije nove informacije; jednadžba drugog reda koja najbolje odgovara podacima i jednadžba na kvadrat R koja kvantificira ovu adekvatnost.
Samo zapamtite da što je bliže 1, jednadžba je prikladnija.
Nemojmo se upuštati u matematiku koja je u pitanju, samo je upotrijebimo kao alat.
Korak 14: Popunjavanje praznina - Procjena funkcije
Popunimo praznine u uzorku podacima generiranima jednadžbom. Zatim ih usporedite po tačku.
y = -9E -08x2 + 0, 0014x + 0, 1505
R² = 0, 9999
Napon osciloskopa = -9E -08 * indeks2 + 0, 0014 * indeks + 0, 1505
Korak 15: Pretvaranje napona osciloskopa u ekvivalentnu vrijednost za usporedbu s ADC -om
Iskoristimo ovo za transformaciju vrijednosti napona osciloskopa u ekvivalentnu vrijednost ADC -a.
Kako je najveća vrijednost dobivena u ADP -u ESP32 bila 4095, što je ekvivalentno očitanju od 2,958 V za isti indeks, možemo reći da:
Svaki volt u mjerenjima osciloskopa jednak je približno 1384,4 jedinica AD. Stoga možemo pomnožiti sva mjerenja osciloskopa s ovom vrijednošću.
Korak 16: Poređenje dvije dobijene rampe
Vizualizacija razlika dobijenih u dva čitanja.
Korak 17: Ponašanje razlike čitanja ADC -a (ERROR)
Donja krivulja prikazuje kako se razlika u očitanju ADC -a ponaša kao funkcija mjerenja. Ova zbirka podataka omogućit će nam da pronađemo funkciju korekcije.
Da bismo pronašli ovu krivulju, jednostavno iscrtamo razliku koja se nalazi u svakoj mjeri kao funkciju svakog mogućeg položaja AD (0 do 4095).
Korak 18: Različito ponašanje čitanja ADC -a - pronalaženje funkcije korekcije
U Excelu možemo odrediti funkciju korekcije dodavanjem linije trenda, sada višeg stupnja, sve dok se dovoljno ne uklapa u naše podatke.
Korak 19: Korištenje drugog softvera
Drugi zanimljiv softver za određivanje krivulja je PolySolve, koji se može koristiti direktno na linku: https://arachnoid.com/polysolve/ ili preuzeti kao Java aplikaciju.
Omogućuje primjenu polinomskih regresija višeg stupnja i isporuku formatirane funkcije, kao i drugih funkcionalnosti.
Da biste ga koristili, jednostavno unesite podatke u prvo polje za tekst. Podaci moraju slijediti redoslijed X, Y odvojen zarezom ili tabulatorom. Budite oprezni pri ispravnoj upotrebi tačke kao decimalne tačke.
Grafikon će se pojaviti u sljedećem okviru ako su uneseni podaci ispravno formatirani.
Evo kako je prošla naša kriva greške ADC -a.
Ovaj prozor će prikazati rezultat regresije, uključujući podatke o adekvatnosti funkcije, koji zauzvrat mogu imati formatiran izlaz na nekoliko načina: kao C / C ++ funkcija, popis koeficijenata, funkcija napisana na Javi itd.
Napomena: Obratite pažnju na decimalne separatore
Korak 20: Konstante i postavljanje ()
Ovdje ističem GPIO koji se koristi za analogno snimanje. Pokrećem serijski port, kao i pin određen za analogno snimanje.
const int pin_leitura = 36; // GPIO koristi parametarsku analizu void setup () {Serial.begin (1000000); // Pokretanje serijskog porta za debug pinMode (pin_leitura, INPUT); // Pino utilizado para captura analógica}
Korak 21: Loop () i funkcija korekcije
Snimamo prilagođeni napon i ispisujemo vrijednosti sa ili bez ispravnih ispravki.
void loop () {int valor_analogico = analogRead (pin_leitura); // ostvaruje 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 (","); Serial.println (0); // cria uma linha para marcar o valor mínimo de 0}
Primijetite u retku 12 da imamo mogućnost ispisa podataka uz dodatak funkcije razlike f (analog_value).
Korak 22: Upotreba funkcije PolySolve Correction
Ovdje koristimo PolySolve funkciju unutar Arduino IDE -a.
/* Režim: normalan Polinomski stepen 6, 2365 x, y parovi podataka Koeficijent korelacije (r^2) = 9, 907187626418e-01 Standardna greška = 1, 353761109831e+01 Izlazni oblik: C/C ++ funkcija: Copyright © 2012, str. Lutus - https://www.arachnoid.com. Sva prava zadržana. */ 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); }
Obratite pažnju na promjenu zareza po tačka kao decimalni separator.
Korak 23: Snimanje s ispravkom - Serijski ploter
Korak 24: Računski troškovi
Za izvođenje polinomskih proračuna potrebno je da procesor obavi ovaj zadatak. To može dovesti do kašnjenja u izvođenju, ovisno o izvornom kodu i raspoloživoj računalnoj snazi.
Ovdje vidimo tablicu rezultata testa korištenjem višestepenih polinoma. Uočite razliku između vremena kada je funkcija pow () korištena i kada nije.
Korak 25: Kôd za testiranje - Setup () i Loop Start ()
Ovdje imamo kôd korišten u našem testu.
void setup () {Serial.begin (1000000); // Pokretanje serijskog porta za 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
Korak 26: Testni kod - Petlja () i obrada
Koristio sam funkciju micros () da dobijem vrijednost u mikrosekundama.
// ============= inicia o proceso 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 funkcijski POW // f13_comPow (valor_analogico); // grau 13º COM funkcijski POW contador ++; } agora = (micros () - agora) / kvantidada; // odredba o intervalo que se passou para cada iteração // ============= finalizacija o procesu
Korak 27: Testni kod - Petlja () - Rezultati
Štampamo vrijednost vraćenu iz funkcije ocjene 13 sa i bez POW -a radi usporedbe, kao i interval obrade.
// imprime o valor retornado to função de grau 13 com e sem POW za upoređivanje Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM funkcijski POW Serial.print (" -"); Serial.print (f13_comPow (valor_analogico)); // na 13º COM u funkciji POW Serial.print (" -"); // imprime o intervalo do procesa Serial.println (agora, 6); }
Korak 28: Testni kod - Korištene funkcije
Prazne funkcije (samo s povratkom) stupnjeva 0 i 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 dvostruki f1 (dvostruki x) {povratak 2.202196968876e + 02 + 3.561383996027e-01 * x; }
Funkcije razreda 2, 3 i 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 * pow (x, 4); }
Funkcije razreda 5 i 6.
// FUNÇÃO DE GRAU 5dvostruki f5 (dvostruki x) {povratak 2,202196968876e + 02 + 3,561383996027e-01 * x + 1,267218788985e-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 dvostruki f6 (dvostruki x) {povratak 2,202196968876e + 02 + 3,561383996027e-01 * x + 1,267218788985e-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); }
Funkcija razreda 13 pomoću POW -a.
// 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); }
Funkcija razreda 13 bez upotrebe POW -a.
// 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 + 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; }
Korak 29: Datoteke
Preuzmite datoteke:
JA NE
Tabela
Preporučuje se:
Kako napraviti ADC trenutni osjećaj: 5 koraka
Kako postići ADC trenutni osjet: U ovom uputstvu opisat ćemo kako implementirati 8-bitni analogno-digitalni pretvarač (ADC) u SLG46855V koji može osjetiti struju opterećenja i sučelje s MCU-om putem I2C. Ovaj dizajn može se koristiti za različite trenutne primjene mjerenja, poput
Znate li kako se vaše biljke osjećaju? [Čestice+ubidoti]: 6 koraka
Znate li kako se vaše biljke osjećaju? [Čestice+ubidoti]: Ništa neće zamijeniti vaše samostalno hodanje i rukovanje zemljom, ali današnja tehnologija omogućila je daljinsko praćenje tla i praćenje parametara nemjerljivih mojih ljudskih osjetila. Sonde za tlo poput SHT10 sada su izuzetno precizne i nude
Prvi koraci sa ESP32 - Instaliranje ESP32 ploča u Arduino IDE - ESP32 Blink Code: 3 koraka
Prvi koraci sa ESP32 | Instaliranje ESP32 ploča u Arduino IDE | ESP32 Blink Code: U ovom uputstvu vidjet ćemo kako započeti rad s esp32 i kako instalirati esp32 ploče u Arduino IDE i programirat ćemo esp 32 da pokrene blink kod pomoću arduino ide
ESP32: Znate li šta je DAC?: 7 koraka
ESP32: Znate li šta je DAC ?: Danas ćemo razgovarati o dva pitanja. Prvi je DAC (digitalno-analogni pretvarač). Smatram to važnim, jer preko njega, na primjer, stvaramo audio izlaz u ESP32. Drugo pitanje koje ćemo danas riješiti je oscilacija
Kako napraviti kalendar djeda i baka & Spomenar (čak i ako ne znate kako napraviti spomenar): 8 koraka (sa slikama)
Kako napraviti kalendar djeda i baka & Spomenar (čak i ako ne znate kako se bilježiti): Ovo je vrlo ekonomičan (i cijenjen!) Praznični poklon za bake i djedove. Ove sam godine napravio 5 kalendara za manje od 7 dolara svaki. Materijali: 12 sjajnih fotografija vašeg djeteta, djece, nećaka, nećaka, pasa, mačaka ili druge rodbine12 različitih komada