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%).