Obwód generatora Arduino SPWM - szczegóły kodu i schemat

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście dowiemy się, jak generować modulację szerokości impulsu fali sinusoidalnej lub SPWM przez Arduino, które można wykorzystać do wykonania obwodu falownika sinusoidalnego lub podobnych gadżetów.

Plik Arduino kod jest tworzony przeze mnie i jest to mój pierwszy kod Arduino ... i wygląda całkiem nieźle



Co to jest SPWM

Już wyjaśniłem jak wygenerować SPWM za pomocą opampów w jednym z moich wcześniejszych artykułów możesz go przejrzeć, aby zrozumieć, w jaki sposób można go stworzyć za pomocą dyskretnych komponentów i biorąc pod uwagę jego znaczenie.

Zasadniczo SPWM, co oznacza modulację szerokości impulsu fali sinusoidalnej, jest rodzajem modulacji impulsów, w którym impulsy są modulowane w celu symulacji przebiegu sinusoidalnego, dzięki czemu modulacja jest w stanie osiągnąć właściwości czystej fali sinusoidalnej.



Aby zaimplementować SPWM, impulsy są modulowane z początkowymi węższymi szerokościami, które stopniowo stają się szersze w środku cyklu, a na końcu kończą się węższymi na końcu, aby zakończyć cykl.

Mówiąc dokładniej, impulsy zaczynają się od najwęższych szerokości, które stopniowo stają się szersze z każdym kolejnym impulsem i stają się szersze w impulsie środkowym, po czym sekwencja trwa, ale z odwrotną modulacją, to znaczy impulsy stopniowo zaczynają się zwężać aż do zakończenia cyklu.

Demo wideo

Stanowi to jeden cykl SPWM, który powtarza się przez cały czas z określoną częstotliwością określoną przez częstotliwość aplikacji (zwykle 50 Hz lub 60 Hz). Zazwyczaj SPWM jest używany do napędzania urządzeń zasilających, takich jak mosfety lub BJT w falownikach lub konwerterach.

Ten specjalny wzorzec modulacji zapewnia, że ​​cykle częstotliwości są wykonywane ze stopniowo zmieniającą się średnią wartością napięcia (zwaną również wartością skuteczną), zamiast generować nagłe skoki wysokiego / niskiego napięcia, jak zwykle obserwowane w cyklach płaskich przebiegów prostokątnych.

Te stopniowo modyfikujące PWM w SPWM są celowo wymuszane, aby dokładnie odwzorowywały wykładniczo wznoszący / opadający wzór standardowych fal sinusoidalnych lub sinusoidalnych, stąd nazwa sinusoida PWM lub SPWM.

Generowanie SPWM z Arduino

Wyżej wyjaśnione SPWM można łatwo zaimplementować za pomocą kilku dyskretnych części, a także za pomocą Arduino, co prawdopodobnie pozwoli ci uzyskać większą dokładność z okresami przebiegu.

Poniższy kod Arduino można wykorzystać do implementacji zamierzonego SPWM dla danej aplikacji.

Boże !! wygląda na strasznie duże, jeśli wiesz, jak to skrócić, z pewnością możesz to zrobić na swoim końcu.

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

W następnym poście wyjaśnię, jak używać powyższego generatora SPWM opartego na Arduino zrobić czysty obwód falownika sinusoidalnego ....Czytaj dalej!

Powyższy kod SPWM został dodatkowo ulepszony przez pana Attona w celu zwiększenia jego wydajności, jak podano poniżej:

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




Poprzedni: 8X Overunity od Joule Thief - sprawdzony projekt Dalej: Obwód falownika Arduino Pure Sine Wave z pełnym kodem programu