Considérations électroniques

Compte-tours sur un rupteur

Présentation

Dans le cadre du projet de l'ordinateur de bord pour voiture de collection, j'ai du developper une entrée compte-tours sur la carte Acquisition.

Présentation d'un allumage à rupteur

schema allumage Sur le schema ci-contre (source wikipedia) on voit que la bobine est en fait un transformateur avec le primaire et le secondaire reliés à la masse (toutes les masses étant communes, bien sur !). On voit que le rupteur est au primaire de la bobine, donc sur le circuit 12V. Du coup, en théorie dans le plus beau des mondes, on devrait avoir un signal 12V carré avec quelques rebonds à cause du rupteur, mais un signal carré quand même, facile à traiter.

Le Problème

oscillo etincelle 200V Le problème, c'est que dans le vrai monde, on a un retour de l'étincelle sur le primaire de la bobine, d'environ 200~250V. L'image ci-contre est un relevé du rupteur de mon estafette au ralenti. J'ai utilisé un pont diviseur pour avoir une echelle verticale de 100V/division (soit 250V de pics). Je rappelle quand même que de l'autre coté, sur la bougie, la tension monte à 10~15 kV !
Il faut donc trouver un filtre électronique pour filtrer le 250V et sortir du signal le carré 12V qui nous interresse. Comme on aime bien le challenge, il faut penser que ça peut changer d'une voiture à l'autre…
On note que les pics sont espacés de 43 ms environ, ce qui fait 23 Hz, ce qui fait à raison de 2 étincelles par tours 697 trs/minutes… on est bien sur le ralenti de l'estafette ;-)

Question de fréquence

oscillo etincelle On va déjà observer les fréquences de tout ça. Ci contre, une sonde d'oscilloscope placée sur le rupteur de mon estafette, en direct, à 20V/division verticale (sonde à facteur 10)

  • On observe sur le signal ci-contre une fréquence à l'ouverture du rupteur (front montant 12V) de 6000 Hz environ. C'est ce phénomène qui atteind 250V
  • On observe aussi une fréquence à l'ouverture du rupteur (front descendant 12V) de 2000 Hz environ. Cette perturbation est plus modérée, environ 70V
  • Moteur : sur un 4 cylindres, à 2 étincelles par tours, on est donc à 266 impulsion/seconde à 8000 trs/minutes (ce qui est déjà beaucoup !)

Un peu de maths

courbe gain Il faut donc laisser passer le 12V à 266Hz et bloquer le 250V à 6000Hz ainsi que le 50V (frond descendant) à 2000Hz.
Un filtre passe bas du 2nd ordre avec une fréquence de coupure vers 300Hz doit faire l'affaire. Ci contre, j'ai placé dans un fichier excel les 3 valeurs de tension à leur fréquence respectives. J'ai placé la courbe de gain du filtre souhaité simulé en dessous. La courbe rouge ce sont les 3 pics en fréquence à l'entrée du filtre, et en vert à la sortie... Celui qu'on veut garder, c'est le plut petit pic, celui à 266Hz, celui que l'on souhaite conserver. Donc, ça sent bon !

Un peu de simulation

maquette adaptation eteincelle Comme je compte produire des millions de cartes ;-) Il faut bien faire les choses. Je vais donc confirmer mes calculs dans LTSpice. (un logiciel de simulation électronique). Je crée donc le schéma complet que je compte reprendre sur ma carte, en particulier avec une diode zener de protection en parallèlle de la première capacité.
Derrière le filre il y a aussi un passe haut qui permet de rabaisser le signal, sans quoi, à cause des pics à 250V notre signal ne serait pas entre 0 et 12V mais plutot entre 30 et 42V par exemple. (rappel : un passe bas est un moyenneur).

simulation avant Ci-contre, c'est la forme simulée du signal à l'entrée. C'est une supperposition d'un carré 12V à 500Hz (soit 15 000trs minutes sur un 4 cylindres ou 8000 trs/minutes pour un V8), avec une pertubation à 10kHz à 250V. (la fréquence n'est pas la bonne, on fait ce qu'on peut)

simulation filtree

Et maintenant, c'est la superpoistion du signal d'entrée avec le signal de sortie (en rouge). On voit que les perturbations sont très bien amorties, il ne reste qu'un pseudo-sinus à la fréquence deu carré de 12V. Et voila.

Intégration dans la carte Acquisition

carte filtre Ici, j'ai reporté le schéma dans la carte Acquisition. La première résistance n'est pas intégrée, elle doit être le plus près possible du rupteur.
Je n'ai malheureusement pas de relevé dans la voiture à la fin, parce que je n'ai pas fait de photo. Mais c'était assez conformer à ce qu'on attend dans la simulation !
Ensuite, il ne reste qu'à envoyer ce signal sur un trigger, genre l'entrée compteur du STM32, et le tour est joué ! C'est ce qui est fait dans la carte acquisition.

Segmentation d'un réservoir

Pour que l’ordinateur de bord puisse connaitre la quantité d’essence restante dans le réservoir, il faut connaitre la relation entre la tension V à la jauge et la quantité Q de carburant restant dans le réservoir. J’appelle cette fonction V = f(Q)
C’est je pense une des manip les plus pénibles à réaliser.

reservoir 01 J’ai appelé cette manip la calibration du réservoir. Je l’ai réalisé juste après la rénovation du réservoir (voir ce lien). Le problème, c’est qu’un réservoir n’est pas linéaire. Je veux dire par là (un peu de maths) que la tension V n’est pas du tout du type V = a*Q avec Q la quantité d’essence. Si c’était le cas, il suffirait de connaitre la tension au réservoir plein. Ce serait trop facile, voyons !

  • Lorsqu’on est à 0 V, le réservoir n’est pas vide (la jauge ne touche pas le fond) : il y a un offset.
  • La courbe n’est pas linéaire : le réservoir n’est pas carré (le dessin ci-contre montre un réservoir d’estafette) et le flotteur de la jauge (en orange ci-contre) n’a pas un mouvement droit non plus.

reservoir 02 Dans ce cas, une solution facile : La courbe par segments. Le principe est de dire que la courbe V = f(Q) est linéaire par segments. Pour connaitre ces segments, il faut remplir le réservoir par petites quantités successives et lire la tension à la jauge avec un voltmètre, ou directement l'ordinateur. Si le reservoir fait 40 litres, on mets 10 quantités de 4 litres (par exemple), et on lit le multimètre à chaque fois. Nous aurons donc 9 segments. On peut augmenter le nombre de segments, mais bon c’est un reservoir, faut pas chercher une précision millimétrique non plus.
Le mieux est évidement de partir de 0 (réservoir vide) et de pousser la voiture à une station-service. Les pompes des stations sont très précises et calibrées régulièrement, ce serait dommage de s’en priver. C’est pas la peine d’y aller aux heures de pointe non plus… On revient donc avec un tableau de valeurs, par exemple celui ci-contre.
Il faut également mesurer la tension de la batterie et que celle-ci ne bouge pas pendant toute la durée de la manip. Si elle venait à bouger, il faut noter la tension à chaque mesure et compenser par la suite.

reservoir 03 Après ça, il faut créer la courbe V en en fonction de Q. Un peu d’excel et hop : Comme ça on voit à quoi ressemble la courbe, et surtout si c’est ou non linéaire. Surprise, dans le cas de l’estafette, on est pas mal, j’aurais pensé à pire.
Pour le reste, je vous épargne les détails compliqués parce que mon programme fait le reste. En gros, chaque segments est une portion d’une droite de type y=a*x + b, ça doit vous rappeler des souvenirs d’école !

reservoir 05 Il faut créer un dernier segment qui est la tension mesurée de la batterie lors du relevé. L'algorythme va compenser par un produit en croix ses mesures pour les ramener sur la courbe. Ici, j'ai diminué le nombre de segments, et ajouté un dernier segment qui atteint la tension de la batterie lors du test (faible la baterie !). La quantité doit être la même que dans la ligne du dessus.

reservoir 04 Mais ça c’est geré dans le fichier Capteurs.py, et en créant votre objet capteur, vous passez en argument les points du tableau. Et c’est tout.
Voir les fichiers param.py et Consommation.py du programme de l'ordinateur de bord…

Et voila…

NÉNÉSite 1999-2019 by JumpifNotZero

Tout ce site et ses composants sont faits sur Mac