Схема на генератор на Arduino SPWM - подробности за кода и диаграма

Опитайте Нашия Инструмент За Премахване На Проблемите





В този пост научаваме как да генерираме синусоидално-широчинно-импулсна модулация или SPWM чрез Arduino, което може да се използва за създаване на чиста инверторна верига на синусоида или подобни приспособления.

The Arduino кодът е разработен от мен и това е първият ми код на Arduino, ... и изглежда доста добре



Какво е SPWM

Вече обясних как да генерирам SPWM, използвайки opamps в една от по-ранните ми статии можете да го прегледате, за да разберете как може да се създаде с помощта на дискретни компоненти и относно важността му.

По същество, SPWM, което означава модулация на ширина на импулса на синусоида, е вид импулсна модулация, при която импулсите са модулирани, за да симулират синусоидална форма на вълната, така че модулацията да е в състояние да постигне свойства на чиста синусоида.



За прилагане на SPWM импулсите се модулират с първоначално по-тесни ширини, които постепенно се разширяват в центъра на цикъла и накрая завършват с по-тесни в края, за да завършат цикъла.

За да бъдем по-точни, импулсите започват с най-тесни ширини, които постепенно се разширяват с всеки следващ импулс и се разширяват в централния импулс, след това последователността продължава, но с противоположна модулация, т.е. импулсите сега постепенно започват да се стесняват докато цикълът приключи.

Демо видео

Това представлява един цикъл на SPWM и това се повтаря през цялото време с определена скорост, определена от честотата на приложение (обикновено 50Hz или 60Hz). Обикновено SPWM се използва за задвижване на силови устройства като MOSFET или BJT в инвертори или преобразуватели.

Този специален модулационен модел гарантира, че честотните цикли се изпълняват с постепенно променяща се средна стойност на напрежението (наричана още RMS стойност), вместо да се хвърлят внезапни пикове на високо / ниско напрежение, както обикновено се наблюдават при цикли с плоски квадратни вълни.

Тази постепенно модифицираща се ШИМ в SPWM е целенасочено приложена, така че тя репликира експоненциално нарастващ / спадащ модел на стандартни синусоиди или синусоидална форма на вълната, откъдето идва и името синусоида PWM или SPWM.

Генериране на SPWM с Arduino

Обясненото по-горе SPWM може лесно да бъде приложено с помощта на няколко отделни части, а също и с помощта на Arduino, което вероятно ще ви позволи да получите повече точност с периодите на форма на вълната.

Следният код на Arduino може да се използва за внедряване на предвидения SPWM за дадено приложение.

Господи !! това изглежда ужасно голямо, ако знаете как да го съкратите, със сигурност можете да го направите в края си.

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

В следващия пост ще обясня как да използвам горния SPWM генератор, базиран на Arduino направете чиста синусоида инверторна верига ....продължавай да четеш!

Горният код на SPWM беше допълнително подобрен от г-н Atton за подобряване на неговата производителност, както е дадено по-долу:

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




Предишна: 8X прекомерност от Joule Thief - доказан дизайн Следваща: Arduino Pure Sine Wave Inverter Circuit с пълен програмен код