Mündəricat:

ESP32 ADC Ayarlaması haqqında Bilirsinizmi ?: 29 Addım
ESP32 ADC Ayarlaması haqqında Bilirsinizmi ?: 29 Addım

Video: ESP32 ADC Ayarlaması haqqında Bilirsinizmi ?: 29 Addım

Video: ESP32 ADC Ayarlaması haqqında Bilirsinizmi ?: 29 Addım
Video: ESP32 Tutorial 31 - Project LED Strip with Obstacle Avoidance | SunFounder's ESP32 IoT Learnig kit 2024, Iyul
Anonim
Image
Image
İstifadə olunan mənbələr
İstifadə olunan mənbələr

Bu gün daha texniki bir məsələ haqqında danışacağam, amma ESP32 ilə işləyən hər kəsin bilməli olduğunu düşünürəm: ADC (analoq-rəqəmsal çevirici) oxu tənzimlənməsi. Bunun vacib olduğunu düşünürəm, çünki "ölçmə" edərkən, xüsusən də analoq çıxışı olan bir cihazla oxunuşun düzgün yerinə yetirildiyinə tam əmin olmalısınız.

Bugünkü videoda ESP32-nin "analog-rəqəmsal çeviricisini" istifadə edərək ölçmələr aparacağıq, çevrilmə uyğunsuzluqlarını müşahidə edəcəyik və ADC tənzimləmə / kalibrləmə metodunu tətbiq edəcəyik.

Addım 1: AD Dönüştürücü nədir?

Bir AD çeviricisi, analoq (davamlı) bir rəqəmi rəqəmsal (diskret) dəyərlərə çevirə bilən bir dövrədir. Bunun mənası nədir? Bu o deməkdir ki, rəqəmsal dəyərlər yalnız sıfırların və birlərin birləşməsindən yaranan diskret dəyərləri qəbul edə bilsə də, analoq kəmiyyət bir sıra daxilində istənilən dəyəri qəbul edə bilər. Məsələn, ideal bir AA hüceyrəsinin gərginliyini ölçsək, 0V ilə 1.5V arasında hər hansı bir dəyər tapa bilərik, çünki bu analoq kəmiyyətdir. İdeal lampanın çıxış vəziyyəti diskret böyüklükdə olan yalnız iki vəziyyəti (söndürmə və ya açma) qəbul etməlidir. Mikrokontrollerlər bu diskret məntiqdən istifadə edərək işlədikləri üçün, analoq kəmiyyəti rəqəmsal (və ya diskret) çevirmək qabiliyyətinə malik bir dövrə ehtiyacımız var.

Addım 2: İstifadə olunan mənbələr

• Bir Lolin32 Lite kartı v1.0.0

• Çekim üçün Tektronix TDS1001C osiloskopu

• ESP32 üçün bir USB kabeli

• Siqnal generatoru kimi Hantek DSO4102C osiloskopu

Addım 3: ESP32 ADC

ESP32 ADC
ESP32 ADC

Espressif məlumatlarına görə, ESP32 çipləri ölçülmüş nəticələrdə bir çipdən digərinə +/- 6% fərq təqdim edə bilər.

Əlavə olaraq, dönüşümün oxumaq üçün mövcud olan hər bir sıra üçün xətti bir cavabı yoxdur. Espressif, kalibrləmə üçün bir üsul təqdim edir və istifadəçilərin istədiyi dəqiqliyə çatmağı lazım bildikləri təqdirdə digər üsulları tətbiq etmələrini təklif edir.

Məlumat əldə etməyi həyata keçirəcəyik və bundan ADC cavablarını və düzəlişin oxunması üçün riyazi bir prosesin tətbiqinin nümunəsini göstərəcəyik.

Bu düzəlişləri yerinə yetirmək üçün bir neçə (daha sadə və ya daha mürəkkəb) yol var. Layihəniz üçün ən uyğun olanı qiymətləndirmək sizə aiddir.

Burada göstərilənin təsviri bir məqsədi olacaq və düzəlişlər zamanı müşahidə oluna biləcək maraqlı məqamlara toxunmağa çalışacağıq.

Addım 4: Dövrə istifadə olunur

İstifadə olunan dövrə
İstifadə olunan dövrə

25 MHz -ə qədər gedən bir siqnal generatoru olan bir osiloskopdan istifadə etdim, Hantek DSO4102C. ESP A / D və osiloskop tərəfindən oxunan bir dalğa yaratdıq. Toplanan məlumatlar csv -də və yükləmək üçün məqalənin sonunda buraxacağım bir elektron tabloda qeyd edildi.

Addım 5: İşarələndi

İstifadə olunan işarə
İstifadə olunan işarə

