Compte tour moto

Oui Haute tension ; la tension appliquée à une bougie peut atteindre 30000Volts

J'ai trouvé ça : http://comptetours.free.fr/mostro/mecanique.php?mecaId=4
Un AOP ou un transi pour l'amplification et ça devrait marcher :wink:

Tu peux avoir le signal à partir de la bougie, un fil enroulé autour de l'antiparasite ou quelque chose comme ça, j'ai du le lire une fois
EDIT : Le lien de B@tto confirme bien ce que je pensais. ^^

Avant la haute tension de ta bougie l'impulsion vient de ou? car Ta batterie est bien en 12V?
Quel est l'élément (mécanique ou non) qui donne l'ordre à ta bougie d'allumer?

Ps: je ne m'y connais pas en mécanique... mais je crois que sur une voiture, ca doit etre la variation de fréquence d'une impulsion qui donne les donnée necessaire à au rpm et à la vitesse.
Je sais que quans j'ai mis un pont court sur une honda S2000 il a fallut se munir d'une yellow box (taper honda S2000 yellow box dans google) trouver la notice de cablage pour voir ou sur quoi est repris le signal d'impulsion.

Apparement le coup du fil enroulé sur l'antiparasitage est courant, même sur les versions commerciales.

Sur les voitures c'est différents (en tout cas sur la mienne c'est ainsi et comme c'est une peugeot j'imagine que c'est la norme) : il y a un compte tour sur l'arbre moteur.

Merci pour le lien :slight_smile:

La moto que je voudrait équiper de ce montage est une assez vieille moto : Yamaha DTMX de 1977 pour ceux qui s'y connaitraient un peu.
L'alumage est dit à rupteur, le principe rapidement :
-Un stator constitué d'une bobine fournissant un courant alternatif ~200V grâce au rotor aimanté tournant autour de celui-ci,
-Une pièce mécanique -le rupteur- déclenche une forte impulsion de courant,
-celle-ci est amplifiée par une bobine HT reliée à la bougie d'allumage qui produit une étincelle ..

Une fois que j'aurai échantilloné le signal, chaque impulsion électrique correspondra à un tour du moteur (moteur 2tps pour les conaisseurs toujours .. ). Comment à l'aide de l'Arduino puis-je mesurer cette fréquence ?

Merci

Comme dans le lien : un fil enroulé sur la cable qui va à l'antiparasite. Le courant dans ce cable va en generer un le fil enroulé (apparement aux alentours de 1V). Derriere une petite amplification (transistor ou AOP) pour avoir des beaux 0V quand y'a rien et 5V quand y'a allumage.

Oui ce n'est pas tellement l'échantillonage que me pose problème mais ensuite comment mesurer la fréquence à l'aide de l'arduino ?

Bah tu comptes le nombre d'impulsions pendant une seconde par exemple, tu divises par le nombre d'allumage par tour de ton moteur (2 je crois ?) et tu multiplies par 60 vu que dans une minute il y a 60 secondes :slight_smile:

et avec quelle commande je peut compter ce nombre d'impulsions ?!

Deux moyens : dans ta loop tu fais quelque chose comme :

