Archives

Arduino et moteurs pas à pas : Découverte de la bibliothèque AccelStepper

.

Dans ce tutoriel, nous présentons comment contrôler un moteur pas à pas à l’aide des drivers TB6600, DM542 ou DM860, en association avec une carte Arduino, en mettant en avant quelques fonctions spécifiques de la librairie AccelStepper. Grâce à cette dernière, notre code permet à l’utilisateur d’ajuster la vitesse du moteur via un potentiomètre, de démarrer ou arrêter le moteur via des boutons, et d’obtenir des retours visuels grâce à deux LEDs, illustrant l’état de fonctionnement du moteur et sa phase d’accélération.

Découverte et utilité de la librairie AccelStepper :

La librairie AccelStepper dépasse la simple commande d’un moteur pas à pas. Elle propose une gamme étendue de fonctionnalités, mais ce tutoriel n’en aborde certaines que superficiellement. Par exemple, cette librairie autorise un contrôle précis de l’accélération, elle gère minutieusement les mouvements et elle est compatible avec de nombreux pilotes de moteurs. Nous démontrons dans ce tutoriel comment utiliser AccelStepper pour simplifier et enrichir le pilotage d’un moteur pas à pas, en modifiant sa vitesse selon la position d’un potentiomètre ou en lançant une série de mouvements avec une seule commande.

Pour aller plus loin dans la découverte de cette librairie et explorer ses nombreuses autres fonctionnalités, nous vous recommandons vivement de consulter notre chaîne YouTube. Vous y trouverez une multitude de tutoriels et d’applications diverses centrées sur la librairie AccelStepper, vous offrant une compréhension approfondie et des idées pour vos futurs projets.

Bonus : Sur cette page, vous avez également la possibilité de télécharger directement le code présenté dans ce tutoriel. N’hésitez pas à le récupérer pour vous familiariser avec sa structure et ses commandes.

Ces fonctions sont les principales méthodes de la bibliothèque AccelStepper utilisées dans notre code pour contrôler le moteur pas à pas.

  • AccelStepper::DRIVER: Il s’agit d’un mode de fonctionnement pour le pilote du moteur pas à pas. Cela indique à la bibliothèque qu’on utilise un pilote externe (comme le TB6600) pour contrôler le moteur, et qu’on ne fait que lui fournir des signaux de step et de direction.

  • stepper(AccelStepper::DRIVER, pinPULS, pinDIR) : Ceci est le constructeur de la classe AccelStepper qui initialise un nouvel objet pour contrôler un moteur pas à pas. Ici, on lui indique le mode de fonctionnement et les pins pour les signaux de step et de direction.

  • stepper.setMaxSpeed(speed) : Cette fonction définit la vitesse maximale à laquelle le moteur peut tourner.
  • stepper.setAcceleration(50) : Cette fonction définit la valeur d’accélération pour le moteur.
  • stepper.moveTo(stepper.currentPosition() + 1000000) : Cette fonction demande au moteur de se déplacer vers une position donnée. Ici, il est demandé au moteur de se déplacer d’un grand nombre de pas depuis sa position actuelle.
  • stepper.setCurrentPosition(0) : Cette fonction réinitialise la position actuelle du moteur à une valeur donnée, dans ce cas, zéro.
  • stepper.stop() : Cette fonction arrête immédiatement le moteur.
  • stepper.run() : Cette fonction doit être appelée régulièrement pour faire tourner le moteur. Elle prend en compte la vitesse, l’accélération, et la position cible pour déterminer les étapes à effectuer.

 

Facebook Twitter Youtube

Grabcad Thingiverse Cults  

Guide Pratique pour une Accélération Maîtrisée d’un Moteur Pas-à-Pas avec Arduino

.

Ce code est destiné à contrôler un moteur pas à pas avec un Arduino, en utilisant un driver TB6600. Le code contrôle trois aspects du moteur : l’activation, la direction et la vitesse.

Le contrôle du moteur est réalisé via les broches ENA (Enable), PULS (Pulse) et DIR (Direction). ENA sert à activer ou désactiver le moteur, PULS contrôle le mouvement du moteur en générant des impulsions, et DIR contrôle la direction du mouvement.

