Commande d'un moteur pas-a-pas

Bonjour,

J'ai réalisé ce montage :

J’utilise ce moteur : Mini moteur 12V pas a pas

Avec ce code

int dirPin=4;  //broche de direction
   int pasPin=3;  //broche de contrôle de pas
   
   void setup(){
     pinMode(dirPin,OUTPUT); //configuration des broches en "SORTIE"
     pinMode(pasPin,OUTPUT); 
   }
   
   void loop()
   {
     //utiisation de la fonction "positionnement" pour bouger le moteur 500 pas dans le sens horaire
     positionnement(dirPin,pasPin,500);
     //attendre une seconde
     delay(1000);
     //utiisation de la fonction "positionnement" pour bouger le moteur 500 pas dans le sens antihoraire
     positionnement(dirPin,pasPin,-500);
     //attendre une seconde
     delay(1000);
   }
   //fonction de positionnement
   void positionnement(int dir,int pas,int dist)
   {
     //on détermine la direction du moteur
     if(dist>0)
       digitalWrite(dir,HIGH); //"DIR" = 5V
     else
       digitalWrite(dir,LOW); //"DIR" = 0V
   
     //tant que x ne depasse pas la distance
     for(int x=0;x<abs(dist);x++)
     {
       //on envoit une pulsation qui fait avancer le moteur d'un pas
       digitalWrite(pas,HIGH);
       delay(1);
       digitalWrite(pas,LOW);
       delay(1);
     }
   }

J'ai branche le moteur :
2B -> rouge
2A -> blanc
1A -> noir
1B -> jaune

Le moteur ne tourne pas mais chauffe.
Est il mal branché? Non compatible avec un A4988 ou mal réglé?

Merci d'avoir pris le temps de me lire.

un petit up :smiling_imp:

hello, pour info

/*
Test moteur PAP (pas entier)
Carte Pololu avec puce A4988 + régulateur de tension > http://www.pololu.com/catalog/product/1183
http://www.pololu.com/product/1182


UNO     platine micro pas
5          MS1
6          MS2
7          MS3
11         direcion
12         Step
13         Enable
           reset shunté avec sleep
           puis raccordé à Vcc via une R de 12 K
GND        GND de la cde
5 Vcc      VCC de la cde
A1 et B1   sur l'enroulement 1 du moteur
A2 et B2   sur l'enroulement 2 du moteur
VDM      alimentation 12 V pour moteur
GDN       masse alimentation 12 V pour moteur 
          ne pas oublier le condo electrolytique sur l'alim 12 V moteur ( 100 micro farads )
          
          
          */

const int dirPin = 11;  // DIR
const int stepPin = 12; // STEP
const int enablePin = 13; // ENABLE
int var = 0;
int essai = 0;
long resolutio = 0;
int mili = 0;
int micropulse = 0;
long micro = 0;
long tour = 240;
void setup()
{
  DDRD = B11100010;               // port D, les 1 sont en sortie 5,6,7 sont MS1 à 3
  Serial.begin(115200);
  pinMode(enablePin, OUTPUT);     // broche Enable en sortie
  digitalWrite(enablePin, HIGH);  // ensuite on met un niveau haut sur Enable pour relacher le moteur
  pinMode(dirPin, OUTPUT);        // broche Dir  en sortie
  digitalWrite(dirPin, HIGH);     // Tourner à droite (selon branchements !)
  pinMode(stepPin, OUTPUT);       // broche Step en sortie
  delayMicroseconds(2); // on donne un très court délais par précaution avant de tourner
}


void loop()
{
  Serial.println("debut de boucle");
  digitalWrite(enablePin, LOW); // active le moteur (il ne sera plus possible de le tourner à la main et l'intensité sera à son MAX !!
  for (int f = 0; f <= 4 ; f++)
  {
    resolution ( f );
    test();
  }
digitalWrite(enablePin, HIGH); // active le moteur (il sera plus possible de le tourner à la main et l'intensité sera à zéro !!
Serial.println("tempo 3 secondes fin de boucle");
delay ( 3000);
}


void test() //  faire tourner le moteur de 5 tours de 48 pas
{
  int j;
  for(j=0; j<=(tour*5); j++)               // ajuster le nb. de pas (ici 48 pas soit un tour. On compte le zéro !)
  { 
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(micropulse);           // à ajuster selon moteur, on peut essayer de diminuer à 2 us
    digitalWrite(stepPin, LOW);
    delayMicroseconds(micro);       // fréquence à ajuster selon moteur (contrôle la vitesse et le couple)
  }
}



