Les moteurs pas à pas sont très pratiques car ils permettent de faire tourner leur axe d'un angle précis. Un moteur pas à pas bipolaire est composé de 4 fils couplés deux par deux aux bobines constituant le moteur.

stepper

Figure1: Un moteur pas à pas, l'aimant au centre est attiré par les électro aimants que l'on polarise pour obtenir chaque pas

Vulgairement, le moteur pas à pas est constitué d'un aimant central et d'électro aimant. En modifiant la polarisation des électro aimants ont fait effectuer à l'aimant central une rotation. On peut ainsi trouver aisément des moteurs qui ont une résolution de 200 pas par tour. De plus, avec une électronique appropriée derrière, il est possible d'augmenter la résolution et de l'augmenter ainsi facilement de 8 fois (de 200 pas on pas à 1600 pas par tour).

Pour contrôler un tel moteur nous aurons besoin d'un driver qui donnera de la puissance. Pour notre application qui dans un but premier doit simplement contrôler un moteur via le port série, nous ne nous compliquerons pas la vie et nous utiliserons simplement une puce très courante: l293. A noter que si quelqu'un voulait utiliser non pas un moteur bipolaire mais un moteur unipolaire, il lui faudrait utiliser un uln2003 que nous n'étudierons pas dans ce document.

Le schéma de mise en œuvre est celui-ci:

picl293

Pour contrôler un moteur pas à pas, voici l'enchainement des codes à envoyer suivant le pas dans lequel on se trouve :

 

RB4

RB3

RB2

RB1

RB0

1

0

1

0

1

X

2

1

0

0

1

X

3

1

0

1

0

X

4

0

1

1

0

X

Le but de l'application est de recevoir un nombre de pas à faire effectuer par le moteur et de pouvoir contrôler sa vitesse via une ligne rs232.

La première étape est d'initialiser le pic et le moteur, vu que l'on ne connait pas à quel pas se trouve le moteur, nous lui faisons effectuer quelque pas dans le vide, pour être sur qu'il passe au moins une fois par le code sur lequel il s'est arrêter.

Dans ce programme dont vous pourrez trouver les sources dans les téléchargements, l'octet envoyé par l'ordinateur est séparé en deux parties, le bit de poids faible donne la direction du mouvement et les 7 autres bits donnent un nombre pair de pas à effectuer. Quand les pas sont effectués, l'ordinateur reçoit une confirmation par la réception d'un 1.

Pour effectuer le bon pas, il faut absolument connaitre la position dans laquelle le moteur est. Comme vous pouvez le remarquez sur le tableau ci-dessus, il existe 4 codes qui doivent s’enchainer dans un sens ou dans l’autre pour que le moteur tourne. La solution que nous avons choisie est très simple à comprendre et est exposée dans le code source du programme.

Je préfère prévenir qu’il existe d’autres méthodes, plus simple pour arriver au même résultat, mais j’espère que vous m’en voudrez pas de m’être amuser à passer par une technique plus longue.

La première partie est de savoir dans quel pas on se trouve, pour ça nous conserverons la dernière position dans une variable. Ensuite il suffit de regarder la valeur décimale de chaque code.

Vu que RB1 vaut 2, RB2 vaut 4, RB3 vaut 8 et RB4 vaut 16, on peut donc calculer quel valeur décimal à chaque pas, il suffit alors d’ajouter ou de retirer au PORTB la valeur nécessaire pour passer au pas suivant ou précédent suivant la direction demandée.

Pour contrôler la vitesse nous passerons par un sous menu accessible depuis l'envoie du code 255 soit h'ff'. Lorsque l'on rentre dans ce sous menu, l'ordinateur reçoit une confirmation par la réception d'un '4' qui indique à l'ordinateur qu'il peut envoyer un nouvelle octet précisant la vitesse. La vitesse n'est rien d'autre que le temps de pause entre chaque pas. Dans un moteur pas à pas, la puissance du moteur dépend fortement de la vitesse à laquelle il tourne. Une fois la vitesse envoyée, (1=1µs jusqu'à 255= 255µs), le pic renvoie un 5 en confirmation.

Pour tester l'application, vous pouvez utiliser ce programme qui permet d'envoyer ce que l'on veut sur le port série :
http://www.docklight.de/

Telecharger le code source

Pour ceux qui souhaiterait aller plus loin avec les moteurs pas à pas, je vous conseille ces articles-ci parru plus récemment sur roboticus.org

Le moteur pas à pas bipolaire

Drive pour moteur pas à pas avec microstepping via la puce A3979