Considérations électroniques

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…

Implémentation d'une sonde PT100

Les PT100 sont des sondes de température à la plage beaucoup plus étendue que les CTN 47k que j’ai choisi par défaut. Les valeurs des PT100 oscillent entre 60 Ω à -100°C et 247Ω à 400°C (plage large pour notre besoin) et même bien au delà.

Documents liés :

pt100 sch00 Le schéma par défaut pour brancher une sonde est celui ci. Mais ici ça ne marche pas parce que la sonde varie en gros de 92Ω à 175Ω, ce qui est insignifiant devant la 47kΩ + 10kΩ Les valeurs sont :

  • Temp : LSB
  • -20 : 1304
  • 0 : 1304
  • 100 : 1303
  • 200 : 1303
  • CC : 4096 (non destructif)
  • CO : 0
Youhou, avec ça, on va aller loin.

pt100 sch01 On va donc charger en courant la sonde. Pour ce faire, il faut créer un pont diviseur avec la sonde comme sur le schéma ci contre. Le problème, c’est que la carte Acquisition ne peut lire des tensions qu’entre 0 et 3,3V. Elle tolère cependant des tensions de 5V sur le STM32. Pour ramener dans la plage 0 – 3,3V la tension sur le connecteur, j’ai mis un pont diviseur par 5,7 (47kΩ suivit de 10kΩ, R1 et R2 sur le schéma ci-contre).
Dans ce schéma avec les valeurs d’origine de R1 et R2, si la sonde est en court-circuit, on obtient une valeur importante (donc détectable) mais pas dangereuse pour l’électronique. Si la sonde est ouverte, on obtient 0.

  • Temp : LSB
  • -20 : 1142
  • 0 : 1201
  • 100 : 1441
  • 200 : 1619
  • CC : 0
  • CO : 2997
On a donc 477LSB de dynamique soit 2,17 LBS/°C. C'est pas terrible. Le STM32 fait ses mesure sur 12 bits ce serait dommage de pas en profiter un minimum ! (imaginez si c'était un arduino ;-) )
Les défaut sont détectables.
Avec ce pont diviseur R1 R2, c’est quasi impossible de brancher une PT100 en gardant une bonne précision.

pt100 sch02 Je change mon fusil d'épaule et éxamine mieux mon montage. Le plus gros risque de défaut est une déconexion de la sonde. J'opte alors pour brancher la sonde au +12V (13,8 en fait…) et place la résistance de "150Ω" en dessous. Ainsi, je me permet de modifier mon pont diviseur, je ramène R2 à 27kΩ.
Si le point VR1 venait à 14V, on a 5V sur le STM, ça tombe bien il est 5V tolérant, et de toutes manières la 47kΩ limiterai le courant. Avec cette configuration, on a la table ci contre :

  • Temp : LSB
  • -20 : 3654
  • 0 : 3530
  • 100 : 3023
  • 200 : 2654
  • CC : 4096
  • CO : 0
On a maintenant une dynamique de 1001 LSB, avec une précision de 4,55 LSB/°C. C'est beaucoup mieux !
Vous avez tout, il faut changer la résistance R2 par 27kΩ et mettre une 130Ω de charge sous la sonde. Contactez moi pour plus d'info, et contactez-moi pour faire le changement avant dans votre projet !

Dans l’avenir, je prévoirai une alimentation spécifique 5V pour alimenter des sondes 5V.

Note : je considère que la batterie n'est pas à 12V, mais à 13,8 en fonctionnement normal, et peut monter à 15 voir 18V en pic. la datasheet du STM32 indique que ses entrées sont 5V tolérant et qu'on peut envoyer 5mA dedans. Une batterie à 18V qui force une entrée à travers une résistance de 47kΩ, je vous laisse faire le calcule. On est en dessous. Il s'agit d'un cas de 2nd défaut parce que 1) on a un court-circuit batterie sur l'entrée et 2) la tension est vraiment trop élevée.

Note 2 : Attention : à l'heure où j'écrie ces lignes, je n'ai pas encore implémenté ça dans mon code, et pas encore testé, la probabilité que ça ne marche pas comme sur le papier n'est donc pas nulle ;-)

NÉNÉSite 1999-2023 J.Zehnne Tout ce site et ses composants sont faits sur Mac