Cours:TPS 2103 tp powerfuses : Différence entre versions
(→{{Bleu|Consommation}}) |
m (→{{Bleu|Consommation}}) |
||
| Ligne 130 : | Ligne 130 : | ||
On souhaite bien évidemment réduire au maximum la consommation du µcontrôleur. | On souhaite bien évidemment réduire au maximum la consommation du µcontrôleur. | ||
| − | Attention à ne pas mesurer la consommation du servomoteur lors des | + | Attention à ne pas mesurer la consommation du servomoteur lors des mesures réalisées. |
{{Question|Faire en sorte de minimiser la consommation}} | {{Question|Faire en sorte de minimiser la consommation}} | ||
Version du 8 mai 2016 à 17:18
Nous utiliserons un atmega328p en format DIP, que nous placerons sur une plaque à essais(le µcontrôleur présent sur les cartes arduino).
Sommaire
Câblage
Alimentation
Il faut bien évidemment alimenter notre composant.
On prendra une alimentation 5V continue, sur laquelle vous relierez un ampèremètre qui nous permettra de faire des mesures de consommation.
Pensez à relier tous les GND, ainsi que la broche AVCC (tension pour le convertisseur analogique-numérique).
Programmation
Nous utiliserons un programmateur olimex avr-isp mkii, qu'il convient de relier correctement au µcontrôleur.
La figure ci-contre d'une part, et celle en début de document d'autre part, sont suffisante pour réaliser le câblage.
Attention, le connecteur ISP tel que représenté est une vue du connecteur mâle normalement soudé sur la carte électronique à programmer. Il faut de servir du bossage sur le connecteur qui indique le côté de la broche n°1.
On ne connectera pas le VCC/VTG du connecteur de programmation, le µcontrôleur étant déjà relié à une alimentation.
Vérification
Vérifions que le µcontrôleur est bien connecté en exécutant l'instruction suivante qui permet de tester la communication avec le programmateur :
avrdude -c avrisp2 -P usb -p m328p
Remarque : si cela ne fonctionne pas, il peut être nécessaire d'ajouter un Quartz entre les broches XTAL1-XTAL2
Source d'horloge
Dans cette partie, nous allons modifier la configuration du µcontrôleur au travers de ces fusibles.
L'objectif est de comparer différentes horloges et d'étudier les conséquences en terme de consommation.
Attention, modifier les fusibles n'est pas sans conséquences, et une mauvaise manipulation peut entraîner un blocage irrémédiable du µcontrôleur. En cas de doute, faire vérifier votre configuration !
Signal périodique à 1kHz
Nous souhaitons générer un signal à 1kHz, en utilisant le module adapté : un timer.
L'objectif n'étant pas ici de consacrer notre temps à la configuration de ce timer, vous pouvez utiliser cette page de calcul libreoffice. Il va sans dire que le timer sera :
- configuré en mode CTC
- Fcomparaison = 2.Fsortie (Fréquence de comparaison et Fréquence du signal de sortie)
- la sortie sera directement pilotée par le timer (configuration du module de sortie avec bits COMxxx)
Choisissez un timer, branchez un oscilloscope et observez signal et consommation pour :
- Oscillateur interne 1MHz
- Oscillateur interne 8MHz
- Oscillateur interne 128kHz
- Oscillateur externe 16MHz (Quartz)
La sélection de l'horloge s'effectue grâce aux fusibles.
La description est donnée partie 9 (page 27 et suivantes) de la datasheet atmel de l'atmega328p.
Comparer les résultats pour les différentes horloges
Mode d'économie d'énergie
Passez à la suite si vous avez passé plus de 30 minutes sur la question précédente !
On souhaite aller un peu plus loin dans la gestion de la consommation.
A l'aide de la datasheet pages 39 et suivantes (partie 10), passez le µcontrôleur en mode d'économie d'énergie
Pour configurer ce mode d'économie d'énergie, vous utiliserez les fonctions du fichier avr/sleep.h,
dont :
- sleep_enable() : autorise l'entrée dans un mode d'économie d'énergie
- set_sleep_mode(mode) : mode à utiliser tel qu'indiqué dans le tableau ci-dessous
- sleep_mode() : passe le µcontrôleur dans le mode configuré
| Sleep Mode | valeur programme c |
|---|---|
| idle | SLEEP_MODE_IDLE |
| ADC Noise Reduction | SLEEP_MODE_ADC |
| Standby | SLEEP_MODE_STANDBY |
| Power-Down | SLEEP_MODE_PWR_DOWN |
Remarque :
- Les TIMERs utilisent (sauf cas particulier) l'horloge CLKio
- Le registre PRR permet une gestion plus fine de l'économie d'énergie
Servomoteur
Les servomoteurs possèdent généralement un connecteur à 3 contacts qui sont :
- rouge : VCC (ici et en général +5V)
- noir : GND
- jaune : signal de consigne/commande
Les servomoteurs utilisés ici sont commandés en position, c'est à dire que suivant la consigne, le moteur tourne jusqu'à la valeur désirée.
Il existe également des commandes en vitesse, et dans ce cas c'est la vitesse de rotation qui est fonction de la commande.
Le signal de consigne est tel qu'indiqué sur la figure ci-dessous :
MLI
On constate sur la figure qu'il est nécessaire de générer un signal MLI (ou PWM) dont la fréquence (ou période) est indiquée sur la figure.
Remarquons que le rapport cyclique ne devra varier que dans une certaine plage, et non de 0% à 100%.
Écrire un programme qui fait varier la position du servomoteur entre ses positions extrêmes.
Remarques
- Vous devez choisir une source d'horloge (cf fuses)
- Vous devez choisir un timer
- Vous devez configurer ce timer
- Il existe pour la plupart des TIMERs un mode PWM dont la valeur maximum du TIMER est réglable
- mode 7 pour TIMER0/TIMER2
- mode 14 pour TIMER1
Potentiomètre
Nous souhaitons maintenant commander la position du servomoteur au travers d'un potentiomètre.
On reliera bien évidemment ce potentiomètre sur une entrée analogique du µcontrôleur.
Écrire un programme répondant au cahier des charges
Consommation
On souhaite bien évidemment réduire au maximum la consommation du µcontrôleur.
Attention à ne pas mesurer la consommation du servomoteur lors des mesures réalisées.
Faire en sorte de minimiser la consommation
Monostable
1bp et 1 led
non configurable
- minimiser consommation
- mode redéclenchable ou non redéclenchable (on peut ajouter un interrupteur pour le choix du mode)
durée modifiable
ajouter un potentiomètre pour modifier le temps de déclenchement.
