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

De troyesGEII
Aller à : navigation, rechercher
(MLI)
Ligne 28 : Ligne 28 :
 
Remarquons que le rapport cyclique ne devra varier que dans une certaine plage, et non de 0% à 100%.
 
Remarquons que le rapport cyclique ne devra varier que dans une certaine plage, et non de 0% à 100%.
  
{{Question|Écrire un programme qui fait varier la position du servomoteur entre ses positions extrêmes.}}
+
On utilisera le timer1 pour générer ce signal MLI. Prenez la datasheet pages 131 et suivantes.
  
'''Remarques'''
+
La fréquence de la MLI est donnée par Fmli= Fcpu / (P * ICR1), avec P le prédiviseur (1/8/64/256/1024) et ICR1<65535 (2^16).
*Vous devez choisir un timer
+
 
*Vous devez configurer ce timer
+
{{Todo|Choisir des valeurs pour P et ICR1}}
*Il existe pour la plupart des TIMERs un mode PWM dont la valeur maximum du TIMER est réglable
+
 
**mode 7 pour TIMER0/TIMER2
+
Le rapport cyclique sera réglé par :
**mode 14 pour TIMER1
+
*OCR1A pour la broche OC1A
 +
*OCR1B pour OC1B
 +
 
 +
Sa valeur est : rapportCyclique=OCR1A/ICR1
 +
 
 +
{{Question|Ecrire le programme pour générer cette MLI, et vérifier la fréquence à l'oscilloscope}}
 +
 
 +
<source lang=cpp>
 +
int main()
 +
{
 +
  // broche en sortie
 +
 
 +
  // timer1 en mode 14
 +
 
 +
  // valeur du prédiviseur
 +
 
 +
  // générer le signal MLI sur la broche OC1A ou OC1B (bits COM1xx dans le registre TCCR1A)
 +
 
 +
  // valeur du rapport cyclique
 +
 
 +
  while(1)
 +
  {
 +
      // on peut changer le rapport cyclique régulièrement ici
 +
  }
 +
}
 +
 
 +
 
 +
{{Question|Modifier votre programme pour faire varier la position du servomoteur entre ses positions extrêmes.}}
  
 
==Potentiomètre==
 
==Potentiomètre==

Version du 10 mars 2022 à 19:45

ArduinoPinout.png

datasheet atmega328p

Nous allons créer une sorte de télécommande pour voiture de modélisme.

Les actionneurs pour avion/voitures radiocommandées sont souvent des servomoteurs ou se comportent comme tel.

Nous ne ferons pas ici de transmission sans fil mais nous verrons le principe de communication entre l'émetteur et le récepteur en utilisant une liaison série.

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

On utilisera le timer1 pour générer ce signal MLI. Prenez la datasheet pages 131 et suivantes.

La fréquence de la MLI est donnée par Fmli= Fcpu / (P * ICR1), avec P le prédiviseur (1/8/64/256/1024) et ICR1<65535 (2^16).

Todo.jpg Choisir des valeurs pour P et ICR1

Le rapport cyclique sera réglé par :

  • OCR1A pour la broche OC1A
  • OCR1B pour OC1B

Sa valeur est : rapportCyclique=OCR1A/ICR1

Question.jpg Ecrire le programme pour générer cette MLI, et vérifier la fréquence à l'oscilloscope

<source lang=cpp> int main() {

  // broche en sortie
  // timer1 en mode 14
  // valeur du prédiviseur
  // générer le signal MLI sur la broche OC1A ou OC1B (bits COM1xx dans le registre TCCR1A)
  // valeur du rapport cyclique
  while(1)
  {
     // on peut changer le rapport cyclique régulièrement ici
  }

}


Question.jpg Modifier votre programme pour faire varier la position du servomoteur entre ses positions extrêmes.

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