On va réexpliquer un peu...
On part du volant moteur (qui est fixé à l'arbre de sortie du moteur, donc qui tourne tout pareil) :
On voit ici les deux crénaux élargis, à la fin desquels on trouve notre info "synchro" (décalée en réalité de 90°, pour permettre au µP d'avoir un peu d'avance pour calculer le bon moment d'étincelle (entre 8 et 45°avant le PMH réel), ce qui lui laisse 1/4 de tour moteur pour faire son petit calcul).
Pour l'instant, on s'affranchit du décalage...
Le capteur fournit le premier signal :
Il faut donc un circuit qui me sorte les deux signaux du bas.
Dans mon idée,
1) un timer 16 bits mesure le temps T ou 3T entre deux fronts descendants du signal d'entrée, avec une base de 2MHz.
Pour rester ne pas déborder, le temps le plus long étant 3T, ne doit pas dépasser 65535/2.106 = 32,768 ms, soit Tmax = 10,92ms, ce qui correspond à une vitesse de rotation du moteur de Vmot-min = 60/44/Tmax = 125tr/min. De même, On trouvera Vmot-max = 2730000tr/min, mais on n'ira pas jusque là...
- A chaque impulsion du capteur, on trouve donc un temps T(n) = T (dent normale) ou 3T = (dent PMH). Donc si T(n) > 2xT(n-1), on en déuit qu'on a à faire à une dent PMH (comme le précisait jihelbi, avec l'inertie du moteur, la vitesse de rotation ne peut pas varier trop vite, et pour que la comparaison T(n) > 2xT(n-1) soit vérifiée en dehors d'une dent PMH, cela reviendrait à faire passer le moteur de 1000tr/min à 500tr/min en 1ms, c'est pas très pensable). Donc deux cas :
2.a) Si T(n) > 2xT(n-1) (dent PMH) : on met à 1 la sortie "synchro".
2.b) Si T(n) < 2xT(n-1) (dent normale) : on met T comme nouvelle base pour le timer de sortie (qui tourne à 16MHz) et on met à 0 la sortie Synchro.
Je pense qu'avec ça, j'ai mes deux signaux. Reste une sombre histoire de débordements (lors du démarrage par exemple) du timer d'entrée (si le moteur tourne en dessous de 125tr/min), de ne pas générer de signaux, mais c'est accessoire.
UniseV: Pour avoir 2 timers 16 bits, ne peux-tu pas étendre "logiciellement" l'un des timers 8bits d'un 328P ?
J'y avais pensé, mais j'étais tellement dans mon idée d'un pic à côté qui me gère le tout... attends... heu... En effet, je pourrais utiliser le timer2 en mesure d'entrée avec une ISR(T2_OVF) qui incrémente une variable genre T2_MSB et le timer1 en générateur de sortie avec ICR1H = T2_MSB; ICR1L = TCNT2;
Pas bête... je crois que je vais tester...
barbudor : Pour multiplier une fréquence, une PLL genre CD4046 ne ferait-il pas l'affaire ?
j'en parlais aussi avec Al1fch, par rapport aux dents manquantes, la PLL ne risque pas de "dérailler" un court instant? J'ai pas trop bossé sur les PLL, car à l'école (dans l'temps), on ne les utilisait que pour émission/réception radio, c'était encore du temps où on ne savait pas faire de µP aussi rapides que les quartz, maintenant, les quartz sont largement dépassés par la vitesse de l'électronique... Donc je ne vois pas trop. (puis je me suis spécialisé très vite dans l'audio, donc dès qu'on passe le "mûr du son" qui chez moi est à 300KHz, je suis tout perdu, et je n'utilise jamais de PLL)... Mais si t'as une idée, pourquoi pas...