Bonsoir
Le montage et le code suivants permettent de faire tourner un des deux moteurs de type nema 17 ou les deux en même temps à l'aide de drivers A4988 lorsque l'on appuie sur les boutons qui leurs sont dédiés de tel nombre de pas ou en continue s'il l'on reste appuyé sur le(s) bouton(s).
#include "AccelStepper.h" // https://www.pjrc.com/teensy/td_libs_AccelStepper.html
int boutonPin = 3;
int boutonPin2 = 4;
const int boutonPinEtatOn = LOW; // Etat lu du bouton quand pressé (LOW pour PULL_UP)
const int mpapDirPin = 5; // Pour driver MPAP pin pas
const int mpapStepPin = 6; // Pour driver MPAP pin direction
const int mpapDirPin2 = 2; // Pour driver MPAP pin pas
const int mpapStepPin2 = 7; // Pour driver MPAP pin direction
AccelStepper mpap1(1, mpapStepPin, mpapDirPin); // 1 pour A4988
AccelStepper mpap2(1, mpapStepPin2, mpapDirPin2);
int mpapNombreDePasAtourner = 100;
void setup()
{
mpap1.setMaxSpeed(1000);
mpap1.setAcceleration(1000);
mpap2.setMaxSpeed(1000);
mpap2.setAcceleration(1000);
pinMode(boutonPin, INPUT_PULLUP);
pinMode(boutonPin2, INPUT_PULLUP);
// DIR STEP ENA
mpap1.setPinsInverted(false, false, true);
mpap1.enableOutputs(); // Activer les signaux du MPAP
mpap2.setPinsInverted(false, false, true);
mpap2.enableOutputs(); // Activer les signaux du MPAP
}
void loop()
{
boolean etatBouton=digitalRead(boutonPin);
if (etatBouton == boutonPinEtatOn)
{
mpap1.move(mpapNombreDePasAtourner);
}
mpap1.run();
boolean etatBouton2=digitalRead(boutonPin2);
if (etatBouton2 == boutonPinEtatOn)
{
mpap2.move(mpapNombreDePasAtourner);
}
mpap2.run();
}
Un des moteurs tourne de manière plutôt fluide tandis que l'autre vibre et donne l'impression de tourner difficilement. J'ai essayé d'échanger les places des deux moteurs au cas ou l'un d'eux aurait un disfonctionnement mais le problème s'est répété pareillement. D'autre part j'aimerai augmenter la vitesse de rotation des moteurs mais lorsque je règle la vitesse dans la programme au delà de 1000, cela ne semble pas augmenter la vitesse des moteurs.
Comment puis je annuler la vibration du premier moteur si possible ?
Comment puis je augmenter la vitesse de rotation des moteurs si possible ?
J'ignore si cela à un rapport mais j'utilise en réalité des drivers A4988 rouges même si sur le schéma, ils sont représentés en vert, quelle est la différence entre des drivers A4988 verts et rouges ?
1
Pour les vibrations, c'est sans doute dû à un phénomène de résonance que je décris sur Moteur pas à pas. Réponse à un seul pas, résonance
Solution: passer en 4 à 16 micros pas. Actuellement tu es en pas entiers
2
AccelStepper est limité, comme toutes les bibliothèques, a une certaine vitesse et le fonctionnement semble garanti jusqu'à 1000 pas/s. J'ai été au delà, mais je suppose que c'est dans les phases d'accélération qu'il peut y avoir un problème. Passer en 4 micros pas ne va pas arranger les choses. Si le moteur ne peut pas aller plus vite, c'est parce qu'il y a trop de calculs à faire
Solution: prendre une bibliothèque qui peut aller plus vite
Stepper peut aller plus vite, mais elle est peu adaptée pour les drivers.
Je peux conseiller les deux bibliothèques que j'ai écrites à cause de ce problème :
~ MTobject qui est limité a 10000 micros pas par seconde, qui ne fait pas d'accélérations, En cours de rédaction de doc. Me demander pour avoir une doc provisoire. Fichiers sur MTobjects
~ QuickStep qui peut aller de mémoire jusqu'à 50000 micros pas/s et qui a des accélérations. Moins facile d'emploi, il y a un fichier de configuration pour pouvoir atteindre ces vitesses.
3
La couleur dépend du fabricant de la carte. Les électrons n'ont pas de couleur. Le circuit de base est le même, mais suivant les modèles la résistance du shunt pour le réglage du courant change.
Pas d'inquiétude là dessus. Il y a aussi des Uno noires...
16, pas forcément, 4 devraient suffre, car accelStepper ne peut pas envoyer suffisament d'impulsions. Que l'on soit en pas ou en micropas, la déclaration sous AccelStepper est la même.
Mais NON_CONNECTEE est spécifique à la bibliothèque MTobjects et ne peut être présent avec l'utilisation d'AccelStepper.
Pour passer en microspas, il faut dans le programme dire que l'on a un moteur 2004 ou 2008 ou 200*16 pas et mettre sur la plaquette A4988 les broches MS1, MS2 et MS3 aux valeurs suivantes:
Mettre une broche en l'air et la mettre à L, c'est pareil, il y a des résistances de pull down
Par exemple pour passer en 4 micros pas, il faut mettre MS2 au 5V
Bonsoir
Apparemment si je branche l'un des MS au 5V du driver du moteur qui vibre sans déclarer dans le programme avoir un moteur 2004, 2008 ou 200*16 pas, ledit moteur relié à ce driver perd en vibration comme voulu mais ralenti par rapport à l'autre. Comment puis je déclarer le type de moteur pour ce driver avec accelstepper ?
Bonsoir
En reliant le MS1 au 5V et en modifiant le code comme suit les moteurs fonctionnent environ à la même vitesse et plus fluidement. Merci infiniment
#include "AccelStepper.h" // https://www.pjrc.com/teensy/td_libs_AccelStepper.html
int boutonPin = 3;
int boutonPin2 = 4;
const int boutonPinEtatOn = LOW; // Etat lu du bouton quand pressé (LOW pour PULL_UP)
const int mpapDirPin = 5; // Pour driver MPAP pin pas
const int mpapStepPin = 6; // Pour driver MPAP pin direction
const int mpapDirPin2 = 2; // Pour driver MPAP pin pas
const int mpapStepPin2 = 7; // Pour driver MPAP pin direction
AccelStepper mpap1(1, mpapStepPin, mpapDirPin); // 1 pour A4988
AccelStepper mpap2(1, mpapStepPin2, mpapDirPin2);
int mpapNombreDePasAtourner = 200;
void setup()
{
mpap1.setMaxSpeed(2000);
mpap1.setAcceleration(2000);
mpap2.setMaxSpeed(1000);
mpap2.setAcceleration(1000);
pinMode(boutonPin, INPUT_PULLUP);
pinMode(boutonPin2, INPUT_PULLUP);
// DIR STEP ENA
mpap1.setPinsInverted(false, false, true);
mpap1.enableOutputs(); // Activer les signaux du MPAP
mpap2.setPinsInverted(false, false, true);
mpap2.enableOutputs(); // Activer les signaux du MPAP
}
void loop()
{
boolean etatBouton=digitalRead(boutonPin);
if (etatBouton == boutonPinEtatOn)
{
mpap1.move(mpapNombreDePasAtourner*2);
}
mpap1.run();
boolean etatBouton2=digitalRead(boutonPin2);
if (etatBouton2 == boutonPinEtatOn)
{
mpap2.move(mpapNombreDePasAtourner);
}
mpap2.run();
}