Désactiver moteur avec librairie AccelStepper

Bonjour tous le monde !

Dans mon projet j’ai 3 moteurs XYZ pas à pas.

Je souhaiterai pouvoir en désactivé 1-2-ou 3 celon mes besoins.

J’utilise la librairie AccelStepper (Doc anglais ICI) (Doc trad Google ICI)

Je suis assez débutant. J’avoue ne pas comprendre…

Il semblerait que j’aurai besoin de 3 ou 4 fonctions :

◆ disableOutputs()

◆ enableOutputs()

◆ setEnablePin()

◆ setPinsInverted()

Les explications sont :

disableOutputs()

void AccelStepper::disableOutputs()

Disable motor pin outputs by setting them all LOW Depending on the design of your electronics this may turn off the power to the motor coils, saving power. This is useful to support Arduino low power modes: disable the outputs during sleep and then reenable with enableOutputs() before stepping again. If the enable Pin is defined, sets it to OUTPUT mode and clears the pin to disabled.

References setOutputPins().

enableOutputs()

void AccelStepper::enableOutputs()

Enable motor pin outputs by setting the motor pins to OUTPUT mode. Called automatically by the constructor. If the enable Pin is defined, sets it to OUTPUT mode and sets the pin to enabled.

References FULL3WIRE, FULL4WIRE, HALF3WIRE, and HALF4WIRE.

Referenced by AccelStepper().

setEnablePin()

void AccelStepper::setEnablePin (uint8_t enablePin = 0xff)

Sets the enable pin number for stepper drivers. 0xFF indicates unused (default). Otherwise, if a pin is set, the pin will be turned on when enableOutputs() is called and switched off when disableOutputs() is called.

Parameters : [in] enablePin Arduino digital pin number for motor enable

See also

setPinsInverted

setPinsInverted() [1/2]

void AccelStepper::setPinsInverted ( bool directionInvert = false,

bool stepInvert = false,

bool enableInvert = false

)

Sets the inversion for stepper driver pins

Parameters

[in] directionInvert True for inverted direction pin, false for non-inverted

[in] stepInvert True for inverted step pin, false for non-inverted

[in] enableInvert True for inverted enable pin, false (default) for non-inverted

setPinsInverted() [2/2]

void AccelStepper::setPinsInverted ( bool pin1Invert,

bool pin2Invert,

bool pin3Invert,

bool pin4Invert,

bool enableInvert

)

Sets the inversion for 2, 3 and 4 wire stepper pins

Parameters

[in] pin1Invert True for inverted pin1, false for non-inverted

[in] pin2Invert True for inverted pin2, false for non-inverted

[in] pin3Invert True for inverted pin3, false for non-inverted

[in] pin4Invert True for inverted pin4, false for non-inverted

[in] enableInvert True for inverted enable pin, false (default) for non-inverted

J’ai trouvé un bout de code simple que j’ai modifié (tests sur 1 seul moteur) :

#include <AccelStepper.h>

#define ZdirPin 7 // Moteur Z -> Direction pin 7

#define ZstepPin 4 // Moteur Z -> Stepper pin 4

#define motorInterfaceType 1 // Interface 1 pour le Driver A4988

AccelStepper moteurZ = AccelStepper(motorInterfaceType, ZstepPin, ZdirPin); //Creé instance avec nom du moteurZ

void setup() {

moteurZ.setMaxSpeed(1000);

moteurZ.setAcceleration(100);

moteurZ.setEnablePin(8); // Pin 8 relié pin "EN" A4988

moteurZ.setPinsInverted(false, false, true);

moteurZ.move(10000);

}

void loop() {

moteurZ.runToPosition();

moteurZ.disableOutputs();

}

Le moteur tourne bien, s’arrête et ne repart plus.

Mais il reste toujours bloqué, alimenté.

Mon matériel :

Carte Mega

Shield CNC V3

Driver A4988

Librairie AccelStepper

Quand pensez-vous ?

Ça veut dire quoi désactiver ?

alimentation ? Quel montage ?

Bonjour jon_01

Avec ton shield (GRBL), ce n'est pas possible, c'est la pin 8 pour X, Y ET Z.

Tel qu'il est, ton programme ne peut pas faire tourner ton moteur, tu as oublié enableOutputs()

	moteurZ.setPinsInverted(false, false, true);
	moteurZ.enableOutputs();
	moteurZ.move(10000);

Ainsi, ton moteur tourne, puis s'arrête et le driver (A4988) est désactivé, (ENA = HIGH).
Il ne va pas aller plus loin car il faut lui indiquer une nouvelle position avec move() puis runToPosition(). Si tu veux tout faire une instruction, choisi runToNewPosition().

Autrement, il y a aussi la bibliothèque StepperDriver qui est pas mal, aussi.

Le mieux est de faire les exemples de la bibliothèque.

Cordialement
jpbbricole

On peut tordre la pin du driver au lieu de l’enfoncer dans le support et la connecter directement à une pin de l’arduino… pas très propre mais…

Bonjour

Une autre méthode, au moyen d'un fer à souder, pousser la pin de l'autre côté (sur le dessus) et prendre un fil Dupont pour le connecter sur une des nombreuse pin du shield.

Cordilement
jpbbricole

2 Likes

Bonne idée Ce sera plus propre

je me suis lancé sur cette méthode! (enfin j'ai plutôt coupé/séparé le connecteur noir, et ressoudé à l'envers)

Avant :



Après :



Je n’ai pas encore testé :slight_smile:

1 Like

Et ne pas oublier d'enlever (si il a été mis) le dupont sur les broche EN/GND du shield :wink:

Si on pour 3 moteurs, il suffisait d.'en déconnecter seulement 2, et d'utiliser la broche 8 pour le dernier. Je sais que c'est trop tard mais je n'y pense que maintenant.

En faite j'en utilise 4, mais tu a raison j'aurai pu en laisser un sur la broche 8 :slight_smile:

merci pour la doc en photo, ça pourra aider quelqu'un d'autre !

Oui c'était dans se sens. :+1:

Quand il est écris "Ce sujet sera fermé 6 mois après la dernière réponse." - > Cela veut dire qu'il sera supprimé, ou clôturé (plus de réponse possible)?

juste clôturé - donc pas de possibilité d'ajouter des commentaires (sans passer par un modérateur ou certains d'entre nous qui ont eu quelques super-pouvoirs et qui peuvent rouvrir un fil de discussion)

c'est pour éviter que des spammers viennent discrètement rajouter des pubs ou des liens litigieux sur un vieux topic

A ok dac! Merci

Sa y'ai j'ai testé, et sa fonctionne! :slight_smile: :+1:

cool :wink:

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