void resolution ( int reso )
{
  Serial.print("resolution =  ");
    Serial.println(reso,DEC);
switch (reso) 
  {
    case 1:                          // 1/2 pas
      PORTD &= B00011111;
      delayMicroseconds(10);
      PORTD |= B10000010;            //128
      tour = (48*2);
      Serial.print("nombre de pas pour un tour  =  ");
      Serial.println(tour,DEC);
      micropulse = 10;
      micro = 2500;
      Serial.println("1/2 pas");
      resolutio=PIND & B11100000;
      Serial.print("port D, bits 7, 6 et 5  =  ");
      Serial.println(resolutio,DEC);
      break;
      
    case 2:                          // 1/4 pas
      PORTD &= B00011111;
      delayMicroseconds(10);
      PORTD |= B01000010;            //64
      tour = (48*4);
      Serial.print("nombre de pas pour un tour  =  ");
      Serial.println(tour,DEC);
      micropulse = 10;
      micro = 1250;
      Serial.println("1/4 pas");
      resolutio=PIND & B11100000;
      Serial.print("port D, bits 7, 6 et 5  =  ");
      Serial.println(resolutio,DEC);
      break;
      
    case 3:                          // 1/8 pas
      PORTD &= B00011111;
      delayMicroseconds(10);
      PORTD |= B11000010;            //192
      tour = (48*8);
      Serial.print("nombre de pas pour un tour  =  ");
      Serial.println(tour,DEC);
      micropulse = 5;
      micro = 625;
      Serial.println("1/8 pas");
      resolutio=PIND & B11100000;
      Serial.print("port D, bits 7, 6 et 5  =  ");
      Serial.println(resolutio,DEC);
      break;
      
    case 4:                          // 1/16 pas
      PORTD &= B00011111;
      delayMicroseconds(10);
      PORTD |= B11100010;            //224
      tour = (48*16);
      Serial.print("nombre de pas pour un tour  =  ");
      Serial.println(tour,DEC);
      micropulse = 2;
      micro = 312;
      Serial.println("1/16 pas");
      resolutio=PIND & B11100000;
      Serial.print("port D, bits 7, 6 et 5  =  ");
      Serial.println(resolutio,DEC);
      break; 
      
   default:                         // full pas
      PORTD &= B00011111;
     // PORTD |= B00000010;
     tour = 48;
     Serial.print("nombre de pas pour un tour  =  ");
     Serial.println(tour,DEC);
     micropulse = 10;
     micro = 5000;
     Serial.println("full pas");
     resolutio=PIND & B11100000;      //00
     Serial.print("port D, bits 7, 6 et 5  =  ");
     Serial.println(resolutio,DEC);
     break;
  }
}

Bonjour,
ce type de moteur ne fonctionne pas à moins de 4ms par pas

Bien vu, j'ai remplacé 1 par 4 et le moteur tourne!
Merci.

Par contre le moteur chauffe rapidement, il me reste à régler le driver, je pense...

Bonjour,
oui, avec un petit tournevis, voire un ampèremètre.

Bonjour,

Pensez vous que ce type de driver convient à ce type de moteur?
Car ça chauffe à fort!

Le montage est bon car ca marche bien avec NEMA17 avec ce programme :

   int dirPin=4;  //broche de direction
   int pasPin=3;  //broche de contrôle de pas
   
   void setup(){
     pinMode(dirPin,OUTPUT); //configuration des broches en "SORTIE"
     pinMode(pasPin,OUTPUT); 
   }
   
   void loop()
   {
     //utiisation de la fonction "positionnement" pour bouger le moteur 500 pas dans le sens horaire
     positionnement(dirPin,pasPin,500);
     //attendre une seconde
     delay(10000);
     //utiisation de la fonction "positionnement" pour bouger le moteur 500 pas dans le sens antihoraire
     positionnement(dirPin,pasPin,-500);
     //attendre une seconde
     delay(10000);
   }
   //fonction de positionnement
   void positionnement(int dir,int pas,int dist)
   {
     //on détermine la direction du moteur
     if(dist>0)
       digitalWrite(dir,HIGH); //"DIR" = 5V
     else
       digitalWrite(dir,LOW); //"DIR" = 0V
   
     //tant que x ne depasse pas la distance
     for(int x=0;x<abs(dist);x++)
     {
       //on envoit une pulsation qui fait avancer le moteur d'un pas
       digitalWrite(pas,HIGH);
       delay(4);
       digitalWrite(pas,LOW);
       delay(40);
     }
   }