Dans le cadre du programme REA, nous développons un rover. Nous avons tout d’abord décidé du mode de déplacement du robot, avant de nous pencher sur le type de moteurs à utiliser, puis au choix des roues ou chenilles pour la propulsion. Nous disposons maintenant d’un groupe moto-propulseur, qu’il convient de s’intéresser au contrôle des moteurs pour gérer précisément les déplacements du rover. Nous nous pencherons maintenant sur cette problématique.

Problématique du contrôle des moteurs

Si nous nous appuyons sur des servomoteurs à rotation continue, alors il n’y a besoin de rien de plus pour les contrôler. En revanche, avec des moteurs DC ou des moteurs pas à pas, il faut pouvoir les commander. Laissons de coté le cas un peu spécifique des moteurs pas à pas pour le moment, et revenons sur les moteurs DC.

Quand le courant électrique passe dans un sens, le rotor se met à tourner dans le sens A. Quand on inverse le sens du courent électrique, le rotor tourne dans le sens B. Notre moteur peut donc tourner dans deux sens, ce qui nous permet d’avancer, reculer, et tourner en combinant deux moteurs tournant en sens contraires.

 

Le pont en H

Schéma d'un pont en H

Pont en H (schéma électronique)

Le problème est le suivant : comment peut on commander ces moteurs? Il faut en effet pouvoir faire varier le sens du courant à la volée quand on le souhaite. Pour ce faire, nous utiliserons une structure électronique appelée le “pont en H”.

Je cite Wikipedia : “Le pont en H est une structure électronique servant à contrôler la polarité aux bornes d’un dipôle. Il est composé de quatre éléments de commutation généralement disposés schématiquement en une forme de H d’où le nom. Les commutateurs peuvent être des relais, des transistors, ou autres éléments de commutation en fonction de l’application visée.“.

Sur l’illustration ci dessus, on peut voir le schéma d’un tel montage. Le + du circuit se sépare en deux, et le coté gauche passe par un commutateur S1, tandis que le côté droit passe par un commutateur S2. Après S1 et S2, on trouve les deux cotés de la charge, qui forme la branche horizontale du H, tandis que S1 et S2 sont les branches hautes, respectivement gauche et droite.

Le e câble partant de S1 continue vers S3 après l’intersection avec la charge au milieu, et idem pour le câble partant de S2, qui arrive en S4 après avoir croisé la charge. Les deux autres pôles des commutateurs S3 et S4 se rejoignent alors à la masse du circuit.

Le principe est qu’on ouvrira les contacts en S1 et S4, et fermera en S2 et S3. Ainsi, le courant circulera à travers la charge : le coté droit sera connecté au +, et le coté gauche au -.

Si l’on veut inverser le sens du courant, on fermera les contacts S1 et S4, et on ouvrira les contacts S2 et S3. Cette fois, le côté gauche de la charge sera connecté au +, et le coté droit au -.

Pour les commutateurs, on pourra donc en théorie utiliser n’importe quoi, mais en pratique on utilisera plutôt des transistors, pour leur capacité rapide de commutation. Maintenant, pour de très gros moteurs, on pourrait utiliser de gros relais, et reproduire le montage. Pour nos robots, les transistors permettront une très grande réactivité du système, et également de contrôler la vitesse des moteurs via un signal PWM (nous reviendrons dessus plus tard).

Il faut donc 4 transistors pour faire un pont en H, et ainsi contrôler un moteur. Puisqu’il nous faut deux moteurs, il nous faudra deux ponts en H, et donc 8 transistors. On peut aisément construire un double pont en H. Toutefois, puisque cette construction électronique est assez classique, il existe de nombreux circuits intégrés. On trouvera donc des puces “tout en un”, qu’on branchera simplement sur nos moteurs, à l’alimentation, et au circuit de commande.

 Exemples de composants implémentant des ponts en H

Il existe de très nombreux composants réalisant ces fonctions, mais nous nous intéresserons à trois modèles spécifiques :

  • le L293D;
  • le SN754410;
  • le DRV8835.

 

Le L293D

Le L293D est un circuit intégré très utilisé et connu pour commander de petits moteurs. Ce n’est pas la puce la plus efficace, mais elle est peu chère, facile à trouver, et de nombreuses ressources sont disponibles.

Cette puce contient l’équivalent d’un double pont en H, et peut donc commander deux moteurs, en gérant le sens, mais aussi la vitesse grâce à un signal PWM (nous détaillerons le principe plus bas). Voici le schéma d’un montage à base de L293D :

Schéma de câblage d'un L293D pour le contrôle des moteurs

Schéma de câblage d’un L293D pour le contrôle des moteurs

Source : article sur robotplatform sur le L293D.

Cette puce disponible au format DIP16 comporte 2 rangées de 8 broches.

