Piloter un moteur pas-à-pas à l'aide d'un Yocto-IO

Piloter un moteur pas-à-pas à l'aide d'un Yocto-IO

Il y a trois ans, on vous a donné un petit aperçu de ce que pourrait être un module Yoctopuce qui servirait à piloter des moteurs pas-à-pas. Entre temps, beaucoup d'eau à coulé sous les ponts, mais ce module n'est toujours pas en vente. Nous comptons toujours vous le proposer dans le futur, mais si vous avez un besoin immédiat de piloter un moteur pas-à-pas pour une application toute simple, nous avons peut-être une solution pour vous...

Les objectifs que nous nous sommes imposés pour la conception d'un module Yoctopuce dédié au contrôle de moteurs pas-à-pas sont assez ambitieux: microstepping, mouvements multi-axes synchronisés, courbes d'accélération et de torque contrôlées et prévisibles, etc. Il existe déjà sur le marché des produits qui en sont capables, et nous n'allions donc pas faire moins bien que les autres. Du coup, cela a pris bien plus de temps que prévu...

Cependant, il existe quelques applications toutes simples où ces fonctionnalités avancées ne sont pas nécessaires, et où l'on désire simplement utiliser un moteur pas-à-pas pour sa capacité à contrôler précisément l'amplitude d'un mouvement. La question se pose donc de savoir quel est le strict minimum nécessaire pour faire avancer un moteur pas-à-pas, et si un module Yoctopuce existant pourrait permettre de le satisfaire.

Fonctionnement d'un moteur pas-à-pas

D'un point de vue électrique, un moteur pas-à-pas est fait d'un ensemble d'électro-aimants dans le bâti du moteur, et d'aimants permanents solidaires à l'axe du moteur. Selon le sens du courant qui passe dans les électro-aimants, ils vont attirer ou repousser le pôle Nord, et réciproquement le pôle Sud, des aimants permanents. En choisissant la séquence d'activation des électro-aimants, on arrive ainsi à amener le moteur à une position désirée.

Principe théorique de pilotage d'un moteur pas-à-pas
Principe théorique de pilotage d'un moteur pas-à-pas


Pour éviter de multiplier les fils de commande, on rend symétrique les aimants sur l'axe du moteur, ce qui permet d'utiliser les mêmes conducteurs pour plusieurs bobines et d'obtenir le même résultat:

Optimisation des bobines dans un moteur pas-à-pas
Optimisation des bobines dans un moteur pas-à-pas


Ainsi, quatre fils suffisent à générer quatre états électriques stables distincts dans le moteur, qui permettent d'atteindre, par la séquence d'activation adéquate, seize positions mécaniques distinctes, appelés seize pas. En pratique, la plupart des moteurs multiplient les bobinages et les aimants dans le moteur, de sorte à obtenir typiquement 200 pas par tour de moteur. Mais le principe de fonctionnement reste exactement le même, et quatre fils suffisent quelque soit le nombre de pas. En faisant circuler le courant dans le bon ordre dans ces fils, on peut contrôler le sens de rotation du moteur, et en choisissant la fréquence d'alternance, on détermine la vitesse de rotation.

Pilotage par un module Yoctopuce

Du point de vue électrique, les moteurs pas-à-pas utilisent typiquement des tension allant de 3.2V à 24V selon les modèles. En réalité, ce n'est pas la tension qui est déterminante, c'est le courant qui circule dans les bobines. Mais en l'absence d'un mécanisme de limitation de courant, la tension maximale indiquée permet de limiter le courant par la résistance interne des bobines. Les courants impliqués sont typiquement de quelques dizaines de mA à quelques ampères, selon la taille du moteur.

Le module Yoctopuce qui permet le plus facilement d'appliquer sur quatre sorties des tensions jusqu'à 28V pour des courants jusqu'à 250mA est le Yocto-IO. Chaque sortie est pilotée activement vers la tension d'alimentation ou vers la masse, ce qui permet d'inverser le sens du courant entre une paire de fils.

Si l'on connecte les fils dans le bon ordre, il suffit d'activer les sorties l'une après l'autre dans l'ordre croissant pour faire tourner le moteur dans un sens, et dans l'ordre inverse pour inverser le sens du moteur.
Raccordement du Yocto-IO à un moteur pas-à-pas
C'est ainsi que le code suivant suffit pour amener le moteur d'une position A à une position B:

int position = A;
while(position != B) {
        int bobine = position & 3;
        digitalio.set_portState(1 << bobine);
        position += (B > A ? +1 : -1);
        YAPI.Sleep(5); // 5 ms d'attente entre les pas
}



Démonstration


Sur ce principe, voici un petit exemple écrit en HTML et Javascript, où nous pilotons un petit moteur pas-à-pas Pololu #1208 directement depuis une page web pour aller d'une position à une autre.

  


Ce code d'exemple est disponible sur GitHub: il ne fait que 75 lignes, dont la moitié sert à gérer l'interface graphique.

Conclusion

On a démontré qu'un Yocto-IO permet effectivement de produire des mouvements contrôlés avec un petit moteur pas-à-pas. Dans une application réelle, on pourait utiliser un Yocto-Maxi-IO-V2 à la place pour ajouter des entrées pour les interrupteurs de fin de course.

Si on avait besoin de plus de puissance, on pourrait aussi utiliser un Yocto-MaxiCoupler-V2 qui supporte 48V et 1.3A. Mais contrairement aux sorties du Yocto-IO, une sortie optocouplée ne tire que dans un sens. Il faudrait donc utiliser deux canaux par fil du moteur, l'un pour tirer vers l'alimentation et l'autre pour tirer vers la masse. Alternativement, à la place d'un moteur pas-à-pas bipolaire à 4 fils, on peut utiliser un moteur pas-à-pas à six fils, raccorder les deux fils centraux à l'alimentation et tirer les quatres fils uniquement vers la masse.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.