Mon moteur avance-t-il sur front montant de step?

La bibliothèque QuickStep est écrite pour fonctionner pleinement si la commande Step du pilote du pas à pas est active sur front montant. Le dernier pas d'un mouvement se fera dans le mauvais sens si il est enchaîné avec un mouvement de sens contraire.

Le petit programme suivant:
#include "QuickStep.h"
void setup() 
{ 
  quickStepInit();   
}

uint16_t nombreDePas;
uint16_t tempsEntrePas = 20; // soit 10µs avec une horloge par défaut à 0,5µs

void loop()
{
  quickStepDeplacement1(nombreDePas = 1, SENS_POSITIF, tempsEntrePas);
  quickStepDeplacement1(nombreDePas = 1, SENS_NEGATIF, tempsEntrePas);
  while (quickStepReste1() > 0);
}
fera vibrer le moteur si Step est actif sur front montant, car on demande de faire un pas dans un sens et un pas dans l'autre. Au final il n'avance pas. Par contre si Step est actif sur front descendant, le dernier pas prévu (le seul par ailleurs) dans le SENS_POSITIF se fera à l'envers car les ordres sont enchaînés et les sens opposés. Par conséquent chaque ordre donnera un pas SENS_NEGATIF, ce qui ne correspond pas à la demande.

Sans installer, ni télécharger QuickStep, le programme suivant Montant.ino fera tourner le moteur si Step est actif sur front montant et le fera vibrer dans le cas inverse:
//###########################################################################
//##                       Configuration, à modifier                       ##
//###########################################################################
#define step <N° de la broche pour step>
#define Dir <N° de la broche pour Dir>
#define enable <N° de la broche pour enable> // Facultatif, au cas ou on veut la mettre à LOW


// Version 1.0.0

//###########################################################################
//###########################################################################
//####                                                                   ####
//####                           Olivier Pécheux                         ####
//####                          Olivier@Pecheux.fr                       ####
//####                         (33) +6 69 77 82 58                       ####
//####           http://dansetrad.fr/Orgue_de_barbarie/QuickStep         ####
//####                                                                   ####
//###########################################################################
//###########################################################################


// Ceci est un complément aux pages de définition et d'explications de la
// librairie QuickStep. Ce programme est un test de fonctionnement.

// La bibliothèque QuickStep est conçue pour utiliser la broche step active
// sur font montant.

// Vous pouvez vérifier que votre moteur avance sur un front montant de step
// avec ce programme. Si c'est le cas, ce programme fera tourner le moteur.
// Si step est actif sur front descendant, le moteur vibre. Il est conseillé
// de faire également tourner le programme Descendant.ino


//###########################################################################
//##                                 setup                                 ##
//###########################################################################
void setup()
{
  pinMode(Dir, OUTPUT);
  pinMode(step, OUTPUT);
  digitalWrite(step, LOW); // Etat de "repos" normal
  #ifdef enable
    pinMode(enable, OUTPUT);
    digitalWrite(enable, LOW);
  #endif
}

//###########################################################################
//##                                  loop                                 ##
//###########################################################################
#define Tempo 5000 // Temps d'attente en µs pour un pas
void loop()
{ 
  // Si step est sur front montant, la direction est LOW
  // Si step est sur front descendant, cela n'a pas d'effet
  digitalWrite(Dir, LOW);
  digitalWrite(step, HIGH);
  delayMicroseconds(Tempo/2); // Première moitié de l'attente

  // Si step est sur front montant, cela n'a pas d'effet
  // Si step est sur front descendant, la direction est LOW
  digitalWrite(Dir, LOW);
  digitalWrite(step, LOW);
  delayMicroseconds(Tempo/2); // Deuxième moitié de l'attente

  // Si step est sur front montant, la direction est LOW
  // Si step est sur front descendant, cela n'a pas d'effet
  digitalWrite(Dir, LOW);
  digitalWrite(step, HIGH);
  delayMicroseconds(Tempo/2); // Première moitié de l'attente

  // Si step est sur front montant, cela n'a pas d'effet
  // Si step est sur front descendant, la direction est HIGH
  digitalWrite(Dir, HIGH);
  digitalWrite(step, LOW);
  delayMicroseconds(Tempo/2); // Deuxième moitié de l'attente

  // Si step est actif sur front montant, une boucle fait tourner de 2 pas direction LOW
  //      -> le moteur tourne
  // Si step est actif sur front descendant, on fait un pas dans un sens, un pas dans l'autre
  //      -> le moteur vibre sur place
}