Bütün çevrilmə aralığında işləyən rampalara giriş imkanı verən aşağı tezlikli trapezoid siqnalını seçdik. Bu, bu rampalarda çox sayda nümunə əldə etməyə imkan verir.

Addım 6: Osiloskopla əldə edilən məlumatlar

Osiloskop tərəfindən əldə edilən məlumatlar
Osiloskop tərəfindən əldə edilən məlumatlar

Çəkiliş görüntüsü osiloskop tərəfindən icra edildi. Məlumat bir csv faylında saxlanıldı. Siqnalın yüksələn və düşən rampalarında kiçik əyriliklərə diqqət yetirin.

Addım 7: Osiloskopla əldə edilən məlumatlar (Excel -də csv faylı)

Osiloskopla əldə edilən məlumatlar (Excel -də csv faylı)
Osiloskopla əldə edilən məlumatlar (Excel -də csv faylı)

Burada nümunələr var.

Addım 8: ADC tərəfindən əldə edilən məlumatlar

ADC tərəfindən əldə edilən məlumatlar
ADC tərəfindən əldə edilən məlumatlar

Serialın ötürmə sürətini dəyişdirərək ADC tərəfindən tutulan məlumatları görə bilərik. Trapezoid siqnalının deformasiyasına diqqət yetirin.

Arduino IDE serial plotterində müşahidə olunan məlumatlar

Addım 9: ADC - Excel tərəfindən əldə edilən məlumatlar

ADC - Excel tərəfindən əldə edilən məlumatlar
ADC - Excel tərəfindən əldə edilən məlumatlar

Daha yüksək bir nisbət və seriyalı terminaldan istifadə edərək dəyərləri tutub müqayisə üçün Excel -də tətbiq edə bilərik.

Addım 10: Dırmaşma Rampalarının müqayisəsi

Dırmaşma Rampalarının müqayisəsi
Dırmaşma Rampalarının müqayisəsi

İki tutucunun iki dırmaşma rampasını müqayisə edirik.

Hər iki rampada meydana gələn əyriliklərə diqqət yetirin.

Həm də unutmayın ki, eyni rampa üçün osiloskopdan daha çox ESP32 nümunəsi var.

Addım 11: Nümunələrin sayını bərabərləşdirin

Nümunələrin sayını bərabərləşdirmək
Nümunələrin sayını bərabərləşdirmək
Nümunələrin sayını bərabərləşdirmək
Nümunələrin sayını bərabərləşdirmək

ESP32 osiloskopdan daha çox nümunə təqdim etdiyi üçün bu dəyərləri bərabərləşdirməliyik, çünki iki əyrini müqayisə etmək üçün bir indeks rolunu oynayacaq.

Bunun üçün birbaşa müqayisə aparacağıq.

Osiloskop rampası üçün 305 nümunə və ADC rampası üçün 2365 nümunə var.

Rampalar eyni diapazonda olduğu üçün deyə bilərik ki, hər bir osiloskop üçün təxminən 7.75 ADC nümunəsi var.

Hər bir osiloskop nümunəsinin indeksinin vurulması eyni əyriyə malikdir, lakin ADC və yenidən paylanmış məlumatlara bərabər olan indekslərlə.

Yeni mövqelər üçün çatışmayan məlumatları doldurmaq üçün məlum məlumatlara statistik olaraq uyğun bir əyri tətbiq edəcəyik.

Addım 12: Boşluqların doldurulması - Trend xətti

Boşluqların doldurulması - Trend xətti
Boşluqların doldurulması - Trend xətti
Boşluqların doldurulması - Trend xətti
Boşluqların doldurulması - Trend xətti

Məlum məlumatları (mavi nöqtələr) seçərək, sağ düyməni basaraq və sonra tıklayaraq seçirik: "Trend xətti əlavə et …"

Görünən pəncərədə Polinom tipini seçirik (2 -ci sifariş kifayət edəcək).

"Tənliyi qrafikdə görmək" və "qrafikdə R-kvadrat dəyərini göstərmək" seçimlərini də yoxladıq.

"Bağla" düyməsini basın.

Addım 13: Boşluqların doldurulması - 2 -ci dərəcəli polinom əyrisi

Boşluqların doldurulması - 2 -ci dərəcəli polinom əyrisi
Boşluqların doldurulması - 2 -ci dərəcəli polinom əyrisi

Excel bizə iki yeni məlumat verir; məlumatlara ən çox uyğun gələn ikinci dərəcəli tənlik və bu adekvatlığı kəmiyyətləndirən R kvadratlı tənlik.

Unutmayın ki, 1 -ə nə qədər yaxın olarsa, tənlik o qədər uyğun olar.

Riyaziyyata girməyək, onu bir vasitə kimi istifadə edək.

Addım 14: Boşluqların doldurulması - Funksiyanın qiymətləndirilməsi

