[Programmation] ARDUINO - Piloter en position un moteur DC avec encodeur
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

ARDUINO - Piloter en position un moteur DC avec encodeur



  1. #1
    ThomasCarlier

    Exclamation ARDUINO - Piloter en position un moteur DC avec encodeur


    ------

    Bonjour

    Je travaille sur un projet dans lequel je dois piloter en position un moto-réducteur à courant continu couplé à un encodeur et un driver. Je travaille sur Arduino Uno.

    Voici les liens vers les composants choisis :
    Moto-réducteur : https://www.pololu.com/product/2385
    Encodeur : https://www.pololu.com/product/3081
    Driver : https://www.pololu.com/product/2511

    Mon objectif est de réaliser le programme afin de piloter le moteur :
    Lire la position du moteur avec l'encodeur
    L'utilisateur entre une nouvelle position, le moteur tourne jusqu'à atteindre celle-ci
    La plage de fonctionnement est la suivante : le pilotage doit se faire sur 8 tours de l'arbre (on doit donc connaître la position sur ces 8 tours, dans chaque sens)
    Le moteur peut tourner dans les deux sens


    Après des recherches sur le net, j'ai trouvé quelques morceaux de codes qui pourraient peut être fonctionner, je l'ignore, notamment le suivant :

    http://atelierjcm.com/arduino/moteur...sservissement/

    Pouvez-vous m'aider ?

    Merci d'avance

    Thomas.

    -----

  2. #2
    PIXEL

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    c'est le "8 tours" qui me gratte un peu.

    faute de codeur absolu , comment vas-tu caler le "zéro" et retrouver la position en cas de coupure ?

  3. #3
    ThomasCarlier

    Smile Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Hello Pixel,

    Ne peux-t-on pas mémoriser la dernière position avant coupure ?
    Ou imaginer au redémarrage une remise en position initiale avant de tourner vers la nouvelle position voulue ?

    Merci,
    Thomas.

  4. #4
    PIXEL

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    les deux soluces compliquent considérablement le schmilblick....

    c'est pour quoi faire ?

  5. A voir en vidéo sur Futura
  6. #5
    ThomasCarlier

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    J'imagine mais cela semble nécessaire

    C'est pour visser/dévisser un module dont la position de la vis régule un débit.

    La position est donc l'élément clé à piloter.

    Merci,
    Thomas.

  7. #6
    PIXEL

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    quelle est la précision angulaire demandée ?

  8. #7
    f6bes

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Citation Envoyé par ThomasCarlier Voir le message
    Hello Pixel,

    Ne peux-t-on pas mémoriser la dernière position avant coupure ?
    Ou imaginer au redémarrage une remise en position initiale avant de tourner vers la nouvelle position voulue ?

    Merci,
    Thomas.
    Bjr à toi,
    Mémoriser la derniére position AVANT coupure...encore faut il CONNAITRE quand la coupure EVENTUELLE aura lieu !
    C'est assez génant.
    Ce qui reviens à memoriser à permanence chaque position. ( quitte à effacer au fur et à mesure la memoristaion précédente).
    Il faut donc AVOIR toujours une mémorisaion..utilisable.
    Remettre en butée depart a chaque démarrage..pourquoi pas.
    Tu reparts de zéro, mais tu perds tes positions antérieures. Ca peu etre génant ou pas ..dépends de ton application
    Bonne journée

  9. #8
    PIXEL

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    d'autant qu'aller chercher la butée (fermée ou ouverte) peut ne pas plaire au systéme piloté....

    bref , l'étude me parait mal amorcée

  10. #9
    Ludwig1

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Citation Envoyé par ThomasCarlier Voir le message
    Bonjour

    Je travaille sur un projet dans lequel je dois piloter en position un moto-réducteur à courant continu couplé à un encodeur et un driver. Je travaille sur Arduino Uno.

    Voici les liens vers les composants choisis :
    Moto-réducteur : https://www.pololu.com/product/2385
    Encodeur : https://www.pololu.com/product/3081
    Driver : https://www.pololu.com/product/2511

    Mon objectif est de réaliser le programme afin de piloter le moteur :
    Lire la position du moteur avec l'encodeur
    L'utilisateur entre une nouvelle position, le moteur tourne jusqu'à atteindre celle-ci
    La plage de fonctionnement est la suivante : le pilotage doit se faire sur 8 tours de l'arbre (on doit donc connaître la position sur ces 8 tours, dans chaque sens)
    Le moteur peut tourner dans les deux sens


    Après des recherches sur le net, j'ai trouvé quelques morceaux de codes qui pourraient peut être fonctionner, je l'ignore, notamment le suivant :

    http://atelierjcm.com/arduino/moteur...sservissement/

    Pouvez-vous m'aider ?

    Merci d'avance

    Thomas.

    Salut,

    Les encodeurs (Bien faits) possèdent toujours 3 signaux avec leurs compléments.
    A et /A B et /B Z et /Z
    A et B ou /A et /B sont déphasés de 90°
    Z et /Z fournissent une Impulsion par tour.
    Sur ton Arduino il faut au moins 3 Entrées réservés au codeur.
    A B et Z ou /A /B /Z.

    Ensuite il te faux programmer un décodeur en quadrature pour le comptage décomptage des impulsions.
    Ensuite il te faux programmer une loi de commande ( Correcteur, Erreur = Consigne - Pos actuelle ) qui est obtenue à partir des caractéristiques du système
    ( Moto-Réducteur dans ton cas)
    La loi de commande ( Programme ) doit être appelée en mode Interrupt avec un Intervall de temps 10 fois plus petit que la plus petite constante de temps physique de ton système.
    Par ailleurs , pour l'introduction d'une nouvelle position, il te faux installer du multitâche ( Round Robin ) par exemple.

    Ceci n'est pas trop compliqué avec un Arduino, à condition de disposer des outils Ad hoc.
    ****
    Bon Courage.

    Cordialement
    Ludwig
    Dernière modification par Antoane ; 22/07/2016 à 14h01. Motif: Suppression HS stérile

  11. #10
    Ludwig1

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Citation Envoyé par ThomasCarlier Voir le message
    Bonjour

    Mon objectif est de réaliser le programme afin de piloter le moteur :
    Lire la position du moteur avec l'encodeur
    L'utilisateur entre une nouvelle position, le moteur tourne jusqu'à atteindre celle-ci
    La plage de fonctionnement est la suivante : le pilotage doit se faire sur 8 tours de l'arbre (on doit donc connaître la position sur ces 8 tours, dans chaque sens)
    Le moteur peut tourner dans les deux sens


    Après des recherches sur le net, j'ai trouvé quelques morceaux de codes qui pourraient peut être fonctionner, je l'ignore, notamment le suivant :

    http://atelierjcm.com/arduino/moteur...sservissement/

    Pouvez-vous m'aider ?

    Merci d'avance

    Thomas.

    Re,

    Avec 8 tours dans un sens et 8 dans l'autre, tu peux utiliser un pot Multi Tours (20 Tours) que tu alimentes en plus moins 10V de cette façon tu réalises en même temps les butées hautes et basses pour protéger contre les sur courses, (Casse mécanique).
    En outre la mémorisation de la dernière position est assurée par le pot.
    Pour la boucle d'asservissement ça donne:

    Lire_Position
    Lire_consigne
    Err = Consigne - Pos
    Calcul_loi_de_ commande
    Appliquer

    Cordialement

    Ludwig

  12. #11
    ThomasCarlier

    Smile Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Bonjour Ludwig 1, merci pour tes réponses.

    Citation Envoyé par Ludwig1 Voir le message
    Salut,

    Les encodeurs (Bien faits) possèdent toujours 3 signaux avec leurs compléments.
    A et /A B et /B Z et /Z
    A et B ou /A et /B sont déphasés de 90°
    Z et /Z fournissent une Impulsion par tour.
    Sur ton Arduino il faut au moins 3 Entrées réservés au codeur.
    A B et Z ou /A /B /Z.

    Ensuite il te faux programmer un décodeur en quadrature pour le comptage décomptage des impulsions.
    Ensuite il te faux programmer une loi de commande ( Correcteur, Erreur = Consigne - Pos actuelle ) qui est obtenue à partir des caractéristiques du système
    ( Moto-Réducteur dans ton cas)
    La loi de commande ( Programme ) doit être appelée en mode Interrupt avec un Intervall de temps 10 fois plus petit que la plus petite constante de temps physique de ton système.
    Par ailleurs , pour l'introduction d'une nouvelle position, il te faux installer du multitâche ( Round Robin ) par exemple.

    Ceci n'est pas trop compliqué avec un Arduino, à condition de disposer des outils Ad hoc.
    Malheureusement la Modération et d'autres m'ont interdit de parler de ces outils.
    Alors il va malheureusement falloir que tu te farçice tous ça en C ou autre.
    Bon Courage.

    Cordialement
    Ludwig
    Voici un shéma des sorties de l'encodeur, il y a bien A et B mais pas de traces de Z.
    Encoder.png Encoder 2.png

    Je te remercie pour tes pistes pour la programmation, aurais-tu des exemples de codes à me proposer ?
    De plus, pour les outils Ad hoc, n'hésites pas à me contacter en message privé


    Citation Envoyé par Ludwig1 Voir le message
    Re,

    Avec 8 tours dans un sens et 8 dans l'autre, tu peux utiliser un pot Multi Tours (20 Tours) que tu alimentes en plus moins 10V de cette façon tu réalises en même temps les butées hautes et basses pour protéger contre les sur courses, (Casse mécanique).
    En outre la mémorisation de la dernière position est assurée par le pot.
    Pour la boucle d'asservissement ça donne:

    Lire_Position
    Lire_consigne
    Err = Consigne - Pos
    Calcul_loi_de_ commande
    Appliquer

    Cordialement

    Ludwig
    Idée très intéressante. Comment le montage se réalise t-il dans ce cas ? La position de l'arbre est proportionnelle à la tension appliquée au potentiomètre ? Un encodeur est-il toujours nécessaire ? Aurais-tu des composants a me conseiller, je sèche un peu sur cette techno

    Merci bien,
    Thomas.

  13. #12
    Antoane
    Responsable technique

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Bonjour,

    Ludwig1, comme à l'habitude, on se passera volontier de ton idée fixe, merci de rester sur le sujet : programmer un arduino avec le langage dédié.

    Je t'invite à relire la charte, en particulier le point 14. http://forums.futura-sciences.com/an...sabilites.html

    Désolé d'avoir fait le ménage parmi les messages de ceux qui t'expliquaient gentiment le contenu de la charte - Pixel, F6bes.



    Par aillerus, ThomasCarlier, les question sur les µC doivent être traitées sur le forum d'électronique. J'y ai déplacé le fil.
    Dernière modification par Antoane ; 22/07/2016 à 14h07.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  14. #13
    DAUDET78

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    J'aime pas le Grec

  15. #14
    Seb.26

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Pour sauvegarder la dernière position avant coupure tu peux faire un détecteur de coupure d'alim :
    ton alim va sur une entrée du cpu et charge une capa via une diode et enfin va sur l'alim du cpu, de cette façon quand l'alim disparaît, l'entrée passe à 0 (donc tu peux detecter la disparition de l'alim) mais le cpu est encore activé pendant quelques ms, le temps d'enregistrer la position dans l'eeprom.

    Tu peux aussi utiliser un petit module de RAM avec une pile pour la persistance (prévoir un jeu d'écriture à double buffer avec uid + crc pour éviter tous les cas tordus)

    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  16. #15
    masterclassic

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Bonjour.
    Citation Envoyé par Ludwig1 Voir le message
    Avec 8 tours dans un sens et 8 dans l'autre, tu peux utiliser un pot Multi Tours (20 Tours)
    Petite remarque: si je comprends bien, on a 8 tours depuis la vanne coupée jusqu'à pleine ouverture. Donc un pot 10 tours serait suffisant.
    Et il est vrai que la position est ainsi mémorisée automatiquement en cas de coupure.

  17. #16
    ThomasCarlier

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Bonjour masterclassic,

    Citation Envoyé par masterclassic Voir le message
    Bonjour.

    Petite remarque: si je comprends bien, on a 8 tours depuis la vanne coupée jusqu'à pleine ouverture. Donc un pot 10 tours serait suffisant.
    Et il est vrai que la position est ainsi mémorisée automatiquement en cas de coupure.
    Tu as tout compris c'est exactement cela.
    Aurais-tu des composants et un morceau de code à me proposer ?

    Merci bien,
    Thomas.

  18. #17
    PIXEL

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Citation Envoyé par ThomasCarlier Voir le message
    Bonjour masterclassic,



    Tu as tout compris c'est exactement cela.
    Aurais-tu des composants et un morceau de code à me proposer ?

    Merci bien,
    Thomas.
    le but d'un stage , c'est de devenir autonome.....

  19. #18
    fabang

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Le codeur fournit en exemple semble se monter avant le réducteur...
    Un codeur qui fournit Z, quand il est monté avant le réducteur ne sert pas à grand chose non plus. D'abord trouver une solution au home position initial avant de gamberger.

  20. #19
    ThomasCarlier

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Salut fagang,

    Citation Envoyé par fabang Voir le message
    Le codeur fournit en exemple semble se monter avant le réducteur...
    Un codeur qui fournit Z, quand il est monté avant le réducteur ne sert pas à grand chose non plus. D'abord trouver une solution au home position initial avant de gamberger.
    Donc si je ne me trompe pas, le codeur que j'utilise couplé à mon motoréducteur me permet seulement de connaître un angle relatif à l'angle de départ et sur 360° ?

    Je ne peux donc pas connaître l'angle de départ quand je rentre sur l'ordinateur l'angle que je veux atteindre ? Je ne connais pas non plus le nombre de tour effectué depuis la butée ?

  21. #20
    DAUDET78

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Citation Envoyé par ThomasCarlier Voir le message
    Donc si je ne me trompe pas,
    Oui et non .
    le codeur que j'utilise couplé à mon motoréducteur me permet seulement de connaître un angle relatif à l'angle de départ
    oui
    et sur 360° ?
    non,
    sur un nombre de tour infini (fonction du nombre de bit de ton compteur de pas)

    Je ne peux donc pas connaître l'angle de départ quand je rentre sur l'ordinateur l'angle que je veux atteindre ? Je ne connais pas non plus le nombre de tour effectué depuis la butée ?
    Oui, sauf
    - Si tu fais une initialisation de la position "zéro" . A la mise sous tension, tu fais une rotation infinie de ton moteur jusqu’à atteindre une butée (mécanique ou électrique) qui te permet alors de mettre à zéro ton compteur de pas
    - Si tu fais une sauvegarde en mémoire non volatile de la valeur de ton compteur de pas, lors de la perte d'alimentation . Par contre, il faut, la première fois, faire une initialisation de la position "zéro"

    Je pense que le potentiomètre analogique 10 tours est la meilleure solution
    J'aime pas le Grec

  22. #21
    ThomasCarlier

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Merci pour ces réponses, je vois mieux comment aborder on problème désormais. Je vais essayer de trouver des composants adaptés et commencer à écrire un peu de code

  23. #22
    antek

    Re : ARDUINO - Piloter en position un moteur DC avec encodeur

    Citation Envoyé par ThomasCarlier Voir le message
    Donc si je ne me trompe pas, le codeur que j'utilise couplé à mon motoréducteur me permet seulement de connaître un angle relatif à l'angle de départ et sur 360° ?

    Je ne peux donc pas connaître l'angle de départ quand je rentre sur l'ordinateur l'angle que je veux atteindre ? Je ne connais pas non plus le nombre de tour effectué depuis la butée ?
    Sur autant de tours que tu veux si tu comptes les impulsions.

    Et oui, sauf si :
    - tu initialises à chaque démarrage
    - tu mémorise la position avant chaqque arrêt et que personne ne tourne le bidule à la main

Discussions similaires

  1. [Programmation] Piloter un moteur AC avec une arduino
    Par pierre57570 dans le forum Électronique
    Réponses: 12
    Dernier message: 25/03/2016, 10h27
  2. [Programmation] Asservissement en position du Moteur CC Métal Pololu 25Dx54L avec réducteur 75:1 et encodeur
    Par julieETpierre dans le forum Électronique
    Réponses: 1
    Dernier message: 21/12/2015, 14h18
  3. Piloter un moteur Pas à Pas avec un arduino Sans Driver dédié
    Par elfrancesco dans le forum Électronique
    Réponses: 27
    Dernier message: 11/07/2015, 13h46
  4. piloter un moteur lave linge via arduino
    Par mooc dans le forum Électronique
    Réponses: 13
    Dernier message: 16/09/2014, 10h28
  5. choix et commande moteur avec encodeur + arduino
    Par nicocco033 dans le forum Électronique
    Réponses: 0
    Dernier message: 25/11/2012, 16h23
Découvrez nos comparatifs produits sur l'informatique et les technologies.