Mundarija:

ESP32 ADCni sozlash haqida bilasizmi ?: 29 qadam
ESP32 ADCni sozlash haqida bilasizmi ?: 29 qadam

Video: ESP32 ADCni sozlash haqida bilasizmi ?: 29 qadam

Video: ESP32 ADCni sozlash haqida bilasizmi ?: 29 qadam
Video: Использование термопары MAX6675 с ESP32 Bluetooth 2024, Noyabr
Anonim
Image
Image
Ishlatilgan manbalar
Ishlatilgan manbalar

Bugun men ko'proq texnik muammo haqida gaplashmoqchiman, lekin menimcha, ESP32 bilan ishlaydigan har bir kishi bilishi kerak: ADC (analog-raqamli konvertor) o'qishni sozlash masalasi. Men buni juda muhim deb bilaman, chunki "o'lchov" ni amalga oshirayotganda, ayniqsa analog chiqadigan asbob bilan, o'qishning to'g'ri bajarilishiga to'liq ishonch hosil qilish kerak.

Bugungi videoda biz ESP32 "analog-raqamli konvertori" yordamida o'lchovlarni o'tkazamiz, konversiyadagi farqlarni kuzatamiz va ADCni sozlash / kalibrlash usulini qo'llaymiz.

1 -qadam: AD konvertori nima?

