Comment sortir du sleep mode d'un DRV8834

Bonjour à tous,

J’ai de nouveau besoin de vos lumières concernant une fontion de mon driver de moteur pas à pas que je pilote via une carte Arduino Uno R3.

Je souhaite pourvoir commander le SLEEP MODE de mon driver avec mon arduino, le but étant de ne plus alimenter les bobines de mon moteur en appuyant sur un bouton pour éviter qu’il ne chauffe.

C’est pourquoi je comptais utiliser le SLEEP MODE.

Première question : Est-ce que avec le SLEEP MODE de mon driver à l’état LOW mes bobines seront bien couper de leur alimentation?

Si oui comment puis-je faire pour activer et désactiver ce Mode.

J’ai relié la broche SLEEP à mon Arduino Uno et j’ai essayé avec une commande de type : digitalWrite(SleepPin, LOW) et cela fonctionne.

Mais impossible ensuite de lui dire la commande inverse.

J’ai vu sur les docs que lorsque le SLEEP Mode est actif, la broche ne reçoit plus de signal et donc ne reçoit pas la commande pour sortir de ce mode.

Avez-vous des idées de comment je peux procéder??

Ci-joint mon schéma de câblage et ci-dessous mon code actuel.

#include <Encoder.h>

// defines pins numbers
Encoder myEnc(7, 8);

// avoid using pins with LEDs attached
#define stepPin 10
#define dirPin 9
#define m0Pin 6
#define m1Pin 5
#define SleepPin 4


const long LimiteMax = 250;
const long LimiteMin = -250;

const int btn_sel = 11;
int compt=0; // variable de comptage


long oldPosition  = -999;
int compte = 0;

void setup() {

  
 Serial.begin(9600); 
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  pinMode(m0Pin,OUTPUT);
  pinMode(m1Pin,OUTPUT);
  pinMode(btn_sel,INPUT);
}

void loop() {
        
while (digitalRead(btn_sel)!=LOW) {
  compt=0;

}
 if (digitalRead(btn_sel)==LOW){
  compt= compt +1;

 } 

 if (compt!=0){
  
    digitalWrite(SleepPin, HIGH);
    digitalWrite(m0Pin,LOW);
    digitalWrite(m1Pin,HIGH);
    
   long newPosition = myEnc.read();

  if (newPosition != oldPosition) {

     if ((newPosition - oldPosition) > 0 ){    

        if (compte>LimiteMax){
        
        }
        else {
      
        compte = compte +1;
        Serial.println(digitalRead(btn_sel));
        
       rotateCW();  
        }
     }
     else {

        if (compte<LimiteMin){
       
        }
        else {

        compte = compte -1;
        Serial.println(digitalRead(btn_sel));
       rotateCCW();

        }
     
     }
        oldPosition = newPosition;

  }
  compt = 0;
  
 }
}

void rotateCW() 
{

    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(50);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(50); 
}
void rotateCCW() 
{

    digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(50);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(50);   
}

Schema motorisation caméra.pdf (161 KB)

Bonjour

Vous avez résolu le problème de votre autre sujet ? Fonctionnement impossible sans Cable USB - Français - Arduino Forum

C'est le enable du driver qui pose problème ?

@+

Bonjour

il y a la pin enable sur driver pour activer ou pas.

@+

J4l13n:
Bonjour

Vous avez résolu le problème de votre autre sujet ? Fonctionnement impossible sans Cable USB - Français - Arduino Forum

C'est le enable du driver qui pose problème ?

@+

Oui j'ai résolu mon problème et je viens à l'instant de répondre sur ce sujet.

En fait je ne sais pas ce qui pose problème pour ce nouveau sujet, le passage en mode Sleep marche très bien, mais je ne sais pas comment en sortir du coup si vous avez des idées je suis preneur.

En passant par ENABLE cette fonction est-elle faisable?

J4l13n:
Bonjour

il y a la pin enable sur driver pour activer ou pas.

@+

