Comment construire une interruption interne déclenchée à intervalle de temps variable?

Bonjour,

L’idée est de réaliser un allumage électronique pour une voiture « ancienne » avec un ESP32 et l’IDE Arduino.

Le principe de fonctionnement :

Un capteur Hall déclenche une interruption à chaque tour moteur.

La durée entre deux tours donne le régime moteur, auquel est associé, par une table de correspondance, une valeur d’avance à l’allumage.

Ces grandeurs permettent de calculer pour chaque tour-moteur le timing des prochaines étincelles au bougies.

Entre deux étincelles je souhaite que le croquis soit disponible pour d’autre tâches (mesures de température et de pression à l’admission pour affiner le calcul de l’avance).

Aussi je souhaiterai déclencher l’allumage par une interruption au moment opportun, moment qui varie avec le régime.

Merci pour toute aide.

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Ok, désolé.

Si vous en avez besoin pour calculer l’avance, il ne faut pas interrompre ce process. Combien de temps ça prend (et comment faites vous) pour obtenir ces valeurs ?

L’avance à l’allumage, en degrés, est la somme de 3 nombres :

  1. Une avance initiale fixe de 90° (entre le signal du capteur Hall et le point mort haut n°1)
  2. L’avance dite centrifuge, qui dépend du régime moteur (renseignée dans une table de correspondance).
  3. L’avance à dépression, qui dépend de la dépression dans la pipe d’admission du mélange air-essence (elle aussi associée à la dépression par une table de correspondance).
    A chaque tour moteur, le capteur Hall permet de connaître la durée du dernier cycle et d’en déduire le calcul de l’avance 2 (centrifuge).
    Ce calcul sert à déterminer l’horaire de la première étincelle par rapport au top chrono Hall, puis des 2 étincelles suivantes située à un tiers de période plus tard puis à deux tiers de période plus tard (3 étincelles par tour, donc espacées de 120°, soit un tiers de période chacune).
    Il me reste du temps (grand minimum 2 millisecondes) entre les étincelles 1 et 2, puis 2 et 3, pour mesurer la dépression et calculer l’avance 3. Avance qui ne sera intégrée à l’avance totale qu’au tour suivant.
    Je souhaite créer une interruption pour déclencher les étincelles 2 et 3, aux temps respectifs 1/3 et 2/3 de période (mesuré à partir de l’étincelle 1).
    L’avantage d’un déclenchement par interruption serait de libérer l’ESP32 pour la mesure de la dépression (avance 3) et aussi de la température d’admission. Chacune de ces opérations prend moins d’une milliseconde (SPI) et peut être réalisée entre les étincelles 1 et 2 ou 2 et 3.

Je précise que le capteur Hall déclenche une interruption ( donc externe) qui lance le calcul du timing des étincelles .
L'étincelle n°1 qui suit est déclenchée par une temporisation, qui mobilise l'ESP32.
Mon souhait est de déclencher les étincelles 2 et 3 par une interruption interne, 1/3 puis 2/3 de période plus tard pour libérer l'ESP32 pour d'autres calculs.

Bon, je ne suis pas sûr qu'il existe une réponse à ma question.

J'ai contourné le problème avec des "while" pour attendre le bon moment pour chaque étincelle.
J'ai le temps de mesurer la dépression entre les étincelles 1 et 2, et la température entre 2 et 3.

Le croquis est à disposition si besoin.

Cordialement.

Vu les timings l’interruption ne semble pas nécessaire
Les délais ce n’est jamais idéal. Une programmation par machine à états (cf mon tuto éventuellement) pourrait aider à structurer le code

Merci beaucoup, je vais regarder ça attentivement.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.