Bonjour (bonsoir)
je suis en train de réaliser ma première invention une motorisation pour une monture astro
en ce pendant j'ai une ou deux problèmes
1 les moteurs ne font pas de marche arrière quand j'appuis sur le bouton correspondant
et 2 le moteur nommé Stepper 3 dans le code ne tourne pas mais il fonctionne car il vibre
pourriez-vous m'aider ???
Je suis sur un Arduino due et les moteurs pas à pas c'est les keyestudio avec leurs drivers
à mon avis il y a plus d'erreur dans mon code mais un autre problème
je vous remets mon code au cas où
#include <AccelStepper.h>
#include <MultiStepper.h>
AccelStepper stepper1(AccelStepper::FULL4WIRE, 26, 27, 28, 29);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 38, 39, 40, 41);
AccelStepper stepper3(AccelStepper::FULL4WIRE, 50, 51, 52, 53);
MultiStepper steppers;
const int bouton1 = 2; //marche avant rapide axe AD
const int bouton2 = 3; //marche arrière rapide axe AD
const int bouton3 = 4; //marche avant rapide axe DEC
const int bouton4 = 5; //marche arrière rapide axe DEC
const int bouton5 = 6; //marche avant moteur de MAP
const int bouton6 = 7; //marche arrière moteur de MAP
void setup() {
Serial.begin(9600);
pinMode (bouton1, INPUT_PULLUP);
pinMode (bouton2, INPUT_PULLUP);
pinMode (bouton3, INPUT_PULLUP);
pinMode (bouton4, INPUT_PULLUP);
pinMode (bouton5, INPUT_PULLUP);
pinMode (bouton6, INPUT_PULLUP);
stepper1.setMaxSpeed(360);
stepper2.setMaxSpeed(180);
stepper3.setMaxSpeed(360);
stepper1.setSpeed(14.4);
stepper2.setSpeed(0);
stepper3.setSpeed(0);
steppers.addStepper(stepper1);
steppers.addStepper(stepper2);
steppers.addStepper(stepper3);
}
void loop() {
Serial.print(bouton1); Serial.print(" -> "); Serial.println(digitalRead(bouton1));
Serial.print(bouton2); Serial.print(" -> "); Serial.println(digitalRead(bouton2));
if (digitalRead(bouton1) == LOW) {
stepper1.setSpeed(360);//si j'appuis sur le bouton le moteur AD accélère
}
else if (digitalRead(bouton2) == LOW) {
stepper1.setSpeed(-360);//si j'appuis sur le bouton le moteur AD recule
}
else {
stepper1.setSpeed(14.4);//si je n'appuis pas sur le bouton le moteur AD continu la vitesse normale
}
Serial.print("stepper1: ");Serial.println(stepper1.speed());
stepper1.runSpeed();
if (digitalRead(bouton3) == LOW) {
stepper2.setSpeed(180);//si j'appuis sur le bouton le moteur AD accélère
}
else if (digitalRead(bouton4) == LOW) {
stepper2.setSpeed(-180);//si j'appuis sur le bouton le moteur AD recule
}
else {
stepper2.setSpeed(0);//si je n'appuis pas sur le bouton le moteur AD continu la vitesse normale
}
stepper2.runSpeed();
if (digitalRead(bouton5) == LOW) {
stepper3.setSpeed(360);//si j'appuis sur le bouton le moteur AD accélère
}
else if (digitalRead(bouton6) == LOW) {
stepper3.setSpeed(-360);//si j'appuis sur le bouton le moteur AD recule
}
else {
stepper3.setSpeed(0);//si je n'appuis pas sur le bouton le moteur AD continu la vitesse normale
}
stepper3.runSpeed();
}
le moteur nommé Stepper 3 dans le code ne tourne pas mais il fonctionne car il vibre
Quand un pas à pas vibre, c'est la plupart du temps une inversion de phases. Il y en a 4 (in1 à in4). Essaie
AccelStepper stepper3(AccelStepper::FULL4WIRE, 50, 52, 51, 53);
Je pense que vileroi a raison, il faut inverser deux phases.
Idem pour le moteur 1 qui ne veut pas faire de marche arrière
Essaies
AccelStepper stepper1(AccelStepper::FULL4WIRE, 26, 28, 27, 29);
Pour savoir si un moteur est bien branché quand on croit qu'il l'est, il suffit de lui donner un ordre d'avancer avec 1 pas par seconde. On voit si son avance est régulière ou pas. Le problème ici est que c'est un 28BYJ-48 et qu'on ne voit pas le moteur. Il faut donc faire des essais.
L'autre possibilité est que la vitesse demandée est trop grande, du coup il ne suit plus et vibre. Dans ce cas aussi réduire la vitesse est un bon moyen de savoir. Sur plusieurs moteurs identiques, deux peuvent accepter une vitesse de 360, et un de 200 par exemple.
Il me paraît impensable de faire un programme compliqué avec 3 moteurs, si il y a un problème de câblage ou autre. Avant de se lancer avec 3 moteurs, le plus sage est de faire un programme qui fait tourner que le premier moteur, genre
Il me semble que ce code fonctionne, mais je ne le garanti pas, je n'aime pas ccelStepper
Si un des trois moteurs ne tourne pas dans les deux sens, ce n'est pas la peine d'aller plus loin. Quand on construit quelque chose, il vaut mieux s'assurer que les briques de départ soit saines, plutôt que de faire un maison complète et s’apercevoir qu'il faut refaire les fondations.
vileroi:
Quand un pas à pas vibre, c'est la plupart du temps une inversion de phases. Il y en a 4 (in1 à in4). Essaie
AccelStepper stepper3(AccelStepper::FULL4WIRE, 50, 52, 51, 53);
bonjour rien ne change
vileroi:
Pour savoir si un moteur est bien branché quand on croit qu'il l'est, il suffit de lui donner un ordre d'avancer avec 1 pas par seconde. On voit si son avance est régulière ou pas. Le problème ici est que c'est un 28BYJ-48 et qu'on ne voit pas le moteur. Il faut donc faire des essais.
L'autre possibilité est que la vitesse demandée est trop grande, du coup il ne suit plus et vibre. Dans ce cas aussi réduire la vitesse est un bon moyen de savoir. Sur plusieurs moteurs identiques, deux peuvent accepter une vitesse de 360, et un de 200 par exemple.
Il me paraît impensable de faire un programme compliqué avec 3 moteurs, si il y a un problème de câblage ou autre. Avant de se lancer avec 3 moteurs, le plus sage est de faire un programme qui fait tourner que le premier moteur, genre
Il me semble que ce code fonctionne, mais je ne le garanti pas, je n'aime pas ccelStepper
Si un des trois moteurs ne tourne pas dans les deux sens, ce n'est pas la peine d'aller plus loin. Quand on construit quelque chose, il vaut mieux s'assurer que les briques de départ soit saines, plutôt que de faire un maison complète et s’apercevoir qu'il faut refaire les fondations.
là le logiciel accepte pas micro_steps et RPM
mais le moteur doit faire les 360 car le Stepper 1 les fait bien
merci
cdt
C'est les constantes du moteur a remplacer par les bonnes valeurs pour ne pas faire de ventilateur. Cela doit être approximativement:
#define MOTOR_STEPS 2048 // nombre de pas par tour du moteur
#define MICROSTEPS 1 // pas de micropas avec ce type de moteur
#define RPM 2 // avec 2 tours par minutes, on ne dépasse pas la vitesse maxi
AccelStepper stepper3(AccelStepper::FULL4WIRE, 50, 52, 51, 53);
bonjour rien ne change
Possible, il y aune autre combinaison que j'ai oublié:
Toujours rien pour le Stepper 3 j'ai modifié ton code pour le Stepper 1 et 2 là ça fonctionne
j'ai aussi mis un autre moteur le Stepper 2 sur le driver du Stepper 3 et il n'a pas tourné non plus puis, je l'ai remis sur le driver du Stepper 2 là il tournait de nouveau
donc pour moi c'est le driver qui est pourri
et il y toujours aucun des moteurs qui fait marche arrière
et il n’y a pas de fil coupé non plus
merci encore
cdt
Pour le Stepper 3 c'est bon j'ai changé les broches de connexion au moteur
il reste donc à savoir pourquoi les moteurs ne font pas de marche arrière
merci à vous
et en attendant vos réponses pour le problème de marche arrière
cordialement
ça fonctionne toujours pas donc toujours pas de marche arrière
mon nouveau code est
merci encore
cdt
#include <AccelStepper.h>
#include <MultiStepper.h>
AccelStepper stepper1(AccelStepper::FULL4WIRE, 27, 26, 29, 28);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 39, 38, 41, 40);
AccelStepper stepper3(AccelStepper::FULL4WIRE, 45, 44, 47, 46);
MultiStepper steppers;
const int bouton1 = 2; //marche avant rapide axe AD
const int bouton2 = 3; //marche arrière rapide axe AD
const int bouton3 = 4; //marche avant rapide axe DEC
const int bouton4 = 5; //marche arrière rapide axe DEC
const int bouton5 = 6; //marche avant moteur de MAP
const int bouton6 = 7; //marche arrière moteur de MAP
void setup() {
Serial.begin(9600);
pinMode (bouton1, INPUT_PULLUP);
pinMode (bouton2, INPUT_PULLUP);
pinMode (bouton3, INPUT_PULLUP);
pinMode (bouton4, INPUT_PULLUP);
pinMode (bouton5, INPUT_PULLUP);
pinMode (bouton6, INPUT_PULLUP);
stepper1.setMaxSpeed(360);
stepper2.setMaxSpeed(180);
stepper3.setMaxSpeed(360);
stepper1.setSpeed(14.4);
stepper2.setSpeed(0);
stepper3.setSpeed(0);
steppers.addStepper(stepper1);
steppers.addStepper(stepper2);
steppers.addStepper(stepper3);
}
void loop() {
Serial.print(bouton1); Serial.print(" -> "); Serial.println(digitalRead(bouton1));
Serial.print(bouton2); Serial.print(" -> "); Serial.println(digitalRead(bouton2));
if (digitalRead(bouton1) == LOW) {
stepper1.setSpeed(360);//si j'appuis sur le bouton le moteur AD accélère
}
else if (digitalRead(bouton2) == LOW) {
stepper1.setSpeed(-360);//si j'appuis sur le bouton le moteur AD recule
}
else {
stepper1.setSpeed(14.4);//si je n'appuis pas sur le bouton le moteur AD continu la vitesse normale
}
Serial.print("stepper1: ");Serial.println(stepper1.speed());
stepper1.runSpeed();
if (digitalRead(bouton3) == LOW) {
stepper2.setSpeed(180);//si j'appuis sur le bouton le moteur AD accélère
}
else if (digitalRead(bouton4) == LOW) {
stepper2.setSpeed(-180);//si j'appuis sur le bouton le moteur AD recule
}
else {
stepper2.setSpeed(0);//si je n'appuis pas sur le bouton le moteur AD continu la vitesse normale
}
stepper2.runSpeed();
if (digitalRead(bouton5) == LOW) {
stepper3.setSpeed(360);//si j'appuis sur le bouton le moteur AD accélère
}
else if (digitalRead(bouton6) == LOW) {
stepper3.setSpeed(-360);//si j'appuis sur le bouton le moteur AD recule
}
else {
stepper3.setSpeed(0);//si je n'appuis pas sur le bouton le moteur AD continu la vitesse normale
}
stepper3.runSpeed();
}
Si un des trois moteurs ne tourne pas dans les deux sens, ce n'est pas la peine d'aller plus loin. Quand on construit quelque chose, il vaut mieux s'assurer que les briques de départ soit saines, plutôt que de faire un maison complète et s'apercevoir qu'il faut refaire les fondations.
Conseil: concentre toi sur un seul moteur. Si il ne tourne pas dans les deux sens, ce n'est pas avec un programme encore plus compliqué que cela va marcher.
vileroi:
Conseil: concentre toi sur un seul moteur. Si il ne tourne pas dans les deux sens, ce n'est pas avec un programme encore plus compliqué que cela va marcher.