Isi kandungan:

Penjana Bentuk Arduino: 5 Langkah (dengan Gambar)
Penjana Bentuk Arduino: 5 Langkah (dengan Gambar)

Video: Penjana Bentuk Arduino: 5 Langkah (dengan Gambar)

Video: Penjana Bentuk Arduino: 5 Langkah (dengan Gambar)
Video: FENOMENA ANEH DI MASJIDILHARAM 2024, November
Anonim
Penjana Bentuk Arduino
Penjana Bentuk Arduino

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

Pembinaan
Pembinaan
Pembinaan
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: