Dans certaines situations, on peut avoir besoin de tester rapidement un moteur pas à pas de puissance ; comment faire si on a un Arduino qui traine quelque part au fond du tiroir?

C'est tout à fait possible et cela ne prendra que 5 minutes environ, dont une bonne partie pour réaliser le câblage.

Le montage de test fait tourner un moteur pas à pas dans un sens,  puis dans le sens opposé si on fait action sur un bouton poussoir ; on pourra aussi faire varier la vitesse de rotation, en déplaçant le curseur d’un potentiomètre. Bref voilà pour ce qui est du cahier des charges.

Pour faire ce test, il faudra disposer de:

1 moteur pas à pas de puissance,

1 bouton poussoir,

1 potentiomètre variable du type ajustable de 4,7K Ohms,

1 résistance de 47K Ohms, 1/4 watts,

1 alimentation, 220V alternatif vers 24V continu,

1 driver ou interface de puissance pour moteur pas à pas,

1 carte Arduino Uno,

1 plaque à essais,

Sans oublier l'ordinateur pour télé verser les programmes dans la mémoire de l'Arduino.

 

Schéma de principe                     

test pas a pas img1

 

Une alimentation de puissance  fournit de l’énergie nécessaire pour le moteur pas à pas via un driver d’interface.

Côté Arduino, on utilisera les broches:  +5 volts, la masse GND, l’entrée/sortie analogique A0, les entrées/sorties (E/S) numériques  2, 6 et 7.

Ainsi le point milieu (le curseur) du potentiomètre, sera connecté à A0, tandis que l'un des pôles sera relié au +5V et l'autre à la masse GND;  le bouton poussoir dont un des pôle sera relié à la masse, sera associé à une résistance de tirage au +5V, et connecté à l’E/S 2 ;tous ces trois composants seront montés sur plaque à essai; la broche E/S 6 sera reliée à l’entrée DIR- du module d’interface DM556T, la broche d’E/S 7 quant à elle sera reliée à l’entrée PUL- du DM556T.

Pour le DM556T, on aura:

  • Deux entrées de commande constituées chacune d’une paire de signaux (PUL+, PUL-) pour recevoir les impulsions de pas; et (DIR+, DIR-) pour le sens de rotation,
  • Deux entrées d’alimentation + et - pour une tension de 24V, 
  • Des sorties de commande de puissance A+, A-, B+, B- destinées aux 4  phases du moteur pas à pas.

On pourra donc relier les broches PUL+ et DIR+ à +5V.

Au final on obtient le câblage suivant sur plaque à essai (dessiné grâce à Fritzing)

 

test pas a pas img2

 

Principaux éléments du montage

Le moteur pas à pas

Un moteur pas à pas est un moteur qui se déplace en fraction de tour lorsque des impulsions électriques sont appliquées aux bornes de ses bobines. Dans ce montage on utilise un moteur bipolaire 4 fils de la famille NEMA 23.

Caractéristiques techniques

  • Intensité du courant par phase: 4,2 A
  • Résistance par phase: 0,88 Ohm -/+10% (à 25°C)
  • Inductance par phase: 3,4 mH  +/-20% (à 1 Khz)
  • Couple de maintien: 3 Nm
  • Angle de pas : 1,8°
  • Précision du pas: +/-5%
  • Poids: 1,8 Kg
  • Température ambiante de fonctionnement: -10°C à 50°C

Le module DM556T

Ce composant est un pilote numérique de moteurs pas à pas avec un design simple et une configuration facile. Grâce à ce genre de dispositifs, on peut faire déplacer le moteur par fractions de pas (micro pas). Il convient pour des applications de contrôle simple des pas et de la direction des moteurs de la famille NEMA 23, 24 et 34.

Caractéristiques techniques

Spécifications générales :

  • Anti résonance pour un couple optimal, un mouvement extra lisse, un faible échauffement moteur et un faible bruit
  • Auto-identification du moteur et auto-configuration des paramètres pour un couple optimal des moteurs à large gamme
  • Commande de pas et de direction (PUL / DIR)
  • Multi-Stepping pour un mouvement fluide du moteur
  • Entrées compatibles TTL et opto-isolées à 5.6A
  • Tension d'entrée 20-50VDC
  • 16 résolutions micro-pas sélectionnables de 400 à 25 600 via des commutateurs DIP
  • 8 réglages de courant de sortie sélectionnables de 1,8 A à 5,6 A via des commutateurs DIP
  • Démarrage progressif sans "saut" lors de la mise sous tension
  • Fréquence d'entrée d'impulsion jusqu’à 200 KHz
  • Réduction automatique du ralenti
  • Protections contre les surtensions et les surintensités

