Comportement moteur pas a pas incomprehensible

Bonjour à tous!!

Voila j'ai une arduino UNO, un controleur de moteur pas a pas easydriver ainsi qu'un moteur pas à pas dont voici les references :

Moteur : http://www.robotshop.com/eu/fr/petit-moteur-pas-a-pas-12v-04a-14oz-in.html
Controleur : http://www.robotshop.com/eu/fr/controleur-moteur-pas-easydriver.html

Voici le schema de mon montage :

Ainsi que le code suivant :

int pinled = 2;
int pinbp = 3;

int sleepPin = 10;
int dirPin= 8;
int stepPin=9;


void setup() {

  pinMode(pinled,OUTPUT);
  pinMode(pinbp,INPUT);

  digitalWrite(pinled,HIGH);
  delay(1000);
  digitalWrite(pinled,LOW);

  pinMode(sleepPin, OUTPUT);
  digitalWrite(sleepPin,LOW);
  
  pinMode(dirPin, OUTPUT);     
  pinMode(stepPin, OUTPUT);

  
  digitalWrite(dirPin, LOW);
  digitalWrite(stepPin, LOW);

  
}

void loop() {

if (digitalRead(pinbp) == LOW) {

digitalWrite(pinled,HIGH);  
runmotor();
delay(3000);

}
else {

  digitalWrite(pinled,LOW);

}
  
  
}

void runmotor() {

  digitalWrite(sleepPin,HIGH);

for (int i=0; i<480; i++){

  digitalWrite(stepPin, HIGH);
  delayMicroseconds(800);          
  digitalWrite(stepPin, LOW); 
  delayMicroseconds(800);

 
}

  digitalWrite(sleepPin,LOW);
  
}

Et enfin, une video de mon montage en fonctionnement : - YouTube

Mon problème : Vous pouvez voir que j'ai tracé un trait au stylo en haut du bouchon de liège d'environ 1cm et si vous regardez le code, je demande au moteur d'effectuer 10 tours (48 pas par tour).

Mais en y regardant bien, le bouchon de liège ne revient jamais à son point d'origine. Il est en relativement proche mais c'est tout et il se décale de plus en plus a chaque fois que j'enclenche la rotation de 480 pas en appuyant sur le bouton poussoir.

Petite précision qui n'est pas représenté sur mes schemas, l'arduino est alimentée en 12v que je récupère sur la sortie Vin pour alimenter le moteur par le biais du controleur.

Est-ce un comportement normal ? Si non, sauriez vous d'ou peut provenir cette erreur ?

Si besoin de plus d'information demandez moi :slight_smile:

merci beaucoup d'avance :smiley:

hello
as tu joué avec la valeur ?

delayMicroseconds(800);

Salut!

Oui mais si la valeur est trop basse, le moteur ne tourne pas et emet un petit bruit strident. Par contre du coup je viens d'essayer de mettre a 500 et j'ai le même comportement que dans la vidéo SAUF que cette fois le décalage se fait dans l'autre sens.

Je pense que tu a trouvé l'origine de mon problème :smiley: ce fut rapide! mais comment connaitre la valeur précise que je dois utiliser ?

avec qq tests, tu devrais trouver un compromis acceptable

c est deja entre 500 et 800 ^^ fait une moyenne des deux 650

Alors finalement, j'ai fait un autre test, une boucle for de 0 a <48 avec a chaque fois un delay de 500 millisecondes entre chaque pas pour bien voir :

On dirait qu'il y a des pas qui "sautent" je ne saurais pas l'expliquer autrement mais la plupart des pas tournent bien et de temps en temps il y en a un qui saute c'est a dire qu'il y a une sorte de tremblement et l'axe ne se retrouve pas la ou il devrait être (parfois il revient a la même place, parfois un peu en arrière).

Deuxième constat, 48 est censé représenter un tour, au lieu de ça, le bouchon de liège effectue quasiment deux tours... alors que d'après les données technique du contrôleur le fait de raccorder MS1 et MS2 a la masse (ce que j'ai fait) devrait faire faire des pas complets au moteur.

Le fait de jouer avec les valeurs des delaymicroseconds ne change finalement pas grand chose c'est soit trop ou soit pas assez mais impossible d’être précis il y a toujours un décalage

D'autres idées ?

Finalement je crois avoir trouvé la solution grace à l'aide de dfgh, merci :slight_smile:

J'ai d'abord changé le moteur par un neuf pour etre sur que cela ne venait pas du moteur en lui même mais même problème.
Je suis donc passé ensuite en demi-pas au lieu de pas complet et la plus de probleme le bouchon de liège revient parfaitement en place et je me suis donc aperçu que plus on augmente en terme de pas (1/8, 1/4, 1/2, pas complet) plus la valeur du delaymicroseconds nécessite d'être elevée.
Par exemple en pas complet et delaymicrosecond a 1200, plus de problème.

Maintenant j'aimerais comprendre... Quelqu'un saurait me l'expliquer ? :smiley:

un lien à voir

https://www.norwegiancreations.com/2014/12/arduino-tutorial-stepper-motor-with-easydriver/

exemples de code

et il y est dit:
How to apply the rule; turn the current all the way to MIN, and turn it gradually up to the point where the motor no longer skips step(s). And voila! You are all set! (Remember, the faster the motor is set to move, the higher is the risk of skipping steps, so do this test when the motor is set to operate at the fastest speed).

sans oublier le reglage du courant