Exemple: VitesseMaxi

Ce programme fait démarrer le moteur de plus en plus vite sans accélérations, ce qui permet par exemple de mesurer la vitesse maximale de démarrage du moteur. Le moteur fait 2 tours pour être sûr que tout fonctionne puis s'arrête.

Liens

Pour faire fonctionner cet exemple, il faut soit télécharger QuickStepExemples.zip contenant tous les fichiers d'exemples, soit télécharger VitesseMaxi.zip contenant cet exemple, soit créer un répertoire du nom de l'exemple et mettre dedans:
- le fichier VitesseMaxi.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 en mode 16 micro-pas
#define UN_TOUR (200L*16) pas_ou_micro_pas
#define VITESSE_MAXI 3000 RPM
#define STEP 2
#define DIR 5
#define ENABLE 8

VitesseMaxi.ino

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

void setup()
{
  quickStepInit(); // Obligatoire pour utiliser QuickStep
  Serial.begin(115200); // Pour pouvoir lire les vitesses
}

float tempsEntrePasDemande = 200 micro_secondes; // Au départ
float tempsEntrePasObtenu;

void loop()
{ 
  // Choix et affichage du temps entre deux pas ou micro-pas
  Serial.print(F("Le temps entre deux pas ou deux micro-pas est de "));
  Serial.print(tempsEntrePasObtenu = quickStepBaseDeTemps(tempsEntrePasDemande));
  Serial.println(F("µs"));
  // Affichage de la vitesse du moteur
  Serial.print(F("Le moteur tourne à "));
  serialPrintFloat3(60000000.0 / (tempsEntrePasObtenu * UN_TOUR));
  Serial.print(F("tr/mn soit "));
  serialPrintFloat3(1000000.0 / (tempsEntrePasObtenu * UN_TOUR));
  Serial.println(F("tr/s\n"));
  
  //Préparation pour la prochaine fois.
  tempsEntrePasDemande *= 0.80;

  // Deux tour dans un sens, une seconde d'arrêt
  quickStepRotation(2 * UN_TOUR, VITESSE_MAXI); // Demande pour aller dans un sens
  quickStepWait(); // Attente de la fin de rotation
  delay(1000);
}

Il faut choisir une vitesse "lente" pour commencer. Ici est choisi un temps minimum entre 2 ordres step de 200µs. Ce temps va dépendre du moteur et de son mode (pas? micro-pas?). Si le moteur ne tourne pas à cette vitesse multiplier ce temps par 10 et refaire les essais tant qu'il ne démarre pas. Plus ce nombre est petit, plus le moteur va vite. Si on connaît le moteur, on peut commencer avec un temps légèrement plus grand pour éviter trop d'essais

La vitesse va augmenter (l'espace entre impulsion diminue) d'environ 20% à chaque boucle à cause de
tempsEntrePasDemande *= 0.80;
Pour affiner la mesure, on peut recommencer en remplaçant la valeur de démarrage par une valeur légèrement supérieure à la valeur qu'elle avait lors du dernier mouvement correct et remplacer ce 0.80 par 0.99 (soit 1%).