Outils pour utilisateurs

Outils du site


Panneau latéral

Navigation

Plan auto

robotique:r_hasika:propulsion

Propulsion de R.Hasika

Cette page décrit la propulsion du rover R. Hasika. Ce robot est basé sur une conduite différentielle. Il faut donc des moteurs de chaque côté. Pour rester simple, nous utiliserons deux moteurs, un à gauche et un à droite.

Les moteurs

Ce robot utilise des moteurs de type micro metal gearmotors, et en l’occurrence des modèles haute puissance ayant un rapport réducteur de 75 pour 1. L'axe de sortie est un axe de 3mm, avec un profil en D, compatible avec les roues Pololu. Voici la référence précise de ces moteurs : 75:1 Micro Metal Gearmotor HP with Extended Motor Shaft.

Dimensions physiques du moteur

Un schéma précis des dimensions du moteur est proposé par Pololu sur la page, et je le reprends ici (tous droits réservés à Pololu) :

Rapport de la boite de vitesse

Le rapport précis au centième est de 75.81:1, obtenu par le calcul suivant : (34*34*35*38)/(13*12*13*10).

En pratique, cela signifie que pour chaque tour de roue, le moteur effectue 75,81 tours.

Couple du moteur

Caractéristiques électriques

Vitesse de rotation

Les capteurs de rotation

Pololu propose pour les moteurs à axe direct accessible plusieurs capteurs permettant de mesurer la rotation de celui ci. Il serait possible de mesurer la rotation des roues directement, ce qui est la solution à employer si l'on dispose de moteurs ayant seulement l'axe de sortie normal situé après la boite de vitesse. Mais ici, puisque nous disposons en plus d'un axe direct du moteur, il est possible de mesurer la rotation du moteur avant la boite de vitesse, et ainsi d'obtenir une mesure bien plus fine. Puisque le rapport de réduction du moteur est de 75:1, pour chaque tour de roue, le moteur en effectue 75. Avec un capteur identique, nous aurons une résolution 75 fois plus fine. Les capteurs proposés pour cette tâche sont les suivants :

Les deux premiers capteurs sont similaires, la différence étant que le premier fonctionne en 5V, tandis que le second fonctionne en 3.3V. Tous deux sont des capteurs optiques, qui se basent sur deux capteurs de réflectance. Une petite roue à créneaux sur l'axe du moteur est entraînée par celui ci, et les créneaux de la roue passent devant les capteurs de réflectance. Ceux ci se composent d'une diode infrarouge, et d'un capteur. Quand le créneau se trouve devant le capteur de réflectance, le faisceau infrarouge est réfléchi, et on lit un signal logique haut. Quand un “trou” se trouve devant le capteur, le faisceau n'est pas réfléchit, et on lit un signal logique bas. Il y a 3 ou 5 créneaux selon la roue codeuse choisie, on sait donc qu'au bout de 3 ou de 5 signaux haut, on a fait un tour.

Le dernier capteur reprend le même principe général, mais s'appuie sur des capteurs de champ magnétique au lieu de capteurs optiques. Ici, notre roue codeuse contient de petits aimants qui seront détectés par un capteur hall 1), basé sur l'effet hall 2). Par rapport aux deux capteurs précédents, la plage d'alimentation acceptée va de 2.7V à 18V, et on passe à 6 comptes par tour pour chaque capteur hall (il y en a deux pour chaque capteur de rotation).

Ces divers capteurs sont comparables, et permettront de mesurer la rotation du moteur avec une précision suffisante dans tous les cas. J'ai cependant retenu le capteur magnétique pour diverses raisons :

  1. Il fonctionne de 2.7 à 18V, ce qui évite de devoir choisir en 3.3V et 5V selon le robot;
  2. La résolution est meilleure (entre 20 et 100% selon la roue codeuse du capteur optique);
  3. Le capteur hall a ma préférence face aux capteurs de réflectance.

Je vais détailler le troisième point un peu plus. Les capteurs optiques utilisent la lumière, ici infrarouge. Si une source infrarouge émet dans une longueur d'onde proche en direction des capteurs, on peut avoir des mesures perturbées. C'est peu probable, mais possible. Pour le capteur hall, les champs magnétiques peuvent perturber les mesures. Cependant, celui des moteurs est trop faible, et les aimants puissants susceptibles d'entrer en contact avec les moteurs sont rares.

Un second point important est que le capteur de réflectance doit émettre en continu un faisceau infrarouge. Nous avons deux capteurs de réflectance par capteur de rotation, soit un total de quatre DEL infrarouge qui émettent en permanence, que le robot soit à l'arrêt ou non. Cela entraîne une consommation de 12mA pour le capteur 5V (soit 60mW) et 24mA pour le capteur 3.3V (soit 80mW) 3) pour chaque capteur de rotation, ce qui est à multiplier par le nombre de moteurs.