Savez-vous si avec Sleep c'est faisable aussi? Mon circuit imprimé étant déjà réalisé avec une connexion entre le Arduino et Sleep et pas entre Enable et Arduino j'aimerai si possible utiliser Sleep.

Si non pouvez-vous m'expliquer comment je code pour utiliser Enable?

Une simple commande " digitalWrite(EnablePin, LOW)?

Je pense que c'est le DRV qui gere le maintien des moteurs en position avec la pin enable

regarder le 3eme exemple "Sex and cigar" :

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

Ps dans ce genre de projet on test sur des planche d'essais puis quand le projet est boucler et fonctionnel on réalise le PCB :smiley:

@+

J4l13n:
Je pense que c'est le DRV qui gere le maintien des moteurs en position avec la pin enable

regarder le 3eme exemple "Sex and cigar" :

Arduino Tutorial: Stepper Motor with EasyDriver

Ps dans ce genre de projet on test sur des planche d'essais puis quand le projet est boucler et fonctionnel on réalise le PCB :smiley:

@+

Ok oui je vois donc avec Enable c'est bien faisable et même prévu pour, mais du coup aucune solution avec Sleep??

Et oui mais ceci est une amélioration que je souhaite apporter sur un système existant donc le PCB est déjà conçu dans ce cas précis. Pour les utilisations futures j'utiliserai directement Enable

Bonjour

Pour comprendre le rôle réel de SLEEP rien de tel que la notice technique du circuit intégré DRV8834 de Texas Instruments. Disponible içi : http://www.ti.com/lit/ds/symlink/drv8834.pdf


Sleep est en fait un 'Sleep and Reset' !!

Quand on remet Sleep à l'état haut on retrouve l'état initial du DRV8834 et non l'état antérieur à la mise en sommeil.

Vous n'avez pas de pb pour sortir du SLEEP ....mais cette sortie de se manifeste peut être pas comme vous l'imaginiez ! Vous ne réalimentez pas les bobines précédement alimentées. Le sommeil est plus profond !

al1fch:
Bonjour

Pour comprendre le rôle réel de SLEEP rien de tel que la notice technique du circuit intégré DRV8834 de Texas Instruments. Disponible içi : http://www.ti.com/lit/ds/symlink/drv8834.pdf


Sleep est en fait un 'Sleep and Reset' !!

Quand on remet Sleep à l'état haut on retrouve l'état initial du DRV8834 et non l'état antérieur à la mise en sommeil.

Vous n'avez pas de pb pour sortir du SLEEP ....mais cette sortie de se manifeste peut être pas comme vous l'imaginiez ! Vous ne réalimentez pas les bobines précédement alimentées. Le sommeil est plus profond !

Je comprends bien mais du coup en sortant du mode Sleep and reset, étant donné que mon driver est toujours alimenté et connecté à mon Arduino si j'excecute à nouveau mon code cela devrai fonctionner non?

je ne connais pas assez ce composant et l'ensemble des contraintes de son fonctionnement dans les différents modes.

D'après la notice (encore elle !) du DRV8834 il faut attendre 1mS après la remontée de SLEEP pour envoyer le premier signal STEP, précédé du positionnement de DIR , M0 et M1 )


D'après ma compréhension limitée du composant je présume qu'une fois ce délai passé le composant est suffisement 'réveillée' pour réagir aux signaux STEP , DIR....

al1fch:
je ne connais pas assez ce composant et l'ensemble des contraintes de son fonctionnement.
D'après la notice (encore elle !) du DRV8834 il faut attendre 1mS après la remontée de SLEEP pour envoyer le premier signal STEP, précédé du positionnement de DIR , M0 et M1 )

Bonjour Al1
LE DRV8834 , je n'ai que rarement joué avec "juste pour voir" :grin:

trés basiquement là , la commande remets/positionne au reveil l'index du compteur cyclique de gestion des # courants de micropas à 0
Pas sur ici de l'utilité dans le projet (pas le temps de regarder ici comment les micropas sont gérés) :wink:
çà peut être utile dans des projets où la gestion des possibles resolutions de micropas est gérée dynamiquement par le soft contrôleur