Spécifications électriques :

  • Courant de pointe de sortie: 1.8~5.6A (4.0 RMS)
  • Tension d'entrée: +20~50VDC (Typique 24-48VDC)
  • Courant Signal logique: 7~16mA (Typique 10mA)
  • Fréquence d'entrée d'impulsion: 0~200kHz
  • Largeur d'impulsion: 2.5μS
  • Résistance d'isolement: 500MΩ

L’alimentation

Le type d’alimentation utilisée est un modèle à découpage 220V alternatif vers 24V – 10A continu.

Et pour finir, la carte Arduino Uno

On ne fera pas sa présentation technique ici. Pour en savoir plus sur ce module, il faut se reporter sur le site officiel du constructeur arduino.cc.

Le programme de test

Après le câblage des différents éléments et la vérification des liaisons, il est temps à présent de passer à la programmation.

Selon le cahier des charges imposé, le programme doit faire varier la vitesse du moteur lorsqu’on tourne le potentiomètre, et changer le sens de rotation du moteur par un appui simple sur le bouton poussoir.

Il existe plein de programmes de tests répondant à ce qu'on veut faire ; il suffit de faire un tour sur le site arduino.cc, où on trouvera de nombreux tutoriaux sur la commande des moteurs pas à pas.

Le programme se résume à ces quelques lignes de code:

 

// Stepper pin's definitions
int reverseSwitch = 2; //push button
int driverPul = 7; // Pul- pin
int driverDir = 6; // Dir- pin
int spd = A0;  //Potentiometer
//Variables
int pd = 500;  //Pulse delay period
boolean setdir = LOW; //direction set
//Interrupt Handler
void revmotor(){
  setdir = !setdir;
 
}
void setup() {
  // put your setup code here, to run once:
  pinMode (driverPul, OUTPUT);
  pinMode (driverDir, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(reverseSwitch),revmotor,FALLING);
  
}

void loop() {
  // put your main code here, to run repeatedly:
  pd = map((analogRead(spd)),0,1023,2000,50);
  digitalWrite(driverDir,setdir);
  digitalWrite(driverPul, HIGH);
  delayMicroseconds(pd);
  digitalWrite(driverPul,LOW);
  delayMicroseconds(pd);

}

 

On commence donc par déclarer les variables. Comme on peut le constater elles ont des noms bien évocateurs. ainsi:

    reverseSwitch: bouton poussoir branché sur l'entrée numérique 2, pour inverser le sens de rotation du moteur;

    spd: potentionmètre branché sur l'entrée A0;

    driverPul: entrée d'impulsions de commande à envoyer au driver;

    dirverDir: signal de la commande de direction à envoyer au driver.

La variable pd, contient la durée d'une impulsion, tandis que setdir est utulisée pour inverser et mémoriser l'état de logique du bouton poussoir.

Les lignes qui suivent concernent la configuration des broches, ainsi que l'activation de l'interruption INT0, le tout se trouve dans le sous programme setup().

L'entrée numérique 2 fonctionne en interruption. Dès qu'une impulsion est détectée sur cette entrée, le programme d'interruption revmotor() sera automatiquement lancé. Ce programme change tout simplement l'état logique de la varaible setdir. Ainsi dans le programme principal loop(), qui trourne en boucle, on va écrire cette valeur logique sur la sortie numérique 6 de l'Arduino.

Des impulsions dont les états (haut ou bas) d'une durée de 500ms par défaut sont envoyées sur la broche numérqie 7 de l'Arduino.  Cette durée change en fonction de la valeur fournie par le convertisseur analogique numérique qui reçoit le signal du potentiomètre relié sur la broche A0. C'est précisément le rôle de la fonction prédéfinie map(), utilisée dans le programme principal. Le résultat renvoyé par cette fonction est stocké dans la variable pd.

Test fonctionnel

Attention le montage proposé dans cet exemple peut exposer des personnes à des tensions dangereuses voire mortelles. Des précautions doivent être prises avant la mise sous tension. Ne pas essayer de bloquer l'arbre de rotation du moteur avec les doigts lorsqu'il est en marche! Si vous y tenez! En plus le moteur devra être fixé sur un support rigide et robuste si on envisage le tester pour des vitesse élevées.

Ici, on a choisi de faire tourner le moteur à faible vitesse et à vide; voici le résultat:

 

 

Comme nous pouvons le constater le moteur fonctionne correctement. Bien sûr si on veut faire des tests plus poussés, il faudra créer un dispositif plus lourd, dans lequel on trouvera des fins de courses, ou des dispositifs de mesure de couple par exemple; et le programme de pilotage devra lui aussi être modifié en conséquence.