Bonjour à tous,
Débutant en Arduino et assez peu familier du code, après quelques programmes très simples, j'essaye d'élaborer un programme d'allumage pour moto ancienne en remplacement d'allumage à vis platinées ou d'ancien allumage électronique analogique.
Je suis parti (heureusement !) d'un allumage fonctionnel AEPL de Ph. Loutrel avec qui je suis en contact mais il est très occupé avec d'autres développements...
http://a110a.free.fr/SPIP172/article.php3?id_article=142
Son fonctionnement est basé sur la mesure de la vitesse (N) de rotation du moteur (capteur à effet Hall et une cible en métal en bout de vilebrequin ou d'arbre à cames).
Le temps mesuré (T) à chaque tour permet de calculer un temps d'avance à l'allumage (D).
L'allumage (Etincelle) se produit avant le point mort haut du moteur (le PMH) afin de laisser le temps au mélange air + essence de s'enflammer.
Une courbe (régime Na, avance Anga) est à renseigner en début de programme.
Différents paramètres sont à renseigner, nombre de cylindres, angle du capteur avant le PMH, temps de charge de la bobine d'allumage, etc.
L'avance à bas régime est imposée et calculée à 0° (PMH) afin d'éviter un retour de gaz au démarrage (notamment au kick pour une moto, gros risque de blessure si trop d'avance !!)
Ensuite elle est calculée à partir des points de la courbe, c'est une partie assez compliquée pour moi.
Il est aussi nécessaire de calculer le moment où la bobine sera alimentée (Bob = 1) avant l'allumage (Etincelle, Bob = 0), c'est élaboré avec le Timer1.
Une sécurité bobine est prévue (Dsecu), si le moteur est arrêté on coupe l'alimentation de la bobine au bout de cette temporisation, ex 1 sec ce qui d'ailleurs limite le régime minimum de fonctionnement de l'allumage.
Ça fonctionne bien mais :
L'AEPL ne respecte pas bien le temps de charge bobine, différence entre calcul de l'avance et calcul du moment d'alimentation avec Timer1, surtout pendant les phases transitoires de changement de régime.
L'AEPL ne respecte pas bien l'avance à 0° en cas de rotation moteur non régulière ou incomplète à très bas régime (démarrage au kick).
Je voudrais utiliser une bobine très basse résistance dont le temps de charge doit parfaitement être maîtrisé, ex 5 ms et pas plus sinon la bobine peut cramer !
Et je voudrais déclencher l'allumage à très bas régime à 0° sans calcul d'avance car il peut être faussé, car la rotation du moteur peut être à vitesse non constante, voire incomplète.
J'ai donc fait une version un peu différente (MM), le temps de charge bobine est fixe et intégré au temps d'avance, ça fonctionne bien,
mais là le capteur est à 0° ou 360° pour déclencher avec une grande sûreté l'allumage à bas régime à 0°, ça fonctionne bien aussi,
ensuite à partir d'un seuil (Ndem) l'avance est calculée avec le capteur que je considère à 360° pour laisser le temps à TchargeBob + avance (à 60 ou 90° comme l'AEPL ça ne fonctionne pas, c'est trop court, idem à 180°),
et là c'est irrégulier, aléatoire, des allumages par moment, l'avance totalement fausse etc.
J'ai essayé plusieurs modifications, essayé de faire une interruption pour le capteur au lieu de la boucle while existante, j'ai essayé séparément la mesure de T seule, c'est ok, mais je bute sur le fonctionnement du calcul d'avance.