Contrôle de plusieurs moteurs pas à pas Nema 17 en même temps ou NemaStepper

image

Bonjour à tous.

Je pense que si vous avez travaillé avec arduino + nema 17, vous savez qu'il peut être très difficile de démarrer plusieurs moteurs en même temps.

Il existe différentes manières de résoudre ce problème, la plus simple étant peut-être d'utiliser la bibliothèque NemaStepper. La bibliothèque simplifie cette tâche plusieurs fois, le principal avantage est qu'elle n'arrête pas le programme. Il est installé ainsi que toutes les autres bibliothèques. Distribué sous licence MIT.

Eh bien, commençons. Et nous allons commencer par nous connecter.

Nous utiliserons Simple Nema 17 avec aliexpress pour 500 roubles, le pilote L298N et arduino uno. Les voici:

image

image

image

  • Dans l'exemple, je montrerai quatre pilotes connectés à l'arduino, bien que je n'en utilise qu'un.
  • Il existe de nombreux didacticiels sur la façon de connecter Nema 17 sur Internet, donc je ne le décrirai pas en détail ici.

Donc, nous connectons le moteur au pilote:

image

image

La bibliothèque est orientée objet. Regardons un exemple de démarrage d'un moteur:

NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false); void Setup(){ Stepper1.SetStepCount(100); //   100  } void Update(){ Stepper1.Step(); //  } 

Toutes les méthodes de bibliothèque peuvent être trouvées dans les fichiers de code source de la bibliothèque (il y a une description dans l'en-tête de la bibliothèque).

* Plus d'informations sur le code dans l'exemple.

Et maintenant pour l'exemple.

La bibliothèque a un exemple intégré (pour le moment, il est là seul), qui vous permet de contrôler trois moteurs avec Serial à la fois.

Cet exemple accepte les commandes suivantes sur le port.

Prenons-le à part.

Commençons par l'en-tête - connexion des bibliothèques:

 //This file - example of NemaStepper library. #include "NemaStepper.h" String inString; bool IsStepperEnabled = false; 

Ensuite, trois moteurs sont déclarés, avec les paramètres suivants:

1. Première broche
2. Deuxième broche
3. Troisième broche
4. Quatrième broche
5. Le nombre de pas par tour - la plupart des moteurs Nema 17 en ont 200.
6. Vitesse de démarrage
7. Une valeur indiquant s'il faut tenir l'arbre après l'arrêt (si c'est vrai, les conducteurs se transforment en barbecue)

 NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false); NemaStepper Stepper2(6, 7, 8, 9, 200, 10, false); NemaStepper Stepper3(10, 11, 12, 13, 200, 10, false); 

Prochaine initialisation du port:

 void setup() { Serial.begin(9600); } 

Alors, IMPORTANT! Dans la boucle principale, vous devez mettre à jour la position des moteurs avec la commande Step ().

 void loop() { if (IsStepperEnabled == true){ Stepper1.Step(); Stepper2.Step(); Stepper3.Step(); } GetCommandFromSerial(); } 

Ce qui suit est un sous-programme qui reçoit les données du port, met les moteurs sous / hors tension, définit la vitesse, les freins, la rotation.

 void GetCommandFromSerial() { if (Serial.available() > 0) { //    int inChar = Serial.read(); if (inChar == '/') { String command = ((String)inString[0] + (String)inString[1] + (String)inString[2]); String param; int len = inString.length(); for (int i = 3; i < len; i++) { param = (String)param + (String)inString[i]; } if (command == "MV1") { Stepper1.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "MV2") { Stepper2.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "MV3") { Stepper3.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "SS1") { Stepper1.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SS2") { Stepper2.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SS3") { Stepper3.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SB1") { Stepper1.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "SB2") { Stepper2.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "SB3") { Stepper3.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "EMS") { IsStepperEnabled = true; Serial.println(param.toInt()); } if (command == "DMS") { IsStepperEnabled = false; Serial.println(param.toInt()); } inString = ""; } else { inString += (char)inChar; } } } 

Et donc, essayons de le télécharger sur le forum.

Téléchargé?

Ensuite, nous allons dans le moniteur de port et saisissons les commandes à partir du code.
Chaque commande se termine par un /.
Les trois premiers caractères sont le nom de l'équipe.
Cela entre le nom et / - les paramètres.
Allumons les moteurs avec la commande "EMS /" (Enable MotorS).
Ensuite, nous indiquerons la vitesse 60 du moteur 1 avec la commande «SS160 /» (Régler la vitesse), où 60 est la vitesse.
Et enfin, allumez le premier moteur avec la commande «MV1100 /», (MoVe) où 100 est le nombre de tours.
Tout fonctionne. Hourra.

La même chose avec le reste des moteurs.

Eh bien, où trouver la bibliothèque.

La bibliothèque peut être téléchargée en remerciant le créateur, en suivant le lien, en lui indiquant le prix réel:

Obtenez NemaStepper

Merci d'avoir lu, j'espère que mon article vous a aidé.

Lorsque je cherchais une solution à mon problème, elle s'est avérée être la seule bibliothèque appropriée.

Source: https://habr.com/ru/post/fr464859/


All Articles