Exemple: Pas_et_MicroPas

Ceci permet de comprendre l'utilisation des micro-pas et son intérêt. On utilise deux moteurs identiques, l'un piloté en pas entiers, l'autre en 16 micro-pas. Chaque moteur tourne alternativement pendant 4 secondes avec une vitesse qui augmente. On peut constater la différence sonore ainsi que des pertes de pas dues à la résonance en mode pas..

Liens

Pour faire fonctionner cet exemple, il faut soit télécharger QuickStepExemples.zip contenant tous les fichiers d'exemples, soit télécharger Pas_et_MicroPas.zip contenant cet exemple, soit créer un répertoire du nom de l'exemple et mettre dedans:
- le fichier Pas_et_MicroPas.ino de l'exemple
- le fichier de configuration QuickStepConf.h propre à cet exemple
- les trois fichiers (QuickStep.h, QuickStep.cpp et digitalWriteFast.h) pour avoir la bibliothèque (identiques pour toutes les applications)

QuickStepConf.h (extrait)

// Hybride 200pas/tr, 16 µpas
#define UN_TOUR_X (200L*16) pas_ou_micro_pas
#define VITESSE_MAXI_X 3000 RPM
#define STEP_X 2
#define DIR_X 5
#define ENABLE_X 8

// Hybride 200pas/tr, pas entiers
#define UN_TOUR_Y (200L) pas_ou_micro_pas
#define VITESSE_MAXI_Y 3000 RPM
#define STEP_Y 12
#define DIR_Y 13

Mêmes définitions, sauf pour le nombre de pas. ENABLE n'est défini qu'une foie, la broche ENABLE est la même pour les deux moteurs.

Pas_et_MicroPas.ino

#
  $menu = ":QS";
  include "QuickStep.h"

void setup()
{
  quickStepInit(); // Obligatoire pour utiliser QuickStep
}

float temps = 100000.0 micro_secondes; // pour commencer

void loop()
{ 
  // Choix du temps entre pas
  temps *= 0.6; // Changement de la vitesse
  temps = quickStepBaseDeTemps(temps); // Prendre le temps le plus petit des deux
  
  // Premier moteur: tourner pendant 4 secondes 
  quickStepRotationY(MAX_PAS_Y, temps * 16.0); // Demande pour aller dans un sens
  delay(4000); // Rotation
  quickStepStopMoteurY(); // Arrêt du moteur
  
  // Deuxième moteur: même angle, même vitesse angulaire
  quickStepRotationAbsoluX(quickStepGetPositionY() * 16, temps); // Demande pour aller dans un sens
  delay(5000); // Rotation pendant 4s et arrêt 1s
}

Vitesse de démarrage: A l'initialisation temps vaut 100000.0 microsecondes soit 0,1s. Avant de faire tourner les moteurs, tempspasse de 0,1s à 0,06s. C'est le temps d'un micro-pas, le temps d'un pas est 16 fois plus grand soit 0,96s. On dira 1s pour simplifier.

Pour faire tourner les moteurs à des vitesses très variées, il vaut mieux tourner pendant 4s et ne pas se soucier du nombre de pas faits. Si on avait demandé 200 pas, cela aurait pris un temps très long au début (on commence avec 1pas/s ce qui ferait des mouvements pendant 3 minutes) et si on finit à 5tr/s, cela durerait trop peu (0,2s). Pour avoir la même position pour les deux moteurs, on recopie la position du premier sur le deuxième.

Sachant que le premier moteur tourne pendant 4s et que le deuxième fait autatant de pas à la même vitesse, le deuxième moteur tournera 4s. comme la temporisation finale est de 5s, il y aura un temps mort de 1s. Cela, ainsi que les sonorités des moteurs permettent de bien comparer les comportements des deux moteurs pour la même vitesse.