Kazalo:
- 1. korak: Kaj je pretvornik AD?
- 2. korak: Uporabljeni viri
- Korak: ESP32 ADC
- 4. korak: Uporabljeno vezje
- 5. korak: Uporabite znak
- 6. korak: Podatki, pridobljeni z osciloskopom
- 7. korak: Podatki, pridobljeni z osciloskopom (datoteka csv v Excelu)
- 8. korak: Podatki, pridobljeni s strani ADC
- 9. korak: Podatki, pridobljeni s strani ADC - Excel
- 10. korak: Primerjava klančin
- 11. korak: enačenje števila vzorcev
- 12. korak: Zapolnitev vrzeli - linija trenda
- Korak 13: Zapolnitev vrzeli - polinomska krivulja 2. stopnje
- Korak 14: Zapolnitev vrzeli - vrednotenje funkcije
- Korak 15: Pretvorite napetost osciloskopa v enakovredno vrednost za primerjavo z ADC
- Korak 16: Primerjava dveh pridobljenih klančin
- 17. korak: Obnašanje razlike pri branju ADC (ERROR)
- Korak 18: Različno vedenje pri branju ADC - iskanje popravne funkcije
- Korak 19: Uporaba druge programske opreme
- 20. korak: Konstante in nastavitev ()
- 21. korak: Zanka () in korekcijska funkcija
- Korak: Uporaba korekcijske funkcije PolySolve
- 23. korak: Zajem s popravkom - Serijski ploter
- Korak: Računalniški stroški
- Korak: Preskusna koda - Setup () in Loop Start ()
- Korak 26: Preskusna koda - zanka () in obdelava
- Korak 27: Preskusna koda - Zanka () - Rezultati
- Korak 28: Preskusna koda - uporabljene funkcije
- 29. korak: Datoteke
Video: Ali veste o nastavitvi ADC ESP32?: 29 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Danes bom govoril o bolj tehničnem vprašanju, vendar mislim, da bi morali vsi, ki delajo z ESP32, vedeti: vprašanje prilagoditve branja ADC (analogno-digitalni pretvornik). To se mi zdi pomembno, ker morate biti pri "merjenju", še posebej z instrumentom, ki ima analogni izhod, popolnoma prepričani, da se branje izvaja pravilno.
V današnjem videu bomo zato izvajali meritve z uporabo "analogno-digitalnega pretvornika" ESP32, opazovali odstopanja pretvorbe in uporabili metodo prilagajanja / umerjanja ADC.
1. korak: Kaj je pretvornik AD?
AD pretvornik je vezje, ki lahko prevede analogno (neprekinjeno) količino v digitalne (diskretne) vrednosti. Kaj to pomeni? To pomeni, da lahko digitalne vrednosti prevzamejo samo diskretne vrednosti, ki nastanejo s kombinacijo nič in ena, vendar lahko analogna količina prevzame katero koli vrednost v območju. Če bi na primer izmerili napetost idealne celice AA, bi lahko našli katero koli vrednost med 0V in 1.5V, saj je to analogna količina. Izhodno stanje idealne svetilke mora prevzeti le dve stanji (izklopljeno ali vklopljeno), kar je diskretna velikost. Ker mikrokrmilniki delujejo po tej diskretni logiki, potrebujemo vezje, ki lahko prevede analogno količino v digitalno (ali diskretno).
2. korak: Uporabljeni viri
• Ena kartica Lolin32 Lite v1.0.0
• Osmoskop Tektronix TDS1001C za zajem
• En kabel USB za ESP32
• Hantek DSO4102C osciloskop kot generator signala
Korak: ESP32 ADC
Po podatkih Espressifa lahko čipi ESP32 v izmerjenih rezultatih predstavljajo +/- 6% razlike od enega do drugega čipa.
Poleg tega pretvorba NI linearna za vsak razpoložljiv obseg za branje. Espressif ponuja metodo za umerjanje in predlaga, da uporabniki izvajajo druge metode, če menijo, da je to potrebno za dosego želene natančnosti.
Izvedli bomo zajem podatkov, iz tega pa bomo prikazali odzive ADC in primer uporabe matematičnega procesa za branje prilagoditve.
Obstaja več (enostavnejših ali bolj zapletenih) načinov za izvedbo teh popravkov. Na vas je, da ocenite najprimernejše za vaš projekt.
Ta, ki je prikazan tukaj, bo imel ilustrativni namen in bo poskušal obravnavati zanimive točke, ki jih je mogoče opaziti med prilagoditvami.
4. korak: Uporabljeno vezje
Uporabil sem osciloskop z generatorjem signala do 25 MHz, Hantek DSO4102C. Ustvarili smo val, ki sta ga prebrala ESP A / D in osciloskop. Zbrani podatki so bili zabeleženi v csv in v preglednico, ki jo bom pustil na koncu članka za prenos.
5. korak: Uporabite znak
Izbrali smo nizkofrekvenčni trapezni signal, ki omogoča dostop do klančin, ki potekajo skozi celotno območje pretvorbe. To omogoča veliko število vzorcev na teh rampah.
6. korak: Podatki, pridobljeni z osciloskopom
Podobo zajema je izvedel osciloskop. Podatki so bili shranjeni v datoteki csv. Upoštevajte rahlo ukrivljenost na naraščajočih in padajočih rampah signala.
7. korak: Podatki, pridobljeni z osciloskopom (datoteka csv v Excelu)
Tu imamo vzorce.
8. korak: Podatki, pridobljeni s strani ADC
S spreminjanjem hitrosti prenosa zaporedja si lahko ogledamo podatke, ki jih zajame ADC. Opazujte deformacijo trapeznega signala.
Podatki, opaženi na serijskem ploterju Arduino IDE
9. korak: Podatki, pridobljeni s strani ADC - Excel
Z uporabo višje stopnje in serijskega terminala lahko zajamemo vrednosti in jih uporabimo v Excelu za naše primerjave.
10. korak: Primerjava klančin
Primerjamo dve plezalni rampi obeh ulovov.
Upoštevajte ukrivljenost, ki se pojavi na obeh rampah.
Upoštevajte tudi, da imamo za isto rampo veliko več vzorcev ESP32 kot iz osciloskopa.
11. korak: enačenje števila vzorcev
Ker je ESP32 zagotovil večje število vzorcev kot osciloskop, moramo te vrednosti izenačiti, saj bodo služile kot indeks za primerjavo obeh krivulj.
Za to bomo naredili neposredno primerjavo.
Imamo 305 vzorcev za rampo osciloskopa in 2365 vzorcev za rampo ADC.
Ker so rampe v istem območju, lahko rečemo, da imamo za vsak osciloskop približno 7,75 vzorcev ADC -ja.
Množenje indeksa vsakega vzorca osciloskopa ima isto krivuljo, vendar z indeksi, enakovrednimi ADC -ju in prerazporejenim podatkom.
Za zapolnitev manjkajočih podatkov za nove pozicije bomo uporabili krivuljo, ki statistično ustreza znanim podatkom.
12. korak: Zapolnitev vrzeli - linija trenda
Ko izberemo znane podatke (modre pike), s klikom in nato z desnim gumbom izberemo: "Dodaj linijo trenda …"
V oknu, ki se prikaže, izberemo vrsto polinoma (dovolj bo naročilo 2).
Preverili smo tudi možnosti »Prikaži enačbo v grafikonu« in »Prikaz vrednosti R-kvadrat v grafikonu«.
Kliknemo "Zapri".
Korak 13: Zapolnitev vrzeli - polinomska krivulja 2. stopnje
Excel nam daje dve novi informaciji; enačbo drugega reda, ki najbolje ustreza podatkom, in enačbo na kvadrat R, ki količinsko opredeli to ustreznost.
Samo zapomnite si, da je bližje enačbi primernejša enačba.
Ne poglabljajmo se v matematiko, ampak jo uporabimo kot orodje.
Korak 14: Zapolnitev vrzeli - vrednotenje funkcije
Zapolnimo vzorčne vrzeli s podatki, ki jih ustvari enačba. Nato jih primerjajte od točke do točke.
y = -9E -08x2 + 0, 0014x + 0, 1505
R² = 0, 9999
Napetost osciloskopa = -9E -08 * indeks2 + 0, 0014 * indeks + 0, 1505
Korak 15: Pretvorite napetost osciloskopa v enakovredno vrednost za primerjavo z ADC
Izkoristimo to za pretvorbo vrednosti napetosti osciloskopa v enakovredno vrednost ADC.
Ker je bila najvišja vrednost, pridobljena v ADP ESP32, 4095, kar je enako odčitku 2,958 V za isti indeks, lahko rečemo, da:
Vsak volt pri meritvah osciloskopa je približno 1384,4 enot AD. Zato lahko za to vrednost pomnožimo vse meritve osciloskopa.
Korak 16: Primerjava dveh pridobljenih klančin
Vizualizacija razlik, pridobljenih v dveh odčitkih.
17. korak: Obnašanje razlike pri branju ADC (ERROR)
Spodnja krivulja prikazuje, kako se razlika v odčitku ADC obnaša kot funkcija merjenja. To zbiranje podatkov nam bo omogočilo, da najdemo korekcijsko funkcijo.
Da bi našli to krivuljo, preprosto narišemo razliko, ki jo najdemo v vsaki meri, kot funkcijo vsakega možnega položaja AD (0 do 4095).
Korak 18: Različno vedenje pri branju ADC - iskanje popravne funkcije
V Excelu lahko določimo korekcijsko funkcijo tako, da dodamo linijo trenda, ki je zdaj višje stopnje, dokler se ne ujema dovolj z našimi podatki.
Korak 19: Uporaba druge programske opreme
Druga zanimiva programska oprema za določanje krivulj je PolySolve, ki jo lahko uporabite neposredno na povezavi: https://arachnoid.com/polysolve/ ali jo naložite kot aplikacijo Java.
Omogoča uporabo polinomskih regresij višje stopnje in podajanje oblikovane funkcije ter drugih funkcionalnosti.
Če ga želite uporabiti, preprosto vnesite podatke v prvo besedilno polje. Podatki morajo slediti vrstnemu redu X, Y, ločeni z vejico ali zavihkom. Pri pravilni uporabi pike kot decimalne vejice bodite previdni.
Če so vneseni podatki pravilno oblikovani, se v naslednjem polju prikaže grafikon.
Evo, kako je šla naša krivulja napak ADC.
To okno bo predstavilo rezultat regresije, vključno s podatki o ustreznosti funkcij, ki lahko nato oblikujejo svoj izhod na več načinov: kot funkcijo C / C ++, seznam koeficientov, funkcijo, napisano v Javi itd.
Opomba: Bodite pozorni na decimalna ločila
20. korak: Konstante in nastavitev ()
Tu poudarjam GPIO, ki se uporablja za analogno zajemanje. Inicializiram serijska vrata in pin, določen za analogno zajemanje.
const int pin_leitura = 36; // GPIO usado para captura analógica void setup () {Serial.begin (1000000); // Začetek porta serijske različice za odpravljanje napak pinMode (pin_leitura, INPUT); // Pino utilizado para captura analógica}
21. korak: Zanka () in korekcijska funkcija
Izvedemo zajem prilagojene napetosti in vrednosti natisnemo s pravilnimi popravki ali brez njih.
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 (","); Serial.println (0); // cria uma linha para marcar o valor mínimo de 0}
Upoštevajte v vrstici 12, da imamo možnost tiskanja podatkov z dodajanjem funkcije razlike f (analogna_vrednost).
Korak: Uporaba korekcijske funkcije PolySolve
Tukaj uporabljamo funkcijo PolySolve znotraj Arduino IDE.
/* Način: normalno Polinomska stopnja 6, 2365 x, y podatkovni pari Korelacijski koeficient (r^2) = 9, 907187626418e-01 Standardna napaka = 1, 353761109831e+01 Izhodna oblika: funkcija C/C ++: Copyright © 2012, str. Lutus - https://www.arachnoid.com. Vse pravice pridržane. */ 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); }
Zapomnite si spremembo vejice za piko kot decimalni ločilo.
23. korak: Zajem s popravkom - Serijski ploter
Korak: Računalniški stroški
Za izvajanje polinomskih izračunov mora procesor opraviti to nalogo. To lahko povzroči zamude pri izvajanju, odvisno od izvorne kode in razpoložljive računalniške moči.
Tu vidimo tabelo rezultatov testa z večstopenjskimi polinomi. Opazite razliko med časi, ko je bila funkcija pow () uporabljena, in ko ni.
Korak: Preskusna koda - Setup () in Loop Start ()
Tukaj imamo kodo, uporabljeno v našem testu.
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 fload contador = 0,0; // contador de chamadas
Korak 26: Preskusna koda - zanka () in obdelava
Uporabil sem funkcijo micros (), da sem dobil vrednost v mikrosekundah.
// ============= 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 in função POW // f13_comPow (valor_analogico); // grau 13º COM a função POW contador ++; } agora = (micros () - agora) / kvantidada; // določitev o intervalo que se passou para cada iteração // ============= finaliza o processo
Korak 27: Preskusna koda - Zanka () - Rezultati
Natisnemo vrednost, vrnjeno iz funkcije razreda 13 z in brez POW za primerjavo, pa tudi interval obdelave.
// imprime o valor retornado da função de grau 13 com e sem POW za primerjavo Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM in função POW Serial.print (" -"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM in funkcijski POW Serial.print (" -"); // imprime o intervalo do processamento Serial.println (agora, 6); }
Korak 28: Preskusna koda - uporabljene funkcije
Prazne funkcije (samo z vrnitvijo) stopnje 0 in 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 dvojni f1 (dvojni x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x; }
Funkcije razreda 2, 3 in 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 in 6.
// 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); }
Funkcija razreda 13 z uporabo POW.
// 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 brez uporabe POW.
// 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; }
29. korak: Datoteke
Prenesite datoteke:
JAZ NE
Preglednica
Priporočena:
Robot, ki pove, ali vas prodajalec elektronike vara ali ne: 6 korakov
Robot, ki pove, če vas prodajalec elektronike vara ali ne: Lani sva z očetom odšla v novo odprto trgovino z robotiko/elektroniko zelo blizu mesta, kjer živimo. Ko sem vstopil tja, je bilo polno elektronike, serov, senzorjev, Raspberry pis in Arduinosa. Naslednji dan smo šli v isto trgovino in kupili
Arduino MFRC522 Vadnica - Ali je RFID oznaka prisotna ali odstranjena?: 6 korakov
Arduino MFRC522 Vadnica - Ali je RFID oznaka prisotna ali odstranjena?: Ta vadnica je prvotno objavljena na naslovu High Voltages
Ali veste, kako se vaše rastline počutijo? [Delci+ubidoti]: 6 korakov
Ali veste, kako se vaše rastline počutijo? [Delci+ubidoti]: Nič ne bo nadomestilo samostojne hoje in ravnanja z zemljo, vendar je današnja tehnologija omogočila daljinsko spremljanje tal in spremljanje parametrov, ki jih človek ne more izmeriti. Sonde za tla, kot je SHT10, so zdaj izjemno natančne in ponujajo
Brezžična različica Ali so moja garažna vrata odprta ali zaprta?: 7 korakov
Brezžična različica … Ali so moja garažna vrata odprta ali zaprta?: Želeli smo preprost, poceni in zanesljiv sistem označevanja, ki nam je pokazal, ali so naša garažna vrata odprta ali zaprta. Obstaja veliko " Ali so moja garažna vrata odprta " projekti. Večina teh projektov je trdno povezana. V mojem primeru zagnano
ESP32: Ali veste, kaj je DAC?: 7 korakov
ESP32: Ali veste, kaj je DAC ?: Danes se bomo pogovarjali o dveh vprašanjih. Prvi je DAC (digitalno-analogni pretvornik). Menim, da je to pomembno, saj prek njega na primer naredimo zvočni izhod v ESP32. Drugo vprašanje, ki ga bomo obravnavali danes, je oscilacija