Isi kandungan:

Adakah Anda Tahu Mengenai Penyesuaian AD32 ESP32: 29 Langkah
Adakah Anda Tahu Mengenai Penyesuaian AD32 ESP32: 29 Langkah

Video: Adakah Anda Tahu Mengenai Penyesuaian AD32 ESP32: 29 Langkah

Video: Adakah Anda Tahu Mengenai Penyesuaian AD32 ESP32: 29 Langkah
Video: Cara Cek Hp Samsung A32 5G Asli Atau Palsu 2024, November
Anonim
Image
Image
Sumber Yang Digunakan
Sumber Yang Digunakan

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

ESP32 ADC
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

Litar Yang Digunakan
Litar Yang 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

Tanda Digunakan
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

Data Diperolehi oleh Osiloskop
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)

Data yang Diperolehi oleh Osiloskop (Fail csv di Excel)
Data yang Diperolehi oleh Osiloskop (Fail csv di Excel)

Kami mempunyai contoh di sini.

Langkah 8: Data yang diperoleh oleh ADC

Data Diperolehi oleh ADC
Data Diperolehi 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

Data Diperolehi oleh ADC - Excel
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

Perbandingan Tanjakan Pendakian
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

Menyamakan Bilangan Sampel
Menyamakan Bilangan Sampel
Menyamakan Bilangan Sampel
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

Mengisi Jurang - Garis Trend
Mengisi Jurang - Garis Trend
Mengisi Jurang - Garis Trend
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

Mengisi Jurang - Keluk Polinomial Gred 2
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

Menukar Voltan Osiloskop ke Nilai Setara untuk Dibandingkan Dengan ADC
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

Membandingkan Dua Tanjakan yang Diperolehi
Membandingkan Dua Tanjakan yang Diperolehi

Memvisualisasikan perbezaan yang diperoleh dalam dua bacaan.

Langkah 17: Kelakuan Perbezaan Membaca ADC (KESILAPAN)

Kelakuan Perbezaan Membaca ADC (KESALAHAN)
Kelakuan Perbezaan Membaca ADC (KESALAHAN)

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

Tingkah Laku Perbezaan Bacaan ADC - Mencari Fungsi Pembetulan
Tingkah Laku Perbezaan Bacaan 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

Menggunakan Perisian Lain
Menggunakan Perisian Lain
Menggunakan Perisian Lain
Menggunakan Perisian Lain
Menggunakan Perisian Lain
Menggunakan Perisian Lain
Menggunakan Perisian Lain
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

Tangkap Dengan Pembetulan - Plotter Serial
Tangkap Dengan Pembetulan - Plotter Serial

Langkah 24: Kos Pengiraan

Kos Pengiraan
Kos Pengiraan
Kos Pengiraan
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:

PDF

INO

Hamparan

Disyorkan: