Compte tour pour moteur de kart 2t

Jour'

Bon y'a pas mal de posts à ce sujet mais je n'ai jamais vraiment trouver comment bien faire.

Ex : Mesure de régime moteur - Français - Arduino Forum

Je cherche donc à avoir sur un écran (ou une barre d'afficheurs 7 éléments) le nombre de tour minutes que va prendre un moteur de kart, ainsi qu'une barre de LED pour afficher une plage de T/min (avant rupteur).

Par contre, par rapport au lien plus haut,je ne fais pas de compétition donc je peux reprendre sur le capteur du point d'allumage, si j'ai bien compris.

Mais ensuite? J'aurais un signal carré? En 5v, 12v?
C'est un moteur rotax max (2t, 125cc, je suppose qu'il doit avoir une impulsion par tour?)

Il faudrait faire si j'ai bien compris, lire pendant disons 0.25s, puis afficher, puis relire en boucle?
J'ai pas bien compris pour avoir une lecture sans interruption...

Merci d'avance!

De mémoire les rotax ont un peu d'électronique embarquée. Il y a un limiteur de régime, tu as peut être une info à tirer là dessus en Hz.

La batterie est en 12v, après l'électronique je sais pas te répondre.

Hmm oui faut que je regarde comment fonctionne le limiteur, c'est déjà une piste. :slight_smile:

Merci.

dans le sujet auquel tu fais référence dans ton premier message il y a déjà de quoi faire : enrouler un fil, un montage (dont t'as le schéma) et même le code qui va avec (!)
Je ne sais pas ce qu'il te faut de plus...

Le lien ne précise pas le fonctionnement en prenant directement du capteur phm, qui semble être une meilleur solution. A moins que le fonctionnement reste le même (et le schéma aussi?)

le PMH c'est le capteur sur le volant moteur non ?
en effet c'est une toute autre chose à gérer, mais à moins que ce ne soit une contrainte obligatoire, au lieu de te compliquer la vie avec ca, tu peux prendre la solution toute faite exposée par Super_cinci qui est assez simple à mettre en œuvre tant au niveau électronique que code...

Oui c'est bien ça (enfin pmh je l'ai mal écrit).
Je pensais que ça serait plus simple de passer par là (pour un tour, il y a X crans, donc suffit de compte le nombre de crans, diviser par X et diviser par minute en gros), sans vraiment connaitre ce qui sort du capteur (le signal).

Je vais tester la méthode par le fil, car celui là est déjà bien écrit effectivement, mais bon si y'a mieux/plus fiable, pourquoi pas tester une autre façon de faire.

Roger01:
Je vais tester la méthode par le fil, car celui là est déjà bien écrit effectivement, mais bon si y'a mieux/plus fiable, pourquoi pas tester une autre façon de faire.

Tu as tout à fait raison, mais m'étant déjà intéressé par le passé, comme toi, au PMH, il semblerait que son utilisation soit plus difficile à mettre en place (mais pas impossible !) que se câbler sur l'allumage directement...

J'ai testé le code là :

const float rmp_facteur = 3.75;  //  pour moteur 4 cylindres 4 temps : =15/(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 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
}

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...
}

Sur https://123d.circuits.io pour tester avant de faire un vrai et ça me sort :

In function 'void __vector_1()':
8:3: error: 'rpm_count' was not declared in this scope
In function 'void __vector_11()':
12:3: error: 'rpm_temp' was not declared in this scope
In function 'void setup()':
21:3: error: 'TMISK1' was not declared in this scope

volatile word ne fonctionne pas?

et sur l'IDE arduino ? (elle est gratuite, tu peux la télécharger et l'installer)...

Edit : c'est une simple erreur de frappe rmp/rpm !!! :wink:

Edit 2 : bon, il y a visiblement quelques erreurs de frappe, voici le code corrigé :

const float rmp_facteur = 3.75;  //  pour moteur 4 cylindres 4 temps : =15/(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
  rmp_count++;  // incrément compteur
}

ISR (TIMER1_COMPA_vect) { // appelée à chaque tour de timer, soit toutes les 1s.
  rmp_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 250ms
  TCCR1A = 0x00;  // configuration timer : mode normal CTC (RAZ sur comparaison OCR1A)
  TCCR1B = 0x0B;  // fréquence timer = 250KHz
  TIMSK1 = 0x02;   // Interruption sur fin compteur
  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...
}

Effectivement ça fonctionne mieux comme ça :smiley: merci.
Je vais regarder pour l'IDE aussi!

Bon, c'est bizarre, sur 123d, si je met un bouton sur l'INT0 ça ne change rien à rmp_moteur.
Mais si je change ISR (INT0_vect) par ISR (INT2_vect) et que je met un bouton sur le port 2, là j'ai une réaction.

J'ai testé l'IDE mais ça semble être juste un compilateur. Pas trouvé de simulateur avec.. :frowning:

ah non, il n'y a pas de simulateur avec l'IDE... mais il arrive quand ton arduino ?

Je l'ai déjà mais je n'ai pas toute les pièces du coup, par rapport au schéma et encore moins le moyen de tester comme ça sans le moteur à coté du pc...

Ça fonctionne! Je m'étais tout simplement trompé de pin :smiley:
Plus qu'à faire l'afficheur.

Je me suis attaqué au traitement d'un signal via le PMH ... pour l'instant PMH-Bruno 1:0 :smiley:

L'intêret pour moi était d'avoir un truc ultra fiable comparé auxlsystèmes par bobinages qui sont pas terribles terribles (J'ai monté du Koso , du Mod7 sur mes motos et j'ai jamais eu quelque chose de 100% fiable).

Puis techniquement c'est plus intéressant je trouve .

Un bout de piste :

http://forum.arduino.cc/index.php?topic=379133.msg2617437#msg2617437

Et mes débuts de réflexion (ça date ...)

après t'as pas que le capteur Hall sur une bougie, tu peux aussi te brancher sur la bobine d'allumage et t'as un signal avec des pics plutôt fiable, mais il faut savoir le déparasiter, car si tu fais seulement un lissage soft tu ajoutes une latence perceptible...
Edit : Super_cinci qui est un pro de l'allumage m'avait filé ce schéma, je n'ai pas encore eu le temps de l'essayer, mais je lui fais confiance !

Zorro_X:
après t'as pas que le capteur Hall sur une bougie, tu peux aussi te brancher sur la bobine d'allumage et t'as un signal avec des pics plutôt fiable, mais il faut savoir le déparasiter, car si tu fais seulement un lissage soft tu ajoutes une latence perceptible...
Edit : Super_cinci qui est un pro de l'allumage m'avait filé ce schéma, je n'ai pas encore eu le temps de l'essayer, mais je lui fais confiance !

En faisant mon curieux , je suis tombé sur ton compteur Zcar, c'est du bon boulot :wink: !

BrUnO14200:
En faisant mon curieux , je suis tombé sur ton compteur Zcar, c'est du bon boulot :wink: !

Merci ! :blush:
Si j'ai mis le lien dans mon profil, ce n'est pas "faire le curieux" ! :wink:
Question électronique c'est quand même du bricolage et justement le filtrage je le fais logiciellement avec un debounce plus une moyenne fenêtrée et j'ai une latence de 150-200ms qui est perceptible à l'œil nu... :frowning:

Je suis tombé dessus en allant sur le forum super5 :wink:
Soit dit en passant, c'est cool qu'une communauté de gens s'amuse à faire vivre nos vieilles mamies à 4 roues.
Je suis plus branché japonaises mais pas du tout sectaire et ça fait plaisir de voir encore des "oldies" sur les routes :wink: !