AD konvertori - analog (uzluksiz) miqdorni raqamli (diskret) qiymatlarga aylantira oladigan elektron. U nimani anglatadi? Bu shuni anglatadiki, raqamli qiymatlar faqat nol va bitta kombinatsiyasidan hosil bo'lgan diskret qiymatlarni qabul qilishi mumkin, analog miqdor esa diapazon ichidagi har qanday qiymatni qabul qilishi mumkin. Masalan, agar biz ideal AA hujayraning kuchlanishini o'lchagan bo'lsak, biz 0V dan 1,5V gacha bo'lgan har qanday qiymatni topa olamiz, chunki bu analog miqdor. Ideal chiroqning chiqish holati faqat ikkita holatni olishi kerak (o'chirilgan yoki yoqilgan), bu alohida kattalikdir. Mikrokontrollerlar bu diskret mantiqdan foydalanganligi uchun bizga analog miqdorni raqamli (yoki diskret) ga aylantira oladigan elektron kerak.

2 -qadam: Ishlatilgan manbalar

• Bitta Lolin32 Lite kartasi v1.0.0

• Rasmga olish uchun Tektronix TDS1001C osiloskopi

• ESP32 uchun bitta USB kabeli

• signal generatori sifatida Hantek DSO4102C osiloskopi

3 -qadam: ESP32 ADC

ESP32 ADC
ESP32 ADC

Espressif ma'lumotlariga ko'ra, ESP32 chiplari o'lchangan natijalarda bir chipdan boshqasiga +/- 6% farq ko'rsatishi mumkin.

Bundan tashqari, konvertatsiya o'qishning har bir diapazoni uchun chiziqli javobga ega emas. Espressif kalibrlash usulini taqdim etadi va foydalanuvchilar kerakli aniqlikka erishish zarur deb hisoblasalar, boshqa usullarni qo'llashni taklif qiladi.

Biz ma'lumotlarni yig'ishni amalga oshiramiz va shundan biz ADC javoblarini va sozlashni o'qish uchun matematik jarayonni qo'llash misolini ko'rsatamiz.

Ushbu tuzatishlarni bajarishning bir necha (oddiy yoki murakkab) usullari mavjud. Sizning loyihangizga eng mos keladiganini baholash sizga bog'liq.

Bu erda ko'rsatilgan tasviriy maqsadga ega bo'ladi va sozlash paytida kuzatilishi mumkin bo'lgan qiziqarli fikrlarga e'tibor qaratishga harakat qiladi.

4 -qadam: O'chirish davri

Ishlatilgan davr
Ishlatilgan davr

Men 25 MGts gacha bo'lgan signal generatori bo'lgan osiloskopdan foydalanardim, Hantek DSO4102C. Biz ESP A / D va osiloskop tomonidan o'qilgan to'lqinni yaratdik. To'plangan ma'lumotlar csv -da va elektron jadvalda qayd etilgan, men yuklash uchun maqolaning oxirida qoldiraman.

5 -qadam: ishlatilgan belgi

Ishlatilgan belgi
Ishlatilgan belgi

Biz past chastotali trapezoidal signalni tanladik, bu butun konvertatsiya diapazonida ishlaydigan rampalarga kirishga imkon beradi. Bu ushbu rampalarda ko'p sonli namunalarni olish imkonini beradi.

6 -qadam: Osiloskop yordamida olingan ma'lumotlar

Osiloskop yordamida olingan ma'lumotlar
Osiloskop yordamida olingan ma'lumotlar

Suratga olish tasvirini osiloskop bajargan. Ma'lumotlar csv faylida saqlangan. Signalning ko'tarilish va tushish rampalaridagi engil egrilikka e'tibor bering.

7 -qadam: Osiloskop yordamida olingan ma'lumotlar (Excelda csv fayli)

Osiloskop yordamida olingan ma'lumotlar (Excel -dagi csv fayli)
Osiloskop yordamida olingan ma'lumotlar (Excel -dagi csv fayli)

Bizda bu erda namunalar bor.

8 -qadam: ADC tomonidan olingan ma'lumotlar

ADC tomonidan olingan ma'lumotlar
ADC tomonidan olingan ma'lumotlar

Serialning uzatish tezligini o'zgartirib, biz ADC tomonidan olingan ma'lumotlarni ko'rishimiz mumkin. Trapezoidal signalning deformatsiyasini kuzating.

Ma'lumotlar Arduino IDE seriyali chizgichida kuzatilgan

9 -qadam: ADC - Excel tomonidan olingan ma'lumotlar

ADC - Excel tomonidan olingan ma'lumotlar
ADC - Excel tomonidan olingan ma'lumotlar

Yuqori tezlik va ketma -ket terminal yordamida biz qiymatlarni yozib olamiz va ularni taqqoslash uchun Excelda qo'llashimiz mumkin.

10 -qadam: ko'tarilish rampalarini solishtirish

Chiqish rampalarini solishtirish
Chiqish rampalarini solishtirish

Biz ikkita tutqichning ikkita ko'tarilish rampasini solishtiramiz.

Ikkala rampada ham egrilikka e'tibor bering.

E'tibor bering, xuddi shu rampada bizda osiloskopdan ko'ra ko'proq ESP32 namunalari mavjud.

11 -qadam: Namunalar sonini tenglashtirish

Namunalar sonini tenglashtirish
Namunalar sonini tenglashtirish
Namunalar sonini tenglashtirish
Namunalar sonini tenglashtirish

ESP32 osiloskopga qaraganda ko'proq namunalarni taqdim etganligi sababli, biz bu qiymatlarni tenglashtirishimiz kerak, chunki ular ikkita egri chiziqni solishtirish uchun indeks bo'lib xizmat qiladi.

Buning uchun biz to'g'ridan -to'g'ri taqqoslashni amalga oshiramiz.

Bizda osiloskop rampasi uchun 305 ta namuna va ADC rampasi uchun 2365 ta namuna bor.

Rampalar bir xil diapazonda bo'lgani uchun, bizda har bir osiloskop uchun ADC ning taxminan 7,75 namunasi bor, deyishimiz mumkin.

Har bir osiloskop namunasining indeksini ko'paytirish bir xil egri chiziqqa ega, lekin ADC va qayta taqsimlangan ma'lumotlarga teng indekslarga ega.

Yangi pozitsiyalar uchun etishmayotgan ma'lumotlarni to'ldirish uchun biz ma'lum ma'lumotlarga statistik jihatdan mos keladigan egri chiziqni qo'llaymiz.

12 -qadam: bo'shliqlarni to'ldirish - trend chizig'i

Bo'shliqlarni to'ldirish - trend chizig'i
Bo'shliqlarni to'ldirish - trend chizig'i
Bo'shliqlarni to'ldirish - trend chizig'i
Bo'shliqlarni to'ldirish - trend chizig'i

Ma'lum ma'lumotlarni (ko'k nuqta) tanlab, sichqonchaning o'ng tugmachasini bosib, keyin "Trend chizig'ini qo'shish …" ni tanlaymiz.

Ko'rsatilgan oynada biz Polinom turini tanlaymiz (2 -tartib etarli bo'ladi).

Shuningdek, biz "Diagrammadagi tenglamani ko'rish" va "Diagrammada R-kvadrat qiymatini ko'rsatish" variantlarini tekshirdik.

Biz "Yopish" tugmasini bosamiz.

13 -qadam: Bo'shliqlarni to'ldirish - 2 -darajali polinom egri chizig'i

Bo'shliqlarni to'ldirish - 2 -darajali polinom egri chizig'i
Bo'shliqlarni to'ldirish - 2 -darajali polinom egri chizig'i

Excel bizga ikkita yangi ma'lumot beradi; ma'lumotlarga eng mos keladigan ikkinchi tartibli tenglama va bu adekvatlikni aniqlaydigan R-kvadrat tenglama.

Shuni yodda tutingki, 1 ga yaqinroq bo'lsa, tenglama shunchalik mos keladi.

Keling, matematikani o'rganmaylik, faqat uni vosita sifatida ishlataylik.

14 -qadam: Bo'shliqlarni to'ldirish - funktsiyani baholash

Tenglama hosil qilgan ma'lumotlar bilan namuna olishdagi bo'shliqlarni to'ldiraylik. Va keyin ularni nuqta -qadam bilan solishtiring.

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

R² = 0, 9999

Osiloskop kuchlanish = -9E -08 * indeks2 + 0, 0014 * indeks + 0, 1505

15 -qadam: Osiloskop kuchlanishini ADC bilan solishtirish uchun teng qiymatga aylantirish

Osiloskop kuchlanishini ADC bilan solishtirish uchun teng qiymatga aylantirish
Osiloskop kuchlanishini ADC bilan solishtirish uchun teng qiymatga aylantirish

Keling, bundan foydalanib, osiloskop kuchlanishining qiymatini ADC ekvivalentiga aylantiramiz.

ESP32 ADP -da olingan eng yuqori qiymat 4095 edi, bu xuddi shu indeks uchun 2.958V o'qishga teng, biz shunday deyishimiz mumkin:

Osiloskop o'lchovlaridagi har bir volt milodiy taxminan 1384,4 birlikka teng. Shuning uchun biz osiloskopning barcha o'lchovlarini shu qiymatga ko'paytirishimiz mumkin.

16 -qadam: Olingan ikkita rampani solishtiring

Olingan ikkita rampani solishtirish
Olingan ikkita rampani solishtirish

Ikki o'qishda olingan farqlarni ingl.

17 -qadam: ADC o'qish farqining xatti -harakati (ERROR)

ADC o'qish farqining xatti -harakati (ERROR)
ADC o'qish farqining xatti -harakati (ERROR)

Quyidagi egri chiziq ADC o'qishidagi farq o'lchov funktsiyasi sifatida o'zini qanday tutishini ko'rsatadi. Ushbu ma'lumotlar to'plami bizga tuzatish funktsiyasini topishga imkon beradi.

Bu egri chiziqni topish uchun biz har bir o'lchovdagi farqni har bir mumkin bo'lgan AD pozitsiyasi (0 dan 4095 gacha) funktsiyasi sifatida chizamiz.

18 -qadam: ADC o'qish farqi xatti - tuzatish funktsiyasini topish

ADC -ning o'qishdagi farqi - tuzatish funktsiyasini topish
ADC -ning o'qishdagi farqi - tuzatish funktsiyasini topish

Biz Excelga to'g'rilash funktsiyasini Trend ma'lumotlarini qo'shish orqali aniqlay olamiz, u bizning ma'lumotlarimizga mos kelguncha.

19 -qadam: Boshqa dasturlardan foydalanish

Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish
Boshqa dasturiy ta'minotdan foydalanish

Egri chiziqlarni aniqlash uchun boshqa qiziqarli dastur PolySolve bo'lib, uni to'g'ridan -to'g'ri havolada ishlatish mumkin: https://arachnoid.com/polysolve/ yoki Java ilovasi sifatida yuklab olish.

Bu yuqori darajali polinom regressiyalarini qo'llash va formatlangan funktsiyani, shuningdek boshqa funktsiyalarni bajarishga imkon beradi.

Uni ishlatish uchun ma'lumotlarni birinchi matn maydoniga kiritish kifoya. Ma'lumotlar vergul yoki yorliq bilan ajratilgan X, Y tartibiga mos kelishi kerak. Nuqtani kasrli nuqta sifatida to'g'ri ishlatishda ehtiyot bo'ling.

Agar kiritilgan ma'lumotlar to'g'ri formatlangan bo'lsa, keyingi maydonda grafik paydo bo'ladi.

Mana ADC xato egri qanday ketdi.

Bu oynada regressiya natijasi, shu jumladan funktsiyalarning adekvatligi to'g'risidagi ma'lumotlar ko'rsatiladi, ular o'z navbatida chiqishini bir necha usul bilan formatlashi mumkin: C / C ++ funktsiyasi, koeffitsientlar ro'yxati, Java -da yozilgan funksiya va boshqalar.

Eslatma: O'nli ajratuvchilarga e'tibor bering

20 -qadam: Konstantalar va sozlash ()

Men bu erda analog yozish uchun ishlatiladigan GPIO -ni ko'rsataman. Men ketma -ket portni, shuningdek analog ta'qib qilish uchun belgilangan pinni ishga tushiraman.

const int pin_leitura = 36; // GPIO usado para captura analógica void setup () {Serial.begin (1000000); // PinMode (pin_leitura, INPUT) disk raskadrovka uchun ketma -ket ketma -ketlik; // Bosh sahifa analogikasi uchun foydalanish mumkin

21 -qadam: Loop () va tuzatish funktsiyasi

Biz sozlangan kuchlanishni qo'lga kiritamiz va biz qiymatlarni to'g'ri tuzatishlar bilan yoki bo'lmasdan chop etamiz.

void loop () {int valor_analogico = analogRead (pin_leitura); // realizatsiya a captura da tensão ajustada //Serial.print(valor_analogico + f (valor_analogico)); // xatolarni tuzatish (COM CORREÇÃO) Serial.print (valor_analogico); // nosozliklarni tuzatish (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // 4095 Serial.print (","); Serial.println (0); // 0 -sonli ma'lumotlarga ko'ra, marhamat.

12 -qatorga e'tibor bering, bizda f (analog_value) funktsiyasi qo'shilgan holda ma'lumotlarni chop etish imkoniyati mavjud.

22 -qadam: PolySolve tuzatish funktsiyasidan foydalanish

Bu erda biz Arduino IDE ichida PolySolve funktsiyasidan foydalanamiz.

/* Rejim: oddiy Polinom daraja 6, 2365 x, y ma'lumotlar juftlari Korrelyatsiya koeffitsienti (r^2) = 9, 907187626418e-01 Standart xato = 1, 353761109831e+01 Chiqish shakli: C/C ++ funktsiyasi: Mualliflik huquqi © 2012, P. Lutus - https://www.arachnoid.com. Barcha huquqlar himoyalangan. */ 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); }

