- Qu'est-ce que SPWM (modulation de largeur d'impulsion sinusoïdale)?
- Comment fonctionne l'onduleur SPWM
- Composants requis pour construire un onduleur SPWM
- Construction du circuit de l'onduleur SPWM
- Programme Arduino pour onduleur SPWM
- Test du circuit de l'onduleur TL494 PWM
Les circuits onduleurs sont souvent nécessaires là où il n'est pas possible d'obtenir une alimentation CA à partir du réseau. Un circuit onduleur est utilisé pour convertir le courant continu en courant alternatif et il peut être divisé en deux types: les onduleurs à onde sinusoïdale pure ou les onduleurs à onde carrée modifiés. Ces onduleurs à onde sinusoïdale pure sont très chers, alors que les onduleurs à onde carrée modifiés sont peu coûteux. En savoir plus sur les différents types d'onduleurs ici.
Dans un article précédent, je vous ai montré comment ne pas créer un onduleur à onde carrée modifié en abordant les problèmes qui y sont associés. Donc, dans cet article, je vais créer un simple onduleur à onde sinusoïdale pure en utilisant Arduino et expliquer le principe de fonctionnement du circuit.
Si vous faites ce circuit, veuillez noter que ce circuit ne comporte aucun retour, aucune protection contre les surintensités, aucune protection contre les courts-circuits et aucune protection contre la température. Par conséquent, ce circuit est construit et démontré à des fins éducatives uniquement, et il n'est absolument pas recommandé de construire et d'utiliser ce type de circuit pour les appareils commerciaux. Cependant, vous pouvez les ajouter à votre circuit si nécessaire, les circuits de protection couramment utilisés comme
La protection contre les surtensions, la protection contre les surintensités, la protection contre l'inversion de polarité, la protection contre les courts-circuits, le contrôleur d'échange à chaud, etc. ont déjà été discutées.
ATTENTION: Si vous réalisez ce type de circuit, faites très attention aux pics de tension et de tension générés par le signal de commutation à l'entrée.
Qu'est-ce que SPWM (modulation de largeur d'impulsion sinusoïdale)?
Comme son nom l'indique, SPWM signifie S inusoidal P ulse W idth M odulation. Comme vous le savez peut-être déjà, un signal PWM est un signal dans lequel nous pouvons changer la fréquence de l'impulsion ainsi que le temps de marche et d'arrêt, également connu sous le nom de cycle de service. Si vous souhaitez en savoir plus sur PWM, vous pouvez le lire ici. Ainsi, en faisant varier le cycle de service, nous modifions la tension moyenne de l'impulsion. L'image ci-dessous montre que-
Si nous considérons un signal PWM qui commute entre 0 - 5V et qui a un cycle de service de 100%, nous obtiendrons une tension de sortie moyenne de 5V, encore une fois si nous considérons le même signal avec un cycle de service de 50%, nous allons obtenez la tension de sortie de 2,5 V, et pour le cycle de service de 25%, c'est la moitié de cela. Cela résume le principe de base du signal PWM, et nous pouvons passer à la compréhension du principe de base du signal SPWM.
Une tension sinusoïdale est principalement une tension d'analogie qui modifie son amplitude au fil du temps, et nous pouvons reproduire ce comportement d'une onde sinusoïdale en changeant continuellement le cycle de service de l'onde PWM, l'image ci-dessous le montre.
Si vous regardez le schéma ci-dessous, vous verrez qu'il y a un condensateur connecté à la sortie du transformateur. Ce condensateur est responsable du lissage du signal CA à partir de la fréquence porteuse.
Le signal d'entrée utilisé chargera et déchargera le condensateur en fonction du signal d'entrée et de la charge. Comme nous avons utilisé un signal SPWM très haute fréquence, il aura un très petit cycle de service qui est de 1%, ce cycle de service de 1% chargera un peu le condensateur, le prochain cycle de service est de 5%, cela se chargera à nouveau le condensateur un peu plus, l'impulsion suivante aura un cycle de service de 10% et le condensateur se chargera un peu plus, nous appliquerons le signal jusqu'à ce que nous ayons atteint un cycle de service de 100% et à partir de là, nous redescendrons à 1%. Cela créera une courbe très lisse comme une onde sinusoïdale à la sortie. Ainsi, en fournissant des valeurs correctes du rapport cyclique en entrée, nous aurons une onde très sinusoïdale en sortie.
Comment fonctionne l'onduleur SPWM
L'image ci-dessus montre la section de commande principale de l'onduleur SPWM, et comme vous pouvez le voir, nous avons utilisé deux MOSFET à canal N en configuration demi-pont pour piloter le transformateur de ce circuit, réduire le bruit de commutation indésirable et protéger le MOSFET, nous avons utilisé des diodes 1N5819 parallèles aux MOSFET. Pour réduire les pics nocifs générés dans la section de grille, nous avons utilisé des résistances de 4,7 ohms en parallèle avec des diodes 1N4148. Enfin, les BD139 et BD 140 transistors sont configurés dans un push-pull configurationpour piloter la grille du MOSFET, car ce MOSFET a une capacité de grille très élevée et nécessite un minimum de 10V à la base pour s'allumer correctement. En savoir plus sur le fonctionnement des amplificateurs Push-Pull ici.
Pour mieux comprendre le principe de fonctionnement du circuit, nous l'avons réduit à un point où cette section du MOSFET est allumée. Lorsque le MOSFET est sur le courant, traverse d'abord le transformateur puis est mis à la terre par le MOSFET, ainsi un flux magnétique sera également induit dans la direction dans laquelle le courant circule, et le noyau du transformateur passera le flux magnétique dans l'enroulement secondaire, et nous obtiendrons le demi-cycle positif du signal sinusoïdal en sortie.
Dans le cycle suivant, la partie inférieure du circuit est sur la partie supérieure du circuit est éteinte c'est pourquoi j'ai enlevé la partie supérieure, maintenant le courant circule dans la direction opposée et génère un flux magnétique dans cette direction, inversant ainsi la direction du flux magnétique dans le noyau. En savoir plus sur le fonctionnement du MOSFET ici.
Maintenant, nous savons tous qu'un transformateur fonctionne par des changements de flux magnétique. Ainsi, allumer et éteindre les deux MOSFET, l'un inversé à l'autre et le faire 50 fois en une seconde, générera un joli flux magnétique oscillant à l'intérieur du noyau du transformateur et le flux magnétique changeant induira une tension dans la bobine secondaire comme nous savons par la loi de Faraday. C'est ainsi que fonctionne l'onduleur de base.
Le circuit onduleur SPWM complet utilisé dans ce projet est donné ci-dessous.
Composants requis pour construire un onduleur SPWM
Sl.Non |
les pièces |
Type |
Quantité |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Transistor |
2 |
4 |
BD140 |
Transistor |
2 |
5 |
22pF |
Condensateur |
2 |
6 |
10 000, 1% |
Résistance |
1 |
sept |
16 MHz |
Cristal |
1 |
8 |
0,1 uF |
Condensateur |
3 |
9 |
4.7R |
Résistance |
2 |
dix |
1N4148 |
Diode |
2 |
11 |
LM7805 |
Régulateur de tension |
1 |
12 |
200 uF, 16 V |
Condensateur |
1 |
13 |
47uF, 16V |
Condensateur |
1 |
14 |
2,2 uF, 400 V |
Condensateur |
1 |
Construction du circuit de l'onduleur SPWM
Pour cette démonstration, le circuit est construit sur Veroboard, à l'aide du schéma, À la sortie du transformateur, une énorme quantité de courant circulera à travers la connexion, les cavaliers de connexion doivent donc être aussi épais que possible.
Programme Arduino pour onduleur SPWM
Avant d'aller de l'avant et de commencer à comprendre le code, clarifions les bases. À partir du principe de fonctionnement ci-dessus, vous avez appris à quoi ressemblera le signal PWM à la sortie, maintenant la question reste de savoir comment nous pouvons créer une onde aussi variable sur les broches de sortie de l'Arduino.
Pour faire varier le signal PWM, nous allons utiliser la minuterie 16 bits1 avec un réglage de prédécaleur de 1, ce qui nous donnera 1600/16000000 = 0,1 ms de temps pour chaque compte si nous considérons un seul demi-cycle d'une onde sinusoïdale, qui correspond exactement 100 fois dans un demi-cycle de la vague. En termes simples, nous pourrons échantillonner notre onde sinusoïdale 200 fois.
Ensuite, nous devons diviser notre onde sinusoïdale en 200 morceaux et calculer leurs valeurs avec une corrélation de l'amplitude. Ensuite, nous devons convertir ces valeurs en valeurs de compteur de minuterie en le multipliant par la limite du compteur. Enfin, nous devons mettre ces valeurs dans une table de consultation pour la transmettre au compteur et nous obtiendrons notre onde sinusoïdale.
Pour rendre les choses un peu plus simples, j'utilise un code SPWM très bien écrit de GitHub qui est fait par Kurt Hutten.
Le code est très simple, nous commençons notre programme en ajoutant les fichiers d'en-tête requis
#include #include
Ensuite, nous avons nos deux tables de recherche à partir desquelles nous allons obtenir les valeurs du compteur de minuterie.
int lookUp1 = {50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250, 201, 151, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0}; int lookUp2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250,201, 151, 100, 50, 0};
Ensuite, dans la section de configuration , nous initialisons les registres de contrôle du compteur de minuterie pour qu'ils soient effacés sur chacun. Pour plus d'informations, vous devez consulter la fiche technique de l'atmega328 IC.
TCCR1A = 0b10100010; / * 10 clear on match, réglé en BOTTOM pour compA. 10 clear on match, mis en BOTTOM pour compB. 00 10 WGM1 1: 0 pour la forme d'onde 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 pour la forme d'onde 15. 001 pas de pré-échelle sur le compteur. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Activation d'interruption de drapeau. * /
Après cela, nous initialisons le registre de capture d'entrée avec une valeur prédéfinie de 16000 car cela nous aidera à générer exactement 200 échantillons.
ICR1 = 1600; // Période pour un cristal de 16 MHz, pour une fréquence de commutation de 100 KHz pour 200 subdivisions par cycle sinusoïdal de 50 Hz.
Ensuite, nous activons les interruptions globales en appelant la fonction, sei ();
Enfin, nous définissons les broches 9 et 10 d'Arduino comme sortie
DDRB = 0b00000110; // Définit PB1 et PB2 comme sorties.
Cela marque la fin de la fonction de configuration.
La section de boucle du code reste vide car il s'agit d'un programme commandé par interruption de compteur de minuterie.
boucle void () {; /*Ne fais rien…. pour toujours!*/}
Ensuite, nous avons défini le vecteur de débordement timer1, cette fonction d'interruption reçoit un appel une fois que le timer1 est débordé et génère une interruption.
ISR (TIMER1_OVF_vect) {
Ensuite, nous déclarons certaines variables locales en tant que variables statiques et nous avons commencé à fournir les valeurs à la résistance de capture et de comparaison.
static int num; statique char trig; // changer le cycle de service à chaque période. OCR1A = lookUp1; OCR1B = lookUp2;
Enfin, nous pré-incrémentons le compteur pour fournir les valeurs suivantes à la capture et comparer les résistances, ce qui marque la fin de ce code.
if (++ num> = 200) {// Pré-incrémentation num puis vérifiez qu'elle est inférieure à 200. num = 0; // Réinitialiser num. trig = trig ^ 0b00000001; digitalWrite (13, trig); }
Test du circuit de l'onduleur TL494 PWM
Afin de tester le circuit, la configuration suivante est utilisée.
- Batterie plomb-acide 12V.
- Un transformateur qui a une prise 6-0-6 et une prise 12-0-12
- Ampoule à incandescence de 100 W comme charge
- Multimètre Meco 108B + TRMS
- Multimètre Meco 450B + TRMS
Signal de sortie d'Arduino:
Une fois que j'ai téléchargé le code. J'ai mesuré le signal SPWM de sortie des deux broches de l' Arduino qui ressemble à l'image ci-dessous,
Si nous zoomons un peu, nous pouvons voir le cycle de service en constante évolution de l'onde PWM.
Ensuite, l'image ci-dessous montre le signal de sortie du transformateur.
Circuit d'inverseur SPWM en état idéal:
Comme vous pouvez le voir sur l'image ci-dessus, ce circuit consomme environ 13 W tout en fonctionnant idéalement
Tension de sortie sans charge:
La tension de sortie du circuit de l'onduleur est indiquée ci-dessus, c'est la tension qui sort à la sortie sans aucune charge attachée.
Consommation d'énergie d'entrée:
L'image ci-dessus montre la puissance d'entrée que ic consomme lorsqu'une charge de 40 W est connectée.
Consommation d'énergie de sortie:
L'image ci-dessus montre la puissance de sortie consommée par ce circuit (la charge est une ampoule à incandescence de 40 W)
Avec cela, nous concluons la partie test du circuit. Vous pouvez regarder la vidéo ci-dessous pour une démonstration. J'espère que vous avez aimé cet article et en avez appris un peu plus sur SPWM et ses techniques de mise en œuvre. Continuez à lire, continuez à apprendre, continuez à construire et je vous verrai dans le prochain projet.