IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Piloter des moteurs pas à pas


Sujet :

Arduino

  1. #1
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut Piloter des moteurs pas à pas
    Bonjour ,

    je souhaite piloter des moteurs pas à pas avec des Arduino. Pour cela j'ai acheté le shield Velleman qui est équipé du driver L298P : https://www.velleman.eu/products/view/?id=412538
    J'ai pris ce shield car on peut sélectionner les voies que l'on va utiliser pour piloter le moteur grâce à des cavaliers. On peut donc ajouter plusieurs shields. Je compte en utiliser 2.
    J'utilise deux moteurs bipolaires 24V : https://fr.rs-online.com/web/p/moteu...a-pas/8293500/

    Je précise que ce n'est pas l'Arduino qui alimente les moteurs, il n'alimente que le L298P. L'arduino pilote les voies DIR A / DIR B et ENABLE A / ENABLE B. J'utilise une alimentation externe pour le shield et l'Arduino est connecté au PC par le port USB. Les masses des alimentations sont reliées entre elles.

    Le problème que je rencontre est le suivant :
    Lorsque le moteur tourne j'ai des pics de tension de l'ordre de 2V pendant des durées de 10ms sur ma tension d'alimentation ! Et mon alimentation stabilisée n'aime pas ça du tout . Sur le shield il y a déjà un condo de 100µF/63V, je pensais qu'il serait capable d'absorber ces oscillations. Ce qui m'ennuie, le plus c'est que je pensais alimenter ces moteurs avec des batteries lithium de type "power bank" (je n'ai pas choisi de modèle pour le moment) et je crains qu'elles ne supportent pas ces oscillations.

    Comment je peux régler ce problème ? Je pense pas m'être trompé dans les références du moteur et du shield, je reste dans les limites d'utilisation des composants.

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Tu peux poster une photo du montage ?

    Tu as mesuré avec quoi ces +2V sur la tension 24V ?

    Que 10ms ? A quelle vitesse tu pilotes le L298P ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir Auteur

    Quelle est la tension d'alimentation du shield pour les moteurs? C'est quand-même vachement important.

    Ensuite le calcul conservatif en supposant que tu es joueur (alimentation à 6V, pour une perte de 1.2V dans le L298 et une tension à 4.8 aux bornes du moteur, le max en constant) :
    Le moteur c'est 4.8 Ω et 9.5mH par bobinage.
    L'énergie stockée à 1A c'est 4.75mJ.
    Cette énergie transférée dans le condo de 100µF chargé initialement à 6V provoque une augmentation de tension de 5.44V (passage de 6V à 11.44V)

    Ce calcul est fortement exagéré car il ne prend pas en compte ni les pertes dans les diodes de roue libre, ni dans les résistances de tout le circuit, ni l’énergie consommée par l'autre bobinage qui est enclenché! Mais oui le comportement que tu as est normal!

    Et on voit bien les dérives de l'Arduino! Un moteur PàP en commande par tension fixe (comme avec le L298) offre le plus mauvais rapport efficacité/puissance consommée. Il aura un couple tout pourris lors de la commutation avec une consommation de puissance quasi maximale.
    Un moteur PàP cela s'alimente en courant constant avec un driver de PàP et un condo en général énorme, de l'ordre de 1'000 à 10'000µF pour un moteur de cette taille. Ou alors en asservissement mais là c'est de la haute voltige (le courant n'est pas régulé fixe mais variable en fonction de la FCEM du moteur).
    Les drivers type L298 c'est bon pour les moteurs DC à collecteur ou éventuellement sans collecteur (mais avec 1.5 drivers par moteur).

    Dans ton cas la batterie va jouer le rôle de condensateur additionnel ce qu'une alimentation de Labo ne sait généralement pas faire. Le pic de courant va recharger la batterie. (Aucun problème en NiCd ou NiMh, mais inconnu pour moi en Lithium en raison des électroniques de protection qui sont obligatoire pour éviter le feu d'artifice)

    Bonne suite

    Delias

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Salut,
    Tu peux poster une photo du montage ?
    Tu as mesuré avec quoi ces +2V sur la tension 24V ?
    Que 10ms ? A quelle vitesse tu pilotes le L298P ?
    Citation Envoyé par Delias Voir le message
    Quelle est la tension d'alimentation du shield pour les moteurs? C'est quand-même vachement important.
    Le moteur est alimenté en 9V. Et j'ai des surtensions de +2V sur ce 9V (désolé je ne peux pas faire de copie d'écran). J'ai tout mesuré sur l'oscillo quand j'ai vu que mon alimentation commençait à couper sa sortie dès que j'augmentais la tension d'alimentation (au delà de 12V).
    Quant au montage, classique si j'ose dire : le shield emboîté sur l'arduino et sur la carte il y a 3 borniers à 2 voies : il y a un bornier pour les deux fils de la bobine 1 et un bornier pour les 2 fils de la bobine 2 et un bornier pour l'alimentation.


    Citation Envoyé par Delias Voir le message
    Et on voit bien les dérives de l'Arduino! Un moteur PàP en commande par tension fixe (comme avec le L298) offre le plus mauvais rapport efficacité/puissance consommée. Il aura un couple tout pourris lors de la commutation avec une consommation de puissance quasi maximale.
    Un moteur PàP cela s'alimente en courant constant avec un driver de PàP et un condo en général énorme, de l'ordre de 1'000 à 10'000µF pour un moteur de cette taille. Ou alors en asservissement mais là c'est de la haute voltige (le courant n'est pas régulé fixe mais variable en fonction de la FCEM du moteur).
    Les drivers type L298 c'est bon pour les moteurs DC à collecteur ou éventuellement sans collecteur (mais avec 1.5 drivers par moteur).
    en d'autres termes piloter ces moteurs pas à pas avec un tel shield c'est voué à l'échec ?
    Lors de mon achat j'ai hésité entre le shield Velleman ci-dessus et les shield de STMicroelectronics : X-NUCLEO-IHM02A1 (interface SPI sans doute pas simple à programmer) et X-NUCLEO-IHM05A1 qui sont sans doute mieux adaptés ?


    Citation Envoyé par Delias Voir le message
    Dans ton cas la batterie va jouer le rôle de condensateur additionnel ce qu'une alimentation de Labo ne sait généralement pas faire.
    l'alimentation se mettait en sécurité, elle coupait sa sortie.

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Ok, j'ai déjà eu le tour avec une alimentation de labo TTI qui s'était mis à déconner, un peu comme tu le décris, a cause d'un moteur hyper bruyant et c'était des problèmes de CEM. Avec un oscillo je voyais des choses mais c'était des artifacts sur la mesure. En torsadant, entre eux, les fils qui vont au moteur + la masse (0V) j'ai amélioré les choses de façon spectaculaire (mon premier câblage formait un jolie boucle)

    C'est quand même bizarre comme symptôme !? J'ai regardé le tRR des diodes et il est ok (10ns pour une 1N5819 de chez MCCSEMI, ST ne le donne pas.... alors que c'est super important dès qu'on fait de la commutation cyclique, alors que dans la doc du L298P il conseille d'avoir des diodes avec un tRR<200ns)
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Les câbles qui vont de l'alimentation au shield sont tressés. Je crois finalement que ce shield est fait pour des moteurs CC.

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir Auteur

    Le moteur a deux limitations, la tension à 24V et le courant à 1A. Et comme les bobinages ont une résistance de 4.8ohm, il n'y a pas besoin d'avoir fait de grandes études pour se rendre compte que parfois c'est la tension qui limite (à l'enclenchement des bobines), parfois le courant. Mais on ne peut pas laisser le moteur alimenté de manière constante (càd sur le même pas, sans bouger) à plus de 4.8V

    Ce moteur il est possible de le commander avec un L298 alimenté entre 5 et 6V, mais c'est plus pour expérimenter la logique d'une commande d'un PàP que pour un usage sérieux.
    Les L6470 c'est une partie logique pour la gestion des pas et une de puissance pour la commande. Si tu veux conserver le programme Arduino que tu as maintenant il faudrait chercher un driver plus simple n'ayant que la partie de puissance. Mais si tu peux changer ton programme le L6470 est très bien. Juste vérifier sa compatibilité avec les 5V de l'Arduino.

    La commande de base d'un PàP, c'est un courant constant avec une limitation de tension. A l'enclenchement d'un bobinage, la tension maximal est appliquée (c'est 24V avec ton moteur) pour faire monter le courant au plus vite. Puis dès que le courant est à 1A la tension s'abaisse (par PWM) pour maintenir le courant. La tension va alors dépendre de la tension induite par la rotation du moteur. A l'arrivée sur le nouveau pas la tension va descendre jusqu'aux 4.8V que je mentionnais plus haut. C'est la méthode qui garanti les courbes de couple indiquées dans la spécification.

    La théorie c'est bon, la pratique, je ne l'ai plus pratiqué depuis 2005, depuis ce n'est plus les mêmes puces qui sont disponibles pour cela. Désolé je ne pourrais pas t'indiquer des puces adaptées, juste commenter celles que tu trouverais..

    Sinon, l'alim se met en protection car elle reçoit du courant en retour lors de la coupure de la commande. Au lieu de couper par EN, il faudrait mettre les deux sorties du pont en H à la même tension (pour que le courant tourne sans passer par l'alim), mais pour cela il faut une commande A, B, EN et non Dir, EN.

    Bonne suite

    Delias

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Delias Voir le message
    Ce moteur il est possible de le commander avec un L298 alimenté entre 5 et 6V, mais c'est plus pour expérimenter la logique d'une commande d'un PàP que pour un usage sérieux.
    Les L6470 c'est une partie logique pour la gestion des pas et une de puissance pour la commande. Si tu veux conserver le programme Arduino que tu as maintenant il faudrait chercher un driver plus simple n'ayant que la partie de puissance. Mais si tu peux changer ton programme le L6470 est très bien. Juste vérifier sa compatibilité avec les 5V de l'Arduino.
    Les deux shields X-Nucleo sont pour des cartes Nucleo qui fonctionne en 3,3V et 5V. On peut les emboîter sur les Arduino. Pour le X-NUCLEO-IHM02A1 (équipée de 2 L6470) il y a des ponts à créer ou à couper pour l'adapter parfaitement à l'Arduino (la doc est assez précise sur ce sujet). Le L6470 fonctionne sur du 5V. L'autre carte est équipée d'un L6208 qui est aussi un driver de moteur pas à pas, mais son fonctionnement est très différent du L6470.

    Citation Envoyé par Delias Voir le message
    La commande de base d'un PàP, c'est un courant constant avec une limitation de tension. A l'enclenchement d'un bobinage, la tension maximal est appliquée (c'est 24V avec ton moteur) pour faire monter le courant au plus vite. Puis dès que le courant est à 1A la tension s'abaisse (par PWM) pour maintenir le courant. La tension va alors dépendre de la tension induite par la rotation du moteur. A l'arrivée sur le nouveau pas la tension va descendre jusqu'aux 4.8V que je mentionnais plus haut. C'est la méthode qui garanti les courbes de couple indiquées dans la spécification.
    Donc la commande d'un moteur pas à pas est beaucoup plus subtile que ce que j'ai pu croire

    Citation Envoyé par Delias Voir le message
    Bonne suite
    Delias
    Merci.
    Je vais poursuivre mes recherches sur le net... Je vais tâcher surtout de trouver des exemples de codes si j'utilise le L6470. Vrai casse-tête en perspective

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonjour Auteur

    Argh le
    Citation Envoyé par Auteur Voir le message
    [...] L6470 [...] L6208 [...]
    Je n'ai pas fait gaffe à la différence de puce entre les deux shields.

    Le L6208 a juste un séquenceur. La commande depuis l'Arduino doit reprendre la gestion temporelle (une partie de ce que fait la librairie pour les moteurs PàP en commande par le L298)
    Le L6470 a une logique de commande complète. Dans le code Arduino il n'y a plus besoin de gestion temporelle. Au lieu d'envoyer des commande à la librairie par appels de fonction, il faut simplement envoyer les commandes équivalentes par SPI, sauf que c'est beaucoup plus complet. En plus il fait aussi du microsteping qui permet la division des pas. Suivant la commande souhaitée, pour l'Arduino c'est une grosse charge de calcul en moins qui est reportée dans le driver.

    Bon après-midi

    Delias

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Bon, j'ai pris un X-NUCLEO-IHM05A1 et un Nucleo F401RE adapté au montage. Puis j'utilise l'IDE en ligne (il faut créer un compte) et les bibliothèques fournies par mbed. Il faut adapter les paramètres du programme aux caractéristiques mécaniques et électriques des moteurs.

    Note pour les débutants : si, lors du test, les moteurs bourdonnent et ne tournent pas c'est que vous vous êtes plantés dans le câblage des phases.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Piloter un moteur pas à pas avec un Millenium crouzet
    Par Nonoarcher dans le forum Automation
    Réponses: 7
    Dernier message: 01/06/2021, 21h31
  2. La commande des moteurs pas à pas
    Par ramibou dans le forum Arduino
    Réponses: 0
    Dernier message: 13/03/2019, 15h28
  3. [Débutant] Choix & Piloter un moteur pas à pas
    Par Speed41 dans le forum Arduino
    Réponses: 2
    Dernier message: 04/02/2019, 18h44
  4. Choisir des moteurs pas à pas
    Par arklane dans le forum Robotique
    Réponses: 2
    Dernier message: 17/10/2016, 11h03
  5. Piloter un moteur pas à pas
    Par moukah2 dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2008, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo