Aller au contenu


RocketPickel

Inscrit(e) (le) 27 nov. 2019
Déconnecté Dernière activité mars 21 2022 05:41
-----

Sujets que j'ai initiés

Contrôler des moteurs pas à pas avec PWM

29 novembre 2020 - 07:01

Bonsoir à tous , après avoir plus ou moins réussis à contrôler un moteur pas à pas avec le moniteur série , je me redirige vers le PWM pour moins de complexité avec vigibot et pour éviter d'utiliser le RX TX . Dans la configuration , une pi envoie un signal PWM qui est convertit par l'arduino en un signal lisible par le driver du moteur.   Je ne sais pas du tout par quoi commencer , je suis bloqué... J'ai mis deux programme un peu différent , c'est les deux manières que j'ai expérimenté pour contrôler un ou plusieurs moteur pap 

Merci d'avance 

 

Code Terminé

#include <AccelStepper.h>


AccelStepper stepper1(AccelStepper::FULL4WIRE, 0, 2, 1, 3);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 4, 6, 5, 7);
AccelStepper stepper3(AccelStepper::FULL4WIRE, 8, 10, 9, 11);
AccelStepper stepper4(AccelStepper::FULL4WIRE, A0, A2, A1, A3);


void setup() {
     
    // Paramétrage du premier moteur avec setMaxSpeed et setAcceleration
    stepper1.setMaxSpeed(1000);
    stepper1.setAcceleration(200);
     
    // Paramétrage du second moteur avec setMaxSpeed et setAcceleration
    stepper2.setMaxSpeed(1000);
    stepper2.setAcceleration(200);

    // Paramétrage de troisième moteur avec setMaxSpeed et setAcceleration
    stepper3.setMaxSpeed(1000);
    stepper3.setAcceleration(200);

    // Paramétrage de quatrième moteur avec setMaxSpeed et setAcceleration
    stepper4.setMaxSpeed(1000);
    stepper4.setAcceleration(200);
     
}
 
void loop() {
    //Début 
    stepper1.move(300);
    stepper2.move(-300);
    stepper3.move(-300);
    stepper4.move(300); 
     
    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
        
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }

    
    //Début
    stepper1.move(-600);
    stepper2.move(600);
    stepper3.move(600);
    stepper4.move(-600);

    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
      
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }


    //Début 
    stepper1.move(300);
    stepper2.move(-300);
    stepper3.move(-300);
    stepper4.move(300); 
     
    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
        
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }


    //Début 
    stepper1.move(0);
    stepper2.move(-0);
    stepper3.move(500);
    stepper4.move(-500); 
     
    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
        
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }


    //Début 
    stepper1.move(500);
    stepper2.move(-500);
    stepper3.move(-500);
    stepper4.move(500); 
     
    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
        
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }


    //Début 
    stepper1.move(-500);
    stepper2.move(500);
    stepper3.move(500);
    stepper4.move(-500); 
     
    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
        
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }


    //Début 
    stepper1.move(0);
    stepper2.move(0);
    stepper3.move(-500);
    stepper4.move(500); 
     
    while ( ( stepper1.distanceToGo() != 0 ) || ( stepper2.distanceToGo() != 0 ) || (stepper3.distanceToGo() != 0) || (stepper4.distanceToGo() != 0) ) {
        
        stepper1.run();
        stepper2.run();
        stepper3.run();
        stepper4.run();
        
    }

    
    delay(1000);
 
}

Test

#include <AccelStepper.h>

AccelStepper stepper1(AccelStepper::FULL4WIRE, 1, 3, 2, 4);

void setup() {
  Serial.begin(9600);
  stepper1.setMaxSpeed(1000);
  stepper1.setAcceleration(300);
  
   

 
}
void loop() 
{
  if(Serial.available() > 0)
  {
    char caractere = Serial.read();

    if(caractere == '1')
    {
      stepper1.move(100);
      
      stepper1.run();
    }
    if(caractere == '2')
    {
      stepper1.move(500);
      while ( stepper1.distanceToGo() != 0 )
      stepper1.run();
    }
    if(caractere == '3')
    {
      stepper1.move(1000);
      while ( stepper1.distanceToGo() != 0 )
      stepper1.run();
    }
    if(caractere == '4')
    {
      stepper1.move(1500);
      while ( stepper1.distanceToGo() != 0 )
      stepper1.run();
    }
  }  
}      
    

Controller des moteurs pas à pas avec le moniteur série

02 novembre 2020 - 11:24

Bonjour à tous , je voudrais piloter des moteurs pas à pas avec le moniteur série de l'arduino mais je rencontre quelque problèmes de programation...

J'ai un arduino et des moteurs 28byj-48  avec le controlleur ULN2003 

J'arrive à controller mon moteur mais lorsque je met Serial.begin(9600); il ne tourne plus du tout (j'ai une vibration mais aucun mouvement) voici mon code 

#include <AccelStepper.h>



AccelStepper stepper1(AccelStepper::FULL4WIRE, 0, 2, 1, 3);


void setup() {
  Serial.begin(9600);
  
          // Paramétrage du premier moteur avec setMaxSpeed et setAcceleration
    stepper1.setMaxSpeed(1000);
    stepper1.setAcceleration(200);
}


void loop() 
{
  
      stepper1.moveTo(1000);
      stepper1.run();


}
Merci d'avance ☺