Table des matières:
- Étape 1: Génération du signal Pwm pour 50 Hz
- Étape 2: programme Arduino pour cycle de service variable
- Étape 3: Alternance à 50 Hz des broches Arduino
- Étape 4: Conduire un pont en H et filtrer le signal Pwm
Vidéo: Arduino Sinewave pour onduleurs : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Dans ce projet, j'ai généré un signal SPWM (onde sinusoïdale large modulée) à partir de deux sorties numériques arduino pwm.
Parce que pour créer un tel programme, je dois parler de nombreuses autres fonctions et propriétés de l'arduino, du projet complet, y compris des images d'oscilloscope et pour différentes fréquences, veuillez visiter mon site Web:
eprojectszone
Étape 1: Génération du signal Pwm pour 50 Hz
Pour générer un signal de 50 Hz à une fréquence plus élevée, il est nécessaire de faire quelques calculs. Les fréquences d'arduino peuvent être à 8 MHz, mais nous voulons un signal avec un rapport cyclique variable.
Pour comprendre les types de cycles de service variables d'arduino vous pouvez lire ces 3 parties du même post 1, 2 et 3.
Supposons que notre fréquence est de 50 Hz, ce qui signifie que la période de temps est de 20 ms. Donc 10ms est une période de demi-cycle. Dans ces 10 ms, nous devons avoir de nombreuses impulsions avec des cycles d'utilisation différents en commençant par de petits cycles d'utilisation, au milieu du signal, nous avons des cycles d'utilisation maximum et nous terminons également avec de petits cycles d'utilisation. Pour générer une onde sinusoïdale, nous utiliserons deux broches une pour demi-cycle positif et un pour demi-cycle négatif. Dans notre article pour cela, nous utilisons les broches 5 et 6 qui signifient Timer 0.
Pour un signal lisse, nous choisissons un pwm à phase correcte à une fréquence de 31372 Hz-voir le post précédent. L'un des plus gros problèmes est la façon dont nous calculons le rapport cyclique nécessaire pour chaque impulsion. Donc, parce que notre fréquence est f=31372Hz la période pour chaque impulsion est T=1/31372=31,8 us, donc le nombre d'impulsions pour un demi-cycle est N=10ms/31,8us=314 impulsions. Maintenant, pour calculer le cycle de service pour chaque impulsion, nous avons y = sinx, mais dans cette équation, nous avons besoin de degrés, donc le demi-cycle a 180 degrés pour 314 impulsions. Pour chaque impulsion, nous avons 180/314=0,57deg/impulsion. Cela signifie que pour chaque impulsion, nous avançons avec 0.57deg.
y est le rapport cyclique et x la valeur de la position en demi rapport cyclique. au début x vaut 0, après que x=0,57, x=1,14 et ainsi de suite jusqu'à x= 180.
si nous calculons toutes les 314 valeurs, nous obtenons un tableau de 314 éléments (tapez "int" pour être calculé plus facilement par arduino).
Un tel tableau est:
int sinPWM={1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};
Vous pouvez voir que, comme une onde sinusoïdale, le cycle de service est le plus bas au premier et au dernier élément et le plus élevé au milieu.
Étape 2: programme Arduino pour cycle de service variable
Dans l'image ci-dessus, nous avons des signaux de cycles de service variables avec des valeurs du tableau.
Mais comment faire un tel signal ??
la partie du programme ci-dessous utilise des interruptions pour modifier les valeurs des cycles de service
sei();// activer les interruptions
}
ISR(TIMER1_COMPA_vect){// interruption lorsque la minuterie 1 correspond à la valeur OCR1A
if(i>313 && OK==0){// valeur finale du vecteur pour la broche 6
i=0;// aller à la première valeur du vecteur (tableau)
OK=1;//activer la broche 5
}
x=sinPWM;// x prend la valeur du vecteur correspondant à la position i(i est indexé à zéro)-valeur du rapport cyclique
i=i+1;// passe à la position suivante
}
Étape 3: Alternance à 50 Hz des broches Arduino
Parce que chaque broche ne génère qu'un demi-cycle de service pour créer une onde sinusoïdale complète, nous utilisons deux broches qui alternent l'une après l'autre après exactement 10 msecondes (pour 50 Hz). Ce changement de broches est effectué à la fin du réseau - disons que la broche 5 a généré 314 impulsions, cette broche est mise hors tension et activée la broche 6, ce qui fait la même chose mais pour le rapport cyclique négatif.
Parce qu'arduino ne peut générer que des signaux positifs, le cycle de service négatif est créé dans le pont en h - vous pouvez lire ici à ce sujet
Le programme pour changer les broches:
sei();// activer les interruptions
}
ISR(TIMER1_COMPA_vect){// interruption lorsque la minuterie 1 correspond à la valeur OCR1A
if(i>313 && OK==0){// valeur finale du vecteur pour la broche 6
i=0;// aller à la première valeur du vecteur
OK=1;//activer la broche 5
}
if(i>313 && OK==1){// valeur finale du vecteur pour la broche 5
i=0;//aller à la première valeur du vecteur
OK=0;//activer la broche 6
}
x=sinPWM;// x prend la valeur du vecteur correspondant à la position i(i est indexé à zéro)
i=i+1;// passe à la position suivante
si(OK==0){
OCR0B=0;//faire la broche 5 0
OCR0A=x;//activer la broche 6 sur le cycle de service correspondant
si(OK==1){
OCR0A=0;//faire la broche 6 0
OCR0B=x;//activer la broche 5 sur le cycle de service correspondant
}
}
Étape 4: Conduire un pont en H et filtrer le signal Pwm
Les signaux obtenus de l'arduino sont la partie de contrôle des applications de l'onduleur car les deux sont positifs. Pour faire une onde sinusoïdale complète et un onduleur pratique, nous devons utiliser un pont en h et effacer le pwm un filtre passe-bas.
Le pont en H est présenté ici.
Le filtre passe-bas testé avec de petits moteurs à courant alternatif-ici.
Conseillé:
Un hack de pavé tactile pour ordinateur portable cool pour les projets Arduino ! : 18 étapes (avec photos)
Un hack de pavé tactile pour ordinateur portable cool pour les projets Arduino ! : Il y a quelque temps, lorsque je bricolais avec un pavé tactile PS/2 avec un microcontrôleur Arduino, j'ai découvert que deux de ses connexions intégrées peuvent être utilisées comme entrées numériques. Dans ce Instructable, apprenons comment nous pouvons utiliser l'ajout d'un pavé tactile PS/2
Capteur de température pour Arduino appliqué pour COVID 19 : 12 étapes (avec photos)
Capteur de température pour Arduino appliqué pour COVID 19 : Le capteur de température pour Arduino est un élément fondamental lorsque l'on veut mesurer la température d'un processeur du corps humain. Le capteur de température avec Arduino doit être en contact ou proche pour recevoir et mesurer le niveau de chaleur. C'est ainsi que t
6 ans pour créer un feu de circulation de base avec scratch pour Arduino : 3 étapes
6 ans Création d'un feu de circulation de base avec Scratch pour Arduino : Mon fils était déjà curieux avec mes projets Arduino. Il a joué pendant un certain temps avec Snap Circuits et LEGO. Il a également commencé à construire des projets Scratch. Ce n'était qu'une question de temps pour nous de jouer avec Scratch pour Arduino. C'est notre premier projet. Ob
Carte de relais pour Arduino pour moins de 8 $ : 5 étapes
Carte relais pour Arduino pour moins de 8 $ : Salut les amis, aujourd'hui, je vais vous expliquer comment faire une carte relais pour Arduino pour moins de 8 $. Dans ce circuit, nous n'allons pas utiliser de circuit intégré ou de transistor. Alors, faisons-le
Utilisez 1 entrée analogique pour 6 boutons pour Arduino : 6 étapes
Utiliser 1 entrée analogique pour 6 boutons pour Arduino : je me suis souvent demandé comment je pourrais obtenir plus d'entrées numériques pour mon Arduino. Il m'est récemment venu à l'esprit que je devrais pouvoir utiliser l'une des entrées analogiques pour introduire plusieurs entrées numériques. J'ai fait une recherche rapide et j'ai trouvé où les gens étaient ab