Схема генератора Arduino SPWM - Детали кода и схема

Попробуйте наш инструмент устранения неполадок





В этом посте мы узнаем, как сгенерировать широтно-импульсную модуляцию синусоидальной волны или SPWM через Arduino, которые можно использовать для создания схемы инвертора чистой синусоидальной волны или аналогичных устройств.

В Ардуино код разработан мной, и это мой первый код Arduino, ... и выглядит он неплохо



Что такое SPWM

Я уже объяснил как сгенерировать SPWM с помощью операционных усилителей в одной из моих предыдущих статей вы могли бы пройти через это, чтобы понять, как его можно создать с использованием дискретных компонентов, и относительно его важности.

По сути, SPWM, который означает широтно-импульсную модуляцию синусоидальной волны, представляет собой тип импульсной модуляции, при которой импульсы модулируются для имитации синусоидальной формы волны, так что модуляция может достигать свойств чистой синусоидальной волны.



Для реализации SPWM импульсы модулируются с начальной более узкой шириной, которая постепенно расширяется в центре цикла и, наконец, сужается в конце для завершения цикла.

Если быть более точным, импульсы начинаются с самой узкой ширины, которая постепенно расширяется с каждым последующим импульсом, и становится наиболее широкой в ​​центральном импульсе, после этого последовательность продолжается, но с противоположной модуляцией, то есть теперь импульсы постепенно начинают сужаться. пока цикл не закончится.

Видео Демонстрация

Это составляет один цикл SPWM, и он повторяется на протяжении всего цикла с определенной частотой, определяемой частотой приложения (обычно 50 Гц или 60 Гц). Обычно SPWM используется для управления силовыми устройствами, такими как МОП-транзисторы или BJT в инверторах или преобразователях.

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

Это постепенное изменение ШИМ в 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 был дополнительно улучшен г-ном Аттоном для повышения его производительности, как показано ниже:

/*
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 Overunity от Joule Thief - проверенный дизайн Далее: Схема инвертора чистой синусоидальной волны Arduino с полным программным кодом