A gauche, en partant du haut, la broche 1 est appelée enable 1, et permet de contrôler l’activation du premier moteur. Si on envoie un signal logique bas sur cette broche, le moteur 1 sera éteint. C’est via cette broche qu’on contrôlera la vitesse du moteur avec un signal PWM. Les broches 2 et 7 sont les entrées qui permettent de contrôler le sens de rotation du moteur. Si on envoie un signal haut sur la broche 2, et un signal bas sur la broche 7, le moteur tournera dans un sens, et si on envoie un signal bas sur la broche 2 et haut sur la broche 7, le moteur tournera dans l’autre sens. Toutes les autres combinaisons entraîneront l’arrêt du moteur. Bien sur, le moteur ne tournera que si la broche 1 reçoit un signal logique haut.

Les broches 3 et 6 seront connectées au moteur, tandis que les broches 4 et 5 seront connectée à la masse. Enfin la broche 8 sera connectée au Vmotor, à savoir le + de l’alimentation électrique des moteurs (généralement directement le + de la batterie)

Sur le côté droit, on retrouvera quelque chose de similaire, à quelques différences près.

Nous partirons cette fois ci du bas, pour la broche 9, vers le haut pour la broche 16. La broche 9 sera la broche enable2, qui contrôle l’activation du second moteur. Les broches 10 et 14 commandent le sens de rotation du moteur exactement comme les broches 2 et 7 commandent le moteur 1. Les broches 11 et 14 sont connectées au second moteur, et les broches 12 et 13 sont connectées à la masse. La broche 16 est connectée à l’alimentation logique (5V).

Il faut donc 6 signaux logiques pour commander nos deux moteurs avec cette puce. L’alimentation électrique des moteurs peut varier de 5V à 36V. L’alimentation logique peut accepter jusqu’à 7V.

La puce peut délivrer jusqu’à 600mA par moteur selon les spécifications. On peut toutefois aller un peu plus loin en refroidissement efficacement la puce, ou en mettant plusieurs puces en parallèle.

Quelques documents sur cette puce :

 

Le SN754410

Le SN754410, de TI est une puce au même format que le L293D, et compatible broche à broche (c’est à dire que dans un circuit, on peut enlever un L293D et mettre un SN754410 sans rien changer). Cette puce plus efficace fait tout ce que fait le L293D, mais peut délivrer plus de puissance. Ainsi, on peut atteindre 1A par moteur, et il est possible de recourir aux mêmes astuces qu’avec le L293D pour augmenter la puissance disponible. Ces puces intègrent de plus des diodes de protection pour protéger les transistors contre les retours de courant. Bref, une puce plus puissante, plus résistante, et compatible broche à broche avec les L293D. Si on a le choix, autant prendre celle ci à la place d’une L293D. Les deux inconvénients de cette puce sont qu’elle est moins courante et donc moins facile à trouver que le L293D, et qu’elle à un nom difficile à retenir!

Voici quelques documents:

 

Le DRV8835

Le DRV8835, encore de TI, est une puce plus moderne, capable de délivrer davantage de courant (1.5A max par moteur), et de contrôler deux moteurs. Par rapport aux deux puces précédentes, celle ci peut donc commuter plus de courant, mais également une tension plus faible pour les moteurs. Les deux précédentes sont prévues pour une tension de moteurs d’au moins 4.5V, contre 2V pour le DRV8835. En revanche, le DRV8835 ne permet pas ce commander des moteurs nécessitant une tension de plus de 11V.

L’intérêt de cette puce sera donc de pouvoir commander des moteurs à une faible tension (par exemple, si on utilise une batterie une cellule lipo, la tension variera entre 3 et 4.2V, ce qui est trop faible pour un L293D ou un SN754410), et/ou avec des courants plus forts. Il est à noter que le DRV8833 permet de monter jusqu’à 2A en pointe par moteur, au dépens de la plage de tension, puisqu’il faut au moins 2.7V, et au plus 10.8V.

Ces puces sont fabriquées dans un format peu pratique pour ceux qui ne peuvent pas souder des composants de surface, mais heureusement, on trouve des cartes permettant d’utiliser ces puces sur une breadboard ou simplement en soudant des câbles.

Avec la carte de Pololu, on contrôlera donc différemment la puce par rapport à un L293D/SN754410:

Contrôle des moteurs depuis un DRV8835 (crédits pololu)

Contrôle des moteurs depuis un DRV8835 (crédits pololu)

En pratique, du côté gauche de la carte, tout en haut, nous aurons la masse (GND), puis le VCC (alimentation logique).

En dessous, la broche enable (BENABL) du moteur B (même principe que la broche enable des deux précédentes puces).

