Variations de contrôle dans une mesure (capteur de température)

3

J'ai un capteur de température et je souhaite normaliser les valeurs du capteur. La pièce mesurée a une température assez constante mais le capteur affiche des valeurs légèrement différentes, par exemple 30.20, 30.00, 30.30, 30.00. Pour des raisons d'affichage, je veux l'avoir moins de variation. Aussi parfois, il s'écarte déraisonnable par exemple 30.00, 30.00, 10.00, 30.00, 30.00. Mais cela peut changer d’un moment à l’autre aussi de manière raisonnable, par exemple en ouvrant une fenêtre:30.00, 30.00, 30.00, 30.00, 25.00, 15.00,10.00

Je n'ai pas de courbe cible, sinon je pensais à un PID.

Pour le moment, je fais la somme des dernières valeurs et construit une moyenne. Que puis-je faire pour

  1. normaliser les valeurs de sortie
  2. éliminer les valeurs d'emballement
Andi Giga
la source
Peut-être que si le changement est trop important, éliminez la valeur d'emballement, sinon vous pouvez toujours faire la moyenne des valeurs.
iacopo

Réponses:

1

Je simple filtre passe- bas va probablement résoudre le problème. Il est facile à mettre en œuvre et vous pouvez ajuster le nombre de filtres que vous souhaitez filtrer avec la constante de temps.

Voici un exemple de filtre passe-bas dans le code réel. C'est techniquement Python mais se lit comme un pseudo-code. Il prend une liste de valeurs de température en entrée et génère les valeurs filtrées sous forme de liste.

Input:  input_series, time_constant
Output: output_series


output_series = []
output_series.append(input_series[0])

for current_unfiltered_value in input_series:
    previous_filtered_value = output_series[-1]

    B = 1.0 / time_constant
    A = 1.0 - B

    new_filtered_value = (A * previous_filtered_value
                          + B * current_unfiltered_value)

    output_series.append(new_filtered_value)

return output_series

L'utilisation de filtres passe-bas présente l'inconvénient d'introduire un décalage de phase. La valeur filtrée sera légèrement en retard par rapport au signal mesuré, en fonction de la constante de temps. Un signal hautement filtré sera plus lent qu'un signal moins filtré.

Il existe d'autres filtres que vous pouvez utiliser pour obtenir un meilleur résultat de filtrage. Par exemple, le filtre de Kalman ou le filtre Alpha-beta . Ils sont tous deux basés sur des modèles, ce qui signifie que vous devez créer un modèle pour que vos changements de température fonctionnent. Il existe un excellent cahier sur Github qui introduit ces filtres si vous ne les connaissez pas bien.

Personnellement, je choisirais un simple filtre passe-bas au début. Si vous ne contrôlez pas un processus basé sur les valeurs filtrées, mais souhaitez filtrer les valeurs pour les rendre plus jolies dans une interface utilisateur, c'est généralement plus que suffisant.

Pour éliminer les valeurs d'emballement, je calculerais la variance du signal mesuré à chaque pas de temps (vous pouvez, par exemple, calculer la variance pour les 50 derniers échantillons). Si la variance calculée dépasse un certain seuil, on peut supposer qu'il s'agit d'une pointe qui peut ensuite être rejetée.

MikaS
la source
Thx je vais essayer avec le lowpass. En effet, le Kalman & Bayesian semble être la solution correcte (mais peut-être trop sophistiquée).
Andi Giga