J'ai repris la dernière version de l'allumage Arduino AECP , avec quelques petites adaptations à mon goût :
J'ai supprimé le choix du Dwell, pas utile à mon avis de reproduire le fonctionnement type vis platinées ou de laisser la bobine alimentée en permanence sauf 1 ms pour l'allumage, seul le réglage du temps de charge de la bobine est parfait, ex bobine Lucas temps de charge 7 ms.
Il y a la possibilité de choisir 5 courbes d'avance a, b, c, d , e (habituel, en fonction du régime moteur), le nombre de points est libre,
et 5 courbes d'avance à dépression a, b, c, d , e (ça permet de varier l'avance en fonction de la charge moteur, si besoin).
On pourrait avoir 10 courbes mais bon ça me paraît déjà suffisant.
Très bien mais on ne peut changer de courbe qu'après coupure de l'allumage et remise du contact.
J'ai donc remis un réglage à la volée (en roulant) de l'avance, 5 positions possibles, j'ai mis 0°, +2°, +4°, +6°, +8°, en plus de la courbe choisie.
Mais ce réglage est plutôt fait pour des essais afin de déterminer à priori la meilleure avance en réel. Le pas est de 2° mais on peut mettre autre chose.
Par précaution une coupure entre le circuit (Arduino Nano) et un des commutateurs entraîne le choix des courbes "a" par défaut, et 0° de correction, c'est mieux que le maxi +8°.
Il y a toujours la sécurité bobine(s) pour éviter de la surchauffer en cas de calage, surtout si c'est une bobine faible résistance donc fort courant.
Avec réglage du temps (ex 1 à 2 sec), mais effectivement ça occasionne un allumage "perdu" à la mise du contact.
J'ai essayé cette version, l'avance est bien stable, les choix de courbes et de réglage en cours fonctionnent bien.
Si on se connecte avec l'USB on a en retour le choix des courbes, le régime moteur, le temps entre capteur et allumage, et l'avance totale.
J'ai essayé aussi avec un des capteurs Hall type A110, pas de problème.
Il y a la sortie LED de calage statique du capteur bien pratique.
Le code est à disposition si je le mets ici ça va faire une sacrée tartine 500 lignes !
(sur chaque ligne tout ce qui est après un // n'est que du commentaire, donc pas utile au Nano, mais utile pour comprendre un peu !)
Juste le début :
Code : Tout sélectionner
#include <TimerOne.h> // Génère une interruption toutes les trech ou Dsecu µs
//**************************************************************
// Aepl-Aecp Nano Allumage électronique programmable - Arduino
// MM suppression avance statique "Avancestatique" et "Decalavancestatique", l'avance statique est directement dans les courbes
char ver[] = "version Michel du 14_11_2016"; // MM suppression Choix entre 3 types de Dwell. (les lignes sont précédées de "//MM" pour suppression ou modification)
// MM correction de l'avance à la volée avec potentiomètre (ou commutateur) en A1 (réglage du pas par "delAv")
// En option, connexion d'un potentiomètre de 100 kohm entre la patte A4 et la masse
// pour changer de courbe d'avance en fonction du régime moteur (courbe d'avance mécanique, centrifuge)
// T>14ms, correction Christophe. Avance 0° jusqu'a 500t/mn, anti retour de kick
// Détection et traitement spécial au démarrage (première étincelle)
// LED de calage de l'allumage lignes : 87, 406, 454 (mettre // avant lignes 406, 454 si on ne l'utilise pas)
//******************************************************************************
//************* ces lignes expliquent la lecture de la dépression ****************
// Pour la dépression ci-dessous le tableau des mesures relevées sur un banc Souriau
// Degdep = map((analogRead(A0)),xhigh,xlow,yhigh,ylow);
int xhigh = 0; // valeur ADC haute pour conversion de la valeur mmHg haute
int xlow = 0; // valeur ADC basse pour conversion de la valeur mmHg basse
int yhigh = 0; // valeur de la limite en degré haute x 10 pour avoir les centièmes
int ylow = 0; // valeur de la limite en degré basse soit 0 degré
// tableau des valeurs mmHg vs 8 bits
// {0,707}{25,667}{50,620}{60,601}{75,576}{80,565}{95,538}{100,530}{125,485}{150,438}{175,394}{185,373}{200,350}{210,330}{225,305}{250,260}{275,216}{300,172}
// relevé en activant la ligne Degdepcal et en ajoutant cette variable à l'édition dans le terminal série
// on peut en déduire une équation qui donne la valeur en mmHg au départ de la conversion ADC , utilisé sous Processing
// mmHg = (707 - valeur ADC)/1.78 ou 1.78 est la pente du capteur pour tension VS mmHg
//************** Ces 6 lignes sont à renseigner obligatoirement.****************
// Ce sont : Na[],Anga[], Ncyl, AngleCapteur, CaptOn, Dwell
// Les tableau Na[] et Anga[] doivent obligatoirement débuter puis se terminer par 0
// et contenir des valeurs entières >=1
// Le nombre de points est libre. L'avance est imposée à 0° entre 0 et Nplancher t/mn
// Le dernier N fixe la ligne rouge, c'est à dire la coupure de l'allumage
// Au régime moteur de (obligatoirement croissant):
int Na[] = {0, 500, 600, 700, 800, 900, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 6800, 7000, 0}; // Courbe a
// degrés d'avance vilebrequin correspondant:
int Anga[] = {0, 1, 8, 12, 12, 8, 12, 20, 22, 24, 28, 28, 28, 28, 5, 0};