Le programme suivant Descendant.ino fera tourner le moteur si Step est actif sur front descendant et le fera vibrer dans le cas inverse:

//###########################################################################
//##                       Configuration, à modifier                       ##
//###########################################################################
#define step <N° de la broche pour step>
#define Dir <N° de la broche pour Dir>
#define enable <N° de la broche pour enable> // Facultatif, au cas ou on veut la mettre à LOW


// Version 1.0.0

//###########################################################################
//###########################################################################
//####                                                                   ####
//####                           Olivier Pécheux                         ####
//####                          Olivier@Pecheux.fr                       ####
//####                         (33) +6 69 77 82 58                       ####
//####           http://dansetrad.fr/Orgue_de_barbarie/QuickStep         ####
//####                                                                   ####
//###########################################################################
//###########################################################################


// Ceci est un complément aux pages de définition et d'explications de la
// librairie QuickStep. Ce programme est un test de fonctionnement.

// La bibliothèque QuickStep est conçue pour utiliser la broche step active
// sur font montant.

// Vous pouvez vérifier que votre moteur avance sur un front descendant de
// step avec ce programme. Si c'est le cas, ce programme fera tourner le
//  moteur. Si step est actif sur front montant, le moteur vibre. Il est
// conseillé de faire également tourner le programme Montant.ino


//###########################################################################
//##                                 setup                                 ##
//###########################################################################
void setup()
{
  pinMode(Dir, OUTPUT);
  pinMode(step, OUTPUT);
  digitalWrite(step, LOW); // Etat de "repos" normal
  #ifdef enable
    pinMode(enable, OUTPUT);
    digitalWrite(enable, LOW);
  #endif
}

//###########################################################################
//##                                  loop                                 ##
//###########################################################################
#define Tempo 5000 // Temps d'attente en µs pour un pas
void loop()
{ 
  // Si step est sur front montant, la direction est LOW
  // Si step est sur front descendant, cela n'a pas d'effet
  digitalWrite(Dir, LOW);
  digitalWrite(step, HIGH);
  delayMicroseconds(Tempo/2); // Première moitié de l'attente
  
  // Si step est sur front montant, cela n'a pas d'effet
  // Si step est sur front descendant, la direction est LOW
  digitalWrite(Dir, LOW);
  digitalWrite(step, LOW);
  delayMicroseconds(Tempo-Tempo/2); // Deuxième moitié de l'attente
  
  // Si step est sur front montant, la direction est HIGH
  // Si step est sur front descendant, cela n'a pas d'effet
  digitalWrite(Dir, HIGH);
  digitalWrite(step, HIGH);
  delayMicroseconds(Tempo/2); // Première moitié de l'attente
  
  // Si step est sur front montant, cela n'a pas d'effet
  // Si step est sur front descendant, la direction est LOW
  digitalWrite(Dir, LOW);
  digitalWrite(step, LOW);
  delayMicroseconds(Tempo-Tempo/2); // Deuxième moitié de l'attente
  
  // Si step est sur front descendant, une boucle fait tourner de 2 pas direction LOW
  //      -> le moteur tourne
  // Si step est sur front montant, on fait un pas dans un sens, un pas dans l'autre
  //      -> le moteur vibre sur place
}

Je conseille de faire tourner le moteur pas à pas avec les deux programmes, ainsi si le moteur ne tourne ni dans un cas ni dans l'autre, on peut comprendre qu'il y a un problème ailleurs.

 


dansetrad.fr Contactez-moi