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

LabVIEW Discussion :

Commande de position sur moteur pas à pas


Sujet :

LabVIEW

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut Commande de position sur moteur pas à pas
    Bonjour à tous,

    je dois développer un VI pour commander 2 moteurs pas à pas que je voudrais commander en vitesse. Pour cela, il faut que je leur envoie un signal carré continue à une certaine fréquence. Mon problème :
    - je n'arrive pas à générer le signal que je veux : je ne sais pas s'il faut utiliser square wave ou square waveform, quelle est la différence ?
    - pour qu'il soit continue, j'ai fait une boucle while avec la fréquence comme paramètre modifiable et un bouton stop pour l'arrêter. ça ne marche pas donc quelle est la bonne méthode ?

    Merci pour vos remarques et conseils.

  2. #2
    Membre averti Avatar de VictorNet
    Profil pro
    Inscrit en
    Février 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 275
    Points : 382
    Points
    382
    Par défaut
    En général on utilise un intermediaire avec de l'electronique de puissance et un générateur de signal. C'est cet intermediaire qu'on pilote par labview. Attaquer directement les bobinage du moteur avec labview c'est une approche assez curieuse...

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Il y a un variateur intégré au moteur.

    Je le pilote en RS 485.

  4. #4
    Membre averti Avatar de VictorNet
    Profil pro
    Inscrit en
    Février 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 275
    Points : 382
    Points
    382
    Par défaut
    ok, et tu compte l'envoyer où le signal carré que tu souhaite générer via labview?

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Ben en fait, je compte l'envoyer sur le variateur du moteur via une carte PCI RS 485 et j'espère qu'il tournera. Si c'est pas la bonne méthode, alors j'attends vos coms avec impatience.

  6. #6
    Membre averti Avatar de VictorNet
    Profil pro
    Inscrit en
    Février 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 275
    Points : 382
    Points
    382
    Par défaut
    Normalement c'est plutot des commande ascii qu'on envoie en RS485, il faut que tu trouve la doc de ton variteur pour avoir la liste des commande.

    En fait tu dois envoyer des paramètre du genre: allumage moteur, vitesse nominal, acceleration, position à atteindre....

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Ok je vais voir ça mais par rapport à la génération d'un signal carré continu que l'on peut arrêter via un bouton arrêt, est ce qu'il faut utiliser la fonction sin wave form ou bien sin wave ? De plus pour qu'il soit continu, comment fait on (boucle, tempo, ...) ?

  8. #8
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Je vois pas ce que sin wave veut dire??? Peux tu preciser ou tu la trouve?

    Pour generer un signal continu, regarde dans les exemples ( Gen Mult Volt Update - sw timed.vi)

    Il montre le principe pour générer un signal continu. A toi de le modifier pour pouvoir envoyer ton signal.

    a+

  9. #9
    Membre averti Avatar de VictorNet
    Profil pro
    Inscrit en
    Février 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 275
    Points : 382
    Points
    382
    Par défaut
    Je pense qu'il parle des generateur de waveform qui se trouve dans la partie "Analyse" (en tout cas sur la v6.1).

    le Sine waveform. vi est sensé generer un signal sinusoidal...

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    j'ai trouvé les exemples pour piloter une liaison série (COM). Mon moteur étant relié en RS485 sur le PC, est ce qu'il suffit d'envoyer les trames qui vont bien dans "Buffer à écrire" du VI VISA Write pour que ça fonctionne ? Autre question de débutant : c quoi exactement une trame de commande pour un moteur ? Merci d'avance.

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    J'ai oublié une petite chose : dans l'exemple, ils écrivent et il demandent ensuite un retour de lecture du port si j'ai bien compris. Ma question est la suivante : est ce qu'on doit toujours écrire et lire pour commander un port ?
    Merci encore.

  12. #12
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Normalement, pour piloter ton appareil, il suffit de lui envoyer des trames.
    Sur le principe, il s'agit d'un certain nombre d'octets qui sont envoyés comme par exemple 0x82, 0x85, 0x78. De l'autre coté, un système décodera ces trames et agira en fonction.

    Cependant, pour que cela soit plus compréhensible, on utilise parfois des trames ASCII plus facile à lire. Les octets précédents donnent "RUN".

    C'est le principe de tout dialogue, quelque soit le protocole.

    Pour connaitre toutes les commandes ( donc les trames a envoyer), tu dois bien sur te référer a ta doc.

    Pour finir, sur certains protocoles, pour être certain que le système en face a bien compris ton message, l'implémentation d'acquittement est prévue. Après chaque commande envoyée ( par un write), tu dois recevoir ( read) une trame d'acquittement. Tout ceci doit être défini dans la doc. C'est a toi de t'adapter au protocole.

    Bon courage,
    a+

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Merci Scyrius,


    tu confirmes ce que je pensais. Par rapport à la doc, j'ai effectivement quelques commandes mais rien de très détaillé. Par exemple la commande "STEP2_INV" augmente ou réduit par un facteur 10 le nombre de pas du moteur. Ce que j'ai du mal à comprendre, c'est quand tu l'as envoyé, comment tu reviens en arrière par exemple ? D'autre part, c'est bien sympa de communiquer par trame, mais quand tu veux faire un panel graphique avec des sélecteurs numériques pour la vitesse, la position, ..., comment est qu'on fait vu que c'est plus de la trame ? Merci encore.

  14. #14
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Tu travaille selon le principe du maitre-esclave: tu dis et le système fait. Donc, tu lui dis de bouger, il bouge. Si tu veux faire marche arrière, c'est pas possible directement. Tu dois envoyer une nouvelle commande: la commande inverse.

    Pour le panneau, imagine que c'est un boitier de commande: tu sélectionnes des valeurs de vitesse, de sens et tu cliques sur un bouton GO. Le programme ira chercher les différentes valeurs, construira les trames à envoyer et les enverra. Le code a faire est simple: une simple boucle booleenne CASE reliée a ton bouton GO. Si elle est vrai ( donc, il y a eu appui sur le bouton), tu formate tes trames et tu les envoies. Si elle est fausse, bah, tu fait rien.

    Voila le principe.

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    OK je vois le principe, mais quand tu dis "tu formates tes trames", qu'est ce que ça veut dire exactement ? Par exemple pour faire simple, si tu as une trame "GATE654" qui permet au moteur d'effectuer un tour complet et un indicateur numérique qui te permet de donner le nombre de tours que tu veux, je penserais intégrer une boucle de condition avec comme nombre d'itérations, le nombre indiqué sur le panel graphique. Tu confirmes ?

  16. #16
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Tout a fait cela, par formater une trame, je veux simplement dire l'écrire en fonction des éléments variables( nb de tours). C'est un terme relativement courant

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Ok merci, ben de toute façon, le principal, c'est de se comprendre et puis je sais pas si je l'ai dit mais c'est la première fois que je fais de la commande avec LabVIEW. A part ça, désolé de te prendre ton temps mais j'ai une autre question. Je compte reprendre l'exemple "Basic Serial Write and Read" pour dialoguer avec le port série. Tout d'abord j'ai testé avec Measurement & Automation si mon port série répondait correctement, et ça a l'air de fontionner, j'obtient BFFF0015 dans "Return Status". Le problème, c'est que quand je lance le programme, il n'y a pas d'erreur mais je n'ai aucun retour ni dans la boîte de dialogue "Read string", ni dans l'afficheur "Bytes read" ! Autre question, je n'ai pas encore le moteur mais si je voulais le tester, est ce que je pourrais envoyer des trames grâce à cet exemple ?

  18. #18
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Tu as bien une erreur, enfin, dans certains cas: l'erreur BFFF0015 est une erreur Time-Out.
    Le VI que tu utilise effectue l'envoi et attend une réponse. Cependant, comme il n'y a rien au bout, le time-out arrive.

    Sur le principe, il n'y a aucun problème a l'utiliser mais l'erreur apparaitra a chaque fois après un certain temps ( le temps d'attente pourra être un problème ...).

    A ta place, je recréerais un nouveau VI qui envoie la trame et qui reçois seulement si un booléen d'entrée est activé. Cela simplifierais le problème.

    a+

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 18
    Points
    18
    Par défaut
    Ok,

    si je comprends bien, c'est la confirmation de lecture qui n'a pas lieu parce qu'il n'y rien de connecté au port série. Est ce que ça veut dire que si je connecte mon moteur sur ce port, ça peut marcher ? D'autre part, tu parles de refaire un VI qui envoie la trame et qui reçoit seulement si un booléen d'entrée est activé. D'après toi, il faudrait donc supprimer le délai avant lecture pour le remplacer par un booléen en (0,1). C'est bien ça ?

  20. #20
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Quand il n'y a personne pour répondre "OK, j'ai reçu", tu ne reçois rien

    Je voulais dire tu envoies la trame mais tu ne lis que si le booléen est activé, donc, uniquement si tu le desires.
    Je pense que tu aura toujours besoin d'une petite tempo ( jusqu'à 400ms), soit le temps pour le système de "digérer" ta commande ( la recevoir, la comprendre, agir et répondre).
    Ce nouveau VI n'est absolument pas obligatoire, c'est juste un plus.

    a+

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/11/2010, 21h31
  2. Réponses: 0
    Dernier message: 09/08/2010, 17h41
  3. Commande de déplacement de moteurs pas à pas
    Par ecile dans le forum LabVIEW
    Réponses: 5
    Dernier message: 23/11/2009, 10h17
  4. Réponses: 0
    Dernier message: 12/06/2009, 12h01
  5. Réponses: 27
    Dernier message: 25/08/2004, 22h30

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