L’état d’activation du moteur est contrôlé par l’état d’un bouton physique connecté à la broche Bouton_depart_cycle. Lorsque ce bouton est relâché, le moteur est activé et commence à se déplacer.

Le code utilise aussi une rampe d’accélération, qui est une façon d’augmenter progressivement la vitesse du moteur au démarrage. Lorsqu’elle est active, la rampe d’accélération modifie le délai entre les impulsions envoyées à la broche PULS, ce qui fait accélérer le moteur progressivement. L’activation de la rampe d’accélération est contrôlée par un autre bouton connecté à la broche Bouton_choix_rampe. L’état de la rampe d’accélération est aussi indiqué par une LED

Information complementaire :

Dans ce code, nous utilisons une broche dédiée (oscilloscope) pour surveiller et analyser les impulsions du moteur dans le temps. La ligne digitalWrite(oscilloscope, !digitalRead(oscilloscope)); est responsable de cette opération.

Chaque fois que nous envoyons une impulsion au moteur pour faire avancer d’un pas (qui est gérée par la broche PULS_PIN), nous inversons également l’état de la broche de l’oscilloscope. Cela signifie que l’état de la broche oscilloscope est une réplique du signal de la broche PULS_PIN, elle change donc chaque fois que nous envoyons une impulsion au moteur.

En connectant cette broche à un oscilloscope, nous pouvons visualiser la fréquence et le timing des impulsions du moteur. C’est particulièrement utile lorsque nous utilisons une rampe d’accélération pour contrôler le moteur, car nous pouvons voir comment la vitesse du moteur change en fonction du temps.

L’oscilloscope nous donne une image visuelle de ces variations, ce qui nous permet d’analyser en détail comment notre moteur réagit aux commandes que nous lui donnons. C’est un outil précieux pour le débogage et l’optimisation de notre contrôle moteur.

Facebook Twitter  Youtube

Grabcad Thingiverse Cults  

Le code pour le TB6600 5/8 , Contrôle d’un moteur pas-à-pas en fonction de l’angle souhaité

Contrôle d’un moteur pas à pas en fonction
de l’angle de rotation souhaité

Ce programme permet de contrôler un moteur pas-à-pas pour effectuer un angle de rotation spécifié en degrés en appuyant sur un bouton. Le programme utilise les bibliothèques Arduino standard pour contrôler les broches d’entrée et de sortie et pour déterminer le temps écoulé entre les impulsions pour contrôler la vitesse du moteur.

  1. Déclarations de variables : Les constantes et variables nécessaires pour le contrôle du moteur sont définies ici, comme les broches de contrôle, la résolution du moteur, la base de temps pour les impulsions et d’autres variables d’état.
  2. La fonction ConversionAngleEnTour(float angle) convertit un angle en degrés en un nombre de pas pour un moteur pas-à-pas.
  3. Le setup() configure les broches d’entrée et de sortie du microcontrôleur et initialise les variables nécessaires au bon fonctionnement du programme.
  4. Le loop() effectue les opérations suivantes :
  • Lecture de l’état du bouton.
  • Inversion de l’état du moteur lorsque le bouton est enfoncé.
  • Si le moteur est en marche, il calcule le nombre total de pas nécessaires pour effectuer la rotation souhaitée et effectue la rotation en générant des impulsions sur la broche PULS_PIN.
  • Lorsque le moteur a atteint le nombre de pas souhaité, il arrête le moteur et réinitialise le compteur de pas.
  • Si le moteur n’est pas en marche, il allume la LED pour indiquer que le moteur est en attente de validation pour tourner.
Voici le principe de codage de la fonction : ConversionAngleEnTour
 

Ce code définit une fonction appelée ConversionAngleEnTour, qui prend un argument angle de type float. La fonction a pour but de convertir un angle en degrés en un nombre de pas pour un moteur pas-à-pas.

Dans le corps de la fonction, on trouve l’expression angle * resolution / 360.0. Cette expression effectue les opérations suivantes :

  1. Multiplie l’angle donné par la valeur de la variable resolution, qui représente le nombre de pas nécessaires pour effectuer un tour complet (360 degrés).
  2. Divise le résultat par 360 pour déterminer la proportion d’un tour complet que représente l’angle en question.

