Arduino SPWM Generator Circuit - Kod Perincian dan Rajah

Arduino SPWM Generator Circuit - Kod Perincian dan Rajah

Dalam catatan ini kita belajar bagaimana menghasilkan modulasi lebar gelombang sinus atau SPWM melalui Arduino, yang dapat digunakan untuk membuat litar penyongsang gelombang sinus murni atau alat serupa.



The Arduino kod dikembangkan oleh saya, dan ini adalah kod Arduino pertama saya, ... dan ia kelihatan cukup bagus

Apa itu SPWM

Saya sudah menerangkan cara menjana SPWM menggunakan opamps dalam salah satu artikel saya yang terdahulu, anda dapat membacanya untuk memahami bagaimana ia dapat dibuat dengan menggunakan komponen diskrit dan mengenai kepentingannya.





Pada dasarnya, SPWM yang merupakan singkatan dari modulasi lebar denyut gelombang sinus, adalah sejenis modulasi nadi di mana nadi dimodulasi untuk mensimulasikan bentuk gelombang sinusoidal, sehingga modulasi tersebut dapat mencapai sifat gelombang sinus murni.

Untuk melaksanakan SPWM, denyut nadi dimodulasi dengan lebar sempit awal yang secara beransur-ansur menjadi lebih luas di pusat kitaran, dan akhirnya menjadi lebih sempit pada akhir untuk menyelesaikan kitaran.



Untuk lebih tepat, denyut nadi bermula dengan lebar terkecil yang secara beransur-ansur semakin luas dengan setiap denyutan berikutnya, dan semakin luas pada nadi tengah, setelah ini, urutannya terus berlanjut tetapi dengan modulasi yang berlawanan, iaitu denyut nadi kini secara beransur-ansur mulai semakin sempit sehingga kitaran selesai.

Demo Video

Ini merupakan satu kitaran SPWM, dan ini berulang sepanjang kadar tertentu seperti yang ditentukan oleh frekuensi aplikasi (biasanya 50Hz atau 60Hz). Biasanya, SPWM digunakan untuk menggerakkan peranti kuasa seperti mosfets atau BJT dalam penyongsang atau penukar.

Corak modulasi khas ini memastikan bahawa kitaran frekuensi dilaksanakan dengan nilai voltan purata yang berubah secara beransur-ansur (juga disebut nilai RMS), bukannya melemparkan lonjakan voltan Hi / rendah secara tiba-tiba seperti yang biasa disaksikan dalam kitaran gelombang persegi rata.

Ini secara beransur-ansur mengubah PWM dalam SPWM secara sengaja dilaksanakan sehingga meniru dengan teliti corak kenaikan / penurunan eksponen gelombang sinus standard atau bentuk gelombang sinusoidal, oleh itu nama sinewave PWM atau SPWM.

Menjana SPWM dengan Arduino

SPWM yang dijelaskan di atas dapat dilaksanakan dengan mudah menggunakan beberapa bahagian diskrit, dan juga menggunakan Arduino yang mungkin akan memungkinkan anda mendapatkan lebih banyak ketepatan dengan masa bentuk gelombang.

Kod Arduino berikut dapat digunakan untuk menerapkan SPWM yang dimaksudkan untuk aplikasi tertentu.

Aduh !! yang kelihatan sangat besar, jika anda tahu cara memendekkannya, anda pasti boleh melakukannya pada akhir anda.

// 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)
}
//-------------------------------------//

Dalam posting seterusnya saya akan menerangkan bagaimana menggunakan penjana SPWM berasaskan Arduino di atas untuk buat litar penyongsang gelombang sinus tulen ....teruskan membaca!

Kod SPWM di atas telah diperbaiki lagi oleh Mr Atton untuk meningkatkan kinerjanya, seperti yang diberikan di bawah:

/*
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
}
}
}




Sepasang: Kelebihan 8X dari Joule Thief - Reka Bentuk Terbukti Seterusnya: Arduino Pure Sine Wave Inverter Circuit dengan Kod Program Penuh