Tentang proyek ini
Ini adalah generator gelombang persegi sederhana yang pada dasarnya menggunakan perpustakaan TimerOne yang memungkinkan Anda menghasilkan sinyal PWM pada pin 9 dalam kisaran dari sekitar 5Hz hingga 1 Mhz, dan Anda dapat menyesuaikan siklus kerja dari 0 hingga 100%.
Perangkat sangat mudah dibuat dan hanya terdiri dari beberapa komponen:
- Mikrokontroler Arduino Nano
- Layar LCD
- Tiga resistor tarik
- dan tiga tombol tekan
Generator pulsa memiliki kemampuan untuk mengatur periode pengulangan pulsa menggunakan tombol yang terhubung ke input digital 6 dan 7 dari Arduino. 13 pin input memungkinkan Anda untuk menyesuaikan siklus kerja. Pembacaan durasi dan siklus kerja ditampilkan pada baris pertama indikator LCD 16 × 2, dan pembacaan frekuensi ditampilkan pada baris kedua. Langkah minimal untuk mengatur periode pengulangan pulsa adalah 1 s, sehingga frekuensi akan berubah secara diskrit, misalnya, 1 s adalah 1 MHz, 2 s adalah 500 kHz, 3 s adalah 333.333 Hz, dan seterusnya, dan seiring dengan penurunan frekuensi , kelancaran penyesuaiannya meningkat. Ini cukup tidak praktis pada frekuensi yang lebih tinggi tetapi itu adalah harga kesederhanaan. Dalam salah satu video saya sebelumnya, saya telah menjelaskan konstruksi perangkat serupa tetapi dengan bantuan chip DDS khusus yang tidak memiliki kekurangan ini dan memiliki jangkauan yang jauh lebih besar, tetapi lebih kompleks untuk dibuat
Untuk memvisualisasikan sinyal keluaran saya menggunakan osiloskop saluran tunggal kecil. Terakhir, perangkat dipasang dalam kotak yang sesuai, dan merupakan alat lain yang berguna di laboratorium elektronik.
Kode
Kode ArduinoC/C++
#include #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// RS,E,D4,D5,D6,D7unsigned long t=1000 ,f,k=512;// default 1000 s (1000 Hz), berkelok-kelok, byte pulsa k1,kn,kn1,kn2;int drive,drive0;void setup(){ lcd.begin(16, 2);// LCD 16X2 pinMode (9, OUTPUT); pinMode(6,INPUT);// tombol pada input 6 pinMode(7,INPUT);// tombol pada input 7 pinMode(13,INPUT);// tombol pada input 13}void loop(){ Timer1.initialize(t ); // periode Timer1.pwm(9, k); // k - mengisi faktor 0-1023. kn=digitalRead(6);// input tombol 6 (- periode pulsa) kn1=digitalRead(7);// input tombol 7 (+ periode pulsa) kn2=digitalRead(13);// input tombol 13 (+ isi lingkaran faktor) if(kn==HIGH){ // mengurangi periode drive++; if(berkendara<30){ t=t-1; } // jika tombol ditahan lama, koreksi pulsa else if(drive>30 &&drive<60 ){ t=t-10; } else if(drive>=60 &&drive<100){ t=t-100; } else if(drive>=100){ t=t-1000; } } lain{ drive=0; } if(kn1==HIGH){// menambahkan periode drive0++; if(drive0<30){ t=t+1; // jika tombol ditahan lama, koreksi } else if(drive0>30 &&drive0<60 ){ t=t+10; } else if(drive0>=60 &&drive0<100){ t=t+100; } else if(drive0>=100){ t=t+1000; } } lain{ drive0=0; } if(t==0 || t>300000){ // membatasi durasi pulsa ke minimum, jika t=1; } if(t>200000 &&t<300000){ // membatasi durasi pulsa ke t=2000000; } f=1000000/t; // hitung frekuensi k1=k*100/1024; // hitung% faktor pengisian if(kn2==HIGH){// tombol untuk menyesuaikan faktor pengisian (dalam lingkaran dari k=k+16;// langkah 16 dari 1024 (Anda dapat melakukan 8 untuk penyesuaian yang lebih halus) } if(k==1024){ k=0; }// menampilkan informasi pada indikator lcd.setCursor(0,0); lcd.print("T="); lcd.print(t); lcd.print( " kami"); lcd.setCursor(12,0); lcd.print(k1); lcd.print(" %"); lcd.setCursor(0,1); lcd.print("F="); lcd .print(f); lcd.print(" Hz"); delay(300); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print( " ");}
Skema