MAJ du 11/08/2012, 12h40 :
Salut-à-tous!
Suite à quelque divergences ou abus, ce topic a été fermé puis réouvert. Cette première page n'a pas grand intérêt (ça part en sucette), je vous invite à vous rendre directement page 2 : Interface à base de pic pour gestion d'impulsions - #20 by jfs - Français - Arduino Forum, où la discussion reprend son cours normal. Le sujet y est repris à zéro.
Il s'agit de réaliser sur circuit séparé, une sorte d'extracteur de synchro dans un signal impulsionnel pour soulager l'arduino de cette tâche trop lourde en ressources matérielles.
RDV page 2!
Cinci.
PS : merci à Jean-François pour son intervention.
-------------------- Topic d'origine ---------------
Alors voilà, j'ai réussi à faire "déborder" un mega 2560 (enfin sur le papier). Il n'a pas assez de ressources! J'ai même été jusqu'à utiliser le timer du WD, c'est pour dire!
Donc je voudrais l'alléger qu lui collant un petit PIC qui se taperait pas mal du sale boulot dans son coin. Mais j'ai rien pour programmer un pic, donc je propose à quelqu'un qui saurait faire de me programmer un PIC, je peux fournir un code pour uno qui simulerait le signal à traiter, ainsi qu'un circuit imprimé maison tout prêt pour y mettre le PIC et le tester. Pis un peu de sous aussi mais pas trop, juste de quoi payer le PIC et un pack de bière.
Objectif final : mesurer la vitesse de rotation d'un moteur de voiture (Renault11, 1987)
Entrée : Le signal à traiter provient du capteur PMH du moteur (un C2J à allumage électronique intégré) et est préamplifié dans un circuit différentiel.
Caractéristiques : TTL (0-5V) : un train de 42 impulsions bien carrées et régulières par tour moteur, sauf que deux fois par tour, il manque une dent, donc une impulsion... la fréquence des impulsions est donc égale à (42/60) fois la vitesse du moteur.
Sortie : le signal carré mais à une fréquence 8 fois supérieure qui reconstitue les dents manquantes, et une impulsion correspondant au PMH.
On doit pouvoir trouver un PIC en DIL8 ou 12 16MHz qui aurait une INT et deux timers 16 bits, non?
L'algo, je l'ai et il est super simple :
void setup{
Timer 1 (16 bits) tourne à 2MHz en continu,
Timer 2 (16 bits) tourne à 16MHz en mode PWM de base (de 0 à "TOP"),
// en gros, une pin de sortie doit se mettre à 1 quand le timer est à 0 et passe à 0 un peu plus tard (quand T2 = OCR2A) ou l'inverse...
autoriser l'INT0 sur front descendant (ou montant, sera précisé plus tard).
}
// Chaque impulsion du signal d'entrée déclenche l'interruption INT0 :
ISR(INT0) {
relever le timer 1
mettre le timer 1 à zéro
si (la valeur de T1 > (2 * T1_old)) { // dents manquantes : on est au PMH
pin de sortie "PMH" = HIGH
} sinon { // c'est une impulsion normale
mettre la valeur de T1 dans le "TOP" de T2
pin de sortie "PMH" = LOW
T1_old = T1
}
}
// pis c'est tout!
Ensuite, le signal carré attaquera une entrée compteur 16 bits de mon mega2560, il ne me restera plus qu'à relever ce compteur toutes les 256ms (d'ailleurs, on peut utiliser le watch Dog pour générer une INT à plusieurs intervalles, dont 256ms : 4 fois par seconde).
L'idée est donc là. le code est donc très simple, mais faut mettre les mains dans le camboui des timers d'un PIC, et là... ça va me prendre une semaine pour étudier le truc, sachant que je n'ai rien pour programmer un PIC...
Quelqu'un se sent d'attaque? Je fournirai également une doc plus précise de ce que je veux (avec courbes), mais l'avantage de cet algo, c'est que le nombre de dents moteur, on s'en tape...
Merci d'avance!
PS : Ne cherchez pas d'autres solutions techniques, je VEUX un signal de fréquence 8 fois plus élevé. Car j'aurai une mesure bien plus précise (je passe à 704 impulsions par tour moteur contre 40 initialement), et ces impulsions me permettront aussi (avec l'impulsion PMH ainsi générée et en piquant le signal de primaire bobine) de calculer en teps réel l'angle d'avance à l'allumage.
Ce principe de multiplier la fréquence est d'ailleurs utilisée dans le calculateur d'allumage de ma voiture, mais c'est noyé dans de la résine, donc inaccessible. avec ma fenêtre de comptage de 256ms, au ralenti (700tr/min), je compterai 2103 impulsions, au régime max (7500tours) : 22528 impulsions, je pourrais même mesurer jusqu'à 22000tr/min... donc si le PIC le permet (en fonction des prescaler), on pourrait multiplier par 16 la fréquence au lieu de 8 (mais faudrait qu'il tourne à 40MHz pour être précis...)