If (digitalRead(Signal,HIGH){ //detection d'un courant dans le cable
while(digitalRead(Signal,HIGH)); // on attend la fin de l'impulsion
NombreImpulsions++;
}

Après tu rajoutes une interruptions temporelle, pour que toutes les secondes on puisse calculer le nombre de tour par minute :

if(millis()>(Depart+1000)){
Depart=millis();
CompteTour=NombreImpulsions*30 // NombreImpulsions/2*60
}

Pour la détection des impulsions tu peux et c'est même la meilleure façon de faire, utiliser les interruptions : http://arduino.cc/fr/Main/AttachInterrupt

Ai-je bien compris le principe de la commande attachinterrupt ;

int NbreImpulsion=0; // Comptabiliseur nombre d'impulsions
int rpm; // valeur du régime moteur en tours par minute
int Tactu=500; // Le compte-tour s'actualise toute les 0.5s
int T1;



void setup () {
  attachInterrupt (0, fctn, RISING);
  delay (1000); // On attend que l'arduino échantillone les 10 premières valeurs
  T1= millis (); // "heure" de la carte à l'instant T1
}

void loop () {
  if ((millis ()- T1)>= Tactu) { // S'il s'est écoulé tactu depuis T1 alors fait la moyenne et on affiche ...
    rpm = (NbreImpulsion/Tactu)*60000; // La valeur du régime moteur en tours/minute
     T1 = millis (); // On réactualise T1
     NbreImpulsion =0 ; // De même pour NbreImpulsion
     
     // On affiche le régime moteur ...
     
  }
} 
  
  
void fctn () {
  NbreImpulsion++;
}

c'est une ébauche de programme ... Donnera-t-il le résultat attendu ?

Attention, les tensions d'allumage sont oscillatoires même au primaire de la bobine.
Ce qui implique un risque de compter beaucoup plus d'impulsions que de tr/mn.
La fermeture des vis platinées doit aussi engendrer des rebonds.
Il y a des tensions élevées à haute fréquence au primaire comme au secondaire.
Donc veiller à l'isolation des circuits!
Les compte tours 'électroniques' des années 60 utilisaient un transformateur bobiné contre un fil de bougie.
(Il est plus efficace de bobiner contre que autour, comme dans un vrai transformateur)
Il faut ensuite amplifier, filtrer et équarrir le signal (mieux il sera filtré moins il sera carré).
Il y a peut-être une autre solution : utiliser un capteur à effet Hall à proximité du volant magnétique : détecteur de proximité industriel ou capteur de roue ou d'allumage d'origine automobile.
Les effets de rebond seraient éliminés et pas de risque de surtension.
Une gestion par interruption à l'avantage de ne mobiliser les ressources de l'Arduino que pendant une faible partie du temps.
A 6000 tr/mn, on a une impulsion toutes les 10ms
Il peut alors consacrer son temps libre à autre chose : calculer la consommation et l'automie par exemple :wink:
Pour s'éviter des problèmes de rebonds et déclenchements intempestifs, on peut envisager un petit circuit d'interface avec une bascule type D (74HCx74 par ex) :

  • le µC met la bascule à 0 ou à 1 par l'entrée R ou S
  • l'impulsion en provenance du capteur provoque le basculement
    (les impulsions suivantes n'ont aucun effet)
  • le basculement provoque une interruption sur le front montant ou descendant
  • on traite l'interruption
  • on attend un délai suffisant pour ne plus avoir de rebond (qq ms)
    -on repositionne la bascule et on va faire autre chose en attendant l'interruption suivante.
    (nb : dans un 74HCx74, il ya deux bascules donc ou peut gérer un autre capteur)

Alienbots : Je ne connaissait pas les bascule de type "D" et sincèrement je n'en comprend pas trop le principe. Quelle est l'utilité de rajouter ce composant ?

Désolé si je suis un peu lourd avec toute mes questions :S

L'interêt de la bascule est plutot limité vu qu'on a un µC !!

Il faudra eventuellement en effet géré l'effet de rebond m'enfin comme tu l'as dis au max on a une impulsion extrêmement brêve toute les 10 ms au maximum de tr/min, un simple delay devrait largement suffire. Et au pire du pire un RC et c'est réglé ...

Après eventuellement prévoir une protection contre les surtensions (une zener) mais apparement ça depasse pas 1V avec cette méthode donc c'est vraiment du au cas ou !

Bon je m'y met ce week end .. Je vous tiens au courant

Par contre dans mon programme -selon vous- à combien puis abaisser la variable Tactu pour que la valeur du régime moteur retournée soit la pus précise possible ?

la plus précise : infini :slight_smile: plus ça sera long plus la moyenne sera logiquement bonne ! Après il faut quand même avoir un taux de réponse satisfaisant. A mon avis rien qu'en mesurant le temps entre deux mesures tu devrait avoir un truc pas trop dégueu ! En fait, plus que la précision de l'arduino je pense c'est la qualité du signal généré en amont qui peut être source d'imprécision puisque l'arduino sera largement capable de faire une différence de 1 tour/minute à 6000 tour car celà représente une variation entre les deux impulsions de 166 microsecondes, largement mesurable pour un atmega à 16 mhz.

... Mon programme ne fonctionne pas :confused:
Quelqu'un pourrait-il me dire ce qui ne va pas ?

Bah faudrait ptetre le poster alors ...