Bonjour,

Je débute en Arduino, et j'essaie d'identifier expérimentalement un moto-réducteur CC muni d'un encodeur.
La manip de base consiste à imposer une tension d'alimentation et de recueillir les informations du codeur pour tracer la vitesse en fonction du temps.
On en déduit le gain statique et la constante de temps, en assimilant le moteur à un premier ordre.

Moteur CC 6V, réducteur au 1/53, codeur 2 voies à 6 ticks par tour chaque.
Je considère que je ne loupe aucun tick, vu que je ne fais rien dans la loop, mais je fais des trucs dans la gestion de l'interruption
je calcule et affiche la vitesse de l'arbre réducteur en tr/min sur la voie série
Programme ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
// Faire tourner le moteur à une vitesse constante
// Récupérer chaque changement d'état grace à une interruption sur l'une des 2 voies
// Calculer la vitesse du réducteur en tr/min et l'afficher sur la liaison série
 
const int _MOTEUR =  9;                 // Digital pin pour commande moteur
unsigned long temps;                       // variable de temps en microsecondes, car avec micros() direct, ça marche pas !!
unsigned long tempsinit;                   // instant initial
float vitesse ;
 
/* Routine d'initialisation */
void setup() {
    pinMode(_MOTEUR, OUTPUT);   // Configuration de la broche en sortie
    analogWrite(_MOTEUR, 255);   // Commande PWM de 0 à 255 Max (de 0 à 100% de la "tension d'alimentation")
    delay(5000);                // Pause de 5 sec pour laisser le temps au moteur de s'arréter si celui-ci est en marche
 
    attachInterrupt(0, compteur, CHANGE);    // Interruption sur tick de la codeuse (interruption 0 = pin2 arduino mega)
    Serial.begin(230400) ;
    tempsinit = micros();
}
 
/* Fonction principale */
void loop(){
}
 
/* Interruption sur tick de la codeuse */
void compteur(){
    temps = micros();
    vitesse = (1000000/float(temps-tempsinit))*60/6/53 ;
    Serial.println(vitesse);
    tempsinit=temps;    
}
Pb : quand je change la valeur du PWM (typiquement : 127 au lieu de 255)
la vitesse ne change pas en proportion.
Qu'est-ce que je loupe ?

Par avance, merci de votre aide