Arduino SPWM Jeneratör Devresi - Kod Detayları ve Şeması

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, saf sinüs dalgası invertör devresi veya benzer araçlar yapmak için kullanılabilecek Arduino aracılığıyla sinüs dalgası darbe genişliği modülasyonu veya SPWM'yi nasıl üreteceğimizi öğreniyoruz.

Arduino kod benim tarafımdan geliştirildi ve bu benim ilk Arduino kodum ... ve oldukça iyi görünüyor



SPWM nedir

Zaten açıkladım opamp kullanarak SPWM nasıl oluşturulur Daha önceki makalelerimden birinde, ayrık bileşenler kullanılarak nasıl yaratılabileceğini ve önemini anlamaya çalışabilirsiniz.

Temel olarak, sinüs dalgası darbe genişlik modülasyonu anlamına gelen SPWM, darbelerin sinüzoidal bir dalga biçimini simüle etmek için modüle edildiği, böylece modülasyonun saf bir sinüs dalgasının özelliklerini elde edebildiği bir darbe modülasyonu türüdür.



Bir SPWM uygulamak için darbeler, döngünün merkezinde kademeli olarak genişleyen ve son olarak döngünün sonunda daha dar olan bir başlangıç ​​dar genişlikleriyle modüle edilir.

Daha kesin olmak gerekirse, darbeler, sonraki darbelerde kademeli olarak genişleyen ve merkez darbede en genişleyen en dar genişliklerle başlar, bundan sonra sıra devam eder, ancak zıt bir modülasyonla, yani darbeler artık giderek daha da daralmaya başlar. döngü bitene kadar.

Video Demosu

Bu, bir SPWM döngüsü oluşturur ve bu, uygulama frekansı (genellikle 50 Hz veya 60 Hz) tarafından belirlenen belirli bir hızda tekrar eder. Tipik olarak, SPWM, invertörler veya dönüştürücülerdeki mosfetler veya BJT'ler gibi güç cihazlarını çalıştırmak için kullanılır.

Bu özel modülasyon modeli, düz kare dalga döngülerinde normalde görüldüğü gibi ani Yüksek / düşük voltaj yükselmeleri atmak yerine, frekans döngülerinin kademeli olarak değişen bir ortalama gerilim değeriyle (RMS değeri olarak da adlandırılır) yürütülmesini sağlar.

Bir SPWM'deki bu kademeli olarak değiştirilen PWM'ler, standart bir sinüs dalgalarının veya sinüzoidal dalga formunun üstel olarak yükselen / düşen modelini, dolayısıyla sinüs dalgası PWM veya SPWM adını yakından kopyalayacak şekilde bilerek uygulanır.

Arduino ile SPWM Üretimi

Yukarıda açıklanan SPWM, birkaç ayrı parça kullanılarak ve ayrıca muhtemelen dalga formu dönemlerinde daha fazla doğruluk elde etmenizi sağlayacak Arduino kullanılarak kolayca uygulanabilir.

Aşağıdaki Arduino kodu, belirli bir uygulama için amaçlanan SPWM'yi uygulamak için kullanılabilir.

Allah Allah!! bu çok büyük görünüyor, eğer onu nasıl kısaltacağınızı biliyorsanız, sonunda yapmakta kesinlikle özgür hissedebilirsiniz.

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

Bir sonraki yazıda, yukarıdaki Arduino tabanlı SPWM jeneratörünün nasıl kullanılacağını açıklayacağım. saf sinüs dalgası invertör devresi yapın ....Okumaya devam et!

Yukarıdaki SPWM kodu, performansını artırmak için Bay Atton tarafından aşağıda belirtildiği gibi daha da geliştirildi:

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




Önceki: Joule Thief'ten 8X Overunity - Kanıtlanmış Tasarım Sonraki: Tam Program Kodlu Arduino Saf Sinüs İnvertör Devresi