Nümunə boşluqlarını tənliyin yaratdığı məlumatlar ilə dolduraq. Və sonra onları nöqtə -nöqtə müqayisə edin.

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

R² = 0, 9999

Osiloskopun gərginliyi = -9E -08 * index2 + 0, 0014 * index + 0, 1505

Addım 15: ADC ilə müqayisə etmək üçün osiloskopun gərginliyini bərabər bir dəyərə çevirmək

ADC ilə müqayisə etmək üçün osiloskopun gərginliyini bərabər bir dəyərə çevirmək
ADC ilə müqayisə etmək üçün osiloskopun gərginliyini bərabər bir dəyərə çevirmək

Osiloskop gərginliyinin dəyərini ekvivalent ADC dəyərinə çevirmək üçün bundan istifadə edək.

ESP32 -nin ADP -də əldə edilən ən yüksək dəyər, eyni indeks üçün 2.958V oxunuşuna bərabər olan 4095 olduğu üçün deyə bilərik:

Osiloskopun ölçmələrində hər bir volt AD -nin təxminən 1384.4 vahidinə bərabərdir. Buna görə osiloskopun bütün ölçülərini bu dəyərə vura bilərik.

Addım 16: Alınan iki Rampanı müqayisə edin

Alınan iki rampanın müqayisəsi
Alınan iki rampanın müqayisəsi

İki oxunuşda əldə edilən fərqləri görüntüləmək.

Addım 17: ADC Oxuma Fərqinin Davranışı (ERROR)

ADC Oxuma Fərqinin Davranışı (ERROR)
ADC Oxuma Fərqinin Davranışı (ERROR)

Aşağıdakı əyri, ADC oxunuşundakı fərqin bir ölçü funksiyası olaraq necə davrandığını göstərir. Bu məlumat toplanması bizə bir düzəliş funksiyası tapmağa imkan verəcək.

Bu əyrini tapmaq üçün, hər bir mümkün AD mövqeyinin (0 -dan 4095 -ə qədər) bir funksiyası olaraq hər bir ölçüdə olan fərqi qrafikə salırıq.

Addım 18: ADC Oxuma Fərq Davranışı - Düzəltmə Fonksiyonu Tapmaq

ADC Oxuma Fərq Davranışı - Düzəltmə Fəaliyyəti Tapmaq
ADC Oxuma Fərq Davranışı - Düzəltmə Fəaliyyəti Tapmaq

Verilişlərimizə kifayət qədər uyğun gələnə qədər, indi daha yüksək səviyyədə olan Trend Xətti əlavə etməklə Excel -də bir düzəliş funksiyasını təyin edə bilərik.

Addım 19: Digər Proqramlardan istifadə

Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə
Digər Proqramlardan İstifadə

Əyri təyin etmək üçün digər maraqlı proqram PolySolve -dir ki, onu birbaşa linkdən istifadə etmək olar: https://arachnoid.com/polysolve/ və ya Java tətbiqi olaraq yükləyə bilərsiniz.

Daha yüksək dərəcəli polinom reqressiyalarının tətbiqinə və formatlanmış funksiyanın və digər funksiyaların çatdırılmasına imkan verir.

İstifadə etmək üçün məlumatları ilk mətn qutusuna daxil edin. Məlumatlar vergül və ya nişanla ayrılmış X, Y sırasına uyğun olmalıdır. Nöqtəni ondalık nöqtəsi olaraq düzgün istifadə edərkən diqqətli olun.

Daxil edilmiş məlumatlar düzgün formatlandığı təqdirdə növbəti qutuda bir qrafik görünəcək.

ADC səhv əyrisimiz necə getdi.

Bu pəncərə, öz növbəsində, çıxışını bir neçə yolla formatlaşdıra bilən funksiya adekvatlığı məlumatları da daxil olmaqla reqressiyanın nəticəsini təqdim edəcək: C / C ++ funksiyası, əmsalların siyahısı, Java -da yazılmış bir funksiya və s.

Qeyd: Ondalık ayırıcılara diqqət yetirin

Addım 20: Sabitlər və Quraşdırma ()

Burada analog çəkmə üçün istifadə olunan GPIO -ya işarə edirəm. Serial portu və analoq çəkmə üçün təyin edilmiş pimi işə salıram.

const int pin_leitura = 36; // Violun qurulması üçün GPIO istifadə () {Serial.begin (1000000); // PinMode (pin_leitura, INPUT) ayıklama üçün bir sıra proqramlar; // İstifadə üçün analitik}

Addım 21: Loop () və Düzəltmə Fonksiyonu

Tənzimlənmiş gərginliyi tuturuq və dəyərləri düzgün düzəlişlərlə və ya olmadan çap edirik.

