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.
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.
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.
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 !
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.
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 :
- Fichier de calcul Excel : pt100x.xlsx
- Site de Celtic, et en particulier valeurs de base des PT100
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
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
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.
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
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-2024 J.Zehnne Tout ce site et ses composants sont faits sur Mac