O'nli kasrni ajratuvchi sifatida vergul bilan nuqta o'zgarishiga e'tibor bering.

23 -qadam: Tuzatish bilan yozib oling - Plotter seriyali

Tuzatish bilan yozib olish - Plotter seriyali
Tuzatish bilan yozib olish - Plotter seriyali

24 -qadam: hisoblash xarajatlari

Hisoblash xarajatlari
Hisoblash xarajatlari
Hisoblash xarajatlari
Hisoblash xarajatlari

Polinomli hisoblarni bajarish uchun protsessor bu vazifani bajarishi kerak. Bu manba kodiga va mavjud hisoblash quvvatiga bog'liq holda bajarilishning kechikishiga olib kelishi mumkin.

Bu erda biz ko'p darajali polinomlardan foydalangan holda test natijalari jadvalini ko'ramiz. Pow () funktsiyasi ishlatilgan va ishlatilmagan vaqtlar orasidagi farqga e'tibor bering.

25 -qadam: Sinov kodi - O'rnatish () va Loop Start ()

Bu erda bizda testda ishlatiladigan kod mavjud.

void setup () {Serial.begin (1000000); // disk raskadrovka uchun disk raskadrovka} void loop () {float valor_analogico = 500.0; // umrbod arbtrario float quantidade = 10000.0; // quantidade de chamadas float contador = 0,0; // contador de chamadas

26 -qadam: Test kodi - Loop () va ishlov berish

Mikrosaniyadagi qiymatni olish uchun micros () funktsiyasidan foydalandim.

// ============== protsessual float agora = micros (); // marca o instante inicial while (contador <quantidade) {// v (valor_analogico); // funktsiya 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); // 13º SEM va harbiy asirlik // f13_comPow (valor_analogico); // 13º MAQOMOTI va POW kontor ++; } agora = (mikrosxemalar () - agora) / kvantidad; // aniqlangan vaqt oralig'ida, bu jarayonni bajaradi // ============ final jarayoni

27 -qadam: Test kodi - Loop () - Natijalar

Biz taqqoslash uchun 13 -darajali funktsiyadan qaytarilgan qiymatni POW bilan va ularsiz chop etamiz.

// majburiy javobgarlikka tortishish 13 -sonli harbiy kuchlar uchun Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM a funchão POW Serial.print (" -"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM a funchão POW Serial.print (" -"); // vaqt oralig'ida ishlov berish Serial.println (agora, 6); }

28 -qadam: Test kodi - ishlatilgan funktsiyalar

0 va 1 darajali bo'sh funktsiyalar (faqat qaytish bilan).

// FUNÇÃO VAZIAdouble v (double x) {} // FUNÇÃO SOMENTE COM RETORNO double r (double x) {return x; } // FUNÇÃO DE GRAU 0 dubl f0 (ikki marta x) {qaytish 2.202196968876e+02; } // FUNÇÃO DE GRAU 1 dubl f1 (dubl x) {qaytish 2.202196968876e + 02 + 3.561383996027e-01 * x; }

2, 3 va 4 -darajali funktsiyalar.

// FUNÇo DE GRAU 2double f2 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2);));)) + 2.082790802069e-10 * pow (x, 4); }

5 va 6 -sinf vazifalari.

// 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);)) + 2.082790802069e-10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }

Harbiy asirlar yordamida 13 -sinf funktsiyasi.

// 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, 968558178426 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); }

Harbiy asirlarni ishlatmasdan 13 -sinf funktsiyasi.

// FUNCHO 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 + 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 -qadam: fayllar

Fayllarni yuklab oling:

PDF

INO

Elektron jadval

Tavsiya: