Lisser un signal analogique 0-5V

Bonjour à tous,

Toujours dans le cadre d'un de mes petits projets de préparation automobile qui touche à sa fin, j'ai besoin d'être aiguillé pour une dernière petite chose.

J'ai quelque part dans mon montage, un capteur de teneur d'alcool (éthanol), qui me renvoi un signal analogique 0-5V qui est lu par mon calculateur.

C'est un montage que je n'ai pas fait moi même, c'est un innovate ECB1 (qui possède un faisceau qui se connecte et alimente le capteur, et le capteur renvoi à ce boitier deux information. Une tension [% d'éthanol] et une fréquence [température du carburant]. Ces deux informations sont ensuite disponible sur 2 fils "libres").

Je viens donc récupérer mon info teneur d'éthanol sur un de ces deux fils, que je viens ensuite donner à mon calculateur qui interprete ce 0-5V (le fil brown)
ECB

brown

Ma problématique, je trouve que le signal est un peu trop brouillon à mon gout, j'aimerai le lisser un minimum ou le rendre moins changeant. Ce n'est pas non plus horrible, mais j'aimerai plus de régularité.

Je ne peux pas intervenir sur l'ensemble du montage, ma seule porte est ce fil d'information qui va à l'ECU. Toutes les masses sont directement à la batterie (sertissage propre).

L'information est simple, c'est un signal analogique 0 - 5V:

  • 0% = 0V
  • 50% = 2,5V
  • 100% = 5V
    -> formule: (5V/100%) * la teneur% = tensionV

Lors de ces relevés, j'étais entre 73 et 75% d'éthanol, donc une tension comprise entre 3,65V et 3,75V

Voici un petit schéma, puis-je simplement essayer de mettre un condensateur de 10µF sur le fil qui amène l'information pour ne pas dénaturer le signal?

Petit schèma du montage :

Et un relevé vu par l'ECU (signal vert foncé Airflow INPUT):

En vous remerciant!

pour lisser un signal, au lieu de prendre la valeur brute vous pouvez prendre un bout de la valeur précédente et un bout de la nouvelle

par exemple

const float pourcentage = 0.7; // on prendra 30% de la nouvelle valeur et 70% de l'ancienne
float valeurFiltree = 0;

void setup() {}

void loop() {
  int nouvelleValeur = analogRead(A0);
  valeurFiltree = (1.0 - pourcentage) * valeurFiltree + pourcentage * nouvelleValeur;
}

si pourcentage est faible vous réagissez plus rapidement aux variations de l'entrée, si pourcentage est élevé la réaction sera plus "molle"

Malheureusement, j'ai bien une petite arduino qui gère quelque chose dans ce montage (ligne sub inj) mais elle n'intervient absolument pas dans la réception de ce signal.

Merci pour le petit bout de code, si je traitais le signal par une arduino, j'aurais utilisé cette méthode.

D'où le fait que je me posais la question de mettre un petit condensateur

Un filtre matériel

Sans doute une question pour @68tjs

hello
un filtre passe bas devrait suffire.
pour les valeurs résistance et condensateur, il faut connaitre la fréquence d’échantillonnage du capteur,et faire les calculs pour que la fréquence de coupure du filtre soit au dessus

Bonjour dfgh

C'est malheureusement une information que je n'ai pas. En fait, le capteur est alimenté et mit à la masse par le boitier. Il renvoi l'info également au boitier. Et ce boitier traduit l'information en un signal allant jusqu'à 5V. Et comme ce signal conditionnera mon allumage et mon injection, je souhaite qu'il soit le plus "lisse" possible

Exemple concret -> je passe sur 2 corrections différentes alors qu'il n'y a pas lieu:

Après, si je peux faire des expériences pas très propres, type couper le fil et mettre un condensateur entre le fil et mon entrée pour voir si déjà il y a quelque chose, je suis prêt à essayer. Cette fois-ci je le concède, je suis pauvre en informations

hello
fais des essais

J'attaque demain. As-tu une piste à suivre en priorité? Dois-je également m'orienter vers la piste d'une simple résistance ?

Merci et bonne soirée



générateur de fréquences sur signal carré à 139Hz, il y a encore quelques ondulations,
en montant en fréquence, il n'y a plus d’oscillations, c'est une ligne droite

Ça marche, donc si je ne me trompe pas, en mode datalogging (mes courbes fournies), mon ECU sait logger à 20ms. Je pense que c'est mon point de départ pour le calcul du filtre.

Je n'ai pas oscilloscope, ça aurait été trop facile

EDIT : confirmation, 20ms/DIV :

Donc, si je me rappel bien mes cours, le but est de trouver une sinusoide propre pour trouver la fréquence:

sin 1


sin3

Selon les trois, nous sommes entre 80 et 60 ms (peut-etre plus 60ms quand même). Motifs que je retrouve plusieurs fois.

Donc f= 1/0,06 ou 1/0,08 = 16,66Hz ou 12,5Hz

Essais fait avec un condensateur 16V 1000uF piqué sur le signal et mit à la masse. J'ai avec ce que j'avais sous la main. Valeur de C énorme pour négliger la petite résistance qui tomberait à R = 1.27 :

(Signal vert foncé toujours)

Et sans:

Le résultat est sans appel!

EDIT: une fois tout soudé proprement:

Pour une teneur de 66.9/66.8%:

Donc 66.9/20 = 3.345V nous sommes tout bon! Merci à tous

cool l'ami :+1: