İçindekiler:
- Adım 1: AD Dönüştürücü Nedir?
- 2. Adım: Kullanılan Kaynaklar
- Adım 3: ESP32 ADC
- Adım 4: Kullanılan Devre
- Adım 5: Kullanıldığını İşaretle
- Adım 6: Osiloskop Tarafından Elde Edilen Veriler
- Adım 7: Osiloskop Tarafından Elde Edilen Veriler (Excel'de csv Dosyası)
- Adım 8: ADC Tarafından Elde Edilen Veriler
- Adım 9: ADC Tarafından Elde Edilen Veriler - Excel
- Adım 10: Tırmanma Rampalarının Karşılaştırılması
- Adım 11: Örnek Sayısının Eşitlenmesi
- Adım 12: Boşlukları Doldurma - Trend Çizgisi
- Adım 13: Boşlukları Doldurma - 2. Derece Polinom Eğrisi
- Adım 14: Boşlukları Doldurma - Fonksiyonu Değerlendirme
- Adım 15: Osiloskop Voltajını ADC ile Karşılaştırmak İçin Eşdeğer Bir Değere Dönüştürme
- Adım 16: Elde Edilen İki Rampanın Karşılaştırılması
- Adım 17: ADC Okuma Farkının Davranışı (ERROR)
- Adım 18: ADC Okuma Farkı Davranışı - Bir Düzeltme Fonksiyonu Bulma
- Adım 19: Diğer Yazılımları Kullanma
- Adım 20: Sabitler ve Kurulum ()
- Adım 21: Döngü () ve Düzeltme İşlevi
- Adım 22: PolySolve Düzeltme İşlevini Kullanma
- Adım 23: Düzeltmeyle Yakalama - Seri Plotter
- Adım 24: Hesaplama Maliyeti
- Adım 25: Test Kodu - Kurulum () ve Döngü Başlatma ()
- Adım 26: Test Kodu - Döngü () ve İşleme
- Adım 27: Test Kodu - Döngü () - Sonuçlar
- Adım 28: Test Kodu - Kullanılan Fonksiyonlar
- 29. Adım: Dosyalar
Video: ESP32 ADC Ayarını Biliyor Musunuz?: 29 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bugün daha teknik bir konudan bahsedeceğim ama bence ESP32 ile çalışan herkesin bilmesi gereken bir konu: ADC (analog-dijital dönüştürücü) sorunu okuma ayarı. Bunu önemli buluyorum çünkü özellikle analog çıkışı olan bir cihazla bir "ölçüm" yaparken, okumanın doğru yapıldığından kesinlikle emin olmanız gerekiyor.
Bu nedenle bugünkü videoda ESP32'nin "analog-dijital dönüştürücüsünü" kullanarak ölçümler yapacağız, dönüştürme tutarsızlıklarını gözlemleyeceğiz ve bir ADC ayarlama/kalibrasyon yöntemi uygulayacağız.
Adım 1: AD Dönüştürücü Nedir?
AD dönüştürücü, analog (sürekli) bir miktarı dijital (ayrık) değerlere çevirebilen bir devredir. Bu ne anlama geliyor? Bu, dijital değerler yalnızca sıfırlar ve birlerin birleşiminden oluşan ayrık değerler alabilirken, analog bir niceliğin bir aralık içinde herhangi bir değeri alabileceği anlamına gelir. Örneğin, ideal bir AA hücresinin voltajını ölçtüysek, bu analog bir büyüklük olduğu için 0V ile 1.5V arasında herhangi bir değer bulabiliriz. İdeal bir lambanın çıkış durumu, ayrı bir büyüklük olan yalnızca iki durumu (kapalı veya açık) kabul etmelidir. Mikrodenetleyiciler bu ayrık mantığı kullanarak çalıştığından, analog bir miktarı dijitale (veya ayrık) çevirebilen bir devreye ihtiyacımız var.
2. Adım: Kullanılan Kaynaklar
• Bir Lolin32 Lite kartı v1.0.0
• Yakalamak için bir Tektronix TDS1001C osiloskop
• ESP32 için bir USB kablosu
• Sinyal oluşturucu olarak bir Hantek DSO4102C osiloskop
Adım 3: ESP32 ADC
Espressif verilerine göre ESP32 çipleri, ölçülen sonuçlarda bir çipten diğerine +/- %6 fark gösterebilir.
Ek olarak, dönüştürme, okuma için mevcut her aralık için doğrusal bir yanıta sahip DEĞİLDİR. Espressif, kalibrasyon için bir yöntem sunar ve kullanıcıların istenen doğruluğa ulaşmak için gerekli gördükleri takdirde başka yöntemler uygulamasını önerir.
Bir veri toplama gerçekleştireceğiz ve bundan, ADC yanıtlarını ve ayarlamayı okumak için matematiksel bir işlem uygulama örneğini göstereceğiz.
Bu düzeltmeleri gerçekleştirmenin birkaç (daha basit veya daha karmaşık) yolu vardır. Projenize en uygun olanı değerlendirmek size kalmış.
Burada gösterilen, açıklayıcı bir amaca sahip olacak ve ayarlamalar sırasında gözlemlenebilecek ilginç noktalara değinmeye çalışacaktır.
Adım 4: Kullanılan Devre
25 MHz'e kadar çıkan bir sinyal üreteci olan bir osiloskop, Hantek DSO4102C kullandım. ESP A / D ve osiloskop tarafından okunan bir dalga oluşturduk. Toplanan veriler csv'ye ve indirilmek üzere makalenin sonunda bırakacağım bir elektronik tabloya kaydedildi.
Adım 5: Kullanıldığını İşaretle
Tüm dönüşüm aralığı boyunca uzanan rampalara erişime izin veren düşük frekanslı bir yamuk sinyali seçtik. Bu, bu rampalarda çok sayıda numuneye izin verir.
Adım 6: Osiloskop Tarafından Elde Edilen Veriler
Yakalama görüntüsü osiloskop tarafından gerçekleştirildi. Veriler bir csv dosyasında saklandı. Sinyalin yükselen ve düşen rampalarındaki hafif eğriliğe dikkat edin.
Adım 7: Osiloskop Tarafından Elde Edilen Veriler (Excel'de csv Dosyası)
Burada numunelerimiz var.
Adım 8: ADC Tarafından Elde Edilen Veriler
Serinin aktarım hızını değiştirerek ADC'nin yakaladığı verileri görebiliriz. Yamuk sinyalinin deformasyonunu gözlemleyin.
Arduino IDE seri çizicide gözlenen veriler
Adım 9: ADC Tarafından Elde Edilen Veriler - Excel
Daha yüksek bir oran ve seri terminal kullanarak değerleri yakalayabilir ve karşılaştırmalarımız için Excel'de uygulayabiliriz.
Adım 10: Tırmanma Rampalarının Karşılaştırılması
İki yakalamanın iki tırmanma rampasını karşılaştırıyoruz.
Her iki rampada oluşan eğriliği not edin.
Aynı rampa için, osiloskoptan çok daha fazla ESP32 örneğine sahip olduğumuzu da unutmayın.
Adım 11: Örnek Sayısının Eşitlenmesi
ESP32, osiloskoptan daha fazla sayıda örnek sağladığından, iki eğriyi karşılaştırmak için bir indeks görevi görecekleri için bu değerleri eşitlememiz gerekir.
Bunun için doğrudan bir karşılaştırma yapacağız.
Osiloskop rampası için 305 örneğimiz ve ADC rampası için 2365 örneğimiz var.
Rampalar aynı aralıkta olduğu için her osiloskop için yaklaşık 7.75 ADC örneğine sahip olduğumuzu söyleyebiliriz.
Her osiloskop örneğinin indeksinin çarpılması aynı eğriye sahiptir, ancak indeksler ADC'ye ve yeniden dağıtılan verilere eşdeğerdir.
Yeni pozisyonlar için eksik verileri doldurmak için, bilinen verilere istatistiksel olarak uyan bir eğri uygulayacağız.
Adım 12: Boşlukları Doldurma - Trend Çizgisi
Bilinen verileri (mavi noktalar) seçerek ve ardından sağ tuş ile tıklayarak "Trend çizgisi ekle …" seçeneğini seçiyoruz.
Gelen pencerede Polinom tipini seçiyoruz (2. sıra yeterli olacaktır).
Ayrıca "Denklemi Grafikte Görüntüle" ve "Grafikte R-kare değerini göster" seçeneklerini de kontrol ettik.
"Kapat" ı tıklıyoruz.
Adım 13: Boşlukları Doldurma - 2. Derece Polinom Eğrisi
Excel bize iki yeni bilgi veriyor; verilere en iyi uyan ikinci dereceden denklem ve bu yeterliliği ölçen R-kare denklemi.
Sadece 1'e ne kadar yakınsa, denklemin o kadar uygun olduğunu unutmayın.
İlgili matematiğe girmeyelim, sadece bir araç olarak kullanalım.
Adım 14: Boşlukları Doldurma - Fonksiyonu Değerlendirme
Örnekleme boşluklarını denklem tarafından oluşturulan verilerle dolduralım. Ve sonra bunları nokta nokta karşılaştırın.
y = -9E-08x2 + 0, 0014x + 0, 1505
R² = 0, 9999
Osiloskop voltajı = -9E-08 * indeks2 + 0, 0014 * indeks + 0, 1505
Adım 15: Osiloskop Voltajını ADC ile Karşılaştırmak İçin Eşdeğer Bir Değere Dönüştürme
Osiloskop voltajının değerini de eşdeğer bir ADC değerine dönüştürmek için bundan yararlanalım.
ESP32'nin ADP'sinde elde edilen en yüksek değer, aynı indeks için 2.958V okumasına eşdeğer olan 4095 olduğu için şunu söyleyebiliriz:
Osiloskop ölçümlerindeki her volt, AD'nin yaklaşık 1384.4 birimine eşittir. Dolayısıyla osiloskopun tüm ölçümlerini bu değerle çarpabiliriz.
Adım 16: Elde Edilen İki Rampanın Karşılaştırılması
İki okumada elde edilen farklılıkları görselleştirmek.
Adım 17: ADC Okuma Farkının Davranışı (ERROR)
Aşağıdaki eğri, ADC okumasındaki farkın ölçümün bir fonksiyonu olarak nasıl davrandığını gösterir. Bu veri toplama, bir düzeltme işlevi bulmamızı sağlayacaktır.
Bu eğriyi bulmak için, her bir olası AD konumunun (0 ila 4095) bir fonksiyonu olarak her ölçüde bulunan farkı basitçe çizeriz.
Adım 18: ADC Okuma Farkı Davranışı - Bir Düzeltme Fonksiyonu Bulma
Excel'de, verilerimize yeterince uyana kadar şimdi daha yüksek derecede bir Trend Çizgisi ekleyerek bir düzeltme işlevi belirleyebiliriz.
Adım 19: Diğer Yazılımları Kullanma
Eğrileri belirlemek için diğer ilginç yazılım, doğrudan bağlantıda kullanılabilen PolySolve'dir: https://arachnoid.com/polysolve/ veya bir Java uygulaması olarak indirilebilir.
Daha yüksek dereceli polinom regresyonlarının uygulanmasına ve biçimlendirilmiş işlevin yanı sıra diğer işlevlerin teslimine izin verir.
Kullanmak için verileri ilk metin kutusuna girmeniz yeterlidir. Veriler, virgül veya sekme ile ayrılmış X, Y sırasını izlemelidir. Noktayı ondalık nokta olarak doğru şekilde kullanırken dikkatli olun.
Girilen veriler doğru biçimlendirilmişse, sonraki kutuda bir grafik görünecektir.
İşte ADC hata eğrimiz böyle gitti.
Bu pencere, çıktısını çeşitli şekillerde biçimlendirebilecek olan işlev yeterlilik verileri de dahil olmak üzere gerilemenin sonucunu sunacaktır: bir C / C++ işlevi, bir katsayı listesi, Java ile yazılmış bir işlev, vb.
Not: Ondalık ayırıcılara dikkat edin
Adım 20: Sabitler ve Kurulum ()
Burada analog yakalama için kullanılan GPIO'ya işaret ediyorum. Analog yakalama için belirlenen pinin yanı sıra seri portu da başlatıyorum.
const int pin_leitura = 36; //GPIO usado para captura analógica void setup() { Serial.begin(1000000); //Debug pinMode(pin_leitura, INPUT); //Pino, captura analógica para birimini kullanır }
Adım 21: Döngü () ve Düzeltme İşlevi
Ayarlanan voltajın yakalamasını yapıyoruz ve değerleri doğru düzeltmeli veya düzeltmesiz olarak yazdırıyoruz.
void loop() { int valor_analogico = analogRead(pin_leitura); //gerçekleştirme ve düzeltme //Serial.print(valor_analogico + f(valor_analogico)); // valores para hata ayıklama (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(", "); Seri.println(0); // cria uma linha para marcar o valor minimo de 0 }
12. satırda, f (analog_değer) fark fonksiyonunun eklenmesiyle verileri yazdırma seçeneğimiz olduğuna dikkat edin.
Adım 22: PolySolve Düzeltme İşlevini Kullanma
Burada, Arduino IDE içindeki PolySolve işlevini kullanıyoruz.
/* Mod: normal Polinom derecesi 6, 2365 x, y veri çiftleri Korelasyon katsayısı (r^2) = 9, 907187626418e-01 Standart hata = 1, 353761109831e+01 Çıkış formu: C/C++ işlevi: Copyright © 2012, P. Lutus -- https://www.arachnoid.com. Her hakkı saklıdır. */ double f(double x) { dönüş 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ı olarak virgül nokta değişikliğine dikkat edin.
Adım 23: Düzeltmeyle Yakalama - Seri Plotter
Adım 24: Hesaplama Maliyeti
Polinom hesaplamaları yapmak için işlemcinin bu görevi yerine getirmesi gerekir. Bu, kaynak koduna ve mevcut bilgi işlem gücüne bağlı olarak yürütmede gecikmelere neden olabilir.
Burada, çok dereceli polinomları kullanan bir testin sonuç tablosunu görüyoruz. pow() işlevinin kullanıldığı ve kullanılmadığı zamanlar arasındaki farka dikkat edin.
Adım 25: Test Kodu - Kurulum () ve Döngü Başlatma ()
Burada, testimizde kullanılan kodumuz var.
geçersiz kurulum() { Serial.begin(1000000); //Bir porta seri bazında hata ayıklama işlemi yapın } void loop() { float valor_analogico = 500.0; //um valor arbtrario kayan nokta nicelik değeri = 10000.0; // kantitatif de chamadas yüzer contador = 0.0; //contador de chamadas
Adım 26: Test Kodu - Döngü () ve İşleme
Değeri mikrosaniye cinsinden almak için mikros() işlevini kullandım.
//============= 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 bir função POW //f13_comPow(valor_analogico); // 13º COM bir função POW contador++; } agora = (mikrolar() - agora) / nicelik; //belirleme o intervalo que se passou para cada iteração //============= finalize o süreç
Adım 27: Test Kodu - Döngü () - Sonuçlar
Karşılaştırma için POW ile ve POW olmadan 13. sınıf fonksiyondan döndürülen değeri ve ayrıca işlem aralığını yazdırıyoruz.
// 13'ten bu yana en iyi şekilde değerlendirilen bir değer ya da yiğitlik örneği Serial.print(f13_semPow(valor_analogico)); // 13º SEM bir função POW Serial.print(" - "); Serial.print(f13_comPow(valor_analogico)); // 13º COM bir função POW Serial.print(" - "); //işlem yapmak için aralıklı veya aralıklı Serial.println(agora, 6); }
Adım 28: Test Kodu - Kullanılan Fonksiyonlar
0 ve 1 dereceli boş fonksiyonlar (sadece dönüşlü).
//FUNÇÃO VAZIAdouble v(double x) { } //FUNÇÃO SOMENTE COM RETORNO double r(double x) { dönüş x; } //FUNÇÃO DE GRAU 0 double f0(double x) { return 2.202196968876e+02; } //FUNÇÃO DE GRAU 1 çift f1(çift x) { dönüş 2.202196968876e+02 + 3.561383996027e-01 * x; }
2., 3. ve 4. sınıf fonksiyonlar.
//FUNÇÃO DE GRAU 2çift f2(çift x) { dönüş 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow(x, 2); } //FUNÇÃO DE GRAU 3 çift f3(çift x) { dönüş 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow(x, 2) + -3.470360275448e-07 * pow(x, 3); } //FUNÇÃO DE GRAU 4 çift f4(çift x) { dönüş 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. ve 6. sınıf fonksiyonları.
//FUNÇÃO DE GRAU 5double f5(double x) { dönüş 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 çift f6(çift x) { dönüş 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); }
POW kullanarak 13. sınıf işlevi.
//FUNÇÃO DE GRAU 13 USANDO O POWdouble f13_comPow(çift x) { dönüş 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, 22089479514e-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); }
POW kullanmadan sınıf 13 işlevi.
//FUNÇÃO DE GRAU SEM USAR O POWdouble f13_semPow(çift x) { dönüş 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 * 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. Adım: Dosyalar
Dosyaları indirin:
BEN HAYIR
E-tablo
Önerilen:
ADC Current Sense Nasıl Yapılır: 5 Adım
ADC Akım Anlamı Nasıl Yapılır: Bu Eğitilebilir Tabloda, SLG46855V'de yük akımını algılayabilen ve I2C aracılığıyla bir MCU ile arayüz oluşturabilen 8 bitlik bir analogdan dijitale dönüştürücünün (ADC) nasıl uygulanacağını açıklayacağız. Bu tasarım, çeşitli akım algılama uygulamaları için kullanılabilir, örneğin
Bitkilerinizin Nasıl Hissettiğini Biliyor musunuz? [Parçacık+Ubidotlar]: 6 Adım
Bitkilerinizin Nasıl Hissettiğini Biliyor musunuz? [Particle+Ubidots]: Dışarı çıkıp toprağı kendiniz ellemenin yerini hiçbir şey tutamaz, ancak günümüz teknolojisi, toprağı uzaktan izlemeyi ve insan duyularımla ölçülemeyen parametreleri izlemeyi mümkün kıldı. SHT10 gibi toprak sondaları artık son derece hassas ve
ESP32'ye Başlarken - Arduino IDE'de ESP32 Kartlarının Kurulması - ESP32 Yanıp Sönme Kodu: 3 Adım
ESP32'ye Başlarken | Arduino IDE'de ESP32 Kartlarının Kurulması | ESP32 Yanıp Sönme Kodu: Bu talimatta, esp32 ile çalışmaya nasıl başlayacağımızı ve esp32 kartlarının Arduino IDE'ye nasıl kurulacağını göreceğiz ve esp 32'yi arduino ide kullanarak yanıp sönme kodunu çalıştıracak şekilde programlayacağız
ESP32: DAC Nedir Biliyor musunuz?: 7 Adım
ESP32: DAC Nedir Biliyor musunuz?: Bugün iki konudan bahsedeceğiz. İlki DAC'dir (Dijital-Analog Dönüştürücü). Bunun önemli olduğunu düşünüyorum çünkü bu sayede örneğin ESP32'de bir ses çıkışı yapıyoruz. Bugün ele alacağımız ikinci konu, salınım
Diş Kulaklık - Dişlerinizle Duyabiliyor musunuz?: 8 Adım (Resimli)
Teeth Headphone - Dişlerinizle Duyabiliyor musunuz?: *-* Bu Talimat İngilizce'dir. Hollandaca versiyonu için lütfen tıklayınız,*-* Deze Instructable het Engels'te. Klik hier voor de Nederlandse versie.Dişlerinizle işitme. Bilim kurgu gibi mi geliyor? Hayır değil! Bu DIY 'diş başlığı ile