Il n'est pas forcément évident de comprendre de prime abord l'intérêt du module uStepper. Alors voici quelques explications qui devraient vous aider à y voir plus clair.

Pour faire simple, il y a 2 grandes façons de contrôler une position de moteur à partir d'une électronique de commande :

  • soit en "boucle ouverte", sans correction des décalages
  • soit en "boucle fermée" , avec correction des décalages

Pour mémoire, un moteur pas à pas bipolaire correspond électriquement à 2 bobines, appelées phases :

On rappelle également que le principe général de commande d'un moteur pas à pas à l'aide d'un étage micropas est le suivant :

  • le moteur est connecté à l'étage micropas par 4 fils qui sont réunis 2 par 2, chaque paire correspondant à une phase(=bobine) du moteur
  • l'étage reçoit du microcontrôleur 3 broches numériques (ON/OFF) de commande typiquement :
    • la broche ENable qui active l'étage
    • la broche DIR qui fixe le sens de rotation du moteur
    • la broche STEP sur laquelle chaque front montant fait passer au pas suivant
  • D'autre part, diverses broches logiques permettent de configurer le mode de fonctionnement de l'étage, notamment la configuration du mode de microstepping à utiliser. Ces broches sont câblées au niveau hardware en général.

Pour plus de détail sur le principe de commande d'un moteur pas à pas en mode microstep, voir notre tuto dédié: Atelier Arduino : Moteurs : Apprendre à utiliser un moteur pas à pas bipolaires (en mode « microstep ») avec une carte Arduino.

Dans ce mode de contrôle de position :

  • on se contente de rechercher l'origine avant d'envoyer des ordres de mouvement
  • puis on envoie les ordres de mouvement en présupposant que le moteur fait ce qu'on lui demande.

En clair, en cas de perte de pas (lié à une opposition au mouvement du moteur), aucune correction n'est appliquée d'où un décalage progressif possible.

La "boucle ouverte" est le mode de contrôle utilisé par exemple sur les imprimantes 3D où l'on vient chercher la position d'origine à l'aide d'un endstop, puis ensuite les mouvements se font sans correction des décalages éventuels. Cela fonctionne bien en général car il n'y a pas trop de contrainte qui s'oppose au mouvement des moteurs.

Dans ce mode de contrôle de position :

  • la logique de commande est en mesure de connaître à tout moment la position réelle du moteur pas à pas à l'aide d'un encodeur rotatif (ou en ligne) de position
  • la logique de commande adresse des pas supplémentaires de correction dans le cas où une perte de pas survient en cas d'opposition au mouvement du moteur

En clair, en cas de perte de pas (lié à une opposition au mouvement du moteur), une correction est appliquée par l'ajout de pas supplémentaires d'où l'absence de décalage et une précision optimale.

L'utilisation d'un boucle fermée vient garantir la précision mécanique du mouvement, ce qui est intéressant dans de nombreuses situations et notamment en cas d'opposition importante au mouvement (cas des CNC) ou en cas de couple réduit (augmentation de la vitesse)

Pour réaliser un contrôle en "boucle fermée",il faut disposer :

  • en plus du moteur et du micro-contrôleur
  • du driver de commande
  • d'un encodeur rotatif : problématique mécanique de mise en oeuvre + câblage
  • d'une logique de contrôle spécifique : problématique de son implémentation et de son câblage au microcontrôleur

Une première solution consiste à implémenter la logique de contrôle de la boucle fermée dans le firmware du micro-contrôleur qui reçoit également le signal de l'encodeur rotatif: cette solution est plus théorique que réalisable en pratique.

En effet, les firmwares disponibles (GRBL, Marlin, Smoothieware...) n'implémentent pas cette logique et les modifier en ce sens n'est pas une mince affaire, très chronophage, si tant est que cela soit possible.

Cette solution est celle qui existe en "standard" :

  • l'encodeur est fourni monté sur le moteur pas à pas
  • l'étage moteur intègre la logique de contrôle et reçoit les signaux en provenance de l'encodeur sur un bornier dédié.

Cette solution a l'avantage d'être "transparente" pour le firmware.

Cette solution a plusieurs inconvénients :

  • son coût est assez élevé
  • il faut trouver un moteur aux caractéristiques voulues disposant de l'encodeur... et en pratique on est plutôt obligé de se contenter des caractéristiques du moteur avec encodeur que l'on trouve
  • la logique de contrôle n'est pas programmable et ne permet pas le recueil de données en général

Cette solution est notamment celle proposée par le module uStepper. Le principe est un montage du module à l'arrière du moteur.

Cette solution présente l'avantage :

  • d'être transparente pour le firmware
  • d'être polyvalente mécaniquement puisqu'elle est utilisable avec n'importe quel moteur pas à pas standard NEMA 17
  • son coût est acceptable

Mais le module uStepper va plus loin :

  • en plus d'intégrer sur le même module l'encodeur rotatif 12 bits + le driver moteur + la logique de commande
  • la logique de commande utilisée est de type "Arduino-like" (en clair un ATMega 328) programmable
  • et dispose également de broches E/S, de broches PWM et analogiques
  • ainsi que de l'UART par port USB pour communiquer

Au final, le module uStepper est une solution "tout-en-un" très intéressante :

  • Solution "transparente" pour le firmware : s'utilise comme un driver "classique"
  • Solution "transparente" mécaniquement : s'utilise avec n'importe quel moteur NEMA 17
  • Solution "transparente" électroniquement : le module se place simplement à l'arrière du moteur grâce à l'encodeur rotatif magnétique

Le caractère programmable offre de plus toute la souplesse voulue :

  • le module peut fonctionner dans 3 modes différents : autonome avec ou sans correction de pas ou bien contrôlé par un microcontrôleur par broches EN/STP.DIR avec correction de pas
  • le module permet la récupération de données de position en temps réel pendant l'exécution du mouvement ou par mise en position manuelle (apprentissage)
  • le module permet l'ajout simple de dispositif connexes (capteurs, etc.) rendant facile ce qui serait plus compliqué et moins élégant sans lui.