Isi kandungan:

Arduino Sinewave untuk Penyongsang: 4 Langkah
Arduino Sinewave untuk Penyongsang: 4 Langkah

Video: Arduino Sinewave untuk Penyongsang: 4 Langkah

Video: Arduino Sinewave untuk Penyongsang: 4 Langkah
Video: как сделать простой инвертор 6000Вт, 4 трансформатора, синусоида, IRFz 44n, jlcpcb 2024, November
Anonim
Arduino Sinewave untuk Penyongsang
Arduino Sinewave untuk Penyongsang

Dalam projek ini, saya telah menghasilkan isyarat SPWM (sinus gelombang sinus lebar dimodulasi) dari dua output digital arduino pwm.

Kerana untuk membuat program seperti itu, saya harus membincangkan banyak fungsi dan sifat arduino yang lain untuk projek penuh termasuk gambar osiloskop dan untuk frekuensi yang berbeza sila lawati laman web saya:

eprojekszon

Langkah 1: Menjana Pwm Signal untuk 50Hz

Untuk menghasilkan isyarat 50Hz pada frekuensi yang lebih tinggi, perlu membuat beberapa pengiraan. Kekerapan dari arduino boleh berada pada 8MHz, tetapi kami mahukan isyarat dengan kitaran tugas berubah-ubah.

Untuk memahami jenis kitaran tugas berubah-ubah arduino, anda boleh membaca 3 bahagian ini pada pos 1, 2 dan 3 yang sama.

Anggaplah frekuensi kita 50Hz yang bermaksud jangka masa 20ms. Jadi 10ms adalah tempoh separuh kitaran. Dalam 10ms kita perlu mempunyai banyak denyutan dengan kitaran tugas yang berbeza bermula dengan kitaran tugas kecil, di tengah isyarat kita mempunyai kitaran tugas maksimum dan menyelesaikan juga dengan kitaran tugas kecil. Untuk menghasilkan gelombang sinus, kita akan menggunakan dua pin satu untuk separuh kitaran positif dan satu untuk separuh kitaran negatif. Dalam catatan kami untuk ini kami menggunakan pin 5 dan 6 yang bermaksud Pemasa 0.

Untuk isyarat yang lancar, kami memilih fasa pwm yang betul pada frekuensi 31372 Hz-lihat catatan sebelumnya. Salah satu masalah terbesar adalah bagaimana kita mengira kitaran tugas yang diperlukan untuk setiap nadi. Oleh itu, kerana frekuensi kita adalah f = 31372Hz, tempoh bagi setiap nadi adalah T = 1/31372 = 31.8 kita, jadi bilangan denyutan untuk setengah kitaran adalah N = 10ms / 31.8us = 314 denyutan. Sekarang untuk mengira kitaran tugas bagi setiap nadi kita mempunyai y = sinx, tetapi dalam persamaan ini kita memerlukan darjah sehingga separuh kitaran mempunyai 180deg untuk 314 denyutan. Untuk setiap nadi kita mempunyai 180/314 = 0,57deg / nadi. Itu bermaksud untuk setiap nadi kita bergerak ke hadapan dengan 0,57deg.

y ialah kitaran tugas dan x nilai kedudukan dalam kitaran separuh tugas. pada mulanya x ialah 0, selepas itu x = 0.57, x = 1.14 dan seterusnya sehingga x = 180.

jika kita mengira semua 314 nilai kita memperoleh elemen array 314 (taip "int" untuk dikira lebih mudah oleh arduino).

Susunan 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 bahawa seperti gelombang sinus kitaran tugas paling rendah pada elemen pertama dan terakhir dan tertinggi di tengah.

Langkah 2: Program Arduino untuk Kitaran Tugas Berubah

Program Arduino untuk Kitaran Tugas Berubah
Program Arduino untuk Kitaran Tugas Berubah

Dalam gambar di atas kita mempunyai isyarat kitaran tugas berubah dengan nilai dari tatasusunan.

Tetapi bagaimana membuat isyarat sedemikian ??

bahagian program di bawah ini menggunakan gangguan untuk mengubah nilai kitaran tugas

sei (); // aktifkan gangguan

}

ISR (TIMER1_COMPA_vect) {// mengganggu apabila pemasa 1 sepadan dengan nilai OCR1A

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

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

OK = 1; // aktifkan pin 5

}

x = sinPWM ; // x mengambil nilai dari vektor yang sesuai dengan kedudukan i (i adalah sifar diindeks)-nilai kitaran tugas

i = i + 1; // pergi ke kedudukan seterusnya

}

Langkah 3: Bergantian pada Arduino Pin 50Hz

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

Kerana setiap pin hanya menghasilkan kitaran separuh tugas untuk membuat gelombang sinus penuh, kami menggunakan dua pin yang bergantian satu demi satu setelah 10msecond tepat (untuk 50Hz). Perubahan pin ini dibuat pada akhir array - setelah katakan pin 5 telah menghasilkan 314 denyutan pin ini dimatikan dan diaktifkan pin 6 yang membuat perkara yang sama tetapi untuk kitaran tugas negatif.

Kerana arduino hanya dapat menghasilkan isyarat positif kitaran tugas negatif dibuat di jambatan - anda boleh membaca di sini mengenainya

Program untuk menukar pin:

sei (); // aktifkan gangguan

}

ISR (TIMER1_COMPA_vect) {// mengganggu apabila pemasa 1 sepadan dengan nilai OCR1A

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

i = 0; // pergi ke nilai vektor pertama

OK = 1; // aktifkan pin 5

}

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

i = 0; // pergi ke nilai vektor pertama

OK = 0; // aktifkan pin 6

}

x = sinPWM ; // x ambil nilai dari vektor yang sesuai dengan kedudukan i (i adalah sifar diindeks)

i = i + 1; // pergi ke kedudukan seterusnya

jika (OK == 0) {

OCR0B = 0; // buat pin 5 0

OCR0A = x; // aktifkan pin 6 ke kitaran tugas yang sepadan

jika (OK == 1) {

OCR0A = 0; // buat pin 6 0

OCR0B = x; // aktifkan pin 5 ke kitaran tugas yang sepadan

}

}

Langkah 4: Memandu Jambatan H dan Menapis Isyarat Pwm

Isyarat yang diperoleh dari arduino adalah bahagian kawalan untuk aplikasi penyongsang kerana keduanya positif. Untuk membuat gelombang sinus penuh dan penyongsang praktikal, kita harus menggunakan jambatan h dan membersihkan pwm penapis lulus rendah.

Jambatan H dipersembahkan di sini.

Penapis lorong rendah diuji dengan motor Ac kecil-di sini.

Disyorkan: