Projet électronique : Commande d’un moteur pas à pas 4 phases avec Arduino

Projet électronique : Commande d'un moteur pas à pas 4 phases avec Arduino

Objectifs du projet électronique

  1. Comprendre le principe de fonctionnement d’un moteur pas à pas
  2. Comprendre le fonctionnement du circuit ULN2003
  3. Savoir implémenter la commande d’un moteur pas à pas avec le microcontrôleur
  4. Savoir modifié le sens et la vitesse d’un moteur pas à pas
  5. Autres astuces de programmation

Principe de fonctionnement

Le projet consiste à la commande d’un moteur pas à pas 4 phases en mode demi-pas  en utilisant le driver ULN2003 pour booster le courant dans les phases du moteur. La carte Arduino sert à générer les signaux de commande du moteur pas à pas (8 commandes / tour) cadencés par une fréquence.

Les chronogrammes ci-dessous illustrent les signaux de la commande en mode demi-pas, le changement du sens est simple ! Il suffit d’inverser la séquences des commandes [1 9 8 12 4 6 2 3 ] au lieu de [1 3 2 6 4 12 8 9].

Le circuit contient deux Led pour indiquer le sens de rotation du moteur S1 et S2  pour le sens 1 et sens 2 de rotation. Les Led sont connectés aux pin 8 et 9 de l’Arduino.

Vous pouvez changer la vitesse de rotation du moteur en changeant le fréquence (Fre= 1/DelayMs, voir le programme). D’après le datasheet la fréquence maximale est limitée à 1000 Hz.

Projet électornique Commande d'un moteur pas à pas 4 phases avec Arduino - LED

Projet électornique Commande d'un moteur pas à pas 4 phases avec Arduino - LED montage

Projet électornique : Commande d'un moteur pas à pas 4 phases avec Arduino - demi pas

Projet électornique : Commande d'un moteur pas à pas 4 phases avec Arduino - demi pas 1

Moteur pas à pas 28BYJ-48 – 5V (Datasheet)

Projet électornique : Commande d'un moteur pas à pas 4 phases avec Arduino - 28byj

Notions sur la commande de moteur pas à pas unipolaire

Ce type de moteur se trouve dans un grand nombre de périphériques informatiques : imprimantes, lecteur de disquettes ou disque dur car il s’agit du composant mécanique par excellence pour tout ce qui demande une grande précision de positionnement. Il en existe plusieurs modèles dont le nombre de pas par tours peut varier de quelques dizaines à quelques centaines. C’est la raison pour laquelle nous avons choisi d’utiliser ce type de moteur pour réaliser le positionnement de la caméra vidéo, aussi bien horizontalement que verticalement. Lire la suite …

Fonctionnement du circuit ULN2003 (Datasheet)

Projet électornique : Commande d'un moteur pas à pas 4 phases avec Arduino - uln2003 2

Projet électornique : Commande d'un moteur pas à pas 4 phases avec Arduino - uln2003 1

Projet électornique : Commande d'un moteur pas à pas 4 phases avec Arduino - uln2003 2

Programme Arduino

const int DelayMs = 10;        /* 1/10E-3 =100 Hz*/
const int DelayMs_Init = 10;
const int Num_Half_Step= 50; /*64*8*/;
int i= 0;

const int OUT1 = 2;
const int OUT2 = 3;
const int OUT3 = 4;
const int OUT4 = 5;

const int SENS1 = 7;
const int SENS2 = 8;


void setup() {

  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
  pinMode(OUT3, OUTPUT);
  pinMode(OUT4, OUTPUT);

  pinMode(SENS1, OUTPUT);
  pinMode(SENS2, OUTPUT);


  digitalWrite(OUT1, LOW);
  digitalWrite(OUT2, LOW);
  digitalWrite(OUT3, LOW);
  digitalWrite(OUT4, LOW);

  digitalWrite(SENS1, LOW);
  digitalWrite(SENS2, LOW);

  delay(3000);

}

