Rangkaian Generator SPWM Arduino - Detail Kode dan Diagram

Coba Instrumen Kami Untuk Menghilangkan Masalah





Dalam posting ini kita belajar bagaimana menghasilkan modulasi pulsa-lebar gelombang sinus atau SPWM melalui Arduino, yang dapat digunakan untuk membuat rangkaian inverter gelombang sinus murni atau gadget serupa.

Itu Arduino kode dikembangkan oleh saya, dan ini adalah kode Arduino pertama saya, ... dan terlihat cukup bagus



Apa itu SPWM

Saya sudah menjelaskan cara menghasilkan SPWM menggunakan opamps di salah satu artikel saya sebelumnya, Anda bisa membahasnya untuk memahami bagaimana itu dapat dibuat menggunakan komponen diskrit dan tentang pentingnya.

Pada dasarnya SPWM yang merupakan kependekan dari modulasi lebar pulsa gelombang sinus adalah jenis modulasi pulsa dimana pulsa dimodulasi untuk mensimulasikan bentuk gelombang sinusoidal, sehingga modulasi tersebut mampu mencapai sifat gelombang sinus murni.



Untuk menerapkan SPWM, pulsa dimodulasi dengan lebar awal yang lebih sempit yang secara bertahap menjadi lebih luas di tengah siklus, dan akhirnya menjadi lebih sempit di akhir untuk menyelesaikan siklus.

Untuk lebih tepatnya, pulsa dimulai dengan lebar tersempit yang secara bertahap menjadi lebih luas dengan setiap pulsa berikutnya, dan menjadi terluas di pulsa pusat, setelah ini, urutan berlanjut tetapi dengan modulasi yang berlawanan, yaitu pulsa sekarang secara bertahap mulai semakin sempit sampai siklus selesai.

Video Demo

Ini merupakan satu siklus SPWM, dan ini berulang pada kecepatan tertentu sebagaimana ditentukan oleh frekuensi aplikasi (biasanya 50Hz atau 60Hz). Biasanya, SPWM digunakan untuk menggerakkan perangkat daya seperti mosfets atau BJT di inverter atau konverter.

Pola modulasi khusus ini memastikan bahwa siklus frekuensi dijalankan dengan nilai tegangan rata-rata yang berubah secara bertahap (juga disebut nilai RMS), alih-alih melemparkan lonjakan tegangan tinggi / rendah secara tiba-tiba seperti yang biasanya disaksikan dalam siklus gelombang persegi datar.

Modifikasi PWM secara bertahap dalam SPWM ini sengaja diberlakukan sehingga mereplikasi secara dekat pola naik / turun secara eksponensial dari gelombang sinus standar atau bentuk gelombang sinusoidal, oleh karena itu dinamai PWM gelombang sinus atau SPWM.

Menghasilkan SPWM dengan Arduino

SPWM yang dijelaskan di atas dapat dengan mudah diimplementasikan menggunakan beberapa bagian terpisah, dan juga menggunakan Arduino yang mungkin akan memungkinkan Anda untuk mendapatkan lebih banyak akurasi dengan periode bentuk gelombang.

Kode Arduino berikut dapat digunakan untuk mengimplementasikan SPWM yang dimaksudkan untuk aplikasi tertentu.

Astaga!! yang terlihat sangat besar, jika Anda tahu cara mempersingkatnya, Anda pasti merasa bebas melakukannya di akhir.

// By Swagatam (my first Arduino Code)
void setup(){
pinMode(8, OUTPUT)
pinMode(9, OUTPUT)
}
void loop(){
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(2000)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
//......
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(2000)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
}
//-------------------------------------//

Di posting berikutnya saya akan menjelaskan cara menggunakan generator SPWM berbasis Arduino di atas buat rangkaian inverter sinewave murni .... teruslah membaca!

Kode SPWM di atas selanjutnya ditingkatkan oleh Mr Atton untuk meningkatkan kinerjanya, seperti yang diberikan di bawah ini:

/*
This code was based on Swagatam SPWM code with changes made to remove errors. Use this code as you would use any other Swagatam’s works.
Atton Risk 2017
*/
const int sPWMArray[] = {500,500,750,500,1250,500,2000,500,1250,500,750,500,500} // This is the array with the SPWM values change them at will
const int sPWMArrayValues = 13 // You need this since C doesn’t give you the length of an Array
// The pins
const int sPWMpin1 = 10
const int sPWMpin2 = 9
// The pin switches
bool sPWMpin1Status = true
bool sPWMpin2Status = true
void setup()
{
pinMode(sPWMpin1, OUTPUT)
pinMode(sPWMpin2, OUTPUT)
}
void loop()
{
// Loop for pin 1
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin1Status)
{
digitalWrite(sPWMpin1, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = false
}
else
{
digitalWrite(sPWMpin1, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = true
}
}
// Loop for pin 2
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin2Status)
{
digitalWrite(sPWMpin2, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = false
}
else
{
digitalWrite(sPWMpin2, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = true
}
}
}




Sebelumnya: 8X Overunity dari Joule Thief - Desain Terbukti Berikutnya: Rangkaian Inverter Gelombang Sinus Murni Arduino dengan Kode Program Lengkap