[Programmation] Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ... [Résolu]
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ... [Résolu]



  1. #1
    invitebffb4cc1

    Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ... [Résolu]


    ------

    Bonjour,

    Je me tourne une nouvelle fois ver vous car j'ai un petit souci concernant mon robot (genre tank).
    Mon problème est le suivant je dispose d'un Arduino mega, d'un raspberry et de 4 contrôleurs de moteur l298d.
    Mon programme se rédige de cette manière: 4 choix de commandes par le lien série en me connectant au raspberry qui est configuré en point d'accés wifi A=avance , R=recul, D=droite, G=gauche et au niveau arduino voila un extrait de mon code.
    Code:
    void loop()
    {
        if (Serial.available() > 0)
         
        command = Serial.read();
         
        if ( command == 'A' ) {
        Moteur1.step(NbPasParTour);
        Moteur2.step(NbPasParTour);
        Moteur3.step(NbPasParTour);
        Moteur4.step(NbPasParTour);
        delay(1000);                                            
        }
    Mais le problème avec ce code c'est que les moteurs tourne les un après les autres et ce que j'aimerais serais de pouvoirs les faire tourner ensemble en même temps (par deux) donc quel serais pour vous la meilleur manière de procéder et si vous aviez des exemples ceux ci m'aiderais beaucoup.

    Merci d'avance de vos réponses.

    -----

  2. #2
    Yvan_Delaserge

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Si je comprends bien ton code, lorsque la commande "A" arrive, les 4 moteurs sont activés les uns après les autres c'est vrai, mais le processeur va exécuter ces 4 commandes
    Moteur1.step(NbPasParTour);
    Moteur2.step(NbPasParTour);
    Moteur3.step(NbPasParTour);
    Moteur4.step(NbPasParTour);
    en quelques microsecondes

    sauf si ces 4 fonctions appelées monopolisent le processeur trop longtemps.

    Ce sont donc les codes de ces fonctions qu'il faudrait rendre plus rapides. Envoie-les nous , que nous puissions essayer de réfléchir à comment faire.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  3. #3
    invitebffb4cc1

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Bonjour Yvan,

    Oui tu as bien compris le code et le problème en question.
    Voici le code:
    Code:
     #include <Stepper.h>
     
    const int NbPasParTour = 200;                      // Nombre de pas pour 360 degres
     
    Stepper Moteur1(NbPasParTour, 2, 3, 4, 5);   // Initialise le moteur sur les broches 2 à 5
    Stepper Moteur2(NbPasParTour, 6, 7, 8, 9);   // Initialise le moteur sur les broches 2 à 5
    Stepper Moteur3(NbPasParTour, 10, 11, 12, 13);   // Initialise le moteur sur les broches 2 à 5
    Stepper Moteur4(NbPasParTour, 22, 24, 26, 28);   // Initialise le moteur sur les broches 2 à 5
    
    int command = 0;//stock le caractère lu sur la voie série
    
    void setup()
    {
        Moteur1.setSpeed(80);                               //Vitesse de rotation du moteur
        Moteur2.setSpeed(80);
        Moteur3.setSpeed(80);
        Moteur4.setSpeed(80);
        Serial.begin(9600);
    }
    void loop()
    {
        if (Serial.available() > 0)
         
        command = Serial.read();
         
        if ( command == 'A' ) {
        Moteur1.step(NbPasParTour);
        Moteur2.step(NbPasParTour);
        Moteur3.step(NbPasParTour);
        Moteur4.step(NbPasParTour);
        delay(1000);                                            
        }
         
        if ( command == 'R' ) {
        Moteur1.step(-NbPasParTour);
        Moteur2.step(-NbPasParTour);
        Moteur3.step(-NbPasParTour);
        Moteur4.step(-NbPasParTour);
        delay(1000);                                            
        }
             
        if ( command == 'D' ) {
        Moteur1.step(-NbPasParTour);
        Moteur2.step(-NbPasParTour);
        Moteur3.step(NbPasParTour);
        Moteur4.step(NbPasParTour);
        delay(1000); 
        }
         
        if ( command == 'G' ) {
        Moteur1.step(NbPasParTour); 
        Moteur2.step(NbPasParTour);
        Moteur3.step(-NbPasParTour);
        Moteur4.step(-NbPasParTour);
        delay(1000); 
        }
    }
    Sinon est ce que si je viens a connecter 2 l298d sur les même pins et les 2 autre sur d'autre pins de façon a les rassembler et a n'avoir que deux commandes comme moteur1=les deux moteurs du coté droit et moteur2=les deux moteurs du coté gauche cela serais possible ?

    Merci de ton aide.

  4. #4
    jiherve

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Bonjour
    Sur la doc arduinesque on peut lire :
    Stepper: step(steps)
    Description

    Turns the motor a specific number of steps, at a speed determined by the most recent call to setSpeed(). This function is blocking; that is, it will wait until the motor has finished moving to pass control to the next line in your sketch. For example, if you set the speed to, say, 1 RPM and called step(100) on a 100-step motor, this function would take a full minute to run. For better control, keep the speed high and only go a few steps with each call to step().
    Pour faire ce que l'on veut il faut oublier le charabia arduino et passer en assembleur avec gestion des interruptions
    JR
    l'électronique c'est pas du vaudou!

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

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Bonjour JR,

    Tu viens de me donner la réponse a mon problème j'utilise une librairie avec des fonctions bloquante donc a chaque fonction elle attend que celle ci soit terminer pour continuer sur la suivante donc a la place d'utiliser la lib stepper il faut que je (re)code en utilisant une lib non bloquante et donc je me tourne ver accelstepper.

    Est ce un bon choix ou y a t-il d'autres lib plus adapté a mes besoins ?

    Merci d'avance de vos réponses

  7. #6
    Yvan_Delaserge

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Puisque les moteurs 1 et 2 tournent toujours ensemble et idem pour les moteurs 3 et 4, tu ne peux pas simplement câbler 1 et 2 , respectivement 3 et 4 en parallèle?

    Autrement, il y a moyen de générer directement les commandes destinées aux drivers des moteurs, sans passer par la bibliothèque stepper. Il faut éviter d'utiliser la fonction delay().
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  8. #7
    invitebffb4cc1

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Bonsoir Yvan,

  9. #8
    invitebffb4cc1

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Bonsoir Yvan,

    Pièce jointe 327556

    En parallèle comme le dessin ou non ?

    Qu'entends tu par "Autrement, il y a moyen de générer directement les commandes destinées aux drivers des moteurs, sans passer par la bibliothèque stepper." ??
    As tu un exemple ?

    Par contre pour la librairie AccelSteper j'ai beaucoup de mal a l'exploiter si quelqu'un a des exemples si une autre solution n'est pas trouvé ?

    Matériel a disposition: Un arduino mega, de 4 contrôleur de moteur l298d (comme sur l'image) et 4 moteur NEMA 17 4 Fils 1.8deg 17hd34008-22b
    Le but: Faire fonctionner "un robot tank" en avant en arrière ou de tourner a gauche ou de tourner a droite.

    A bientôt

  10. #9
    antek

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Je ne connais pas Arduino, peut-être que ce n'est pas possible ?
    Mais en C ou assembleur c'est faisable.

    Ce serait plus simple avec des moteurs CC en utilisant 2 module PWM du Atmega.

  11. #10
    Yvan_Delaserge

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Citation Envoyé par tchou21 Voir le message
    Bonsoir Yvan,

    Pièce jointe 327556

    En parallèle comme le dessin ou non ?

    Qu'entends tu par "Autrement, il y a moyen de générer directement les commandes destinées aux drivers des moteurs, sans passer par la bibliothèque stepper." ??
    As tu un exemple ?

    Par contre pour la librairie AccelSteper j'ai beaucoup de mal a l'exploiter si quelqu'un a des exemples si une autre solution n'est pas trouvé ?

    Matériel a disposition: Un arduino mega, de 4 contrôleur de moteur l298d (comme sur l'image) et 4 moteur NEMA 17 4 Fils 1.8deg 17hd34008-22b
    Le but: Faire fonctionner "un robot tank" en avant en arrière ou de tourner a gauche ou de tourner a droite.

    A bientôt
    La pièce jointe n'est pas visible.

    Il est possible d'écrire un programme pour l'Arduino qui génère les signaux destinés à contrôler les drivers de moteurs pas-à-pas, sans utiliser la bibliothèque . Il suffit pour cela de connaître les signaux requis par les drivers.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  12. #11
    Yvan_Delaserge

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Avec ces modules
    Nom : L298D.gif
Affichages : 1808
Taille : 196,7 Ko

    il faut relier ensemble les broches d'entrée de deux modules, respectivement In1, In2, In3, In4 et aux sorties de l'Arduino. Chaque module alimente un moteur pas à pas.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  13. #12
    invitebffb4cc1

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Bonjour Antek et Yvan,

    Merci pour vos réponses. J'ai essayé plusieurs de vos solutions décrites plus haut et la meilleur solution (même si il y a aucun article qui en parle sur le net ou alors je suis passé a coté) c'est de câbler les modules en parallèle (idée de Yvan), ca fonctionne parfaitement bien et cerise sur le gâteau cela me libère des entrées sorties sur mon arduino au lieu de 8 utilisés je passe a 4 et plus besoin d'utiliser la librairie AccelStepper qui est bien plus complexe que la libraire Stepper que j'ai utilisé et qui présente d'origine.

    Mes moteurs fonctionne ensemble donc le problème est résolu.

    Merci encore de votre aide

  14. #13
    Yvan_Delaserge

    Re : Faire fonctionner 2 moteur pas a pas ensemble et non 1 a la fois ...

    Ce fut un plaisir.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

Discussions similaires

  1. Faire fonctionner un appareil américain en France ? [Résolu]
    Par inviteb3ad5ef2 dans le forum Bricolage et décoration
    Réponses: 75
    Dernier message: 30/03/2016, 15h31
  2. faire fonctionner un moteur electrique et un alternateur en auto-alimentaion
    Par invite91eb2ad2 dans le forum Environnement, développement durable et écologie
    Réponses: 30
    Dernier message: 05/06/2014, 13h03
  3. Comment faire fonctionner un moteur tri 220V avec du tri 400V?
    Par invitea32f5b25 dans le forum Bricolage et décoration
    Réponses: 23
    Dernier message: 16/05/2013, 21h03
  4. faire fonctionner un moteur pas à pas
    Par invite59910c8c dans le forum Électronique
    Réponses: 2
    Dernier message: 10/05/2013, 01h55
  5. comment faire fonctionner un moteur conventinnel a l'hydrogene(eau,h2o)
    Par invite750ab492 dans le forum Technologies
    Réponses: 17
    Dernier message: 11/08/2008, 23h00
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...