Dans ce tutoriel, nous expliquons comment utiliser PWM, expliqué précécemment, pour contrôler un moteur. Nous discuterons des méthodes "anciennes" de contrôle de moteurs avec des transistors et expliquerons els avantages de PWM avant d'expliquer la démonstration de travaux pratiques.

Contrôle d'un moteur

Dans le tutoriel 5, nous avons expliqué qu'il est possible de contrôler une LED par PWM. Une caractéristique intéressante est qu'il est possible de faire varier la luminosité de la LED comme si c'était fait en analogique, avec une impression d'éclairage continu bien que la tension soit 3.3V ou 0, sans intermédiaires.

l'avantage de cette méthode est que le rendement meilleur. Contrôler une LED de façaon analogique équivaudrait à n'avoir un bon rendement que si la LED est à pleine puissance.De la même façon, il est possible de réguler un moteur.

Faire tourner un moteur en sens inverse

Dans le cas d'un moteur, il est intéressant de pouvoir changer le sens de rotation. Ceci est possible en alimentant soit une borne, soit l'autre, la borne non alimentée étant évidemment à 0.

HBridgeCe schéma montre un montage à 4 transistors pour contrôler un moteur. De par sa forme, ce montage est appelé "H bridge", pont en H. Outre l'alimentation, ce montage a 2 signaux d'entrée A et B. Le point central de chaque côté contrôle si une borne est reliée à l'alimentation ou à 0. Par exemple, si A est à 1, la borne + du moteur va être reliée à l'alimentation, et sinon à 0. Le montage étant symétrique, il se passe la même chose pour B. Donc chaque borne du moteur peut être, sur commande de A ou B commutée sur l'alimentation ou sur 0.

La carte REOBoard a 4 de ces ponts en H, permettant de commander 4 moteurs DC.

Les 2 graphiques suivants montrent le chemin du courant en fonction de A et B. L'intérêt de cette topologie, c'est que bien que la tension ne soit pas symétrique (i.e. de 0 à VCC), il est possible de faire tourner les moteurs dans les deux sens.

HBridgeNeg

HBridgePos

 

 

 

 

 

 

 

Les chémas ci-dessus montrent le chemin du courant. À gauche, A = 0, B = 1, à droite, A = 1, B = 0.

Le programme

Si au montage ci dessus, nous alimentons A ou B en PWM, nous pouvons faire varier la vitesse dans chaque direction de la même façon que nous faisions diminuer l'intensité des LEDs.

Nous pouvons définir une fonction SetSpeed comme suit:

--------------------

void SetSpeed(int16 speed) {
    int8 sgn = 1;                            //    Sign of speed
    if(speed < 0) {
        sgn = -1;
        speed = -speed;
    }
    else if(speed > 0) sgn = 1;
    else sgn = 0;
    //    Truncate the speed
    if(speed > 999) speed = 999;
    //    Now process the different cases.
    if(sgn == 0) {
        P1SEL &= ~BIT4;
        P1SEL &= ~BIT5;
        P1OUT &= ~(BIT4+BIT5);
    }
    else if(sgn > 0) {
        P1SEL &= ~BIT4;
        P1SEL |= BIT5;
        P1OUT &= ~BIT4;
        TA0CCR4 = speed;
    }
    else {
        P1SEL &= ~BIT5;
        P1SEL |= BIT4;
        P1OUT &= ~BIT5;
        TA0CCR3 = speed;
    }
}

--------------------

Explication: la fonction SetSpeed détermine le signe de la vitesse. Le signe va décider du sens de rotation. Le signe peut prendre 3 valeurs, positif, négatif ou nul.

  • Si le signe est nul, alors nous devons bloquer le moteur, c'est à dire mettre les 2 bornes à 0.
  • Si la commande est positive, alors la borne positive sera alimentée suivant l'entrée PWM pendant que la borne négative est connectée à 0.
  • Si la commande est négative, c'est l'inverse. La borne négative est reliée à PWM pentant que la borne positive est à 0.

Le programme

Le programme ADC (tutorial 5) a été réutilisé. Les deux nouvelles fonctions sont la configuration du PWM et la configuration de la vitesse. Le code complet, à l'exception des utilitaires qui peuvent être téléchargés est ci-dessous.

L'ADC est utilisé un peu différemment. Si le potentiomètre est au milieu, alors le moteur ne tourne pas. S'il est à 0, le moteur tourne à fond dans un sens, et s'il est à VCC, alors le moteur tourne à fond dans l'autre sens. Toutes les positions intermédiaires sont en variation continue.

MotCPULoad

MotCPULoad2

La fréquence de mise à jour de la vitesse moteur est de 64 Hz, ce qui donne l'impression d'une variation très continue.

La mise à jour de la vitesse prend environ 9.6 µs, ce qui par rapport à 1/64 s représente moins de 0.1%.

Conclusion

Nous avons montré qu'une régulation de moteur peut être mise en oeuvre facilement. Le contrôle en temps réel ne prend quasiment aucune puissance du CPU même si tous les moteurs sont utilisés. Dans le cas de l'utilisation de 4 moteurs, la charge du processeur est inférieure à 1%, ce qui laisse beaucoup de place pour d'autres tâches.

 

Téléchargement

Un résumé des principaux tutoriels est téléchargeable ici.