Encore en dessous (quatrième broche en partant du haut), nous aurons l’entrée BPHASE, qui permet de contrôler le sens du moteur : si cette entrée reçoit un signal logique bas, le moteur tournera dans un sens, et si elle reçoit un signal logique haut, le moteur tournera dans l’autre sens (toujours si la broche benabl est active).

En dessous, en 5 et 6, nous aurons la broche enable du moteur A (AENABL), et la broche phase du moteur A (APHASE), qui auront le même rôle que pour le moteur B. Enfin, la broche tout en bas (MODE) est la broche permettant de régler le mode de contrôle. Pour que l’on puisse utiliser le moteur comme décrit plus haut, il faut que cette broche reçoive un signal logique haut (il suffit de la connecter à VCC). Dans le cas contraire, on contrôlera les moteurs de façon différente, avec davantage de possibilités (voir la documentation pour cela).

Du coté droit, en partant du haut, nous aurons d’abord la masse des moteurs (GND),  puis le VIN, ou le + des moteurs. En dessous, en 3 et 4, les broches de sortie du moteur B (BOUT2 et BOUT1), puis en 5 et 6 les broches de sortie du moteur A (AOUT2 et AOUT1). Enfin, la dernière broche, VMM, permet de récupérer le + de l’alimentation des moteurs, après le circuit de protection contre l’inversion de tension.

On notera donc ici qu’il suffira de 2 broches par moteur pour contrôler la vitesse et le sens, par rapport à 3 pour les deux précédentes puces.

Encore une fois, on peut multiplier les puces pour augmenter le courant de sortie, ou refroidir la puce. En pratique, d’après les tests de pololu, dans une pièce à température ambiante, la puce peut délivrer 1.2A par canal en continu, et  1.5A pendant 15s avant que la protection thermique intégrée ne coupe l’alimentation.

Dans tous les cas, il est à noter que cette protection thermique existe, et donc vous ne grillerez pas votre puce, elle s’arrêtera avant.

Voici quelques documents:

 

Il existe de nombreuses autres puces, comme par exemple le L298, le L298N, etc…

Certaines solutions sont plus complexes à utiliser que d’autres, et les plages de tension, les courants disponibles ainsi que d’autres paramètres varieront grandement.

 

Utilisation de signaux PWM pour contrôler la vitesse

Pour contrôler la vitesse des moteurs, on utilisera bien souvent des signaux PWM. En effet, on pourrait faire varier la tension délivrée aux moteurs, mais cela nécessite un circuit capable de fournir un signal de sortie analogique. Une autre solution consiste en gros à allumer et éteindre très rapidement le moteur, ce qui fait qu’il tournera en moyenne moins vite. C’est le principe de la PWM, ou Pulse Witdth Modulation, soit Modulation de la Largeur d’Impulsion.

 

Un signal PWM et le signal analogique équivalent généré

Un signal PWM et le signal analogique équivalent généré

Le principe est, comme sur le graphique ci dessus, d’envoyer un signal en créneaux, c’est à dire que par moment on enverra alternativement un signal bas, et alternativement un signal haut. Si on fait très rapidement cette alternance, cela permet d’activer/désactiver très rapidement le moteur, donc qu’il tournera moins vite.

En pratique, si 500 fois par seconde, on envoie du courant à la tension du moteur pendant 1ms, avant de couper le courant pour 1ms, le moteur recevra du courant 50% du temps. Il tournera donc moins vite, on dira qu’il a un cycle de 50%. En faisant varier la durée pendant laquelle on envoie du courant par rapport à la durée pendant laquelle le courant ne passe pas, on pourra ainsi faire varier la vitesse de rotation du moteur.

En pratique, si l’on envoie un signal PWM sur la broche enable du moteur, on pourra ainsi contrôler la vitesse du moteur, car le signal en sortie du pont en H aura le même cycle PWM.

 

Conclusions

Avec ce dernier composant, nous avons enfin le dernier composant nécessaire pour assurer la propulsion d’un robot roulant. Il est à noter que ces contrôleurs de moteurs permettent également (au moins les deux premiers) de commander des moteurs pas à pas, et qu’il existe des contrôleurs spécifiques pour les moteurs pas à pas.

On prendra bien soin d’ajuster le composant utilisé à la puissance des moteurs : si les moteurs atteignent X ampères au maximum, alors le contrôleur devrait pouvoir gérer au moins X ampères en continu pour le ou les canaux assignés à ce moteur. Il est préférable en outre de ne pas pousser les composants au maximum, donc il vaut mieux surdimensionner le contrôleur de moteur pour être sur de ne pas avoir de problème de surchauffe.

Certains composants apportent en outre diverses fonctionnalités supplémentaires, par exemple une protection anti-surchauffe, une mesure du courant consommé, etc. Il conviendra de considérer ces fonctionnalités selon les besoins, bien qu’on puisse en ajouter certaines avec des composants externes.

 

Réseaux sociaux