Ардуино СПВМ круг генератора - детаљи кода и дијаграм

Испробајте Наш Инструмент За Елиминисање Проблема





У овом посту сазнајемо како да генеришемо модулацију ширине импулса синусног таласа или СПВМ путем Ардуина, који се може користити за израду чистог синусног таласа претварача или сличних уређаја.

Тхе Ардуино код сам развио и то је мој први Ардуино код, ... и изгледа прилично добро



Шта је СПВМ

Већ сам објаснио како генерисати СПВМ користећи опампе у једном од мојих ранијих чланака, могли бисте то да прођете како бисте разумели како се то може створити помоћу дискретних компоненти и с обзиром на његову важност.

У основи, СПВМ који означава модулацију ширине импулса синусног таласа, је врста импулсне модулације где се импулси модулирају да симулирају синусоидни таласни облик, тако да модулација може да постигне својства чистог синусног таласа.



Да би се применио СПВМ, импулси се модулирају са почетним ужим ширинама које се постепено шире у центру циклуса, а на крају се на крају уже завршавају како би се циклус завршио.

Тачније, импулси почињу са најужим ширинама које се постепено шире са сваким следећим импулсима, а постају најшири у средишњем импулсу, након тога се секвенца наставља даље, али са супротном модулацијом, то јест, импулси сада постепено почињу да се сужавају док се циклус не заврши.

Видео Демо

Ово представља један СПВМ циклус, и он се понавља у целини одређеном брзином утврђеном фреквенцијом примене (обично 50Хз или 60Хз). Типично се СПВМ користи за погон енергетских уређаја као што су МОСФЕТ-ови или БЈТ-ови у претварачима или претварачима.

Овај специјални модулациони образац осигурава да се фреквенцијски циклуси изводе са постепено променљивом просечном напонском вредношћу (која се назива и ефективна вредност), уместо да бацају нагле скокове високог / ниског напона као што је то уобичајено у циклусима равних квадратних таласа.

Ова постепена модификација ПВМ-а у СПВМ-у је намјерно наметнута тако да блиско пресликава експоненцијално растући / падајући образац стандардних синусних таласа или синусоидног таласног облика, па отуда и назив синеваве ПВМ или СПВМ.

Генерисање СПВМ-а са Ардуином

Горе објашњени СПВМ може се лако применити помоћу неколико дискретних делова, а такође и помоћу Ардуина који ће вам вероватно омогућити већу прецизност у периодима таласних облика.

Следећи Ардуино код се може користити за примену предвиђеног СПВМ-а за дату апликацију.

Боже!! то изгледа страшно велико, ако знате како да га скратите, сигурно ћете то учинити на свом крају.

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

У следећем посту ћу објаснити како се користи горњи СПВМ генератор заснован на Ардуину направите чисти синусно-инвертерски круг ....настави да читаш!

Господин Аттон је додатно побољшао горенаведени СПВМ код ради побољшања његових перформанси, као што је дато у наставку:

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




Претходно: Прекомерност 8Кс од Јоуле Тхиеф - доказани дизајн Следеће: Ардуино чист синусни претварач са пуним програмским кодом