Isi kandungan:
- Langkah 1: Apakah Penukar AD?
- Langkah 2: Sumber yang Digunakan
- Langkah 3: ESP32 ADC
- Langkah 4: Litar Digunakan
- Langkah 5: Tanda Digunakan
- Langkah 6: Data Diperolehi oleh Osiloskop
- Langkah 7: Data Diperolehi oleh Osiloskop (Fail csv di Excel)
- Langkah 8: Data yang diperoleh oleh ADC
- Langkah 9: Data Diperolehi oleh ADC - Excel
- Langkah 10: Perbandingan Tanjakan Pendakian
- Langkah 11: Menyamakan Bilangan Sampel
- Langkah 12: Mengisi Jurang - Garis Trend
- Langkah 13: Mengisi Jurang - Keluk Polinomial Gred 2
- Langkah 14: Mengisi Jurang - Menilai Fungsi
- Langkah 15: Menukar Voltan Osiloskop ke Nilai Setara untuk Dibandingkan dengan ADC
- Langkah 16: Membandingkan Dua Tanjakan yang Diperolehi
- Langkah 17: Kelakuan Perbezaan Membaca ADC (KESILAPAN)
- Langkah 18: Tingkah Laku Perbezaan Membaca ADC - Mencari Fungsi Pembetulan
- Langkah 19: Menggunakan Perisian Lain
- Langkah 20: Pemalar dan Penyediaan ()
- Langkah 21: Gelung () dan Fungsi Pembetulan
- Langkah 22: Menggunakan Fungsi Pembetulan PolySolve
- Langkah 23: Tangkap Dengan Pembetulan - Serial Plotter
- Langkah 24: Kos Pengiraan
- Langkah 25: Kod Ujian - Persediaan () dan Mula Gelung ()
- Langkah 26: Ujian Kod - Gelung () dan Pemprosesan
- Langkah 27: Kod Ujian - Gelung () - Hasil
- Langkah 28: Kod Ujian - Fungsi yang Digunakan
- Langkah 29: Fail
Video: Adakah Anda Tahu Mengenai Penyesuaian AD32 ESP32: 29 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Hari ini, saya akan membincangkan masalah yang lebih teknikal, tetapi saya rasa setiap orang yang bekerja dengan ESP32 harus mengetahui: isu penyesuaian baca ADC (penukar analog-ke-digital). Saya merasa ini penting kerana ketika melakukan "pengukuran", terutama dengan instrumen yang mempunyai output analog, anda harus benar-benar yakin bahawa pembacaan dilakukan dengan betul.
Oleh itu, dalam video hari ini, kami akan melakukan pengukuran menggunakan "penukar analog-digital" ESP32, memerhatikan perbezaan penukaran, dan menerapkan kaedah penyesuaian / penentukuran ADC.
Langkah 1: Apakah Penukar AD?
Penukar AD adalah litar yang mampu menerjemahkan kuantiti analog (berterusan) ke dalam nilai digital (diskrit). Apa maksudnya? Ini bermaksud bahawa sementara nilai digital hanya dapat mengandaikan nilai diskrit yang dibentuk oleh gabungan angka nol dan nol, kuantiti analog dapat menganggap nilai apa pun dalam julat. Sebagai contoh, jika kita mengukur voltan sel AA yang ideal, kita dapat mencari nilai antara 0V dan 1.5V, kerana ini adalah kuantiti analog. Keadaan output lampu yang ideal mesti hanya mengandaikan dua keadaan (mati atau hidup), yang merupakan magnitud diskrit. Oleh kerana pengawal mikro berfungsi menggunakan logik diskrit ini, kita memerlukan litar yang mampu menerjemahkan kuantiti analog menjadi digital (atau diskrit).
Langkah 2: Sumber yang Digunakan
• Satu kad Lolin32 Lite v1.0.0
• Osiloskop Tektronix TDS1001C untuk menangkap
• Satu kabel USB untuk ESP32
• Osiloskop Hantek DSO4102C sebagai penjana isyarat
Langkah 3: ESP32 ADC
Menurut data Espressif, cip ESP32 mungkin menunjukkan perbezaan +/- 6% dari satu cip ke cip yang lain dalam hasil yang diukur.
Di samping itu, penukaran TIDAK mempunyai jawapan linear untuk setiap julat yang tersedia untuk membaca. Espressif menyediakan kaedah untuk penentukuran dan mencadangkan pengguna menggunakan kaedah lain jika mereka menganggapnya perlu untuk mencapai ketepatan yang diinginkan.
Kami akan melakukan pemerolehan data, dan dari ini, kami akan menunjukkan respons ADC dan contoh menerapkan proses matematik untuk membaca penyesuaian.
Terdapat beberapa cara (lebih mudah atau lebih kompleks) untuk menyelesaikan pembaikan ini. Terserah anda untuk menilai yang paling sesuai untuk projek anda.
Yang ditunjukkan di sini akan mempunyai tujuan ilustrasi dan cuba menangani perkara menarik yang dapat diperhatikan semasa penyesuaian.
Langkah 4: Litar Digunakan
Saya menggunakan osiloskop dengan penjana isyarat sehingga 25 MHz, Hantek DSO4102C. Kami menghasilkan gelombang yang dibaca oleh ESP A / D dan osiloskop. Data yang dikumpulkan direkodkan dalam csv dan dalam spreadsheet, yang akan saya tinggalkan pada akhir artikel untuk dimuat turun.
Langkah 5: Tanda Digunakan
Kami memilih isyarat trapezoidal frekuensi rendah yang membolehkan akses ke tanjakan yang melintasi keseluruhan julat penukaran. Ini memungkinkan sebilangan besar sampel di tanjakan ini.
Langkah 6: Data Diperolehi oleh Osiloskop
Gambar tangkapan dilakukan oleh osiloskop. Data disimpan dalam fail csv. Perhatikan sedikit kelengkungan pada tanjakan naik dan turun isyarat.
Langkah 7: Data Diperolehi oleh Osiloskop (Fail csv di Excel)
Kami mempunyai contoh di sini.
Langkah 8: Data yang diperoleh oleh ADC
Dengan mengubah kadar pemindahan siri, kita dapat melihat data yang diambil oleh ADC. Perhatikan ubah bentuk isyarat trapezoid.
Data diperhatikan pada plotter siri Arduino IDE
Langkah 9: Data Diperolehi oleh ADC - Excel
Dengan menggunakan kadar yang lebih tinggi dan terminal bersiri, kita dapat menangkap nilai dan menerapkannya di Excel untuk perbandingan kita.
Langkah 10: Perbandingan Tanjakan Pendakian
Kami membandingkan dua tanjakan pendakian dari dua tangkapan.
Perhatikan kelengkungan yang berlaku di kedua tanjakan.
Perhatikan juga bahawa untuk jalan yang sama, kita mempunyai lebih banyak sampel ESP32 daripada dari osiloskop.
Langkah 11: Menyamakan Bilangan Sampel
Kerana ESP32 memberikan jumlah sampel yang lebih besar daripada osiloskop, kita perlu menyamakan nilai-nilai ini, kerana ia akan berfungsi sebagai indeks untuk membandingkan kedua lengkung tersebut.
Untuk ini, kami akan membuat perbandingan langsung.
Kami mempunyai 305 sampel untuk tanjakan osiloskop dan 2365 sampel untuk tanjakan ADC.
Oleh kerana tanjakan berada dalam jarak yang sama, kita dapat mengatakan bahawa kita mempunyai kira-kira 7.75 sampel ADC untuk setiap osiloskop.
Mengalikan indeks setiap sampel osiloskop mempunyai keluk yang sama, tetapi dengan indeks yang setara dengan ADC dan data yang diedarkan semula.
Untuk mengisi data yang hilang untuk posisi baru, kami akan menerapkan kurva yang sesuai dengan data yang diketahui secara statistik.
Langkah 12: Mengisi Jurang - Garis Trend
Memilih data yang diketahui (titik biru), dengan mengklik dan kemudian mengklik dengan butang kanan, kami memilih: "Tambah garis Trend …"
Di tetingkap yang muncul, kami memilih jenis Polinomial (pesanan 2 akan mencukupi).
Kami juga memeriksa pilihan "Lihat Persamaan dalam carta" dan "Paparkan nilai R-kuadrat dalam carta".
Kami mengklik "Tutup".
Langkah 13: Mengisi Jurang - Keluk Polinomial Gred 2
Excel memberi kami dua maklumat baru; persamaan urutan kedua yang paling sesuai dengan data, dan persamaan R-kuasa dua yang mengukur kecukupan ini.
Ingatlah bahawa semakin dekat dengan 1, persamaan yang lebih tepat.
Jangan sampai matematik terlibat, mari kita gunakannya sebagai alat.
Langkah 14: Mengisi Jurang - Menilai Fungsi
Mari kita isi jurang persampelan dengan data yang dihasilkan oleh persamaan. Dan kemudian, bandingkan titik demi titik.
y = -9E-08x2 + 0, 0014x + 0, 1505
R² = 0, 9999
Voltan osiloskop = -9E-08 * indeks2 + 0, 0014 * indeks + 0, 1505
Langkah 15: Menukar Voltan Osiloskop ke Nilai Setara untuk Dibandingkan dengan ADC
Mari manfaatkan ini untuk juga mengubah nilai voltan osiloskop menjadi nilai ADC yang setara.
Oleh kerana nilai tertinggi yang diperoleh dalam ADP ESP32 adalah 4095, yang bersamaan dengan bacaan 2.958V untuk indeks yang sama, kita dapat mengatakan bahawa:
Setiap volt dalam pengukuran osiloskop sama dengan kira-kira 1384.4 unit AD. Oleh itu, kita dapat menggandakan semua pengukuran osiloskop dengan nilai ini.
Langkah 16: Membandingkan Dua Tanjakan yang Diperolehi
Memvisualisasikan perbezaan yang diperoleh dalam dua bacaan.
Langkah 17: Kelakuan Perbezaan Membaca ADC (KESILAPAN)
Lengkung di bawah menunjukkan bagaimana perbezaan bacaan ADC berperanan sebagai fungsi pengukuran. Pengumpulan data ini akan membolehkan kita mencari fungsi pembetulan.
Untuk mencari keluk ini, kami hanya merancang perbezaan yang terdapat dalam setiap ukuran sebagai fungsi dari setiap kemungkinan kedudukan AD (0 hingga 4095).
Langkah 18: Tingkah Laku Perbezaan Membaca ADC - Mencari Fungsi Pembetulan
Kami dapat menentukan fungsi pembetulan di Excel dengan menambahkan Trend Line, sekarang pada tahap yang lebih tinggi, sehingga sesuai dengan data kami.
Langkah 19: Menggunakan Perisian Lain
Perisian lain yang menarik untuk menentukan keluk adalah PolySolve, yang boleh digunakan terus di pautan: https://arachnoid.com/polysolve/ atau dimuat turun sebagai aplikasi Java.
Ini membolehkan penerapan regresi polinomial tahap tinggi dan penyampaian fungsi yang diformat, serta fungsi lain.
Untuk menggunakannya, cukup masukkan data di kotak teks pertama. Data mesti mengikut susunan X, Y yang dipisahkan dengan koma, atau tab. Berhati-hati dalam menggunakan titik dengan betul sebagai titik perpuluhan.
Carta akan muncul di kotak seterusnya jika data yang dimasukkan diformat dengan betul.
Beginilah keluk ralat ADC kami.
Tetingkap ini akan menunjukkan hasil regresi, termasuk data kecukupan fungsi, yang pada gilirannya dapat memformat outputnya dengan beberapa cara: sebagai fungsi C / C ++, daftar pekali, fungsi yang ditulis dalam Java, dll.
Catatan: Perhatikan pemisah perpuluhan
Langkah 20: Pemalar dan Penyediaan ()
Saya menunjukkan di sini GPIO yang digunakan untuk tangkapan analog. Saya memulakan port bersiri, dan juga pin yang ditentukan untuk tangkapan analog.
const int pin_leitura = 36; // GPIO usado para captura analógica penyediaan tidak sah () {Serial.begin (1000000); // Iniciciando a porta serial somente para debug pinMode (pin_leitura, INPUT); // Pino utilizado para captura analógica}
Langkah 21: Gelung () dan Fungsi Pembetulan
Kami membuat penangkapan voltan yang disesuaikan, dan kami mencetak nilai dengan atau tanpa pembetulan yang betul.
gelung kekosongan () {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 (","); Bersiri.println (0); // cria uma linha para marcar o valor mínimo de 0}
Perhatikan pada baris 12 bahawa kita mempunyai pilihan untuk mencetak data dengan penambahan fungsi perbezaan f (analog_value).
Langkah 22: Menggunakan Fungsi Pembetulan PolySolve
Di sini, kami menggunakan fungsi PolySolve di dalam Arduino IDE.
/ * Mod: normal Polinomial darjah 6, 2365 x, y pasangan data Pekali korelasi (r ^ 2) = 9, 907187626418e-01 Ralat standard = 1, 353761109831e + 01 Bentuk output: Fungsi C / C ++: Hak Cipta © 2012, P. Lutus - https://www.arachnoid.com. Hak cipta terpelihara. * / 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); }
Perhatikan perubahan koma demi titik sebagai pemisah perpuluhan.
Langkah 23: Tangkap Dengan Pembetulan - Serial Plotter
Langkah 24: Kos Pengiraan
Untuk melakukan pengiraan polinomial, pemproses perlu menjalankan tugas ini. Ini boleh menyebabkan kelewatan pelaksanaan, bergantung pada kod sumber dan kekuatan pengkomputeran yang tersedia.
Di sini, kita melihat jadual keputusan ujian menggunakan polinomial pelbagai darjah. Perhatikan perbezaan antara waktu ketika fungsi pow () digunakan dan ketika tidak.
Langkah 25: Kod Ujian - Persediaan () dan Mula Gelung ()
Di sini, kami mempunyai kod yang digunakan dalam ujian kami.
batal persediaan () {Serial.begin (1000000); // Iniciando a porta serial somente para debug} gelung kosong () {float valor_analogico = 500.0; // um valor arbtrario float quantidade = 10000.0; // quantidade de chamadas float contador = 0.0; // contador de chamadas
Langkah 26: Ujian Kod - Gelung () dan Pemprosesan
Saya menggunakan fungsi mikro () untuk mendapatkan nilai dalam mikrodetik.
// ============= inicia o processo float agora = mikro (); // marca o instante inicial sementara (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 a função POW // f13_comPow (valor_analogico); // grau 13º COM a função POW contador ++; } agora = (mikro () - agora) / quantidade; // detmina o interalo que se passou para cada iteração // ============= finaliza o processo
Langkah 27: Kod Ujian - Gelung () - Hasil
Kami mencetak nilai yang dikembalikan dari fungsi kelas 13 dengan dan tanpa POW untuk perbandingan, serta selang pemprosesan.
// imprime o valor retornado da função de grau 13 com e sem POW untuk comparação Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM a função POW Serial.print ("-"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM a função POW Serial.print ("-"); // imprime o interalo do processamento Serial.println (agora, 6); }
Langkah 28: Kod Ujian - Fungsi yang Digunakan
Fungsi kosong (hanya dengan pemulangan) darjah 0 dan 1.
// FUNÇÃO VAZIAdouble v (double x) {} // FUNÇÃO SOMENTE COM RETORNO double r (double x) {pulangan x; } // FUNÇÃO DE GRAU 0 double f0 (double x) {return 2.202196968876e + 02; } // FUNÇÃO DE GRAU 1 double f1 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x; }
Fungsi Gred 2, 3, dan 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); }
Fungsi Gred 5 dan 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); }
Fungsi Gred 13 menggunakan 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); }
Fungsi Gred 13 tanpa menggunakan POW.
// FUNÇÃO DE GRAU SEM USAR O POW double 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 * 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; }
Langkah 29: Fail
Muat turun fail:
INO
Hamparan
Disyorkan:
Adakah Anda Tahu Bagaimana Rasa Tumbuhan Anda? [Partikel + Ubidots]: 6 Langkah
Adakah Anda Tahu Bagaimana Rasa Tumbuhan Anda? [Particle + Ubidots]: Tidak ada yang akan menggantikan jalan keluar dan menangani tanah untuk diri sendiri, tetapi teknologi hari ini memungkinkan untuk memantau tanah dan menjejaki parameter dari jarak jauh yang tidak dapat diukur oleh pancaindera manusia saya. Penyiasatan tanah seperti SHT10 kini sangat tepat dan menawarkan
Perkara Yang Anda Tidak Tahu Mengenai Tong Kitar Semula !!: 6 Langkah
Apa yang Anda Tidak Tahu Mengenai Tong Kitar Semula !!: Instruksional ini akan menunjukkan kepada anda beberapa perkara yang mungkin tidak anda ketahui mengenai tong kitar semulaSila melanggan saluran sayaTerima kasih
ESP32: Adakah Anda Tahu Apa itu DAC ?: 7 Langkah
ESP32: Adakah Anda Tahu Apa itu DAC?: Hari ini, kita akan membincangkan dua masalah. Yang pertama ialah DAC (Digital-to-Analog Converter). Saya menganggapnya penting, kerana melaluinya, misalnya, kita membuat output audio dalam ESP32. Isu kedua yang akan kita bahas hari ini adalah osil
Yang Anda Perlu Tahu Mengenai Relay: 6 Langkah (dengan Gambar)
Yang Anda Perlu Tahu Mengenai Relay: Apa itu Relay? Relay adalah suis yang dikendalikan secara elektrik. Banyak geganti menggunakan elektromagnet untuk mengendalikan suis secara mekanikal, tetapi prinsip operasi lain juga digunakan, seperti geganti keadaan pepejal. Relay digunakan jika perlu untuk mengawal
Yang Anda Perlu Tahu Mengenai LED: 7 Langkah (dengan Gambar)
Yang Anda Perlu Tahu Mengenai LED: Diod Pemancar Cahaya adalah peranti elektronik yang memancarkan cahaya semasa arus dilaluinya. LED adalah komponen elektronik yang kecil, sangat cekap, terang, murah. Orang berpendapat bahawa LED hanyalah komponen pemancar cahaya biasa & cenderung