Bonjour/bonsoir à tous,
Afin d'occuper au mieux mon confinement, je me suis mis dans la tête de fabriquer un petit robot, utilisant ces moteurs.
Pour cela, j'utilise le programme suivant :
const byte interruptPin = 2;
volatile int temps_tour_avant = 0;
int interval_temps_millis = 0;
int compteur_du_loop = 0;
int temps_millis;
volatile int compteur = 0;
void setup()
{
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruption, RISING);
Serial.begin(9600);
}
void loop()
{
//Etape 1 : récupérer la valeur du compteur et la valeur du temps au même moment pour être en mesure de faire les calculs corrects
compteur_du_loop = compteur;
temps_millis = millis();
//Etape 2 : calculer l'interval de temps
interval_temps_millis = temps_millis - temps_tour_avant;
//Etape 3 : remettre les compteurs à 0
compteur = 0;
temps_tour_avant = millis();
//Affichage port série
Serial.print(millis());
Serial.print("\t");
Serial.print(compteur_du_loop);
Serial.print("\t");
Serial.println(interval_temps_millis);
delay(1000);
}
void interruption()
{
compteur = compteur+1;
}
Les valeurs suivantes me sont fournies pour les variables :
- compteur_du_loop : 1315
- interval_temps_millis : 1001
J'ai donc 1315 impulsions montantes sur un codeur en 1 seconde environ.
Sachant que mon codeur a une résolution de 64 impulsions par tour avec une réduction de 131.25 selon la datasheet, le calcul suivant est effectué pour avoir des trs/min sur l'arbre de sortie :
Nombre d'impulsions par tour sur l'arbre de sortie : 64*131.25 = 8400
Donc 1315 impulsions équivaut à 1315/8400 = 0.156 tour
Conversion des millisecondes en minutes : 1001/1000/60 = 0.016
Donc mon régime de rotation est de 0.156/0.016 = 9.75trs/min
Problème : quand je compte le nombre de tours pendant 1 minute...j'ai environ 40 tours!
J'ai beau tourner le problème dans tous les sens je ne comprends pas. Comme il y a deux encodeurs peut-être que j'ai mal compris la datasheet et que j'ai une résolution de 32 impulsions/encodeur (soit 64 au total) mais j'ai toujours environ un facteur de 2 qui se trimbale.
J'ai revérifié la référence du réducteur et le rapport de réduction est bien de 131.25.
Je n'arrive pas à trouver mon erreur, au point que je me demande si l'Arduino MEGA que j'utilise est assez puissante pour avoir un nombre aussi important d'interruption par tour (j'ai calculé à 40 tours ça fait 5600 interruptions/seconde).
Avez vous une idée de mon erreur?
Merci d'avance à vous pour vos réponses.