Bonjour
Je veux étalonner la vitesse d'un moteur en fonction de la largeur d'impulsion d'un port Arduino. J'ai écrit un script qui compte le temps entre 10 tours du moteur (il y a un capteur ). J'utilise 2 variables, 'départ' et 'arrivee', qui lisent millis(). Or, bien qu'il s'écoule plusieurs secondes à vitesse lente pour ces 10 tours, depart et arrivee contiennent la même valeur. Voyez-vous où je me suis trompé ?
Extrait du moniteur :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 int pinVitesse = 6; int pinHall = 2;// le capteur de tours int alpha; unsigned long arrivee; int n; unsigned long depart; byte compte=0; byte valid; unsigned long delai; void setup() { pinMode(pinVitesse,OUTPUT); pinMode(pinHall, INPUT_PULLUP); analogWrite(pinVitesse, 0); Serial.begin(9600); Serial.println("depart"); delay(5000); } void loop() { for (n=2;n<16;n++){ if(n<15){alpha=n*16;} else {alpha=255;}// alpha prendra les valeurs 32, 48,...255 analogWrite(pinVitesse, alpha); //lance le moteur Serial.print("alpha : "); Serial.println(alpha); delay(5000); //délai de stabilisationde la vitesse valid=1; //autorisela lecture des impulsions Hall while(compte<=10){ while(digitalRead(pinHall)!=HIGH){// attente d'une impulsion signalant un tour effectué //delay(1); } if (valid==1){//première impulsion Hall : démarrage du décompte des tours depart=millis(); Serial.println(depart,DEC); compte=0; valid=0; } else{ compte++; // impulsions suivantes } } arrivee=millis();// on a effectué 10 tours, on relève millis() Serial.println(compte); Serial.println(arrivee,DEC); analogWrite(pinVitesse, 0); delai=arrivee - depart;// le temps passé pour 10 tours Serial.print(", 10 tours en "); Serial.print(delai, DEC); Serial.println(" ms"); delay(5000); valid=1; // nouveau cycle avec le alpha suivant compte=0; } }
19:51:29.372 -> alpha : 80
19:51:34.372 -> 40002
19:51:34.372 -> 11
19:51:34.372 -> 40003
19:51:34.425 -> , 10 tours en 1 ms
Partager