void loop() {

  // Sens 1

  digitalWrite(SENS1, HIGH);
  digitalWrite(SENS2, LOW);

  for(i=0; i<Num_Half_Step;i++)
  {
    // 1 - 0001
    digitalWrite(OUT1, HIGH);
    delay(DelayMs);

    // 3 - 0011
    digitalWrite(OUT1, HIGH);
    digitalWrite(OUT2, HIGH);
    delay(DelayMs);

    // 2 - 0010
    digitalWrite(OUT1, LOW);
    digitalWrite(OUT2, HIGH);
    delay(DelayMs);

    // 6 - 0110
    digitalWrite(OUT2, HIGH);
    digitalWrite(OUT3, HIGH);
    delay(DelayMs);

    // 4 - 0100
    digitalWrite(OUT2, LOW);
    digitalWrite(OUT3, HIGH);
    delay(DelayMs);

    // 12 - 1100
    digitalWrite(OUT3, HIGH);
    digitalWrite(OUT4, HIGH);
    delay(DelayMs);

    // 8 - 1000
    digitalWrite(OUT3, LOW);
    digitalWrite(OUT4, HIGH);
    delay(DelayMs);

    // 9 - 1001
    digitalWrite(OUT1, HIGH);
    digitalWrite(OUT4, HIGH);
    delay(DelayMs);

    digitalWrite(OUT1, LOW);
    digitalWrite(OUT2, LOW);
    digitalWrite(OUT3, LOW);
    digitalWrite(OUT4, LOW);

    delay(DelayMs_Init);
  }

  // Sens 2

  digitalWrite(SENS1, LOW);
  digitalWrite(SENS2, HIGH);

  for(i=0; i<Num_Half_Step;i++)
  {

    // 9 - 1001
    digitalWrite(OUT1, HIGH);
    digitalWrite(OUT4, HIGH);
    delay(DelayMs);

    // 8 - 1000
    digitalWrite(OUT1, LOW);
    digitalWrite(OUT4, HIGH);
    delay(DelayMs);

    // 12 - 1100
    digitalWrite(OUT3, HIGH);
    digitalWrite(OUT4, HIGH);
    delay(DelayMs);

    // 4 - 0100
    digitalWrite(OUT4, LOW);
    digitalWrite(OUT3, HIGH);
    delay(DelayMs);

    // 6 - 0110
    digitalWrite(OUT2, HIGH);
    digitalWrite(OUT3, HIGH);
    delay(DelayMs);

    // 2 - 0010
    digitalWrite(OUT3, LOW);
    digitalWrite(OUT2, HIGH);
    delay(DelayMs);

    // 3 - 0011
    digitalWrite(OUT1, HIGH);
    digitalWrite(OUT2, HIGH);
    delay(DelayMs);

    // 1 - 0001
    digitalWrite(OUT1, HIGH);
    digitalWrite(OUT2, LOW);
    delay(DelayMs);

    digitalWrite(OUT1, LOW);
    digitalWrite(OUT2, LOW);
    digitalWrite(OUT3, LOW);
    digitalWrite(OUT4, LOW);

    delay(DelayMs_Init);
  }
}

Photos du projet

Projet-électornique-Commande-dun-moteur-pas-à-pas-4-phases-avec-Arduino-LED-photo-1-1500x1125

Projet-électornique-Commande-dun-moteur-pas-à-pas-4-phases-avec-Arduino-LED-photo-2-1500x1125

Projet-électornique-Commande-dun-moteur-pas-à-pas-4-phases-avec-Arduino-LED-photo-3-1500x1125

Projet-électornique-Commande-dun-moteur-pas-à-pas-4-phases-avec-Arduino-LED-photo-4-1500x1125

************

Un petit commentaire de vous, un Grand encouragement pour nous 🙂

Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Anti-Robot *