Asservissement, branchements : Codeurs, moteur, Arduino
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Asservissement, branchements : Codeurs, moteur, Arduino



  1. #1
    Juloblairot

    Asservissement, branchements : Codeurs, moteur, Arduino


    ------

    Bonjour tout le monde !

    Je viens demander votre aide pour quelques difficultés (et non connaissances) que j'ai dans le sujet. Dans le cadre de mon Tipe (en classe prépa), je souhaiterai réaliser un pendule inversé. Je remet juste rapidement dans le contexte, c'est le même principe qu'un pendule, mais au lieu d'osciller la "tête" en bas, il doit se stabiliser à la verticale en l'air grâce à un chariot en translation sur un axe. Mais j'en suis encore bien loin ^^. Voilà une petite photo de ce que je suis sensé obtenir Pendule inversé.jpg

    Sur l'imprimante il y'a déjà deux capteurs (un pour le chariot en translation, qui restera donc à sa place, et un capteur angulaire que je déplacerai sur le pendule et pivot de sorte à mesurer la position angulaire en temps réel de mon pendule), et le moteur pour faire translater le chariot. Ce sont ces translations qui devraient mettre le pendule à la verticale vers le haut et ensuite le stabiliser.

    Pour résumer, il faut :
    - Connecter le codeur angulaire à un PC pour avoir en temps réel l'angle du pendule (et donc un script)
    - Connecter le codeur linéaire à un PC pour avoir en temps réel la position du chariot (encore un script)
    - Connecter le moteur à mon ordi pour qu'il soit asservit (dernier script). Le moteur est déjà relié au chariot par la nappe de l'imprimante.

    J'ai pour cela une carte arduino et un bouclier de puissance.

    La première question est donc celle-ci : Est-ce qu'une seule carte Arduino suffit pour tout cela ? Si oui, comment brancher ^^ ?
    A premières vues, le moteur devrait être branché à mon ordinateur uniquement. (Alimentation + asservissement) via l'arduino(c'est ici l'utilité du bouclier) par un canal power(5V) pour l'alim, et un canal ground pour la terre.
    Et les deux codeurs, je ne sais pas vraiment. Ils ont 4 sorties (+5V, GND, ChA et ChB). Est ce que brancher les ChA et ChB suffirait ou il faut les alimenter ?

    Ensuite, où puis-je trouver de tel scripts ? J'ai cherché sur le net mais je ne programme absolument pas en C ou Java (on fait du python au lycée, donc je comprend vaguement ce que le code fait, mais impossible pour moi d'écrire un truc si compliqué ^^), donc pas évident pour moi de faire ces scripts


    Merci de l'aide apportée, j'ai essayé d'être le plus précis possible. Si vous avez des questions/remarques, je me suis engagé en terre inconnue, donc il est bon pour moi d'apprendre sur ce terrain ^^

    -----
    Images attachées Images attachées  

  2. #2
    antek

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Je pense qu'un PC sera bien trop lent pour réaliser cet asservissement.
    L'arduino n'est pas suffisant pour faire ça ?

  3. #3
    Juloblairot

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Salut !
    Euh je ne sais pas. Mais ce que j'entendais par PC, c'est le logiciel arduino. Je me trompe peut-être mais je suis obligé de réaliser un script sur le logiciel arduino pour asservir mon montage non ?


    EDIT : Oui je me suis mal exprimé a plusieurs reprises. Ce n'est pas "Connecter [...] au PC". C'est connecter à l'arduino, elle même reliée au PC.
    Et je viens de réaliser un truc, une alimentation + terre ne suffira pas pour le moteur. Il faut pouvoir envoyer les données à celui ci via un autre channel j'imagine ^^
    Dernière modification par Juloblairot ; 28/10/2015 à 12h56.

  4. #4
    jiherve

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Bonjour,
    Il faut bien sur alimenter les codeurs optiques sinon ils ne fonctionnent pas!
    Un Arduino devrait suffire pour l'ensemble mais faudra t il utiliser un langage plus rapide C ou assembleur çà c'est l'inconnue.
    Il existe des applications toutes faites pour l'acquisition des codeurs optiques et la commande PWM du moteurs, voir sur les forums ou sites spécialisés.
    exemple :http://playground.arduino.cc/Main/RotaryEncoders
    JR
    l'électronique c'est pas du vaudou!

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

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Jiherve : D'accord merci de la précision. Ensuite pour les applications, j'avais regardé mais le résultat est assez bizarre... Il y a peut-être un problème de soudure/montage parce le premier programme (Example 1) m'affiche une suite sur la même ligne d'un compteur (01/2/3/4/5/6/7 etc...). Et si je déplace la roue codeuse, il ne se passe rien de plus ou de moins ^^. J'ai soudé 4 fils directement du codeur a mon arduino (pas soudé de ce côté là), branchés respectivement sur A0 A1 +5V et GND (les fils correspondent évidemment ^^). Après, les soudures au niveau du bout du fil et de la tige en métal que je "clipse" dans l'Arduino sont peutêtre mal faits

  7. #6
    jiherve

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    re
    quel est ce programme : (Example 1).
    Ensuite as tu calculé la période propre du pendule ?
    Si celle ci est trop courte tu n'auras pas le temps de faire les mesures et d'asservir.
    JR
    l'électronique c'est pas du vaudou!

  8. #7
    Murayama

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Bonjour!

    un bouclier
    Shield, ça veut aussi dire écran. Et puis pourquoi ne pas dire shield puisque tout
    le monde le dit, même les Italiens qui ont conçu Arduino. Pour joystick, vous dites
    comment? Bâton de plaisir?

    Bref, revenons à la question.
    Bon, pour les photos, ce serait bien de les montrer à l'endroit, du moins dans
    le sens où ça doit fonctionner. En principe sur une pub de voiture, les roues
    sont souvent représentées en bas.
    Apparemment votre chariot est unidirectionnel, vous n'avez donc besoin que d'un
    seul capteur.
    Oui, évidemment il faut brancher le 5V.
    En ce qui concerne la rapidité, je n'ai jamais fait de test sérieux d'Arduino,
    alors je ne peux pas vraiment vous dire si c'est trop lent. À mon avis c'est
    largement assez rapide pour une application comme celle là, mais:
    - Plus le pendule sera court, plus le système devra être réactif. Essayez de faire
    tenir un balai, puis un stylo sur votre index, vous comprendrez.
    - La vitesse de réaction du système dépendra aussi du moteur, de sa puissance,
    etc...

    Un Arduino devrait suffire pour l'ensemble mais faudra t il utiliser un langage plus
    rapide C ou assembleur çà c'est l'inconnue.
    Par exemple, le système du lien suivant:
    http://www.amazon.com/SainSmart-Self...N%3DB00N1Y00CK
    tient debout tout seul. Ce qu'il faut voir, c'est que les déplacements mécaniques
    se chiffrent en dizaines de ms alors qu'un microprocesseur, même Arduino, même
    programmé comme un branque, pour ce genre d'application simplissime réagit en moins
    d'1 ms.

    Petite anecdote ('tain, je dois prendre un coup de vieux, je commence à raconter des
    anecdotes. RAconter des anecDOTES, en raccourci, ça fait RADOTE...)

    L'autre jour, un client me demande des renseignements sur un interpolateur, délai
    de réaction, etc... Je lui dis que la latence du chip était de 25 µs. Il me répond
    (en Japonais dans le texte) ouâââh, c'est beaucoup trop. Alors je lui ai fait observer
    que si son moteur à asservir tourne à 6000 tours (le cas de beaucoup de moteurs dans
    le monde industriel), alors en 25µs, son moteur aura le temps de tourner de ... 0.8
    degré avant que le chip ne passe la consigne... Il a refait les calculs 4 ou 5 fois devant
    moi...
    C'est toujours surprenant, même avec l'expérience, de constater à quel point l'électronique
    est rapide par rapport à la mécanique.

    Pascal

  9. #8
    jiherve

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Re
    j'ai calculé à l'arrache la période en supposant une tige de 20cm, on est vers la demi seconde (sauf erreur de ma part), c'est peut être jouable si l'encodeur est assez précis et le moteur réactif comme Murayama le souligne à juste titre.
    Mais pour l'asservissement cela va être coton !
    JR
    l'électronique c'est pas du vaudou!

  10. #9
    Juloblairot

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Alors, pour la période propre, non je ne l'ai pas calculée, je n'ai pas encore de pendule ^^. Mais d'accord je n'avais pas pris ca du tout en compte. La période propre est bien 2pi*racine(L/G), donc plutôt favoriser une barre longue c'est cela ?
    Pour l'exemple 1, voila le code
     Cliquez pour afficher



    Murayama : En effet, désolé ^^ je suis vraiment novice la dedans
    Donc pour le chariot, il n'est pas nécessaire d'avoir un capteur ? J'ai juste a le mettre en butée et à faire les calculs pour que le moteur ne l'amène pas contre l'autre butée c'est celà ? (Je suis pas sur d'avoir compris)

    En effet pour le stylo ^^

    D'accord pour les précisions. Pour le moteur, il fait moins d'une vingtaine de Volts, c'est le moteur de base de l'imprimante

    Bon à savoir pour l'anecdote, heuresement d'ailleurs que l'électronique est plus rapide que la mécanique. On irait pas bien loin sinon ^^


    Merci pour les réponses rapide en tout cas


    EDIT : Jiherve, après calcul, c'est plutôt de l'ordre de la seconde, avec 20cm, on a 0.89s et 1.1s pour 30cm (si la formule est bien 2pi*racine(L/G) ). Je pense que le pendule sera de l'ordre de 30 cm
    Dernière modification par Juloblairot ; 28/10/2015 à 13h42.

  11. #10
    Murayama

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Re!
    Tout bon mécanicien horloger sait qu'un pendule d'1m "bat la seconde".
    Ce n'est pas exactement 1m, mais en mettant le milieu de la fenêtre d'ajustement à 1 m, on ne
    se trompe jamais. Ensuite, comme il y a une racine, 25 cm, ça bat la demi-seconde. Dans le cas
    présent, si la barre fait 20 cm, alors le centre de gravité est autour de 10, ce qui doit correspondre
    à une période d'environ 0.315 seconde. (racine de 10, c'est 3.15, si je me souviens bien).

    Pascal

    PS:
    EDIT : Jiherve, après calcul, c'est plutôt de l'ordre de la seconde, avec 20cm, on a 0.89s et 1.1s pour
    30cm (si la formule est bien 2pi*racine(L/G) ). Je pense que le pendule sera de l'ordre de 30 cm
    Quand vous calculez, vous devriez faire attention à ce que vous faites. Intuitivement, une période d'une
    seconde pour quelque chose d'un peu plus grand qu'un stylo, je ne sais pas pour vous, mais pour moi
    ça ne passe pas.
    Dernière modification par Murayama ; 28/10/2015 à 13h56.

  12. #11
    Juloblairot

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Muryama c'est exact mais il bat la seconde sur une demi période j'imagine. La période d'un pendule d'un mètre est donc 2secondes. Du coup un pendule de 25cm bat bien à la seconde
    C'est mal expliqué, mais en gros, le pendule bat la seconde sur un allé. Mais un seul allé ne représente qu'une demie période

  13. #12
    jiherve

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Re
    pour une barre pesante la formule est, si je ne m'abuse, :2*PI*racine(L/(3*G))

    JR
    l'électronique c'est pas du vaudou!

  14. #13
    Juloblairot

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Re!

    Après vérification, pour un pendule homogène, c'est bien 2*PI*racine(L/(G)). Pour 25cm, on a donc une période de 1 seconde.

    Deux petites questions pour le script. Dans la boucle qui tourne sans s'arrêter, il contiendra une condition "tant que la mesure angulaire != 0" il faudra déplacer le chariot pour que la barre se stabilise.
    La mesure angulaire sera réalisée toutes les 5ms par exemple, mais il faut aussi écrire un script avec en sortie cette mesure ? En faite ma question est : comment la carte arduino (le reste du programme en réalité) saura que le pendule s'est déplacé de temps de degrés ?
    Et la deuxième question, c'est plutôt de la dynamique. Comment savoir ou le chariot doit se déplacer et a quelle vitesse ? Des calculs de dynamiques permettent-ils de déterminer ca ?

    Encore désolé pour mon inconnaissance des circuits éléctriques/branchements...

  15. #14
    jiherve

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Bonjour,
    Je doute du résultat pour la période mais passons.
    Pour asservir ton montage il te faudra un timer qui générera une interruption cyclique qui déclenchera la mesure de position de ton axe et calculera la consigne à appliquer au moteur, si mes souvenirs sont bons il faudra passer par une transformée en Z car c'est un système échantillonné. Je ne peux pas t'en dire plus car c'est beaucoup trop loin pour moi.
    JR
    l'électronique c'est pas du vaudou!

  16. #15
    Juloblairot

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    D'accord merci pour l'asservissement. Pour la transformée en Z (équivalent a une transformée de Laplace c'est ca ?), je pourrai me débrouiller pour les calculs je pense, on a fait ca l'an dernier.

    Merci des précisions !


    Pour les branchements, il faut donc 3 cables pour le moteur (Alimentation, terre, transmission de données (analogique ?)); 4 cables pour chaque capteur (deux fronts montants, un +5V et un pour la terre). C'est celà ?

  17. #16
    jiherve

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Re
    Pour le câblage cela doit être çà.

    JR
    l'électronique c'est pas du vaudou!

  18. #17
    Juloblairot

    Re : Asservissement, branchements : Codeurs, moteur, Arduino

    Merci beaucoup pour tout !

    Est-il possible de visualiser les fronts montants et descendants sur Arduino (le logiciel) de mes capteurs ? Parce que j'ai branché des cables de mon capteur rotatif à mon arduino, et je ne trouve vraiment pas le moyen de faire ca. Il me semble que c'est possible (sans oscillo, a l'ordi), j'ai croisé plusieurs personnes ayant réussi sur le net Nom : Créneaux capteur.png
Affichages : 148
Taille : 29,7 Ko. Comme ceci. Il faudrait que je puisse les modéliser et compter le nombre de fronts totaux

    Encore merci

Discussions similaires

  1. Asservissement avec arduino
    Par Ulys.se dans le forum Électronique
    Réponses: 2
    Dernier message: 30/04/2015, 10h08
  2. [ARDUINO] Renseignements sur des branchements
    Par Wellan38 dans le forum Électronique
    Réponses: 0
    Dernier message: 15/07/2011, 13h34
  3. PPE -Compteur pour moteur pas a pas ( branchements et idées)
    Par invite0b9a9b11 dans le forum Électronique
    Réponses: 4
    Dernier message: 04/01/2011, 12h22
  4. Branchements moteur pas à pas
    Par AmigaOS dans le forum Électronique
    Réponses: 4
    Dernier message: 02/03/2010, 21h34
  5. [Blanc] Branchements moteur lava linge
    Par medicis dans le forum Dépannage
    Réponses: 10
    Dernier message: 10/11/2008, 15h37
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...