Super_Cinci:
Salut,
Il est tout à fait possible d'utiliser un enroulement autour d'un fil de bougie, je l'ai déjà fait. Je déclenchais un NE555 avec 20 tours de fils telecomm autourdu fil qui sort de la bobine. Pour protéger l'arduino, il suffit de faire le schéma suivant :
L1 : une vingtaine (max) d'enroulements autour du fil qui sort de la bobine vers le distributeur (delco),
R2, D1 : protection de Q1
Q1, R1 : adaptation du signal en TTL
J1 à J3 : à brancher sur l'arduino.
Pour le code, c'est plus compliqué... il faut gérer une interruption et un timer...
const word rmp_facteur 30 // pour moteur 4 cylindres 4 temps : =60/(nombre d'étincelles par tour moteur)
volatile word rmp_count = 0; // variable de comptage vitesse du moteur
volatile word rmp_temp; // variable de lecture du timer
volatile word rmp_moteur; // contient la vitesse moteur en tr/min
ISR (INT0_vect){ // appelée à chaque étincelle de bougie
rpm_count++; // incrément compteur
}
ISR (TIMER1_COMPA_vect) { appelée à chaque tour de timer, soit toutes les 1s.
rpm_temp = rmp_count; // lecture compteur.
rmp_count = 0; // RAZ compteur
rmp_moteur = rmp_temp * rmp_facteur; // convertion en tour / minutes
}
void setup(){
OCR1A = 62500; // mesure moteur toutes les secondes
TCCR1A = 0x00; // configuration timer : mode normal CTC (RAZ sur comparaison OCR1A)
TCCR1B = 0x0C; // fréquence timer = 62.5KHz
TMISK1 = 0x02; // Interruption sur TCNT1 = OCR1A
EICRA = 0x02; // interruption INT0 déclenchée sur front descendant (falling);
EIMSK = 0x01; // autoriser l'INT0
}
void loop(){
// ici, on utilise la valeur contenue dans rmp_moteur comme on veut (sans la modifier, cela va de soi). elle sera
// mise à jour une fois par seconde...
}
Voilà.
Normalement, ça marche, c'est ce que j'ai fait pour mon régulateur de vitesse. Mais une actualisation une fois par seconde, c'est très moyen et la résolution de la mesure sera de rmp_facteur (30 pour un moteur 4c/4t) Il vaudrait mieux utiliser le signal de ton capteur PMH : il serait bien plus précis (40 impulsions par tour moteur sur mes moteurs Cléon, j'arrive à une mesure actualisée 4 fois par seconde avec une résolution de 5 tr/min environ, c'est bien plus fluide!)
Mais attention, toute fonction utilisant le timer1 est à oublier... sinon, tu vas te retrouver avec n'importequoi...
variante pour une actualisation 4 fois par seconde, mais beaucoup moins précise à bas régime :
remplacer la première ligne et le setup par :
const float rmp_facteur 3.75 // pour moteur 4 cylindres 4 temps : =15/(nombre d'étincelles par tour moteur)
void setup(){
OCR1A = 62500; // mesure moteur toutes les 250ms
TCCR1A = 0x00; // configuration timer : mode normal CTC (RAZ sur comparaison OCR1A)
TCCR1B = 0x0B; // fréquence timer = 250KHz
TMISK1 = 0x02; // Interruption sur fin compteur
EICRA = 0x02; // interruption INT0 déclenchée sur front descendant (falling);
EIMSK = 0x01; // autoriser l'INT0
}
bien sûr, il serait préférable de trouver une valeur de OCR1A qui done un rmp_facteur entier, car les calculs float sont longs et peu précis dans notre cas...
T'es sûr que t'as pas le droit de juste repiquer le signal de ton capteur PMH?
Super, merci beaucoup pour cette aide ma fois bien précieuse. Pour ce qui est de la précision, je n'ai pas besoin non plus d'être au tour près, c'est déjà pas mal si j'arrive à avoir un ordre d'idée du régime.
Pour ce qui est du repiquage au point d'allumage, je ne serais pas contre mais le problème c'est que toute modification du faisceau et totalement interdite. De plus, je n'ai pas le moteur sous les yeux, mais pour moi sur mon moteur de kart je n'ai qu'une impulsion par tour, et c'est un deux temps, donc ça ne changera pas grand chose....
En tout cas merci beaucoup, je commence à regarder ça ce week-end tranquillement car la semaine je n'ai pas vraiment le temps!
Merci beaucoup pour votre aide en tout cas, et vive ce forum qui m'aide bien souvent!!!!