Cours:TPS 2103 tp powerfuses : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m ({{Bleu|MLI}})
m ({{Bleu|Potentiomètre}})
Ligne 118 : Ligne 118 :
  
 
=={{Bleu|Potentiomètre}}==
 
=={{Bleu|Potentiomètre}}==
 +
[[Image:Can_atmega328.png|droite|vignette]]
  
 
Nous souhaitons maintenant commander la position du servomoteur au travers d'un potentiomètre.
 
Nous souhaitons maintenant commander la position du servomoteur au travers d'un potentiomètre.

Version du 8 mai 2016 à 17:15

Retour à la liste des Tps

Éléments de correction

Atmega328p.png

Nous utiliserons un atmega328p en format DIP, que nous placerons sur une plaque à essais(le µcontrôleur présent sur les cartes arduino).


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

Avr isp.jpg

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

Todo.jpg 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)

Question.jpg 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.

Todo.jpg 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.

Question.jpg 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 : TiemposServo

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%.

Question.jpg É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

Can atmega328.png

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.

Question.jpg Écrire un programme répondant au cahier des charges

Consommation

activer le mode économie d'énergie

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.