Mündəricat:
- Addım 1: AD Dönüştürücü nədir?
- Addım 2: İstifadə olunan mənbələr
- Addım 3: ESP32 ADC
- Addım 4: Dövrə istifadə olunur
- Addım 5: İşarələndi
- Addım 6: Osiloskopla əldə edilən məlumatlar
- Addım 7: Osiloskopla əldə edilən məlumatlar (Excel -də csv faylı)
- Addım 8: ADC tərəfindən əldə edilən məlumatlar
- Addım 9: ADC - Excel tərəfindən əldə edilən məlumatlar
- Addım 10: Dırmaşma Rampalarının müqayisəsi
- Addım 11: Nümunələrin sayını bərabərləşdirin
- Addım 12: Boşluqların doldurulması - Trend xətti
- Addım 13: Boşluqların doldurulması - 2 -ci dərəcəli polinom əyrisi
- Addım 14: Boşluqların doldurulması - Funksiyanın qiymətləndirilməsi
- Addım 15: ADC ilə müqayisə etmək üçün osiloskopun gərginliyini bərabər bir dəyərə çevirmək
- Addım 16: Alınan iki Rampanı müqayisə edin
- Addım 17: ADC Oxuma Fərqinin Davranışı (ERROR)
- Addım 18: ADC Oxuma Fərq Davranışı - Düzəltmə Fonksiyonu Tapmaq
- Addım 19: Digər Proqramlardan istifadə
- Addım 20: Sabitlər və Quraşdırma ()
- Addım 21: Loop () və Düzəltmə Fonksiyonu
- Addım 22: PolySolve Düzəliş Funksiyasından istifadə
- Addım 23: Düzəlişlə Capture - Plotter Serialı
- Addım 24: Hesablama dəyəri
- Addım 25: Test Kodu - Setup () və Loop Start ()
- Addım 26: Test Kodu - Loop () və Qenerasiya
- Addım 27: Test Kodu - Loop () - Nəticələr
- Addım 28: Test Kodu - İstifadə olunan Funksiyalar
- Addım 29: Fayllar
Video: ESP32 ADC Ayarlaması haqqında Bilirsinizmi ?: 29 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
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
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
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
Çə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ı)
Burada nümunələr var.
Addım 8: 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
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
İ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
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
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
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
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
İki oxunuşda əldə edilən fərqləri görüntüləmək.
Addım 17: 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
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ə
Ə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ı
Addım 24: 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:
MƏN YOX
Cədvəl
Tövsiyə:
Rpibot - Robototexnika öyrənmək haqqında: 9 addım
Rpibot - Robototexniki Öyrənmək Haqqında: Mən bir Alman avtomobil şirkətində quraşdırılmış proqram mühəndisiyəm. Bu layihəni quraşdırılmış sistemlər üçün bir öyrənmə platforması olaraq başladım. Layihə erkən ləğv edildi, amma o qədər zövq aldım ki, boş vaxtlarımda davam etdim. Nəticə budur … Mən
İşıqların söndürülməsi haqqında xatırlatma: 5 addım
İşıqları Söndürmə Xatırlatması: Yadda saxla, İşıqları Söndür, Yer kürəsini xilas et. Bu cihaz, otaqdan çıxanda işıqları söndürmək vərdişini inkişaf etdirməyimə kömək edir. Cihaz sadəcə Arduino tərəfindən hazırlanmışdır, əsasən işıq sensoru, ultrasəs məsafə ölçmə cihazı və
Hava haqqında məlumat: 5 addım
Hava məlumatınız: salam, məktəbdəki layihəmiz üçün etmək istədiyimiz bir layihəni və ya özümüzdən bir fikir seçə biləcəyimiz bir siyahıya sahib idik. Maraqlı göründüyü üçün bir hava stansiyası üçün seçmişdim və bəlkə də saxlamaq yaxşı olardı. poz kimi pozulmamış və kiçik
Bitkilərinizin necə hiss etdiyini bilirsinizmi? [Particle+Ubidots]: 6 addım
Bitkilərinizin necə hiss etdiyini bilirsinizmi? [Particle+Ubidots]: Heç bir şey özünüz üçün torpağı gəzməyi və idarə etməyi əvəz edə bilməz, amma bu günün texnologiyası torpağı uzaqdan izləməyi və insan hisslərimin ölçülməz parametrlərini izləməyi mümkün etdi. SHT10 kimi torpaq zondları artıq son dərəcə dəqiqdir və təklif edir
ESP32: DAC -ın nə olduğunu bilirsinizmi ?: 7 addım
ESP32: DAC -ın nə olduğunu bilirsinizmi ?: Bu gün iki məsələ haqqında danışacağıq. Birincisi, DAC (Digital-to-Analog Converter). Bunun vacib olduğunu düşünürəm, çünki bunun sayəsində, məsələn, ESP32 -də səs çıxışı edirik. Bu gün müzakirə edəcəyimiz ikinci məsələ osil