Dans ce projet, nous allons utiliser l'une des fonctionnalités d'ATmega32A pour régler la luminosité de 1 Watt LED. La méthode utilisée pour régler la vitesse de la LED est PWM (Pulse Width Modulation). Ce didacticiel PWM du microcontrôleur AVR explique en détail le concept PWM et la génération de PWM (vous pouvez également vérifier ce circuit générateur PWM simple). Considérez un circuit simple comme indiqué sur la figure.
Maintenant, si l'interrupteur de la figure ci-dessus est fermé en continu pendant une période de temps, alors l'ampoule s'allumera en continu pendant ce temps. Si l'interrupteur est fermé pendant 8 ms et ouvert pendant 2 ms sur un cycle de 10 ms, alors l'ampoule ne sera allumée que pendant 8 ms. Maintenant, le terminal moyen sur une période de 10 ms = temps d'activation / (temps d'activation + temps d'arrêt), cela s'appelle le cycle de service et est de 80% (8 / (8 + 2)), donc la moyenne la tension de sortie sera de 80% de la tension de la batterie.
Dans le second cas, l'interrupteur est fermé pendant 5 ms et ouvert pendant 5 ms sur une période de 10 ms, de sorte que la tension moyenne aux bornes à la sortie sera de 50% de la tension de la batterie. Dites si la tension de la batterie est de 5V et le cycle de service est de 50% et donc la tension moyenne aux bornes sera de 2,5V.
Dans le troisième cas, le cycle de service est de 20% et la tension moyenne aux bornes est de 20% de la tension de la batterie.
Dans ATMEGA32A, nous avons quatre canaux PWM, à savoir OC0, OC1A, OC1B et OC2. Ici, nous allons utiliser le canal OC0 PWM pour faire varier la luminosité de la LED.
Composants requis
Matériel:
Microcontrôleur ATmega32
Alimentation (5v)
Programmeur AVR-ISP
Condensateur 100uF, LED de 1 Watt
Transistor TIP127
Boutons (2 pièces)
Condensateur 100nF (104) (2 pièces), Résistances 100Ω et 1kΩ (2 pièces).
Logiciel:
Atmel Studio 6.1
Progisp ou magie flash
Schéma de circuit et explication de fonctionnement
La figure ci-dessus montre le schéma de circuit du variateur LED avec microcontrôleur AVR (vous pouvez également vérifier ce circuit de variateur LED simple).
Dans ATmega, pour quatre canaux PWM, nous avons désigné quatre broches. Nous ne pouvons prendre la sortie PWM que sur ces broches. Puisque nous utilisons PWM0, nous devrions prendre le signal PWM à la broche OC0 (PORTB 3 ème PIN). Comme le montre la figure, nous connectons la base du transistor à la broche OC0 pour piloter la LED d'alimentation. Ici, une autre chose est plus de quatre canaux PWM, deux sont des canaux PWM 8 bits. Nous allons utiliser ici un canal PWM 8 bits.
Un condensateur est connecté à chacun des boutons pour éviter les rebonds. Chaque fois qu'un bouton est enfoncé, il y aura du bruit au niveau de la broche. Bien que ce bruit se stabilise en millisecondes. Pour un contrôleur, les pics nets avant la stabilisation agissent comme des déclencheurs. Cet effet peut être éliminé par logiciel ou matériel, pour que le programme soit simple. Nous utilisons une méthode matérielle en ajoutant un condensateur anti-rebond.
Les condensateurs annulent l'effet de rebond des boutons.
Dans ATMEGA, il existe deux façons de générer PWM, ce sont:
1. Phase correcte PWM
2. PWM rapide
Ici, nous allons tout garder simple, nous allons donc utiliser la méthode FAST PWM pour générer le signal PWM.
Commencez par choisir la fréquence de PWM, cela dépend généralement de l'application, pour une LED, toute fréquence supérieure à 50Hz ferait l'affaire. Pour cette raison, nous choisissons le compteur d'horloge 1MHZ. Nous ne choisissons donc pas de préscalaire. Un prescalaire est un nombre qui est ainsi sélectionné pour obtenir une horloge de compteur moindre. Par exemple, si l'horloge de l'oscillateur est de 8Mhz, nous pouvons choisir un prescalaire de '8' pour obtenir une horloge de 1MHz pour le compteur. Le préscalaire est sélectionné en fonction de la fréquence. Si nous voulons plus d'impulsions de période, nous devons choisir un préscalaire supérieur.
Maintenant, pour obtenir le FAST PWM de l'horloge à 50 Hz de l'ATMEGA, nous devons activer les bits appropriés dans le registre « TCCR0 ». C'est le seul registre dont nous devons nous soucier, pour obtenir 8 bits FAST PWM.
Ici, 1. CS00, CS01, CS02 (JAUNE) - sélectionnez le prescalaire pour choisir l'horloge du compteur. Le tableau du préscalaire approprié est présenté dans le tableau ci-dessous. Donc pour le préréglage (horloge de l'oscillateur = horloge du compteur).
donc CS00 = 1, les deux autres bits sont nuls.
2. WGM01 et WGM00 sont modifiés pour choisir les modes de génération de forme d'onde, sur la base du tableau ci-dessous, pour PWM rapide. Nous avons WGM00 = 1 et WGM01 = 1;
3. Maintenant, nous savons que PWM est un signal avec un rapport de service différent ou des temps de mise en marche différents. Jusqu'à présent, nous avons choisi la fréquence et le type de PWM. Le thème principal de ce projet se trouve dans cette section. Pour obtenir un rapport cyclique différent, nous allons choisir une valeur entre 0 et 255 (2 ^ 8 à cause de 8 bits). Disons que nous choisissons une valeur 180, car le compteur commence à compter à partir de 0 et atteint la valeur 180, la réponse de sortie peut être déclenchée. Ce déclencheur peut être inverseur ou non inverseur. C'est-à-dire que la sortie peut être appelée à tirer vers le haut en atteignant le décompte, ou elle peut être dite à tirer vers le bas en atteignant le décompte.
Cette sélection de tirage vers le haut ou vers le bas est choisie par les bits CM00 et CM01.
Comme indiqué dans le tableau, pour que la sortie devienne élevée, comparez et la sortie restera élevée jusqu'à la valeur maximale (comme indiqué dans la figure en bas). Nous devons choisir le mode d'inversion pour ce faire, donc COM00 = 1; COM01 = 1.
Comme le montre la figure ci-dessous, OCR0 (Output Compare Register 0) est l'octet qui stocke la valeur choisie par l'utilisateur. Donc, si nous changeons OCR0 = 180, le contrôleur déclenche le changement (haut) lorsque le compteur atteint 180 à partir de 0.
Maintenant, pour faire varier la luminosité de la LED, nous devons changer le DUTY RATIO du signal PWM. Afin de modifier le rapport cyclique, nous devons modifier la valeur OCR0. Lorsque nous modifions cette valeur de OCR0, le compteur prend un temps différent, pour atteindre l'OCR0. Ainsi, le contrôleur tire la sortie haut à différents moments.
Donc, pour PWM de différents cycles d'utilisation, nous devons changer la valeur OCR0.
Dans le circuit, nous avons deux boutons. Un bouton sert à augmenter la valeur OCR0 et donc le DUTY RATIO du signal PWM, l'autre sert à diminuer la valeur OCR0 et donc le DUTY RATIO du signal PWM.