Circuit du générateur Arduino SPWM - Détails du code et schéma

Essayez Notre Instrument Pour Éliminer Les Problèmes





Dans cet article, nous apprenons comment générer une modulation de largeur d'impulsion sinusoïdale ou SPWM via Arduino, qui peut être utilisé pour créer un circuit onduleur à onde sinusoïdale pure ou des gadgets similaires.

Le Arduino le code est développé par moi, et c'est mon premier code Arduino, ... et ça a l'air plutôt bien



Qu'est-ce que SPWM

J'ai déjà expliqué comment générer SPWM en utilisant des opamps dans l'un de mes articles précédents, vous pourriez le parcourir pour comprendre comment il peut être créé à l'aide de composants discrets et en ce qui concerne son importance.

Fondamentalement, SPWM, qui signifie modulation de largeur d'impulsion d'onde sinusoïdale, est un type de modulation d'impulsions où les impulsions sont modulées pour simuler une forme d'onde sinusoïdale, de sorte que la modulation soit capable d'atteindre les propriétés d'une onde sinusoïdale pure.



Pour mettre en œuvre un SPWM, les impulsions sont modulées avec des largeurs initiales plus étroites qui s'élargissent progressivement au centre du cycle, et finissent finalement par être plus étroites à la fin pour terminer le cycle.

Pour être plus précis, les impulsions commencent avec les largeurs les plus étroites qui s'élargissent progressivement avec chaque impulsion suivante, et deviennent plus larges à l'impulsion centrale, après cela, la séquence continue mais avec une modulation opposée, c'est-à-dire que les impulsions commencent maintenant à se rétrécir progressivement. jusqu'à la fin du cycle.

Démo vidéo

Cela constitue un cycle SPWM, et cela se répète tout au long à une fréquence particulière déterminée par la fréquence d'application (généralement 50 Hz ou 60 Hz). En règle générale, SPWM est utilisé pour piloter des dispositifs d'alimentation tels que des mosfets ou des BJT dans des onduleurs ou des convertisseurs.

Ce modèle de modulation spécial garantit que les cycles de fréquence sont exécutés avec une valeur de tension moyenne qui change progressivement (également appelée valeur RMS), au lieu de lancer des pointes de tension élevées / basses soudaines comme cela est normalement observé dans les cycles d'onde carrée plate.

Cette modification progressive des PWM dans un SPWM est volontairement appliquée afin de reproduire fidèlement le modèle exponentiellement croissant / décroissant d'une onde sinusoïdale standard ou d'une forme d'onde sinusoïdale, d'où le nom PWM sinusoïdal ou SPWM.

Génération de SPWM avec Arduino

Le SPWM expliqué ci-dessus peut être facilement implémenté en utilisant quelques parties discrètes, et également en utilisant Arduino, ce qui vous permettra probablement d'obtenir plus de précision avec les périodes de forme d'onde.

Le code Arduino suivant peut être utilisé pour implémenter le SPWM prévu pour une application donnée.

Mon Dieu !! qui a l'air terriblement grand, si vous savez comment le raccourcir, vous pouvez certainement vous sentir libre de le faire de votre côté.

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

Dans le prochain article, j'expliquerai comment utiliser le générateur SPWM basé sur Arduino ci-dessus pour faire un circuit onduleur sinusoïdal pur ....continue de lire!

Le code SPWM ci-dessus a été encore amélioré par M. Atton pour améliorer ses performances, comme indiqué ci-dessous:

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




Précédent: 8X Overunity de Joule Thief - Design éprouvé Un article: Circuit onduleur à onde sinusoïdale pure Arduino avec code de programme complet