Commande moteur

Commande du sens de rotation avec un pont en H :

Le pont en H va nous permettre de commander le sens de rotation du moteur. Les figures ci-dessous expliquent le principe grâce à un montage constitué de quatre interrupteurs et du moteur M à commander.

  • État initial : Tous les interrupteurs sont ouverts donc le courant de l'alimentation ne peut pas parvenir au moteur. Le moteur est à l'arrêt.

  • Lorsque l'on ferme les interrupteurs A et C, B et D restant ouverts, le courant électrique parvient au moteur en suivant le cheminement en jaune : le moteur tourne dans un sens.

  • En ouvrant A et C : le moteur s'arrête (état initial). Si les interrupteurs B et D se ferment, A et C restant ouverts. Le courant électrique parvient au moteur en suivant le cheminement figuré en violet : le moteur tourne dans l'autre sens.

Attention :

Il ne faut surtout pas fermer en même temps les interrupteurs A et D, ou bien B et C, car on créerait un court-circuit avec l'alimentation.

Montage avec des transistors

En remplaçant les interrupteurs par des interrupteurs électroniques, commandés par des courants ou des tensions, comme des transistors bipolaires par exemple on obtient le schéma ci-contre. L'avantage ici est que l'on peut commander ces transistors en tension.

Tinker CAD

Simulation du pont en H avec Tinker CAD :

Schéma structurel

A partir du schéma structurel  :

  • Entourer la partie concernant le pilotage des deux moteurs.

  • Identifier les portes ET

  • Identifier le pont en H

La commande des deux moteurs peut être résumée par la figure ci-contre. Les signaux EN1, PWM1 et EN2, PWM2 permettent de contrôler les moteurs 1 et 2. Nous allons tenter de comprendre comment en analysant le schéma structurel.

Sur le schéma structurel identifier les fils EN1, EN2, PWM1, PWM2 et compléter le tableau suivant.

BROHES

Rôle

EN1,EN2

_________________________________________________________________________

_________________________________________________________________________

_________________________________________________________________________

PWM1, PWM2

_________________________________________________________________________

_________________________________________________________________________

Code pour utiliser les moteurs

Il est possible de trouver des exemples de programmation du robot dans cette page commerciale par exemple. À partir de ces exemples un code source légèrement modifié pour être conforme au schéma de principe est présenté :

1
// Broches de control du moteur 1
2
const int PWM1 = 6; // PWM moteur 1
3
const int DIR1 = 7; // Broche control de la direction
4
// Broches de control du moteur 2
5
const int PWM2 = 5;  // PWM moteur 2
6
const int DIR2 = 12; // Broche control de la direction
7
// Constante pour le pilotage 
8
const int AVANCER = 0; //go forward
9
const int RECULER = 1; //go back
10
/* Fonction pilotage des moteurs :
11
Moteur 1 droite (vue du dessus)
12
M1_DIR : AVANCER/RECULER
13
M1_PWM  : 1-255 (PWM) 0 -> STOP
14
Moteur 2 gauche (vue du dessus)
15
M2_DIR : AVANCER/RECULER
16
M2_PWM  : 1-255 (PWM) 0 -> STOP
17
*/
18
void Motor_Control(int M1_DIR,int M1_PWM,int M2_DIR,int M2_PWM)//control motor
19
{
20
  //////////M1////////////////////////
21
  if(M1_DIR==AVANCER)
22
    digitalWrite(DIR1,AVANCER);
23
  else
24
    digitalWrite(DIR1,RECULER);
25
  if(M1_PWM==0)
26
    analogWrite(PWM1,LOW);//stop
27
  else
28
    analogWrite(PWM1,M1_PWM); //Vitesse
29
30
  ///////////M2//////////////////////
31
  if(M2_DIR==AVANCER)
32
    digitalWrite(DIR2,AVANCER);
33
  else
34
    digitalWrite(DIR2,RECULER);
35
  if(M2_PWM==0)
36
    analogWrite(PWM2,LOW);
37
  else
38
    analogWrite(PWM2,M2_PWM);
39
}
40
void setup()
41
{
42
  pinMode(DIR1,OUTPUT); // Broches moteurs en sortie
43
  pinMode(PWM1,OUTPUT);
44
  pinMode(DIR2,OUTPUT);
45
  pinMode(PWM2,OUTPUT);
46
47
  Serial.begin(9600);
48
49
}
50
void loop()
51
{
52
  Motor_Control(AVANCER,60,AVANCER,60);//run motor
53
  delay(5000);
54
  Motor_Control(RECULER,60,RECULER,60);//run motor
55
  delay(5000);
56
}
57

Objectif général  :Vous devrez réaliser une commande du robot pour qu'il réalise un huit (deux cercles connectés par un point). Vous choisirez le rayon de vos cercles en jouant sur les rapports cycliques. Puis vous jouerez sur les temporisations pour gérer tout cela. Bien entendu, le fait qu'il n'y ait pas d'information de retour sur l'endroit où vous êtes complique un peu la mise au point.

Exercice 1

Modifier le programme ci-dessus pour réaliser un simple cercle. Seule la partie loop() est à modifier !

Attention : Vos essais seront faits sur la table de travail.

  • Il y a des risques de chutes ! Soyez donc prudents !

  • Ne mettez pas de vitesses excessives !

  • N'oubliez pas que votre câble USB n'est pas infini !

Exercice 2

Réaliser maintenant votre huit (deux cercles se touchant par un point). On pourra réaliser tout cela dans le noir avec une prise de trajectoire par appareil photo à pose longue.

Exercice 3

Etude du rayon du cercle. Sanchant que la trajectoire :Essayez d'étudier si le rayon peut s'écrire \(R=K \frac{\alpha _g+\alpha _d}{\alpha _g-\alpha _d} \)où α \(\alpha _{g}\) et \(\alpha _{d}\) désignent le rapport cyclique des moteurs gauche et droit (qui varient entre 0 et 255) et K est une constante à déterminer.