Le capteur Hall nécessite une alimentation électrique pour fonctionner mais à priori plus faible. En pratique, les spécifications du capteur donnent une valeur minimale de 2mA et maximale de 6mA, avec une valeur typique de 4mA 4). Soit 4 à 12mA par capteur de rotation, avec une valeur typique de 8mA. En 5V, cela fera 40mW, et en 3.3V, 26mW de valeur typique par moteur, soit un gain de 33% à 67% selon la version. Avec la consommation minimale, on passera à une baisse de 83% et 92%, et dans le pire des cas avec la consommation maximale, on obtient 0% et 50% de mieux.

Enfin, le capteur magnétique propose des vrais trous pour souder les fils, au lieu de demi-trous sur les capteurs optiques.

Toutes ces différences ne sont pas forcément énormes, donc chaque capteur est une solution viable. Cependant, puisque le coût est similaire, j'ai préféré prendre le capteur que je juge meilleur.

Voici le brochage obtenu (tous droits réservés à Pololu) :

a.pololu-files.com_picture_0j5827.250.jpg GND représente la masse, OUT A et OUT B les deux sorties permettant de mesurer la rotation (connectés aux GPIO), VCC la borne positive de l'alimentation électrique (donc connectée au 3.3V ou 5V ou autre), et M1 et M2 les broches du moteur (connectées au contrôleur de moteur).

Ensemble moteurs et capteurs

Dans tous les cas, quel que soit le capteur choisi, ceux ci se soudent à l'arrière du moteur sur les deux broches de celui ci, et fournissent 6 fils qui permettent de faire fonctionner le moteur, d'alimenter les capteurs et également de lire les valeurs des capteurs. Une fois installés, on obtient ceci :

Dans cette implémentation, j'ai utilisé des fils de couleur :

  • marron pour la masse;
  • bleu pour OUT B;
  • violet pour OUT A;
  • rouge pour VCC;
  • vert pour M1;
  • jaune pour M2.

J'utilise les mêmes codes de couleur pour les deux moteurs. Pour cela, j'ai utilisé des “jumper wire” femelle-femelle que j'ai coupés en deux, puis soudés sur la carte

Roues/chenilles

Ce robot est pensé pour être modulable. Ainsi, on peut utiliser deux ou quatre moteurs selon le nombre de roues motrices souhaitées. Chaque moteur est connecté à une roue, et en version deux roues motrices, on ajoute deux roues libres. Dans tous les cas, on obtient quatre roues, dont une partie au moins sont motrices. Ces roues peuvent être des roues Pololu diverses, mais le robot a été pensé pour les roues Pololu de 35mm. Celles ci peuvent recevoir soit des pneus pour une configuration à 4 roues indépendante, soit des chenilles. L'entraxe des roues sélectionné ici est de 85mm, ce qui correspond à l'entraxe recommandé pour les chenilles à 30 dents de Pololu : Pololu 30T Track Set.

On peut voir sur ces deux images le robot en version bimoteur avec des chenilles :

Contrôleur de moteur

Le contrôle des moteurs est confié à un DRV8835 sur une carte d'interface Pololu : DRV8835 Dual Motor Driver Carrier Le DRV8835 de TI est une puce moderne, capable de délivrer davantage de courant (1.5A max par moteur) qu'un L293D ou qu'un SN754410, et de contrôler deux moteurs. Cette puce peut donc commuter plus de courant, mais sur é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 à partir d'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. Voici le schéma de câblage de la carte :

(image de Pololu, tous droits réservés)

En pratique, du côté gauche de la carte, tout en haut, nous aurons la masse, puis le VCC (alimentation logique). En dessous, la broche enable du moteur B (même principe que la broche enable des deux précédentes puces). Encore en dessous (4 è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 enable est active). En dessous, en 5 et 6, nous aurons la broche enable du moteur A, et la broche phase du moteur B, qui auront le même rôle que pour le moteur B. Enfin, la broche tout en bas 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, puis le VIN, ou le + des moteurs. En dessous, en 3 et 4, les broches de sortie du moteur B, puis en 5 et 6 les broches de sortie du moteur A. 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.

Comme avec des L293D ou des SN754410, 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. Quelques documents utiles :

Il existe une variante de cette puce, le DRV3383, pour lequel voici les documents équivalents :

1)
Définition du capteur à effet Hall : Capteur_à_effet_Hall
2)
Description de l'effet Hall : Effet_Hall
3)
voir section “5V and 3.3V versions” : https://www.pololu.com/product/2590
4)
spécifications officielles du capteur hall utilisé pour les capteurs de rotation des moteurs : https://www.pololu.com/file/0J815/TLE4946-2K.pdf
robotique/r_hasika/propulsion.txt · Dernière modification: 09/01/2015 23:20 par sky99