Programmation moteur pas a pas nema 4 fils+driver tb6600

Bonjour je suis actuellement entrain de réalisé un projet pour ma dernière année de qualification électricien automaticien, j'ai besoin a un moment de faire fonctionné un moteur pas a pas qui suite a un signal envoyé a la carte arduino doit effectuer une rotation de 90° puis s'arrête, ensuite la carte arduino reçois un signal qui vas faire encore tourné le moteur pas a pas de 90° puis s'arrêté, et finalement après avoir reçus un troisième signal le moteur doit effectuer une rotation de 180° dans le sens inverse pour revenir en position initial.

J'ai réussie a programmé un petit moteur pas a pas (28byj-48) mais malheureusement se dernier n'avais pas assez de couple. Je l'avais programmer de cette manière.

int iRotate;

void setup() {

  Serial.begin(9600);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
}

void loop() {
  //mouvement de 90° du moteur pas a pas

  digitalWrite(5, HIGH);
  do {
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);

    delay(5);

    iRotate++;
  } while (iRotate <= 128);

  iRotate = 0;
  //mouvement de 90° du moteur pas a pas
  digitalWrite(6, HIGH);
  do {
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);

    delay(5);

    iRotate++;
  } while (iRotate <= 128);

  iRotate = 0;

  //mouvement de -180° du moteur pas a pas
  digitalWrite(7, HIGH);
  do {
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);

    delay(5);

    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);

    delay(5);

    iRotate++;
  } while (iRotate <= 256);

  iRotate = 0;
}

J'ai donc opté pour un moteur pas a pas nema 4 fil (plus coupleux) et un driver tb6600, mais je ne trouve aucune documentation sur le fait de le faire tourner que d'un certain nombre de pas précis.
Merci d'avance pour votre aide et désolé pour les faute d'orthographe...

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

1 Like

Attention, nema est une norme et il doit exister des centaines de moteurs différents. On conseille ici de donner la référence du moteur. Pour moi, en 4 fils, il existe deux grandes familles différentes.

Pour faire tourner un pas à pas quel qu'il soit, on peut parfaitement le gérer tout seul comme ce que tu as fait. On peut aussi utiliser une bibliothèque.

Pour faire tourner un 28BYJ48 de 4 pas en le gérant tout seul, il faut commander les bobines comme tu as fait. Avec ce type de moteur les signaux sont différents pour les 4 pas élémentaires.
Utiliser une TB6600 est plus simple car il faut une impulsion sur STEP pour le faire avancer. Si STEP est par exemple sur la broche 8, une impulsion c'est passer la broche un court instant à HIGH. En reprenant ce que tu as fait,

do {
    digitalWrite(8, HIGH);
    digitalWrite(8, LOW);
    
    delay(5);

    iRotate++;
  } while (iRotate <= 50);
iRotate = 0;

fera avancer le moteur de 50 pas (90°)

Il faut aussi positionner DIR à LOW pour le faire tourner dans un sen, ou HIGH pour le faire tourner dans l'autre.

Avec une bibliothèque, pour un cas aussi simple, ce n'est pas forcément un avantage car il faut comprendre comment elle fonctionne. Mais quasi toutes les bibliothèques ont une fonction move, et move(50); fait alors tourner le moteur dans un sens et move(-50); le fera tourner dans l'autre sens.


Au passage,

iRotate = 0;
do {
   <instructions>
    iRotate++;
  } while (iRotate <= 50);

peut aussi s'écrire:

for (iRotate=0; iRotate <= 50, iRotate++) {
    digitalWrite(8, HIGH);
    digitalWrite(8, LOW);
    
    delay(5);
  }

On y gagne rien, mais comme on utilise habituellement for quand le nombre de boucles est connu, cela devient plus ordinaire et plus simple à lire.


Qu'y a-t-il sur les broches 5, 6 et 7? Un bouton?
Qu'est censé faire digitalWrite(5, HIGH); ?

bonjour, merci pour votre réponse, tout d'abord digitalWrite(5, HIGH); correspond au début de mon premier mouvement de 90° tant qu'il y a pas ce signal, le moteur est au repos.
Sur les broche 5, 6, 7 il y a un contacte ouvert avec une temporisation travail qui vas envoyé du 5v. Ce signal sera envoyé en fonction de mon cycle qui est a part que j'ai réalisé en logique câblé.
Aussi mon moteur pas a pas est un nema 17 bipolaire 4fils.

La temporisation travail sert a envoyé une simple impulsion car je travail avec un automate programmable et dans ma programmation se passage reste actif longtemps.

Donc, ce sont des entrées, qu'il faut lire.
Il faut faire un digitalRead() et pas un digitlWrite(), pour lire l'état de cette entrée. Il faudra sans doute aussi faire une boucle d'attente pour attendre que le signal passe dans l'état qui indique le démarrage de la séquence.

1 Like

parmi les nema17 à 4 fils, certains se commandent plutôt avec des tensions, d'autres plutôt avec des courants. Voici chez un seul fabricant quelques nema17 bipolaires 4 fils
Si tu veux des conseils sur le réglage du courant, que l'on valide le choix (non évident) de l'alim de puissance..., donne le N° du moteur.

Modèle : 17HS24-0644S

Et le TB6600 c'est en gros celui ci:
image
ou c'est le circuit intégré?

c'est celui la oui

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.