void loop () {int valor_analogico = analogRead (pin_leitura); // real vaxt və ya təcrübə //Serial.print(valor_analogico + f (valor_analogico)); // hata ayıklama (COM CORREÇÃO) Serial.print (valor_analogico); // ayıklama əməliyyatı (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // 4095 Serial.print (","); Serial.println (0); // ən böyük səylər üçün 0 ildir

12 -ci sətirdə qeyd edək ki, f (analog_value) fərq funksiyası əlavə edilərək məlumatları çap edə bilərik.

Addım 22: PolySolve Düzəliş Funksiyasından istifadə

Burada, Arduino IDE içərisində PolySolve funksiyasından istifadə edirik.

/* Mod: normal Polinom dərəcəsi 6, 2365 x, y məlumat cütləri Korrelyasiya əmsalı (r^2) = 9, 907187626418e-01 Standart səhv = 1, 353761109831e+01 Çıxış formu: C/C ++ funksiyası: Müəlliflik hüququ © 2012, S. Lutus - https://www.arachnoid.com. Bütün hüquqlar qorunur. */ 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); }

Ondalık ayırıcı olaraq vergül-nöqtə dəyişikliyinə diqqət yetirin.

Addım 23: Düzəlişlə Capture - Plotter Serialı

Düzəlişlə Capture - Plotter Serialı
Düzəlişlə Capture - Plotter Serialı

Addım 24: Hesablama dəyəri

Hesablama dəyəri
Hesablama dəyəri
Hesablama dəyəri
Hesablama dəyəri

Polinom hesablamaları aparmaq üçün prosessor bu vəzifəni yerinə yetirməlidir. Bu, qaynaq kodundan və mövcud hesablama gücündən asılı olaraq icra gecikməsinə səbəb ola bilər.

Burada çox dərəcə polinomlardan istifadə edərək bir testin nəticələr cədvəlini görürük. Pow () funksiyasından istifadə edildiyi və istifadə edilmədiyi vaxtlar arasındakı fərqə diqqət yetirin.

Addım 25: Test Kodu - Setup () və Loop Start ()

Burada testimizdə istifadə olunan kod var.

void setup () {Serial.begin (1000000); // bir sıra səhvlər düzəltmək üçün} void loop () {float valor_analogico = 500.0; // şücaətli arbtrario float quantidade = 10000.0; // quantidade de chamadas float contador = 0.0; // contad de chamadas

Addım 26: Test Kodu - Loop () və Qenerasiya

Mikrosaniyələrdə dəyəri əldə etmək üçün micros () funksiyasından istifadə etdim.

// ============== prosesin gedişatını idarə edin = 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); // 13º SEM və hərbi əsir // f13_comPow (valor_analogico); // 13º COM və POW kontoru ++; } agora = (micros () - agora) / quantidade; // müəyyən bir zaman kəsiyində iteração // ============ son proses

Addım 27: Test Kodu - Loop () - Nəticələr

Müqayisə üçün əsir ilə və əsassız 13 -cü sinif funksiyasından qaytarılmış dəyəri və işləmə aralığını çap edirik.

// Serial.print (f13_semPow (valor_analogico)) üçün əsirlikdə olan hərbçilərə kömək etmək; // grau 13º SEM və Funny POW Serial.print (" -"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM a função POW Serial.print (" -"); // Serial.println (agora, 6); }

Addım 28: Test Kodu - İstifadə olunan Funksiyalar

0 və 1 dərəcə boş funksiyalar (yalnız geri qayıtmaqla).

// FUNÇÃO VAZIAdouble v (double x) {} // FUNÇÃO SOMENTE COM RETORNO double r (double x) {return x; } // FUNÇÃO DE GRAU 0 cüt f0 (ikiqat x) {qaytar 2.202196968876e+02; } // FUNÇÉ DE GRAU 1 cüt f1 (ikiqat x) {qayıt 2.202196968876e + 02 + 3.561383996027e-01 * x; }

2, 3 və 4 -cü dərəcəli funksiyalar.

// FUNÇÉ DE GRAU 2double f2 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2); } // FUNÇÃ DE GRAU 3 cüt f3 (cüt x) {qayıt 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3); } // FUNÇÃO DE GRAU 4 cüt f4 (ikiqat x) {qayıt 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 və 6 -cı sinif funksiyaları.

// FUNÇÉ 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ÇÉ DE GRAU 6 cüt f6 (ikiqat x) {qayıt 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); }

Əsirlikdən istifadə edərək 13 -cü sinif funksiyası.

// FUNÇÉ 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); }

Əsirlikdən istifadə etmədən 13 -cü dərəcəli funksiya.

// FUNÇÉ 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; }

Addım 29: Fayllar

Faylları yükləyin:

PDF

MƏN YOX

Cədvəl

Tövsiyə: