Daftar Isi:

Arduino Sinewave untuk Inverter: 4 Langkah
Arduino Sinewave untuk Inverter: 4 Langkah

Video: Arduino Sinewave untuk Inverter: 4 Langkah

Video: Arduino Sinewave untuk Inverter: 4 Langkah
Video: Arduino Uno 12V to 220 V Inverter Full Bridge MOSFET | Pure Sine Wave 2024, November
Anonim
Arduino Sinewave untuk Inverter
Arduino Sinewave untuk Inverter

Dalam proyek ini saya telah menghasilkan sinyal SPWM (sine wave pulse wide modulated) dari dua output digital arduino pwm.

Karena untuk membuat program seperti itu saya harus berbicara tentang banyak fungsi dan sifat lain dari proyek arduino lengkap termasuk gambar osiloskop dan untuk frekuensi yang berbeda, silakan kunjungi situs web saya:

zona proyek

Langkah 1: Menghasilkan Sinyal Pwm untuk 50Hz

Untuk menghasilkan sinyal 50Hz pada frekuensi yang lebih tinggi, perlu dilakukan beberapa perhitungan. Frekuensi dari arduino bisa pada 8MHz, tetapi kami menginginkan sinyal dengan siklus tugas variabel.

Untuk memahami jenis-jenis siklus tugas variabel arduino Anda dapat membaca 3 bagian ini dari posting yang sama 1, 2 dan 3.

Mari kita asumsikan frekuensi kita adalah 50Hz yang berarti periode waktunya adalah 20ms. Jadi 10 ms adalah periode setengah siklus. Dalam 10ms itu kita perlu memiliki banyak pulsa dengan siklus tugas yang berbeda dimulai dengan siklus tugas kecil, di tengah sinyal kita memiliki siklus tugas maksimum dan selesai juga dengan siklus tugas kecil. Untuk menghasilkan gelombang sinus kita akan menggunakan dua pin satu untuk setengah siklus positif dan satu untuk setengah siklus negatif. Pada postingan kami ini kami menggunakan pin 5 dan 6 yang artinya Timer 0.

Untuk sinyal halus kami memilih fase yang benar pwm pada frekuensi 31372 Hz-lihat posting sebelumnya. Salah satu masalah terbesar adalah bagaimana kita menghitung siklus kerja yang diperlukan untuk setiap pulsa. Jadi, karena frekuensi kita adalah f=31372Hz, periode untuk setiap pulsa adalah T=1/31372=31,8 us, jadi jumlah pulsa untuk setengah siklus adalah N=10ms/31.8us=314 pulsa. Sekarang untuk menghitung siklus kerja untuk setiap pulsa kita memiliki y = sinx, tetapi dalam persamaan ini kita membutuhkan derajat sehingga setengah siklus memiliki 180 derajat untuk 314 pulsa. Untuk setiap pulsa kita memiliki 180/314=0.57deg/pulsa. Itu berarti untuk setiap pulsa kita bergerak maju dengan 0.57deg.

y adalah siklus kerja dan x nilai posisi dalam setengah siklus kerja. mula-mula x adalah 0, setelah x=0,57, x=1,14 dan seterusnya sampai x= 180.

jika kita menghitung semua dari 314 nilai, kita mendapatkan elemen array 314 (ketik "int" untuk dihitung lebih mudah oleh arduino).

Array tersebut adalah:

int sinPWM={1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

Anda dapat melihat bahwa seperti gelombang sinus siklus tugas terendah pada elemen pertama dan terakhir dan tertinggi di tengah.

Langkah 2: Program Arduino untuk Siklus Tugas Variabel

Program Arduino untuk Siklus Tugas Variabel
Program Arduino untuk Siklus Tugas Variabel

Pada gambar di atas kami memiliki sinyal siklus tugas variabel dengan nilai dari array.

Tapi bagaimana membuat sinyal seperti itu??

bagian dari program di bawah ini menggunakan interupsi untuk mengubah nilai siklus tugas

sei();// aktifkan interupsi

}

ISR(TIMER1_COMPA_vect){// interupsi saat timer 1 cocok dengan nilai OCR1A

if(i>313 && OK==0){// nilai akhir dari vektor untuk pin 6

i=0;// pergi ke nilai pertama dari vektor(array)

OK=1;//aktifkan pin 5

}

x=sinPWM;// x ambil nilai dari vektor yang sesuai dengan posisi i(i adalah nol diindeks)-nilai duty cycle

i=i+1;// pergi ke posisi berikutnya

}

Langkah 3: Bergantian pada 50Hz Arduino Pins

Bergantian pada 50Hz Arduino Pins
Bergantian pada 50Hz Arduino Pins

Karena setiap pin hanya menghasilkan setengah siklus kerja untuk membuat gelombang sinus penuh, kami menggunakan dua pin yang bergantian satu demi satu setelah tepat 10mdetik (untuk 50Hz). Perubahan pin ini dilakukan pada akhir array- setelah katakanlah pin 5 telah menghasilkan 314 pulsa pin ini dimatikan dan diaktifkan pin 6 yang membuat hal yang sama tetapi untuk siklus negatif.

Karena arduino hanya dapat menghasilkan sinyal positif, siklus tugas negatif dibuat di h bridge- Anda dapat membaca di sini tentangnya

Program untuk mengganti pin:

sei();// aktifkan interupsi

}

ISR(TIMER1_COMPA_vect){// interupsi saat timer 1 cocok dengan nilai OCR1A

if(i>313 && OK==0){// nilai akhir dari vektor untuk pin 6

i=0;// pergi ke nilai pertama dari vektor

OK=1;//aktifkan pin 5

}

if(i>313 && OK==1){// nilai akhir dari vektor untuk pin 5

i=0;//pergi ke nilai pertama dari vektor

OK=0;//aktifkan pin 6

}

x=sinPWM;// x ambil nilai dari vektor yang sesuai dengan posisi i(i diindeks nol)

i=i+1;// pergi ke posisi berikutnya

jika(Oke==0){

OCR0B=0;//buat pin 5 0

OCR0A=x;//mengaktifkan pin 6 ke siklus tugas yang sesuai

jika(Oke==1){

OCR0A=0;//buat pin 6 0

OCR0B=x;//aktifkan pin 5 ke siklus tugas yang sesuai

}

}

Langkah 4: Mengemudi Jembatan H dan Memfilter Sinyal Pwm

Sinyal yang diperoleh dari arduino merupakan bagian kontrol untuk aplikasi inverter karena keduanya positif. Untuk membuat gelombang sinus penuh dan inverter praktis kita harus menggunakan jembatan h dan untuk membersihkan pwm filter lolos rendah.

H-jembatan disajikan di sini.

Filter low-pass diuji dengan motor Ac kecil-di sini.

Direkomendasikan: