Exemple: quickStepInfo
Cet exemple montre l'utilisation de la fonction quickStepInfo qui permet de voir les vitesses que l'on a demandées et les choix qui ont été faits automatiquement. On peut mettre cette fonction au début de la phase d'écriture et l'enlever ensuite dans la version finale.
Liens
Pour faire fonctionner cet exemple, il faut soit télécharger QuickStepExemples.zip
contenant tous les fichiers d'exemples, soit télécharger quickStepInfo.zip
contenant cet exemple, soit créer un répertoire du nom de l'exemple et mettre dedans:
- le fichier quickStepInfo.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_X (200L*16) pas_ou_micro_pas #define VITESSE_MAXI_X 100 RPM #define STEP_3 ?? // Moteur hybride 200 pas/tour en mode pas #define UN_TOUR_Y 200L pas_ou_micro_pas #define VITESSE_MAXI_Y 100 RPM #define STEP_Y 4 // Moteur hybride 200 pas/tour en mode pas #define UN_TOUR_Z 200L pas_ou_micro_pas #define VITESSE_MAXI_Z 500 micro_secondes_par_pas #define STEP_Z 5 // 28BYJ-48 2048 pas/tour piloté par un ULN2003 avec 4 commandes #define UN_TOUR_T 2048L pas_ou_micro_pas #define PREM_BOBINE_T 6 #define DEUX_BOBINE_T 7 #define TROIS_BOBINE_T 8 #define QUATRE_BOBINE_T 9 // Moteur récupéré dont on ne connaît pas encore les caractéristiques #define VITESSE_MAXI_U 3000 RPM // Rajouter l'unité: micro_secondes_par_pas, RPM, ou RPS #define STEP_U 10 // N° de la broche pour STEP
quickStepInfo.ino (extrait)
# $menu = ":QS"; include "QuickStep.h" void setup() { quickStepInit(); // Obligatoire pour utiliser QuickStep Serial.begin(115200); quickStepInfo(); } void loop() { }
Affichage obtenu
Utilisation du timer 2 La base de temps retenu est de 186.00 µs Entre deux impulsions STEP, il y a donc entre 186 et 47600 µs Le moteur X peut tourner entre 101 et 0.394 tr/mn (1.68 et 0.00656 tr/s). Demandée 100 tr/mn (1.67 tr/s) Le moteur Y peut tourner entre 1610 et 6.30 tr/mn (26.9 et 0.105 tr/s). Demandée 100 tr/mn (1.67 tr/s) Le moteur Z peut tourner entre 1610 et 6.30 tr/mn (26.9 et 0.105 tr/s). Demandée 600 tr/mn (10.0 tr/s) Le moteur T peut tourner entre 158 et 0.615 tr/mn (2.63 et 0.0103 tr/s)
Tous ces calculs peuvent être faits à la main, mais c'est tellement plus facile de laisser faire le logiciel! Ci-dessous le détail si vous ne faites pas confiance à quickStepInfo().
Pour le moteur X (Hybride 200pas/tr en mode 16 micro-pas, 100 RPM):
A 100 tr/mn (100 RPM), cela fait 100/60 tr/s. Un tour se fait en 60/100 s.
Il a 3200 µpas par tour (200x16). Un µpas se fait donc en (60/100)/3200 s ou 0,0001875s ou encore en 187,5µs
Il faut donc une base de temps d'au plus 187,5µs. C'est le timer 2 qui est utilisé et on peut choisir le temps
entre "128µs et 512µs par incrément de 2µs" C'est donc la
valeur inférieure à 187,5µs qui est possible, soit 186µs ou toute valeur inférieure.
Pour le moteur Y (Hybride 200pas/tr en mode pas, 100 RPM):
A 100 tr/mn (100 RPM), cela fait 100/60 tr/s. Un tour se fait en 60/100 s.
Il a 200 pas par tour. Un pas se fait donc en (60/100)/200 s ou 0,003s ou encore en 3ms
Il faut donc une base de temps d'au plus 3ms. C'est le timer 2 qui est utilisé et on peut choisir le temps
entre "2ms et 4ms par incrément de 16µs" C'est donc 3ms qui
est possible, soit 3000µs ou toute valeur inférieure.
Pour le moteur Z (Hybride 200pas/tr en mode pas, 500µs/pas):
Il faut donc une base de temps d'au plus 500µs (pour l'instant le nombre de pas par tour ne nous importe pas).
C'est le timer 2 qui est utilisé et on peut choisir le temps entre "128µs
et 512µs par incrément de 2µs" C'est donc 500µs qui est possible ou toute valeur inférieure.
Pour le moteur T (28BYJ-48 2048 pas/tour piloté par un ULN2003 avec 4 commandes):
La vitesse n'est pas spécifiée. Ce n'est donc pas un critère de choix. Ce moteur est ignoré pour la détermination
de la base de temps.
Pour le moteur U (Moteur récupéré), on ne peut pas déterminer le temps entre deux pas car on ne connaît pas le nombre de pas/tour. La vitesse maximale ne nous renseigne pas. En fait elle est inutile. Ce moteur est aussi ignoré pour la détermination de la base de temps.
La base de temps doit donc être inférieure ou égale à 186µs, inférieure ou égale à 3000µs, et inférieure ou égale à 500µs. C'est donc 186µs qui sera choisi automatiquement à l'initialisation. Notez que l'on peut par la suite changer cette valeur en appelant la fonction quickStepBaseDeTemps().
Avec cette base de temps, le moteur X pourra tourner à 100tr/mn x 187,5/186 soit 101tr/mn, soit encore à 101/60 = 1,68tr/s. La vitesse la plus lente avec cette base de temps est de 255 fois plus lent, soit 101/255 = 0,394tr/mn.
Avec cette base de temps, le moteur Y pourra tourner à 100tr/mn x 187,5/3000 soit 1600tr/mn, soit encore à 1600/60 = 27tr/s. La vitesse la plus lente avec cette base de temps est de 255 fois plus lent, soit 1600/255 = 27tr/mn.
Avec cette base de temps, le moteur Z aura un temps entre 2 pas de 186µs, ce qui fait 200x186µs = 37ms/tr ce qui donne uen vitesses de 1/0,037 = 27 tr/s soit 1600 tr/mn.
Pour le moteur T (28BYJ-48 2048 pas/tour piloté par un ULN2003 avec 4 commandes) pourrait faire un tour en 186µsx2048pas soit 0,38s et sa vitesse correspondante 2,6tr/s. On n'affiche pas la valeur demandée car elle n'a pas été donnée.
Pour le moteur U (Moteur récupéré), aucune indication n'est disponible, rien n'est affiché.