Ensuite, la fonction renvoie le résultat sous la forme d’un entier (en utilisant le cast (int)), correspondant au nombre de pas nécessaires pour effectuer la rotation souhaitée.

Par exemple, si l’angle est de 180 degrés et que la résolution est de 800 pas par tour, la fonction renverra 400 pas (180 * 800 / 360 = 400).

Facebook Twitter  Youtube

Grabcad Thingiverse Cults  

    •  
Les codes pour le TB6600 1/8 , La création du train d’impulsion pour un moteur pas à pas avec Arduino

TB6600, La création du train d’impulsion pour un moteur pas à pas avec Arduino.

 

Code n-1 : TB6600, La création du train d’impulsion pour un moteur pas à pas avec Arduino

Ce code est destiné à contrôler un moteur pas-à-pas à l’aide d’une carte Arduino. Il utilise les pins ENA, PULS et DIR pour contrôler la rotation du moteur.

La fonction setup() est exécutée une seule fois au démarrage de l’Arduino. Elle configure les pattes ENA, PULS et DIR en sortie.

La fonction loop() est exécutée en boucle sans fin après le démarrage de l’Arduino. Elle commence par récupérer le temps actuel en microsecondes. Cette fonction est basée sur le principe de génération d’impulsions  qui permet de faire avancer le moteur d’un pas à chaque impulsion.

Si le temps écoulé depuis la dernière impulsion est supérieur ou égal à la valeur de la tempo stockée dans la variable TEMPO, la fonction inverse l’état de la broche PULS_PIN pour générer une impulsion et faire tourner le moteur pas-à-pas. La valeur de TEMPO contrôle la vitesse de rotation du moteur.

Ce code est un exemple de base pour contrôler un moteur pas-à-pas avec une carte Arduino. Il est possible de modifier le code pour ajouter des fonctionnalités supplémentaires, telles que le contrôle de la direction de rotation du moteur ou la gestion de la vitesse de rotation en fonction de l’entrée utilisateur.

Code n-2 : TB6600, personnaliser la fréquence de votre moteur pas-à-pas en temps réel

Le code présenté ici est un exemple de contrôle de la fréquence d’un moteur pas à pas à l’aide d’un driver TB6600 et d’une carte Arduino. Le principe est de générer des impulsions à une fréquence donnée pour faire tourner le moteur pas à pas.

Le code est organisé en trois parties principales : la déclaration des variables, le setup et son contenu, et enfin la fonction loop et son contenu. Nous allons les examiner chacune en détail.

Déclaration des variables

Le code commence par la déclaration des variables utilisées dans le programme. Les variables sont les suivantes :

  • ENA_PIN, PULS_PIN et DIR_PIN : ces variables contiennent les numéros des broches utilisées pour le contrôle du moteur.
  • TEMPO : cette variable contient la valeur de la tempo en microsecondes. Elle est initialisée à 250 µs.
  • tempsPrecedent : cette variable stocke le temps précédent en microsecondes, utilisé pour calculer le temps écoulé depuis la dernière impulsion.

Setup et son contenu

La fonction setup() est exécutée une seule fois au démarrage de l’Arduino. Elle initialise la communication série, configure les pattes en sortie pour le contrôle du Driver, valide le driver et définit la direction du moteur. Enfin, elle affiche un message pour demander à l’utilisateur de saisir une nouvelle valeur de tempo (train d’impulsions).

Fonction loop et son contenu

La fonction loop() est exécutée en boucle sans fin après le démarrage de l’Arduino. Elle récupère le temps actuel en microsecondes, lit les données disponibles sur la communication série et vérifie si une nouvelle valeur de tempo a été saisie. Si c’est le cas, elle met à jour la variable TEMPO avec cette nouvelle valeur.

Ensuite, la fonction loop() vérifie si la valeur du temps écoulé depuis la dernière impulsion est supérieure ou égale à la valeur de la tempo. Si tel est le cas, elle met à jour la variable tempsPrecedent avec le temps actuel et génère une impulsion en inversant l’état de la broche de pulsation.

 

 

Facebook Twitter  Youtube

Grabcad Thingiverse Cults  

Retour au sommaire