Daftar Isi:
- Langkah 1: Pertimbangan Teknis
- Langkah 2: Komponen yang Diperlukan
- Langkah 3: Konstruksi
- Langkah 4: Kode
- Langkah 5: Penggunaan
Video: Arduino Waveform Generator: 5 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:55
Pembaruan Februari 2021: lihat versi baru dengan kecepatan pengambilan sampel 300x, berdasarkan Raspberry Pi Pico
Di lab, seseorang sering membutuhkan sinyal berulang dengan frekuensi, bentuk, dan amplitudo tertentu. Mungkin untuk menguji amplifier, memeriksa sirkuit, komponen, atau aktuator. Generator bentuk gelombang yang kuat tersedia secara komersial, tetapi relatif mudah untuk membuatnya sendiri yang berguna dengan Arduino Uno atau Arduino Nano, lihat misalnya:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Berikut adalah deskripsi satu lagi dengan fitur-fitur berikut:
* Bentuk gelombang yang akurat: keluaran 8-bit menggunakan R2R DAC, bentuk 256-sampel
* Cepat: Tingkat pengambilan sampel 381 kHz
* Tepat: 1 MHz langkah rentang frekuensi. Akurat seperti kristal Arduino.
* Pengoperasian yang mudah: bentuk gelombang dan frekuensi dapat diatur dengan encoder putar tunggal
* Berbagai amplitudo: milivolt hingga 20V
* 20 bentuk gelombang yang telah ditentukan sebelumnya. Langsung untuk menambahkan lebih banyak.
* Mudah dibuat: Arduino Uno atau Nano plus komponen standar
Langkah 1: Pertimbangan Teknis
Membuat sinyal analog
Salah satu kekurangan Arduino Uno dan Nano adalah tidak memiliki konverter digital-to-analog (DAC), sehingga tidak memungkinkan untuk mengeluarkan tegangan analog langsung pada pin. Salah satu solusinya adalah tangga R2R: 8 pin digital terhubung ke jaringan resistor sehingga 256 level output dapat dicapai. Melalui akses port langsung, Arduino dapat mengatur 8 pin secara bersamaan dengan satu perintah. Untuk rangkaian resistor dibutuhkan 9 buah resistor dengan nilai R dan 8 buah dengan nilai 2R. Saya menggunakan 10kOhm sebagai nilai untuk R, yang menjaga arus dari pin ke 0,5mA atau kurang. Saya kira R=1kOhm bisa bekerja dengan baik, karena Arduino dapat dengan mudah mengirimkan 5mA per pin, 40mA per port. Penting bahwa rasio antara resistor R dan 2R benar-benar 2. Itu paling mudah dicapai dengan menempatkan 2 resistor bernilai R secara seri, dengan total 25 resistor.
Akumulator fase
Menghasilkan bentuk gelombang kemudian turun untuk mengirim urutan angka 8-bit secara berulang ke pin Arduino. Bentuk gelombang disimpan dalam array 256 byte dan array ini diambil sampelnya dan dikirim ke pin. Frekuensi sinyal output ditentukan oleh seberapa cepat seseorang maju melalui array. Cara yang kuat, tepat, dan elegan untuk melakukannya adalah dengan akumulator fase: angka 32-bit bertambah secara berkala, dan kami menggunakan 8 bit paling signifikan sebagai indeks larik.
Pengambilan sampel cepat
Interupsi memungkinkan pengambilan sampel pada waktu yang ditentukan dengan baik, tetapi overhead interupsi membatasi frekuensi pengambilan sampel hingga ~ 100kHz. Sebuah loop tak terbatas untuk memperbarui fase, sampel bentuk gelombang dan mengatur pin membutuhkan 42 siklus clock, sehingga mencapai tingkat sampling 16MHz/42=381kHz. Memutar atau mendorong rotary encoder menyebabkan perubahan pin dan interupsi yang keluar dari loop untuk mengubah pengaturan (bentuk gelombang atau frekuensi). Pada tahap ini 256 angka dalam array dihitung ulang sehingga tidak ada perhitungan sebenarnya dari bentuk gelombang yang perlu dilakukan di loop utama. Frekuensi maksimum absolut yang dapat dihasilkan adalah 190kHz (setengah dari laju pengambilan sampel) tetapi kemudian hanya ada dua sampel per periode, sehingga tidak banyak mengontrol bentuknya. Antarmuka dengan demikian tidak memungkinkan untuk mengatur frekuensi di atas 100kHz. Pada 50kHz, ada 7-8 sampel per periode dan pada 1,5 kHz dan di bawah semua 256 angka yang disimpan dalam array, dapatkan sampel setiap periode. Untuk bentuk gelombang di mana sinyal berubah dengan lancar, misalnya gelombang sinus, melewatkan sampel tidak masalah. Tetapi untuk bentuk gelombang dengan paku sempit, misalnya gelombang persegi dengan siklus kerja kecil, ada bahaya bahwa untuk frekuensi di atas 1,5 kHz kehilangan satu sampel dapat mengakibatkan bentuk gelombang tidak berperilaku seperti yang diharapkan.
Akurasi frekuensi
Jumlah fase yang bertambah pada setiap sampel sebanding dengan frekuensi. Dengan demikian, frekuensi dapat diatur ke akurasi 381kHz/2^32=0,089mHz. Dalam praktiknya, akurasi seperti itu hampir tidak pernah diperlukan, sehingga antarmuka membatasi untuk mengatur frekuensi dalam langkah 1MHz. Ketepatan mutlak frekuensi ditentukan oleh ketepatan frekuensi clock Arduino. Ini tergantung pada jenis Arduino tetapi sebagian besar menentukan frekuensi 16.000MHz, jadi presisi ~10^-4. Kode memungkinkan untuk memodifikasi rasio frekuensi dan kenaikan fase untuk mengoreksi penyimpangan kecil dari asumsi 16MHz.
Penyangga dan amplifikasi
Jaringan resistor memiliki impedansi keluaran yang tinggi, sehingga tegangan keluarannya cepat turun jika ada beban. Itu bisa diselesaikan dengan buffering atau penguatan output. Di sini, buffering dan amplifikasi dilakukan dengan opamp. Saya menggunakan LM358 karena saya punya beberapa. Ini adalah opamp lambat (laju perubahan tegangan 0,5V per mikrodetik) sehingga pada frekuensi tinggi dan amplitudo tinggi sinyal terdistorsi. Hal yang baik adalah ia dapat menangani tegangan yang sangat dekat dengan 0V. Namun tegangan keluaran dibatasi hingga ~2V di bawah rel, jadi menggunakan daya +5V membatasi tegangan keluaran menjadi 3V. Modul step-up ringkas dan murah. Memberi makan +20V ke opamp, dapat menghasilkan sinyal dengan tegangan hingga 18V. (NB, skema mengatakan LTC3105 karena itu adalah satu-satunya langkah yang saya temukan di Fritzing. Sebenarnya saya menggunakan modul MT3608, lihat gambar di langkah selanjutnya). Saya memilih untuk menerapkan atenuasi variabel ke output dari R2R DAC kemudian menggunakan salah satu opamps untuk buffer sinyal tanpa amplifikasi dan yang lainnya untuk memperkuat oleh 5,7, sehingga sinyal dapat mencapai output maksimum sekitar 20V. Arus keluaran agak terbatas, ~10mA, jadi penguat yang lebih kuat mungkin diperlukan jika sinyalnya untuk menggerakkan speaker besar atau elektromagnet.
Langkah 2: Komponen yang Diperlukan
Untuk generator bentuk gelombang inti
Arduino Uno atau Nano
Layar LCD 16x2 + pemangkas 20kOhm dan resistor seri 100Ohm untuk lampu latar
Encoder putar 5-pin (dengan tombol tekan terintegrasi)
25 resistor 10kOhm
Untuk penyangga/penguat
LM358 atau opamp ganda lainnya
modul step-up berdasarkan MT3608
resistor variabel 50kOhm
resistor 10kOhm
Resistor 47kOhm
1muF kapasitor
Langkah 3: Konstruksi
Saya menyolder semuanya pada papan prototipe 7x9cm, seperti yang ditunjukkan pada gambar. Karena agak berantakan dengan semua kabel, saya mencoba mewarnai kabel yang membawa tegangan positif merah dan yang membawa ground hitam.
Encoder yang saya gunakan memiliki 5 pin, 3 di satu sisi, 2 di sisi lain. Sisi dengan 3 pin adalah encoder yang sebenarnya, sisi dengan 2 pin adalah tombol tekan terintegrasi. Di sisi 3-pin, pin pusat harus terhubung ke ground, dua pin lainnya ke D10 dan D11. Di sisi 2-pin, satu pin harus dihubungkan ke ground dan yang lainnya ke D12.
Ini adalah hal paling jelek yang pernah saya buat tetapi berhasil. Akan menyenangkan untuk dimasukkan ke dalam selungkup, tetapi untuk saat ini pekerjaan ekstra dan biaya tidak benar-benar membenarkannya. Nano dan layar terpasang dengan pin-header. Saya tidak akan melakukannya lagi jika saya akan membangun yang baru. Saya tidak memasang konektor di papan untuk mengambil sinyal. Sebagai gantinya, saya mengambilnya dengan timah buaya dari potongan kawat tembaga yang menonjol, diberi label sebagai berikut:
R - sinyal mentah dari R2R DAC
B - sinyal buffer
A - sinyal yang diperkuat
T - sinyal timer dari pin 9
G - tanah
+ - tegangan 'tinggi' positif dari modul step-up
Langkah 4: Kode
Kode, sketsa Arduino, dilampirkan dan harus diunggah ke Arduino.
20 bentuk gelombang telah ditentukan sebelumnya. Seharusnya mudah untuk menambahkan gelombang lainnya. Perhatikan bahwa gelombang acak mengisi larik 256-nilai dengan nilai acak, tetapi pola yang sama berulang setiap periode. Sinyal acak yang sebenarnya terdengar seperti derau, tetapi bentuk gelombang ini lebih terdengar seperti peluit.
Kode menetapkan sinyal 1kHz pada pin D9 dengan TIMER1. Ini berguna untuk memeriksa waktu sinyal analog. Begitulah cara saya mengetahui bahwa jumlah siklus clock adalah 42: Jika saya mengasumsikan 41 atau 43, dan menghasilkan sinyal 1kHz, frekuensinya jelas berbeda dari sinyal pada pin D9. Dengan nilai 42 mereka sangat cocok.
Biasanya, Arduino menginterupsi setiap milidetik untuk melacak waktu dengan fungsi milis(). Ini akan mengganggu pembangkitan sinyal yang akurat, sehingga interupsi tertentu dinonaktifkan.
Kompilator mengatakan: "Sketsa menggunakan 7254 byte (23%) ruang penyimpanan program. Maksimum adalah 30720 byte. Variabel global menggunakan 483 byte (23%) memori dinamis, menyisakan 1565 byte untuk variabel lokal. Maksimum 2048 byte." Jadi ada banyak ruang untuk kode yang lebih canggih. Hati-hati bahwa Anda mungkin harus memilih "ATmega328P (bootloader lama)" untuk berhasil mengunggah ke Nano.
Langkah 5: Penggunaan
Generator sinyal dapat diaktifkan hanya melalui kabel mini-USB Arduino Nano. Ini paling baik dilakukan dengan bank daya, sehingga tidak ada loop tanah yang tidak disengaja dengan peralatan yang dapat dihubungkan dengannya.
Ketika dinyalakan akan menghasilkan gelombang sinus 100Hz. Dengan memutar kenop, salah satu dari 20 jenis gelombang lainnya dapat dipilih. Dengan memutar sambil didorong, kursor dapat diatur ke salah satu digit frekuensi, yang kemudian dapat diubah ke nilai yang diinginkan.
Amplitudo dapat diatur dengan potensiometer dan sinyal buffer atau sinyal yang diperkuat dapat digunakan.
Sangat membantu untuk menggunakan osiloskop untuk memeriksa amplitudo sinyal, khususnya ketika sinyal memasok arus ke perangkat lain. Jika terlalu banyak arus yang ditarik, sinyal akan terputus dan sinyal sangat terdistorsi
Untuk frekuensi yang sangat rendah, output dapat divisualisasikan dengan LED secara seri dengan resistor 10kOhm. Frekuensi audio dapat didengar dengan speaker. Pastikan untuk mengatur sinyal sangat kecil ~ 0,5V, jika tidak, arus menjadi terlalu tinggi dan sinyal mulai terputus.
Direkomendasikan:
Generator Fungsi DIY Dengan STC MCU Dengan Mudah: 7 Langkah (dengan Gambar)
Generator Fungsi DIY Dengan STC MCU Dengan Mudah: Ini adalah Generator Fungsi yang dibuat dengan STC MCU. Hanya membutuhkan beberapa komponen dan rangkaiannya sederhana. Spesifikasi Keluaran: Frekuensi Gelombang Persegi Saluran Tunggal: 1Hz~2MHz Frekuensi Gelombang Sinus: 1Hz~10kHz Amplitudo: VCC, sekitar 5V Kemampuan beban
Generator Lembar Laser Interaktif Dengan Arduino: 11 Langkah (dengan Gambar)
Generator Lembar Laser Interaktif Dengan Arduino: Laser dapat digunakan untuk membuat efek visual yang luar biasa. Dalam proyek ini, saya membuat jenis layar laser baru yang interaktif dan memutar musik. Perangkat memutar dua laser untuk membentuk dua lembar cahaya seperti pusaran. Saya menyertakan sensor jarak
Generator: Generator Gelisah Spinner 3 dalam 1: 3 Langkah
Generator: Generator Gelisah Spinner 3 in 1: generator pemintal gelisah 3 in 1 - sekarang Anda dapat mengonfigurasi generator pemintal gelisah Anda (tiga pilihan) generator mikro menggunakan 3 bola neodymium dan 3 cakram neodymium (led dan besi koil kecil lebih sedikit) Temukan kami DI INSTAGRAM dan lihat listrik sederhana
Generator Musik Berbasis Cuaca (Generator Midi Berbasis ESP8266): 4 Langkah (dengan Gambar)
Weather Based Music Generator (ESP8266 Based Midi Generator): Hai, hari ini saya akan menjelaskan cara membuat generator Musik berbasis Cuaca kecil Anda sendiri. Ini didasarkan pada ESP8266, yang mirip dengan Arduino, dan merespons suhu, hujan dan intensitas ringan. Jangan berharap untuk membuat seluruh lagu atau program akord
Ukuran DIY & Bangun Generator Cadangan Daya Baterai dengan Baterai Siklus Dalam 12V: 5 Langkah (dengan Gambar)
Ukuran DIY & Bangun Generator Cadangan Daya Baterai dengan Baterai Siklus Dalam 12V: ***CATATAN: Berhati-hatilah saat bekerja dengan baterai dan listrik. Jangan hubung singkat baterai. Gunakan alat yang terisolasi. Patuhi semua aturan keselamatan saat bekerja dengan listrik.*** Bersiaplah sebelum listrik padam lain kali dengan daya baterai siaga