Isi kandungan:
- Langkah 1: Pertimbangan Teknikal
- Langkah 2: Komponen yang Diperlukan
- Langkah 3: Pembinaan
- Langkah 4: Kodnya
- Langkah 5: Penggunaan
Video: Penjana Bentuk Arduino: 5 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
Kemas kini Februari 2021: lihat versi baru dengan 300x kadar pensampelan, berdasarkan Raspberry Pi Pico
Di makmal, seseorang sering memerlukan isyarat berulang frekuensi, bentuk dan amplitud tertentu. Ini mungkin untuk menguji penguat, memeriksa litar, komponen atau penggerak. Penjana bentuk gelombang yang kuat boleh didapati secara komersial, tetapi lebih mudah untuk membuat yang berguna sendiri dengan Arduino Uno atau Arduino Nano, lihat sebagai contoh:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Berikut adalah keterangan yang lain dengan ciri-ciri berikut:
* Bentuk gelombang yang tepat: Output 8-bit menggunakan R2R DAC, bentuk sampel 256
* Cepat: kadar pensampelan 381 kHz
* Tepat: Julat frekuensi langkah 1mHz. Setepat kristal Arduino.
* Pengoperasian yang mudah: bentuk gelombang dan frekuensi yang dapat diselesaikan dengan pengekod putar tunggal
* Julat amplitud yang luas: milivolt hingga 20V
* 20 bentuk gelombang yang telah ditentukan. Langsung untuk menambah lagi.
* Mudah dibuat: Arduino Uno atau Nano plus komponen standard
Langkah 1: Pertimbangan Teknikal
Membuat isyarat analog
Salah satu kekurangan Arduino Uno dan Nano adalah bahawa ia tidak mempunyai penukar digital-ke-analog (DAC), jadi tidak mungkin menjadikannya mengeluarkan voltan analog secara langsung pada pin. Salah satu penyelesaiannya adalah tangga R2R: 8 pin digital disambungkan ke rangkaian perintang sehingga 256 tahap output dapat dicapai. Melalui akses port langsung, Arduino dapat menetapkan 8 pin serentak dengan satu perintah. Untuk rangkaian perintang, 9 perintang dengan nilai R diperlukan dan 8 dengan nilai 2R. Saya menggunakan 10kOhm sebagai nilai untuk R, yang mengekalkan arus dari pin hingga 0.5mA atau kurang. Saya rasa R = 1kOhm dapat berfungsi juga, kerana Arduino dapat dengan mudah memberikan 5mA per pin, 40mA per port. Adalah penting bahawa nisbah antara perintang R dan 2R benar-benar 2. Itu paling mudah dicapai dengan meletakkan 2 perintang nilai R secara bersiri, untuk sejumlah 25 perintang.
Penumpuk fasa
Menjana bentuk gelombang kemudian turun secara berulang-ulang menghantar urutan nombor 8-bit ke pin Arduino. Bentuk gelombang disimpan dalam susunan 256 bait dan susunan ini diambil sampel dan dihantar ke pin. Kekerapan isyarat output ditentukan oleh seberapa pantas seseorang maju melalui array. Kaedah yang mantap, tepat dan elegan untuk melakukannya adalah dengan penumpuk fasa: nombor 32-bit bertambah pada selang masa yang tetap, dan kami menggunakan 8 bit paling penting sebagai indeks array.
Persampelan cepat
Gangguan memungkinkan untuk mengambil sampel pada masa yang ditentukan dengan baik, tetapi overhead gangguan membatasi frekuensi pensampelan hingga ~ 100kHz. Gelung tak terhingga untuk mengemas kini fasa, mengambil sampel bentuk gelombang dan menetapkan pin memerlukan 42 kitaran jam, sehingga mencapai kadar persampelan 16MHz / 42 = 381kHz. Memutar atau menolak pengekod putar menyebabkan perubahan pin dan gangguan yang keluar dari gelung untuk mengubah tetapan (bentuk gelombang atau frekuensi). Pada tahap ini 256 nombor dalam array dikira semula sehingga tidak ada pengiraan sebenar bentuk gelombang yang perlu dilakukan dalam gelung utama. Frekuensi maksimum mutlak yang dapat dihasilkan adalah 190kHz (separuh dari kadar persampelan) tetapi kemudian hanya ada dua sampel setiap tempoh, jadi tidak banyak kawalan bentuknya. Oleh itu, antara muka tidak memungkinkan untuk menetapkan frekuensi melebihi 100kHz. Pada 50kHz, terdapat 7-8 sampel setiap tempoh dan pada 1,5 kHz dan di bawah semua 256 nombor yang disimpan dalam array diambil sampel setiap tempoh. Untuk bentuk gelombang di mana isyarat berubah dengan lancar, misalnya gelombang sinus, melangkau sampel tidak ada masalah. Tetapi untuk bentuk gelombang dengan lonjakan sempit, misalnya gelombang persegi dengan putaran tugas kecil, ada bahaya bahawa untuk frekuensi di atas 1.5 kHz hilang satu sampel dapat mengakibatkan bentuk gelombang tidak berperilaku seperti yang diharapkan
Ketepatan kekerapan
Bilangan fasa meningkat pada setiap sampel berkadar dengan frekuensi. Oleh itu, frekuensi boleh ditetapkan ke ketepatan 381kHz / 2 ^ 32 = 0.089mHz. Dalam praktiknya ketepatan seperti itu hampir tidak diperlukan, jadi antara muka had untuk menetapkan frekuensi dalam langkah 1mHz. Ketepatan mutlak frekuensi ditentukan oleh ketepatan frekuensi jam Arduino. Ini bergantung pada jenis Arduino tetapi kebanyakan menentukan frekuensi 16.000MHz, jadi ketepatan ~ 10 ^ -4. Kod ini memungkinkan untuk mengubah nisbah frekuensi dan kenaikan fasa untuk membetulkan penyimpangan kecil dari asumsi 16MHz.
Penyangga dan pengukuhan
Rangkaian perintang mempunyai impedans keluaran yang tinggi, jadi voltan keluarannya cepat turun jika beban terpasang. Itu dapat diselesaikan dengan buffering atau memperkuat output. Di sini, penyanggaan dan penguatan dilakukan dengan opamp. Saya menggunakan LM358 kerana saya mempunyai beberapa. Ini adalah opamp perlahan (slew rate 0.5V per mikrodetik) sehingga pada frekuensi tinggi dan amplitud tinggi isyarat akan terdistorsi. Perkara yang baik ialah ia dapat menangani voltan yang hampir dengan 0V. Voltan keluaran bagaimanapun terhad kepada ~ 2V di bawah rel, jadi menggunakan kuasa + 5V menghadkan voltan keluaran hingga 3V. Modul step-up ringkas dan murah. Memberi makan + 20V ke opamp, ia dapat menghasilkan isyarat dengan voltan hingga 18V. (NB, skema mengatakan LTC3105 kerana itu satu-satunya langkah peningkatan yang saya dapati di Fritzing. Sebenarnya saya menggunakan modul MT3608, lihat gambar pada langkah seterusnya). Saya memilih untuk menerapkan pelemahan pemboleh ubah pada output D2 R2R kemudian menggunakan salah satu opamp untuk menyangga isyarat tanpa penguat dan yang lain untuk memperkuat sebanyak 5.7, sehingga isyarat dapat mencapai output maksimum sekitar 20V. Arus keluaran agak terhad, ~ 10mA, jadi penguat yang lebih kuat mungkin diperlukan jika isyarat untuk menggerakkan pembesar suara atau elektromagnet besar.
Langkah 2: Komponen yang Diperlukan
Untuk penjana bentuk gelombang teras
Arduino Uno atau Nano
Paparan LCD 16x2 + perapi 20kOhm dan perintang 100Ohm untuk lampu latar
Pengekod putar 5-pin (dengan butang bersepadu)
25 perintang 10kOhm
Untuk penyangga / penguat
LM358 atau dual opamp lain
modul peningkatan berdasarkan MT3608
Perintang pemboleh ubah 50kOhm
Perintang 10kOhm
Perintang 47kOhm
Kapasitor 1muF
Langkah 3: Pembinaan
Saya menyolder semuanya pada papan prototaip 7x9cm, seperti yang ditunjukkan dalam gambar. Oleh kerana ia agak tidak kemas dengan semua wayar, saya cuba mewarnai plumbum yang membawa voltan positif merah dan yang membawa tanah hitam.
Pengekod yang saya gunakan mempunyai 5 pin, 3 di satu sisi, 2 di sisi lain. Sisi dengan 3 pin adalah pengekod sebenar, sisi dengan 2 pin adalah butang bersepadu. Di sisi 3-pin, pin tengah harus disambungkan ke tanah, dua pin lain ke D10 dan D11. Di sisi 2-pin, satu pin harus dihubungkan ke tanah dan yang lain ke D12.
Ini adalah perkara paling buruk yang pernah saya buat tetapi berjaya. Senang dimasukkan ke dalam kandang, tetapi buat masa ini kerja dan kos tambahan tidak benar-benar membenarkannya. Nano dan paparan dilampirkan dengan header pin. Saya tidak akan melakukannya lagi jika saya membina yang baru. Saya tidak meletakkan penyambung di papan untuk mengambil isyarat. Sebagai gantinya, saya mengambilnya dengan plumbum buaya dari kepingan dawai tembaga yang menonjol, berlabel seperti berikut:
R - isyarat mentah dari R2R DAC
B - isyarat yang disangga
A - isyarat yang diperkuat
Isyarat pemasa T dari pin 9
G - tanah
+ - voltan 'tinggi' positif dari modul peningkatan
Langkah 4: Kodnya
Kodnya, lakaran Arduino, dilampirkan dan harus dimuat naik ke Arduino.
20 bentuk gelombang telah ditentukan sebelumnya. Ia harus terus terang untuk menambahkan gelombang lain. Perhatikan bahawa gelombang rawak mengisi susunan nilai 256 dengan nilai rawak, tetapi corak yang sama berulang setiap tempoh. Isyarat rawak yang betul terdengar seperti bunyi bising, tetapi bentuk gelombang ini lebih kurang menyerupai wisel.
Kod menetapkan isyarat 1kHz pada pin D9 dengan TIMER1. Ini berguna untuk memeriksa masa isyarat analog. Begitulah cara saya mengetahui bahawa jumlah kitaran jam adalah 42: Sekiranya saya menganggap 41 atau 43, dan menghasilkan isyarat 1kHz, ia jelas mempunyai frekuensi yang berbeza dari isyarat pada pin D9. Dengan nilai 42 mereka sepadan dengan sempurna.
Biasanya, Arduino mengganggu setiap milisaat untuk mengesan masa dengan fungsi milis (). Ini akan mengganggu penghasilan isyarat yang tepat, sehingga gangguan tertentu dilumpuhkan.
Penyusun mengatakan: "Sketsa menggunakan 7254 bait (23%) ruang penyimpanan program. Maksimum adalah 30720 bait. Pemboleh ubah global menggunakan 483 bait (23%) memori dinamik, meninggalkan 1565 bait untuk pemboleh ubah tempatan. Maksimum ialah 2048 bait." Oleh itu, terdapat banyak ruang untuk kod yang lebih canggih. Hati-hati bahawa anda mungkin harus memilih "ATmega328P (pemuat but lama)" untuk berjaya memuat naik ke Nano.
Langkah 5: Penggunaan
Penjana isyarat dapat dihidupkan melalui kabel mini USB dari Arduino Nano. Ia paling baik dilakukan dengan power bank, sehingga tidak ada gelung ground yang tidak disengaja dengan alat yang mungkin disambungkannya.
Apabila dihidupkannya akan menghasilkan gelombang sinus 100Hz. Dengan memutar tombol, salah satu daripada 20 jenis gelombang lain boleh dipilih. Dengan memutar sambil didorong, kursor dapat diatur ke salah satu digit frekuensi, yang kemudian dapat diubah menjadi nilai yang diinginkan.
Amplitudo dapat diatur dengan potensiometer dan isyarat buffer atau amplified dapat digunakan.
Sangat berguna untuk menggunakan osiloskop untuk memeriksa amplitud isyarat, terutamanya apabila isyarat membekalkan arus ke peranti lain. Sekiranya arus terlalu banyak diambil, isyarat akan klip dan isyaratnya banyak diputarbelitkan
Untuk frekuensi yang sangat rendah, output dapat dilihat dengan LED bersiri dengan perintang 10kOhm. Kekerapan audio dapat didengar dengan pembesar suara. Pastikan untuk menetapkan isyarat yang sangat kecil ~ 0.5V, jika tidak, arus akan terlalu tinggi dan isyarat mula klip.
Disyorkan:
Penjana Fungsi DIY Dengan STC MCU dengan Mudah: 7 Langkah (dengan Gambar)
DIY Function Generator Dengan STC MCU Dengan Mudah: Ini adalah Function Generator yang dibuat dengan STC MCU. Hanya memerlukan beberapa komponen dan litarnya mudah. Keluaran Spesifikasi: Frekuensi Bentuk Gelombang Persegi Saluran Tunggal: 1Hz ~ 2MHz Frekuensi Bentuk Gelombang Sinus: 1Hz ~ 10kHz Amplitudo: VCC, kira-kira 5V Beban
Fungsi DIY / Penjana Bentuk Gelombang: 6 Langkah (dengan Gambar)
DIY Function / Waveform Generator: Dalam projek ini kita akan melihat ringkas fungsi komersial / gelombang bentuk generator untuk menentukan ciri apa yang penting untuk versi DIY. Selepas itu saya akan menunjukkan kepada anda cara membuat penjana fungsi ringkas, analog dan digit
Penjana Lembaran Laser Interaktif Dengan Arduino: 11 Langkah (dengan Gambar)
Penjana Lembaran Laser Interaktif Dengan Arduino: Laser boleh digunakan untuk menghasilkan kesan visual yang luar biasa. Dalam projek ini, saya membina paparan laser jenis baru yang interaktif dan memainkan muzik. Peranti memutar dua laser untuk membentuk dua kepingan cahaya seperti pusaran. Saya memasukkan sensor jarak
Penjana Bentuk Gelombang Kos Rendah (0 - 20MHz): 20 Langkah (dengan Gambar)
Penjana Bentuk Gelombang Kos Rendah (0 - 20MHz): ABSTRAK Projek ini berasal dari keperluan untuk mendapatkan penjana gelombang dengan lebar jalur melebihi 10 Mhz dan distorsi harmonik di bawah 1%, semuanya dengan harga kos rendah. Dokumen ini menerangkan reka bentuk penjana gelombang dengan lebar jalur
Buat PCB Hobi Dengan Alat CAD Profesional dengan Mengubah " Peraturan Reka Bentuk ": 15 Langkah (dengan Gambar)
Buat PCB Hobi Dengan Alat CAD Profesional dengan Mengubah " Peraturan Reka Bentuk ": Senang ada beberapa alat papan litar profesional yang tersedia untuk para penggemar. Berikut adalah beberapa petua untuk menggunakannya papan reka bentuk ito yang tidak memerlukan perancang profesional untuk membuatnya