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 :

Plateau tournant et 2M542


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Graphiste
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Par défaut Plateau tournant et 2M542
    Bonjour à tous

    J’essaye de réaliser un plateau tournant. Il tourne en ce moment, mais il manque de couple et le moteur fait beaucoup de bruit.

    Voici le matériel actuel :

    Une alimentation 24V/5A
    Une alimentation 5V pour Arduino
    Une carte Arduino Uno
    Une carte de commande moteur TB6560
    Et un moteur pas-à-pas bipolaire 180N-cm

    Je n’ai plus de problème mécanique, mais le plateau à du mal a tiré un poids de 60 kgs. Ce qui ne me semble pas normal vu la puissance du moteur. J’essaye donc de faire fonctionner une carte de commande 2M542 qui est plus puissante, mais je n’y arrive pas. Il y a bien une impulsion, mais rien de plus, le moteur refuse de tourner.
    Je suis nul en programmation et je n’arrive même pas à réaliser une boucle de manière à faire tourner le moteur en continu. De plus, je modifie la vitesse en modifiant la valeur de delay, j’imagine qu’il y a une méthode plus élégante.

    Je précise aussi que j’ai passé des heures à chercher des infos.

    Pourriez-vous m’aider à faire fonctionner le 2M542 ?

    Merci d'avance pour votre aide

    Le programme utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    //
    // Commande d'un moteur pas-à-pas à l'aide d'un pilote A4988 avec
    //     Arduino.
    //
    // Un projet www.mchobby.be (vente de kit et composant)
    // Meurisse D. - Licence CC-SA-BY
    //
    // Un tutoriel http://mchobby.be/wiki/index.php?title=A4988
    // Ou Acheter un StepStick A4988
    //    http://shop.mchobby.be/product.php?id_product=349
    //
     
    #define pinEnable 13 // Activation du driver/pilote
    #define pinStep    9 // Signal de PAS (avancement)
    #define pinDir     8 // Direction 
     
    void setup(){
      Serial.begin(9600);
      Serial.println("Test A4988");
     
      pinMode( pinEnable, OUTPUT );
      pinMode( pinDir   , OUTPUT );
      pinMode( pinStep  , OUTPUT );
    }
    void loop(){
      int i = 0;
     
      digitalWrite( pinDir   , HIGH); // Direction avant
      digitalWrite( pinStep  , LOW);  // Initialisation de la broche step
     
      // Avance de 10000 pas
      for( i=0; i<10000; i++){
        Serial.println( i );
        digitalWrite( pinStep, HIGH );
        delay( 0.1 );
        digitalWrite( pinStep, LOW );
        delay( 0.1 );
      } 
     
      // Pas de step et pas d'ordre... 
      //   l'axe du moteur est donc bloqué 
      Serial.println("Axe bloqué + attendre 5 sec");
      delay( 5000 );
     
      // déblocage de l'axe moteur
      Serial.println("Deblocage axe");
      digitalWrite( pinEnable, HIGH ); // logique inversée
     
      // Fin et blocage du programme
      // Presser reset pour recommander
      Serial.println("Fin de programme");
      while( true );
    }

  2. #2
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Bonjour,

    Pour piloter ton module 2M542, je te propose plutôt d'utiliser le module PWM de l'ARDUINO au lieu d'utiliser des delay. Cette fonction te permet de faire varier le rapport cyclique de ton signal de commande et donc par conséquent, la valeur moyenne de ton signal de commande. Une fois traduit par ton 2M542, cela devrait être équivalent 0% -> 100% de la vitesse du moteur.

    Fais également attention à l'ordre des commandes envoyées (cf http://www.hi-end.ro/pdf/motoare/CMP5042.pdf)

    Une dernière remarque, la déclaration de tes variables devrait se trouver dans ton setup() (notamment le int i).

    Cdlt
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Graphiste
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Par défaut
    Merci pour ta réponse, mais je n’ai pas le niveau pour mettre en pratique, y a-t-il quelqu'un dans la salle prête contre rémunération à réaliser un programme qui tourne avec cette configuration ?
    Merci d'avance

  4. #4
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Nous allons procéder par étapes ^^.

    La fonction PWM (Modulation de Largeur d'Impulsions en français) remplacera ta boucle for qui, pour le moment, te sert à faire varier ton signal entre '0' et '1'. Tu trouveras ici un exemple de signal généré à l'aide du module PWM : http://arduino.cc/en/Tutorial/PWM.

    Dans un premier temps, tu dois configurer la broche qui servira de génération de pulse (PWM) dans ton setup() comme tu l'as déjà plus ou moins fait. Selon ton modèle Arduino, le numéro de broche diffère, quel est le modèle que tu utilises ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void setup()
     
    {
     
      pinMode(pulsePIN, OUTPUT);   // sets the pin as output
     
    }
     
     
     
    void loop()
     
    {
     
        analogWrite(pulsePIN,val);  // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
     
    }
    Avec pulsePIN le numéro de ta sortie (selon ton Arduino).
    Ensuite, dans ta boucle (loop()) la fonction analogWrite te permet de générer un signal analogique (ici un signal carré) sur ta sortie pulsePIN. Le second paramètre de ta fonction est la valeur du rapport cyclique qui est ici compris en 0 et 255 (0 = 0% et 255 = 100%). Attention, tu dois indiquer uniquement un paramètre entier.

    Pour faire varier ta vitesse, tu pourrais par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #define pulsePIN 13 // En supposant que la broche 13 soit paramétrable ainsi sur ton arduino
     
    void setup()
    {
     
      pinMode(pulsePIN, OUTPUT);   // sets the pin as output
      int i;
     
    }
     
     
     
    void loop()
     
    {
       for ( i = 0 ; i < 255 ; i ++ ){
        analogWrite(pulsePIN,i);  // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
        delay( 10 );
        }
    for ( i = 255 ; i > 0 ; i -- ){
        analogWrite(pulsePIN,i);  // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
        delay( 10 );
        }
    }
    En théorie, ton moteur devrait accélérer puis ralentir en boucle. Ceci n'est qu'un code de principe, il ne prend pas (encore) en compte les signaux annexes pour piloter ton variateur.
    Si tu peux avoir un oscillo sous la main pour visualiser les signaux générés ça pourrait t'aider.
    Je te laisse digérer ces informations pour passer ensuite à l'étape suivante ^^
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Graphiste
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Par défaut
    Toutes ma gratitude, je regarde ça ce soir.
    j'utilise une "SainSmart UNO pour Arduino, ATmega328P"
    Merci encore

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Graphiste
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Par défaut
    - Je me suis penché dessus, j'ai essayer de trouver l'ordre a respecté dans les commande à envoyé sur le module et je n'ai pas trouvé l'information.
    - Donc visiblement les sorties analogiques de ma carte sont sur les bornes 3, 5, 6, 9, 10 et 11.
    - J'ai bien compris l'intêret d'utiliser le PWM pour moduler la vitesse du cycle.
    - La dernière fois que j'ai vu un oscilloscope, je l'ai grillé et chose pas dire quand c'était c'est loin.

    La suite, la suite Nom : langue2.gif
Affichages : 732
Taille : 1 013 octets Nom : langue2.gif
Affichages : 732
Taille : 1 013 octets

Discussions similaires

  1. [Mail] tache tournant en permanence sur un serveur
    Par qouet dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2005, 14h22
  2. [GUI]jeu de plateau
    Par le Daoud dans le forum Interfaces Graphiques en Java
    Réponses: 11
    Dernier message: 31/08/2005, 13h38
  3. Comment faire un plateau hexagonal
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 12/10/2004, 13h31
  4. un plateau en SDL...
    Par maniaco_jazz dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 24/02/2004, 16h48
  5. prgram tournant côté serveur
    Par hogan dans le forum Développement
    Réponses: 8
    Dernier message: 02/02/2004, 10h54

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